【Golang】go installで取得した$GOPATH/bin以下のバイナリを一括更新するgupコマンドを試作

【Golang】go installで取得した$GOPATH/bin以下のバイナリを一括更新するgupコマンドを試作

前書き:バイナリの更新が面倒 Golangでは、MacやLinuxのパッケージマネージャ(brew, apt, dnf, snap, etc)を利用せずに、"$ go install"でバイナリをインストールできます。"$ go install"は、開発者がパッケージのスペックファイルを作成せずにバイナリを配布できるメリットがあります。 ...

2022年2月20日 · 6 分 · nchika
【Golang】goa(ver 1.x)frameworkのlinter(goavl)を試作【go/astを利用】

【Golang】goa(ver 1.x)frameworkのlinter(goavl)を試作【go/astを利用】

前書き:DSLに半日悩み、カッとなって作った goaは、DSLで記述されたデザインをもとに、Web APIホスティングに必要なベース処理(ルーティング、コントローラ、Swaggerなど)を生成するFrameworkです。goaを採用している会社の例は、DMM。goaを使うとコード記述量が減り、APIドキュメントが自動生成される利点があります。 私は、2022年1月からgoaを開発で使用するようになりました。goaは、DSLを覚えるコストが小さくはありません。DSLを書き間違えると、当然goa-designから各種ファイルの生成処理でエラーとなります。 ...

2022年2月11日 · 12 分 · nchika
【Golang】2022年に開発した自作CLIコマンド/ライブラリに対する所感と宣伝【OSS】

【Golang】2022年に開発した自作CLIコマンド/ライブラリに対する所感と宣伝【OSS】

前書き:Golangでの開発が増えた 最近、Golangで小さいCLIコマンド/ライブラリを書き殴る事が増えました。 その理由としては、環境の変化が大きいです。前職では組み込みエンジニアとして複数言語を使用していましたが、現職ではGolang固定です。Golangを書けば書くほど現職に関係するスキルが上がるので、積極的にGolangを使うようになりました。 ...

2022年2月5日 · 17 分 · nchika
【Golang】go:embedを用いて格言表示コマンド(subaru)を開発

【Golang】go:embedを用いて格言表示コマンド(subaru)を開発

前書き:go:embedを試したかった Golangでは、go:embedがVersion1.16から組み込まれています。 go:embedの利点は、「バイナリインストール(設定ファイルや関連ファイル含む)がより簡単になる事」でしょうか。go:embedを用いる事によって、バイナリの中に設定ファイルやスクリプトなどを埋め込めます。そのため、バイナリをシステムに置くだけで、インストール作業が完了となります。 ...

2022年2月5日 · 6 分 · nchika
【解決方法】You don't have write permissions for the /var/lib/gems/2.7.0 directory【Ruby, Linux】

【解決方法】You don't have write permissions for the /var/lib/gems/2.7.0 directory【Ruby, Linux】

前書き:gem installでコケる 原因は単なる権限の問題。Ruby初心者なので自分用にメモします。 まずは、前提情報です。Ubuntu 21.10、Ruby 2.7.4[x86_64-linux-gnu]で、femパッケージ(パッケージ作成ツール)のインストールを試みました。結果は、/var/lib/gems以下のパーミッションエラー。 ...

2022年2月5日 · 4 分 · nchika
【Golang】プロジェクトテンプレート生成ツール(ubume)を試作【改善案を募集】

【Golang】プロジェクトテンプレート生成ツール(ubume)を試作【改善案を募集】

前書き:プロジェクトを新規で作るのはダルい Golangの勉強中に、「サンプルコードを試すためのプロジェクト」や「検証用プロジェクト」を手動で作るのは、面倒だなと感じてきました。また、どこかのプロジェクトをコピーして流用すると、名称の変更忘れ(誤記、typo)が発生しがちです。 ...

2022年1月11日 · 4 分 · nchika
【HR/HM】2021年に聴いてハマったアルバム9選+2【プログレ】

【HR/HM】2021年に聴いてハマったアルバム9選+2【プログレ】

前書き:学生時代の曲を振り返る機会が増加 「2020年に聴いてハマったメタルバンド4選」に引き続き、今年は2021年に聴いてハマったアルバムを取り上げようと思います(1年の振り返り)。 31歳という年齢のせいか、最近は学生時代(90年代後半、2000年代前半)の曲が刺さります。GLAY、B’z、Kinki Kids……しかし、なるべく聴かないようにしています。理由は、以下のツイートの通りです。 ...

2022年1月8日 · 11 分 · nchika
【Vala言語】優れた点、Linuxにおける立ち位置、物足りなさとその対策(coreライブラリ開発)

【Vala言語】優れた点、Linuxにおける立ち位置、物足りなさとその対策(coreライブラリ開発)

マイナーなプログラミング言語:Vala言語とは あなたはVala言語をご存知でしょうか? Vala言語は、プログラミング言語ランキングでは圏外(50位以下)であり、クロスプラットホーム言語にも関わらずLinux環境のGUIプログラミングでしか用いられる機会がありません。GUIに強みを持つ言語であるため、Linuxでシステムプログラミング開発する人でも、Vala言語の存在を知らない可能性があります。THE マイナー言語。 ...

2022年1月5日 · 7 分 · nchika
Software Design 2022年1月号 第2特集(第1章、第2章)に寄稿【キッカケ、感想、書き足りない内容】

Software Design 2022年1月号 第2特集(第1章、第2章)に寄稿【キッカケ、感想、書き足りない内容】

前書き:人生初!ソフト雑誌への寄稿 技術評論社のSoftware Design 2022年1月号 第2特集(第1章、第2章)に寄稿させていただきました。 間違いなく、2021年で最も嬉しい出来事です!(エンジニア人生の中でトップクラスの嬉しさ) ...

2021年12月17日 · 8 分 · nchika
【golang】errorsパッケージ New(), Unwrap(), Is(), As()の使い方と注意点

【golang】errorsパッケージ New(), Unwrap(), Is(), As()の使い方と注意点

前書き:君、err != nilしかできないの? Golangでは、errorがnilでなければ上位関数にそのままerrorを戻す処理が頻繁にあります。 f, err := os.Create(path) if err != nil { return err } 「エラーが発生した事実」を上位関数へ伝えるだけであれば、上記コードの対応で問題ありません。しかし、エラーの種類によって異なる対応をしたい場合は、nilチェックだけでは物足りません。 ...

2021年12月13日 · 12 分 · nchika
「Log4j2の脆弱性から垣間見えたOSS開発の厳しさ」と「OSS開発者に投げ銭する文化(未来)」について

「Log4j2の脆弱性から垣間見えたOSS開発の厳しさ」と「OSS開発者に投げ銭する文化(未来)」について

前書き:災害レベルの脆弱性 本記事は、紛うことなきポエム記事です。Log4j2の脆弱性問題を追っている間に「OSS開発の醜い部分」を目の当たりにしたので、本記事では「せめてOSS開発者が金銭的もしくは他の手段で報われればいいのに」と主張します。 ...

2021年12月12日 · 6 分 · nchika
MimixBox(BusyBoxインスパイア)の概要、開発時の気づき、PR募集について【Golang学習】

MimixBox(BusyBoxインスパイア)の概要、開発時の気づき、PR募集について【Golang学習】

MimixBoxはGolang学習用アプリとして開始 Golang製のMimixBoxは、BusyBox(多数のUnixコマンドをシングルバイナリに詰め込んだCLIアプリ)と共通点を持ちつつ、独自の目標を持つCLIアプリとして開発しています。 開発のキッカケは、Golangを学習するためです。前職を退職して、新しい会社では開発経験のないGolangがメイン言語となりました。即戦力となれるよう、私は勉強のためにCLIツールや独自シェルを作り始めましたが、「全部混ぜて開発すればプロジェクト数が増えず、管理が楽では?それなら、BusyBoxを真似するか」という考えに至りました。 ここまで来れば「MimixBox - Mimic BusyBox on Linux(Linux上でBusyBoxを模倣する)」という名称を考えつくのは、一瞬でした。ちなみに、同様のプロジェクトにはtoyboxとgoboxがあります(皆、考える事は大体一緒)。 ...

2021年11月28日 · 9 分 · nchika
【OS/Linux系多め】組み込みエンジニア時代(7年間)に役立った良書9選

【OS/Linux系多め】組み込みエンジニア時代(7年間)に役立った良書9選

前書き:技術レイヤーが変わる前に振り返り 2021年12月に新卒入社した会社を退職しました。 退職前の会社では、組み込みエンジニアとして働いていましたが、次の職場ではバックエンドエンジニアとして働きます。組み込みエンジニアは、ハード(機密情報)と近い関係からか、あまり情報発信しない印象があります。情報発信しようにも、「会社独自技術のネタしか無い」という業界な気がしています。 ...

2021年11月23日 · 10 分 · nchika
Golangで無名パイプからデータを受け取る方法【term.IsTerminalによる判定】

Golangで無名パイプからデータを受け取る方法【term.IsTerminalによる判定】

前書き:os.Args[1]にはパイプのデータがない 無名パイプは、Terminal上で用いる"|“の事です。例えば、以下の例ではechoコマンドがパイプで"PIPE test"を渡し、受け取り側のcatコマンドがパイプから受け取ったデータを標準出力しています。 ...

2021年11月23日 · 3 分 · nchika
【C言語】完全なオブジェクト指向ではなく、Interfaceのみを利用する選択【Golangを参考に】

【C言語】完全なオブジェクト指向ではなく、Interfaceのみを利用する選択【Golangを参考に】

C言語とオブジェクト指向は相性悪い オブジェクト指向は、C言語でも実現できます。 C言語は、言語によるオブジェクト指向プログラミングのサポートがありません。しかし、開発者が注意深く実装する事によって、オブジェクト指向プログラミングが可能です。 ...

2021年11月17日 · 5 分 · nchika
【退職エントリ】新潟在住の組み込みエンジニアが転職を考えたキッカケ、転職活動、退職した会社への感謝

【退職エントリ】新潟在住の組み込みエンジニアが転職を考えたキッカケ、転職活動、退職した会社への感謝

本画像は新潟駅南の写真であり、著作権およびその他の権利はtownphoto.net様が保有しています。 前書き 2015年4月から2021年12月まで勤めていた会社を退職しました。 退職間近では、私は組み込みソフト開発およびGUIコンソール開発を担当するプロジェクトリーダーでした。多くの方に期待されている事を理解していましたが、様々な要因が積み重なった結果として退職を選択しました。 ...

2021年11月13日 · 8 分 · nchika
shc(Shell Script Compiler)でスクリプトをバイナリ化(暗号化)する方法

shc(Shell Script Compiler)でスクリプトをバイナリ化(暗号化)する方法

前書き:Shell Scriptの中身を見せたくない 通常の開発業務では、Shell Scriptをバイナリ化(かつ暗号化)する利点はありません。自分しか解読できないShell Scriptは、他のチームメンバにとっては迷惑な存在(負債)になります。 ...

2021年8月29日 · 4 分 · nchika
Shell Scriptにバイナリ(例:tarball)を埋め込み、実行時にバイナリを取り出す方法

Shell Scriptにバイナリ(例:tarball)を埋め込み、実行時にバイナリを取り出す方法

前書き:スクリプトサイズが大きい理由 プロプラエタリソフト(例:商用ソフト)のShell Scriptインストーラのサイズを見たら、数百MBだった事はありませんか? そのような場合は、.deb/.rpmパッケージやtarball等のバイナリがShell Scriptに埋め込まれている可能性が高いです。このようなインストーラは、実行時にバイナリ部分だけを取り出してから、バイナリを操作します。 ...

2021年8月29日 · 5 分 · nchika
Ubuntu (20.04)へsshログインした際に表示されるWelcomeメッセージの仕組みと表示しない方法

Ubuntu (20.04)へsshログインした際に表示されるWelcomeメッセージの仕組みと表示しない方法

前書き:UbuntuはWelcomeメッセージが立派で邪魔 ラズパイサーバ(Raspberry Pi OS)からHP小型PC(Ubuntu 20.04)にサーバ移行した時、UbuntuのWelcomeメッセージがラズパイより立派な事に気づきました。 例えば、Ubuntuにsshログインした時、以下のようなWelcomeメッセージが出ます。 ...

2021年8月14日 · 7 分 · nchika
【Java】immutable object(不変クラス)の利点/欠点/作成方法および不変クラスで実装する場面

【Java】immutable object(不変クラス)の利点/欠点/作成方法および不変クラスで実装する場面

前書き:これだからC言語プログラマは…… Immutable object(不変クラス)とは、コンストラクタによるインスタンス生成時から状態(フィールド変数の値)が変わらないクラスを意味します。代表例はStringクラス。 ...

2021年5月23日 · 5 分 · nchika