あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

Go で少し混乱したこと

Go言語で時間を扱う time.Time のゼロ値で、勘違いしていたこと。1970-01-01 09:00:00 はUnixタイムが0なのでゼロ値だと思っていましたが 違いました。 location "Asia/Tokyo" の time.Time のゼロ値は local, _ := time.LoadLocation("Asia/Tokyo") ztim :=…

Goをwindows 上で動かすとエラーが発生

GoのプログラムをWindows 環境で動作させたときに time.LoadLoaction から error が返ってきた。 外部依存(lib/time/zoneinfo.zip)している。 local, err := time.LoadLocation("Asia/Tokyo") JSTなので、エラーチェックで限定的な対策を行った。 if err !…

javascript のオブジェクトの空の判定

忘れるので javascript のオブジェクトの空判定({})をメモ初期値(空オブジェクト)から値がセットされたかをチェックしたいとき let data = {}; // -- snip -- JSONデータをちゃんと取得できてない場合とかのチェックで使用 // -- snip -- if (!Object.ke…

Go言語でハマったこと

昨年末ごろからGo言語を使って開発をするようになってだいぶん快適になってきたのですが、最近ちょっとハマってしまった事を書き留めておきます。開発は Go + echo + React + webpack + babel です。フロントエンドから、JSONデータをGoの構造体の配列として…

React-hook-form でエラー(TypeError)が発生

React-hook-form で開発をしていてエラーがでるようになってしまった。 Uncaught TypeError: path.split is not a function ...split... at renderWithHooks (react-dom.development.js:14985) ...split... 調べてみるとバージョンアップが原因だとわかった…

SAXパーサーの parseメソッドに渡した InputStream の後始末

org.xml.sax.helpers.XMLReaderFactory.createXMLReader() で返されるパーサーの parseメソッドにInputSourceの引数で渡している InputStream が 処理後、closeしていなかったので、リソースが解放されていない可能性を調べてみた。 lsof -p プロセスID|grep…

プログラマをする前

プログラマ・SEをする前はIT関係の営業を4年半やっていました。大学は文系でプログラミングの経験はなく、ITとはまったく無縁の学生生活を送っていました。なので、プログラマ・SEになることは就活の時点でまったく考えていませんでした。最初に就職した会社…

Debian 9 に Maven をインストール 、その後、動作確認

1. Debian 9 に Maven をインストールする。 # apt-get install maven ..snip.. maven (3.3.9-4) を設定しています ... update-alternatives: /usr/bin/mvn (mvn) を提供するために自動モードで /usr/share/maven/bin/mvn を使います2. インストール後に Mav…

Debian 9 へ OpenJDK をインストール

Debian 9 へOpenJDKをインストールする。 # apt-get update # apt-get install default-jdk 複数のバージョンがインストールされている場合は、 下のコマンドでバージョンを切り替える。 # update-alternatives --config java 切り替えたjava のバージョンを…

レトロコードの不吉な匂い

最近の仕事は、過去に java で開発したシステムのバージョンアップを行っていますがjava のバージョンは過去のままで行っています。(レトロ) 10年くらい前に開発していたシステムですが、今見直すとリファクタリングした方が良いと思うコードがところどこ…

新年、明けましておめでとうございます。

あけましておめでとうございます。 今年もよろしくお願いします。 昨年の前半は以前から携わっていたシステムへの追加機能の開発と、後半は過去に開発したシステムをベースに違うバージョンのシステムを開発していました。 今年も昨年後半の案件を継続して行…

最近のお仕事

近況ですが、java での開発から C/C++, JavaScript を使った開発が今はメインになっています。 現在、ざっくりとした要求仕様から、[基本仕様]-[詳細仕様] が確定していない状態で開発するスタイルが板に付いています。実装(コーディング)前の設計段階で、…

思い出したように...

3年以上放置して思い出したように更新しています。久しぶりにというか、書いていたことも忘却しかけている。しばらくすると放置状態になってしまうので、過去の仕事のことなどを日記に書き残していこうかなと思っています。長い間プログラマー・SEとして、仕…

要求仕様問題プロジェクト その過程

要求仕様に関しては、いつも確定しないまま実装に入ってインクリメンタルな開発を行うことが多かった。しかし、ついこの前の組み込み系通信システムの開発は完全なウォーターフォール型でした。結果はなんとか結合テストまで完了しましたが、その過程は散々…

要求仕様化問題

3年以上も放置状態だったんですね。 久しぶりに更新します。現在も、3年前とかわらずプログラマとして働いています。この3年間の変化として、短期間ですが、違う開発のお仕事を経験しました。 未経験の開発環境、カテゴリでの開発でした。 業務系のWindowsア…

java.nio.ByteBuffer

ByteBuffer は便利 DataInputStream の readFully みたいに指定サイズを Byte バッファに読み込んで ByteBuffer にして返すメソッド。 この時のデータはリトルエンディアン import java.nio.{ByteBuffer,ByteOrder} ..snip.. def read[S

夏休みが終わり(ByteBufferと文字列エンコーディング)

今日で8月も終り。 はやかった今年の8月も。あっという間でしたが、夏休みは3日間いただきました。でも宿題が残っている..

[Scala] java のアレは scala でどう書くの

基本的なことでも慣れないうちは、どう書けばよいかと、ググる日々.. scala でプログラミングし出して慣れない scala で java のアレはどう書くのか? と簡単な処理でも勝手が違うので少し戸惑った事。 byte バッファ java だと byte[] buffer = new byte[siz…

構造的部分型(Structural Subtyping)

型の階層構造とは関係なく特定のメソッドを定義して、このメソッドを持つ型として定義できる。 Ruby や python のダックタイピングと同じようなもの戻り値の型が Unit で引数無しの close メソッドを持つ型を構造的部分型として指定 def using[S <: { def close(): Unit }, U](s: S)(f: S => U): U = { </:>…

上限境界、下限境界

上限境界、下限境界を指定して型パラメータまたは抽象型の型に制限をつけることができる。 上限境界(upper bounds) [T : T は、型 Parent のサブ型(子の型)を参照 型パラメータまたは抽象型の型のスーパー型(親の型: Parent)から許可 サブ型への境界は Nothi…

型パラメータの変位指定(variance)

型パラメータで型の横に共変(+), 反変(-)の変位アノテーションを付けて変位指定ができる。 変位指定アノテーションを付けない場合は非変(nonvariant)になる。 どのパラメータ型を渡せるかの3種類の規則を指定。 共変(covariant) 型コンストラクタに共変の変…

暗黙の型変換 (implicit conversion)

型変換用の関数の定義に implicit つけると型変換が必要な場面で自動的に型変換関数が実行される。例えば forへ指定する Int to Int で暗黙の型変換が使用されている。 1 to 3 は RichInt の to メソッドから Range(1,2,3) が返される。 1 の Int は、暗黙の…

パターンマッチ (基本のメモ)

パターンマッチは条件分岐を記述する switch 文に似た構文 主にデータの比較、分解、抽出の用途で使用する。 実行時に該当するパターンが選択肢にない場合は scala.MatchError が発生する。 switch の default はないが、default と同等のパターンとしてワイ…

Option#getOrElse

前に勉強用に書いたXMLファイルの要素と属性の表示「XMLファイルの要素と属性をベタに表示」はXMLファイルにXML宣言がない場合は処理できなかったので、Opttion#getOrElse でXMLファイルにXML宣言がない場合は、デフォルトのエンコーディングに UTF-8 を指定…

XMLファイルの要素と属性をベタに表示

XMLファイルを読み込むプログラムを勉強がてらつくりました。Scala は XML 操作が便利。 scala.xml.parsing.ConstructingParser に Source を渡すとXML操作用の Document が取得できるので Node を使って要素のラベルと値、属性、子要素をすべてベタに表示。…

ベンチマーク

Scala で処理時間を計測する Benchmark trait があったので 試しに 1から100万の整数要素を持つリストの各要素を合計する計算処理の時間を、 末尾再帰関数、forループ、whileループ、List の sum で計測してみた。Benchmark の runBenchmarkメソッドは引数の…

再帰

関数型言語では、副作用のないプログラムを行うため繰り返し処理はループではなく再帰を使用。 ただ、Scala で限定的に使用するループで副作用(変数の更新)があっても特に問題なさそうだが、やはりできるだけ副作用のない再帰を使いたい。 再帰のサンプルは…

関数型言語を採用する時の壁

副作用のない処理、パターンマッチ、ケースクラス、ファーストクラス関数、高階関数、クロージャ、カリー化、関数部分適用、末尾再帰、アクター、並列処理、型推論.. それぞれが関連しあって簡潔なコードが書けて、副作用によるバグも減少できるメリットがあ…

暗黙の引数 (implicit parameters)

引数の型に合わせた暗黙の値を指定しておくと、関数(メソッド)呼び出し時の引数を省略できる。 関数定義の引数リストで引数名の前に implicit を付けると暗黙の引数が適用される。 引数を省略しないときは関数呼び出し時の指定値がそのまま渡される。 implic…

桜満開ですが、明日は雨

最近、早起きできていなかったので、ひさびさに早起きした。仕事は少しだけ中だるみ状態。Scala の勉強をぼちぼちと進めているので、仕事で実用的に使える機会をなんとかつくりたいがなかなか難しい。あっ、こんな時間、出勤しなくては..あと、関数型プログ…