【golang】io.Readerを使いまわしてContentType判定、S3アップロードしたらハマった話

【golang】io.Readerを使いまわしてContentType判定、S3アップロードしたらハマった話

前書き:同じハマりを繰り返す Single Page Application(SPA)をAmazon S3にアップロードする機能を持つspareコマンドを開発しているとき、io.Readerの使い方を間違えて少しハマってしまいました。ハマりの原因はio.Readerで読み出すデータが欠損していたことであり、欠損の原因はio.Readerを使いまわしたことです。 このハマり方は2回目なので、備忘録として記事にします。 ...

September 10, 2023 · 6 min
【勉強期間1ヶ月(60h)】LPIC Level3 303 (Security) 合格体験記【ping-t、黒本使用】

【勉強期間1ヶ月(60h)】LPIC Level3 303 (Security) 合格体験記【ping-t、黒本使用】

資格有効期限切れ 2週間前の滑り込み合格 LPIC有効期限2022年6月3日の約2週間前に、LPIC Level3 303-200(Version 2.0)に合格しました。「転職(組み込みからサーバサイドへのキャリアチェンジ)」「息子の誕生」「Software Designへの記事寄稿」と、生活の変化が多い中でギリギリ合格できて、安心しました。 ...

May 15, 2022 · 4 min
【寄稿】Software Design 2022年6月号 第1特集(第3章 シェルスクリプトの使い方)

【寄稿】Software Design 2022年6月号 第1特集(第3章 シェルスクリプトの使い方)

Software Design誌 2回目の寄稿! 技術評論社のSoftware Design 2022年6月号 第1特集 第3章 「シェルスクリプトの使い方」に寄稿する機会をいただきました!2022年1月号に続いて、2回目の寄稿です。表紙がワンちゃんからネコちゃんに戻っています! ...

May 15, 2022 · 4 min
【Golang】spf13/cobraが提供する入力補完(shell completion)をファイル形式でインストールする方法【bash, zsh, fish】

【Golang】spf13/cobraが提供する入力補完(shell completion)をファイル形式でインストールする方法【bash, zsh, fish】

前書き:spf13/cobraのシェル補完は便利 本記事は、spf13/cobraが提供する「シェル補完(文字列)」をファイルとしてシステムにインストールする例を紹介します。今回の例を実践すると、cobraを用いたCLIコマンドでシェル補完が有効になります。ここでのシェル補完とは、ターミナルでコマンド入力中に[TAB]キーを押すと、自動で単語を補完する機能です。 対象シェルは、bash、zsh、fishです。PowerShellは、私が詳しくないので除外します。 cobraは、Golang用のCLIコマンド作成補助ライブラリです。代表的な機能は、CLIコマンド実行時にオプション/サブコマンドが指定されたかどうかを判定する機能です。cobraを使用した場合、自動的にcompletionサブコマンドが追加され(例:以下に示すposixerコマンドのhelp参照)、このサブコマンドはシェル補完用の文字列を出力します。 ...

April 17, 2022 · 8 min
GitHubで初めてStar 50個以上を獲得した感想と実施した内容【Redditで宣伝】

GitHubで初めてStar 50個以上を獲得した感想と実施した内容【Redditで宣伝】

前書き:人生で初めてGitHub Star 50個超え “go install"したバイナリをアップデートするgupコマンドが、公開から一週間でGitHub Starを50個以上獲得しました!ちょっと嬉しい。最新の仕様は、Zennで説明しています。 ...

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

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

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

February 20, 2022 · 6 min
【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から各種ファイルの生成処理でエラーとなります。 ...

February 11, 2022 · 12 min
【解決方法】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以下のパーミッションエラー。 ...

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

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

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

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

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

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

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

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

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

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

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

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

December 12, 2021 · 6 min
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があります(皆、考える事は大体一緒)。 ...

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

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

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

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

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

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

November 23, 2021 · 3 min
shc(Shell Script Compiler)でスクリプトをバイナリ化(暗号化)する方法

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

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

August 29, 2021 · 4 min
Shell Scriptにバイナリ(例:tarball)を埋め込み、実行時にバイナリを取り出す方法

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

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

August 29, 2021 · 5 min
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メッセージが出ます。 ...

August 14, 2021 · 7 min
【オススメ】ソフト開発/エンタメ(余暇)で使用するLinuxアプリ【Debian/elementary OS】

【オススメ】ソフト開発/エンタメ(余暇)で使用するLinuxアプリ【Debian/elementary OS】

前書き:オススメ?当たり前? 本記事は、読者の皆様にLinuxアプリをオススメするように見せかけた備忘録記事です。 私は、2018年から開発環境(≒普段使いのPC)をMacからLinuxに移行しました。Linux環境に移行した後もDebian → elementary OSと移行を続けていて、開発や余暇で使用するアプリを記録しておく必要性が出てきました。 ...

May 22, 2021 · 7 min
【C/C++/C#/Java対応】循環的複雑度の計測ツール lizardの導入方法【Swift/Rust/GoもOK】

【C/C++/C#/Java対応】循環的複雑度の計測ツール lizardの導入方法【Swift/Rust/GoもOK】

前書き:ネストの深さを指摘する時間が勿体無い コードレビューを効果的に実施したいと考えた事はありませんか? 例えば、短い期間でソフト開発する場合、レビュー時間を潤沢に取れないケースがあります。このような場合は、 ...

May 19, 2021 · 7 min
【C言語】_Generic(C11、gcc4.6以降)または__attribute__((overloadable))によるオーバーロード

【C言語】_Generic(C11、gcc4.6以降)または__attribute__((overloadable))によるオーバーロード

前書き C言語にはオーバーロードがない。そんな風に考えていた時期が私にもありました。 オーバーロードとは、メソッド(関数)を多重定義する言語仕様です。例えば、Javaでは引数の順番もしくは引数の個数を変える事によって同名メソッドを複数定義できます。 ...

May 15, 2021 · 4 min
【Androidアプリ】コードリーディングに使うアプリをUserLAndからSource Code Viewer Proに浮気した話

【Androidアプリ】コードリーディングに使うアプリをUserLAndからSource Code Viewer Proに浮気した話

前書き:UserLAndは遅かった 約2年前の2019年、私はAndroidスマホでコードリーディングするにはUserLAndが最適だと結論づけていました。 しかし、使い込んでいく内にUserLAnd特有の**「ファイル操作が遅い点」**に我慢できなくなりました。 システムコール単位でフック処理を入れているUserLAndは、ミドルレンジスマホがCeleron PCと同等に感じられるぐらい遅いです。特に、パッケージマネージャによるインストール処理などの待ち時間は長く、下手すると数十分から数時間待たされます。 ...

February 20, 2021 · 5 min
【Commandパターン】GUIイベント処理や履歴管理で用いるデザインパターン【コード例:Java】

【Commandパターン】GUIイベント処理や履歴管理で用いるデザインパターン【コード例:Java】

前書き:Commandパターンとは Commandパターンは、一つの命令(操作)に対応するメソッドを作成するのではなく、命令に対応するクラス(コマンド)を作成する方法です。 命令をクラス化する事によって得られるメリットは、以下の3点があります ...

January 9, 2021 · 5 min
【推しは誰?】OSS開発をサポートしたく、金銭的なコントリビュートを始めました【elementary OS】

【推しは誰?】OSS開発をサポートしたく、金銭的なコントリビュートを始めました【elementary OS】

 前書き:日頃からお世話になっているOSSへの貢献 2021年は、elementary OSに金銭面(超少額)サポートします! 私はプロプラエタリソフトよりも、ソースコードが公開されているOSS(Open Source Software)を好んで使用します。OSSは技術的な仕様がコードベースで確認でき、プロプラエタリと違って企業の方針転換に振り回される事が少ないからです。 ...

January 9, 2021 · 5 min
【オブジェクト指向】全23種類のGoFデザインパターンに関する説明と参考書籍

【オブジェクト指向】全23種類のGoFデザインパターンに関する説明と参考書籍

Gang Of Fourデザインパターンを学ぶメリット Gang of Fourのデザインパターンとは、「よく見かける機能要件(解決したい問題)」と「各機能要件に対応する設計方針」を23種類に整理したものです。例えば、「単一リソースにアクセスする場合はSingletonデザインパターンが良い」というように、機能要件に適した設計(デザインパターン)を提案しています。 ...

January 7, 2021 · 4 min
ドスパラのTHIRDWAVE VF-AD4にelementary OS(Ubuntu派生)を入れた感想

ドスパラのTHIRDWAVE VF-AD4にelementary OS(Ubuntu派生)を入れた感想

前書き:安価なノートPC VF-AD4を購入しました 私は以前から、物書きやコードリーディングの用途で、ノートPCの購入を検討していました。 で、2020年 賞与をいただいたタイミングで、ドスパラ THIRDWAVE VF-AD4の購入に踏み切りました。お金をケチって整備品を購入したので、27,755円!安い! ...

January 2, 2021 · 7 min
【roff形式を手書きは無理ゲー】manページをMarkdown + Pandocで作成【with manページお作法】

【roff形式を手書きは無理ゲー】manページをMarkdown + Pandocで作成【with manページお作法】

前書き:manualページは伝統的なドキュメント manページは、UNIX系OSのドキュメントであり、コマンドやシステムコールなどの説明が記載されています。 Unix v7の時代(1979年)から変化が少ないため、2020年現在の視点で見ると表現力に難があります。具体的には以下のような欠点があり、manページを良質なドキュメントとするには文章力を試されます。 ...

December 19, 2020 · 7 min
【visudo / vigr / vipw】システムファイルをsudo viで編集は駄目【sudoers / group / passwd】

【visudo / vigr / vipw】システムファイルをsudo viで編集は駄目【sudoers / group / passwd】

前書き:システムファイルの編集は慎重に Linuxは、ユーザ/パスワード/管理者権限などの情報を/etc以下に存在するシステムファイルで管理しています。 管理者権限があればシステムファイルを自由に書き換えられますが、書式を間違えた状態で保存してしまうとシステムが正しく動作しなくなります。下手すると、ログインできない状態に陥ります。 ...

December 16, 2020 · 3 min
【静的解析】ソースコード解析補助ツールSourcetrailの導入方法【例:systemd(C言語)】

【静的解析】ソースコード解析補助ツールSourcetrailの導入方法【例:systemd(C言語)】

前書き:Sourcetrailとは Sourcetrailは、C/C++/Java/Pythonで書かれたコードを解析し、クラス(構造体)やメソッドの依存関係/呼び出し関係を可視化してくれるツールです。 以下の特徴を持つため、会社での業務利用でも気軽にSourcetrailを使用可能です。 Windows/Mac/Linuxで動作 ライセンスはGPL v3(使用は自由ですが、Sourcetrail自体の改変や販売はソースコード公開義務が発生) オフラインで動作(DBを作成しますが、外部サーバにアップロードしません) 使用例を下図に示します。 ...

December 12, 2020 · 9 min
【LPICで見た】/etc/motdの内容を出力しているのは誰?【答え:sshd】

【LPICで見た】/etc/motdの内容を出力しているのは誰?【答え:sshd】

 前書き:Message Of The Dayファイルとは LPIC受験者は、よくご存知の/etc/motd (Message Of The Day)ファイル。 ユーザがLinuxサーバにsshログインした際に、/etc/motdファイルの内容がターミナル上に表示されます。 ...

December 1, 2020 · 4 min
【CPU温度やI/Oの監視】Rapberry Pi4サーバにMonitorixをインストールする方法

【CPU温度やI/Oの監視】Rapberry Pi4サーバにMonitorixをインストールする方法

前書き:ラズパイサーバが停止するので監視したい Raspberry Pi4にPLEXマルチメディアサーバを導入して、約一ヶ月ほど運用した結果、2〜3日の稼働でシステム停止してしまう問題に遭遇しています。 この問題の対症療法として、Watch Dog Timerとheartbeatを用いてシステム停止時に自動再起動を行う対応を実施しました。 ...

November 28, 2020 · 7 min
【WatchDogTimer】Raspberry Pi4サーバがフリーズ(停止)した場合に自動再起動する方法【HeartBeat】

【WatchDogTimer】Raspberry Pi4サーバがフリーズ(停止)した場合に自動再起動する方法【HeartBeat】

前書き:ラズパイサーバがよく止まる ラズパイにPLEXマルチメディアサーバを導入して、約一ヶ月ほど運用した結果、2〜3日の稼働でシステム停止してしまう問題に遭遇しています。半日で停止する事もありました。 Plexメディアサーバー用に、 ・ラズパイ4(8GB) ・HDD 1TB ・SSD 128GB(Boot用) ・microSDは無し の環境を作成中。 このケースはmicroSDカード差込口を逆方向まで持ってくる基板が付いてきたけど、それを経由するとmicroSDの読み込みでエラーが頻出する。 なのでSSDブートに切り替え中。 pic.twitter.com/uvqZR5Gz0s ...

November 28, 2020 · 7 min
【Go言語(Golang)】os.Exit()をユニットテストする方法(カバレッジも取得する方法)

【Go言語(Golang)】os.Exit()をユニットテストする方法(カバレッジも取得する方法)

前書き:os.Exit()の結果は親プロセスが受信 Go言語のos.Exit()は以下に示すコードで実装されており、最終的にシステムコールのexit()を呼び出し、プロセスを終了させます。 func Exit(code int) { if code == 0 { // Give race detector a chance to fail the program. // Racy programs do not have the right to finish successfully. runtime_beforeExit() } syscall.Exit(code) } システムコールExit()の引数codeは、そのプロセスの終了状態として親プロセスに伝わる仕様です(他言語のexit()コードも同等の挙動をします)。つまり、テストコードからos.Exit()をコールするメソッドを呼び出しても、その結果を取得できません。 ...

November 20, 2020 · 4 min
【Go言語(Golang)】ユニットテスト時にgo-flagsに任意の引数を渡す方法

【Go言語(Golang)】ユニットテスト時にgo-flagsに任意の引数を渡す方法

前書き:flag(Go標準)のテスト方法ばかり検索ヒット Go言語は、コマンドライン引数をパースする機能を持つflagパッケージが標準機能として提供されています。flagパッケージは、引数パース機能に対するユニットテストを簡単にするために、“flag.Commandline.Set()“が用意されています。 その一方で、OSSとして公開されているgo-flagsパッケージはどうでしょうか?flagパッケージよりも、go-flagsの方がコマンドライン引数を簡単に扱える特徴(ショート/ロングオプションサポート、Helpメッセージ自動生成など)がありますが、テスト用の仕組みが見当たりません。 Googleで検索しても、go-flagsパッケージによるコマンドライン引数パースをテストする方法が出てこなかったため、本記事ではその方法(ベストな方法ではなく、妥協した方法)を紹介します。 ...

November 20, 2020 · 3 min
【苦行】C言語で正規表現を用いる方法【標準Cライブラリ(glibc)使用】

【苦行】C言語で正規表現を用いる方法【標準Cライブラリ(glibc)使用】

 前書き:C言語で正規表現を使う理由などない 正規表現(Regular Expression)は強力な機能なため、様々なLinuxコマンドやプログラミング言語、アプリに導入されています。特に、sed/awk/egrepコマンドやPerl/Rubyは、正規表現による文字列操作の代名詞のような存在です。 ...

November 1, 2020 · 18 min
Raspberry Pi3/4にDockerとdocker-composeをインストールする方法

Raspberry Pi3/4にDockerとdocker-composeをインストールする方法

前書き 本記事では、Raspberry Pi3/4(32bit、64bit)のいずれかに対して、Dockerおよびdocker-composeをインストールする方法を紹介します。 ...

September 27, 2020 · 3 min
【セキュリティ対策】Raspberry Pi4に新規ユーザを追加し、piユーザを削除

【セキュリティ対策】Raspberry Pi4に新規ユーザを追加し、piユーザを削除

前書き:piユーザは脆弱 Raspberry Piのデフォルトユーザであるpiユーザ(管理者権限あり)は、パスワードがraspberryに設定されています。この情報は悪意のあるユーザも当然知っているため、近年ではpiユーザを狙い撃ちにしたマルウェアが増えています。 ...

September 1, 2020 · 4 min
【環境構築】fish shellを用いたDebian環境にSDKMANおよびJava(JDK)をインストールする方法

【環境構築】fish shellを用いたDebian環境にSDKMANおよびJava(JDK)をインストールする方法

前書き:SDKMANはbash(もしくはzsh)前提 SDKMANは、JDK(Java開発環境)やGroovy、Scala、Gradleなどのバージョン管理ツールです。主に、JVM系のツールを管理します。Rubyのrbenv、Pythonのpyenvと同様の立ち位置のツールであり、CLIから任意のバージョンのソフト(例:Java)をインストール/使用/削除できます。 SDKMANの公式サイトに書かれている通り、SDKMANはbashで実装されています。そのため、Login Shellがbashの場合は問題なく動作しますが、fish環境では実行時にエラーが出てしまいます。 ...

August 30, 2020 · 5 min
【環境構築】Debian 10にSteamをインストールする方法:glXChooseVisual failedエラー回避

【環境構築】Debian 10にSteamをインストールする方法:glXChooseVisual failedエラー回避

前書き:Steam公式はLinuxをサポート済み Steamは、PCゲームの購入ができるプラットフォームであり、2012年からLinux環境でも動作します。Debian公式サイトにSteamの導入方法を紹介した記事がありますが、グラフィックボードがNVIDIA環境の場合は追加手順が必要です。 本記事では、追加手順を含めて、Steamのインストール方法を紹介します。 ...

August 28, 2020 · 3 min
元Win/MacユーザがメインPCをLinux(Debian)にした感想

元Win/MacユーザがメインPCをLinux(Debian)にした感想

前書き 本記事では、メインPCをLinuxに変えて良かった事/不便だった事を紹介します。 前提情報ですが、私のPC使用歴はWindowsが18年(Win2000〜Win10)、Macが8年(OS X 10.8〜macOS 10.15)、Linuxが4年(Debian8〜10)です。WindowsとLinuxは仕事で使用しており、ターミナルでのコマンド操作(CLI)に苦手意識はありません。むしろ、CLIが好きです。 ...

August 26, 2020 · 7 min
Debian(64bit)で32bitバイナリを実行もしくは作成する方法(C言語)

Debian(64bit)で32bitバイナリを実行もしくは作成する方法(C言語)

検証環境 Debian10(64Bit)、Ryzen 7 3800X環境で検証します。CPUアーキテクチャはIntel/AMDを想定しており、ARMに関しては本記事で説明しません。 ...

August 19, 2020 · 3 min
【Java 11】Shebangを用いたJavaソースファイル(単一)の実行方法 + Shebangエラー回避方法

【Java 11】Shebangを用いたJavaソースファイル(単一)の実行方法 + Shebangエラー回避方法

前書き:コンパイル無しでJavaアプリが動かせる 最近のJavaは、リリースペースが半年に一回と早まり、新機能が次々と追加されています。新機能の中で、Java 11からコンパイル無しでJavaソースファイル(単一ファイル)が実行できる機能があり、本記事ではその使い方(およびShebangエラー回避方法)を説明します。 ...

July 23, 2020 · 3 min
起動済みプロセス(例:デーモンプロセス)の標準出力を確認する方法

起動済みプロセス(例:デーモンプロセス)の標準出力を確認する方法

前書き:ログを残さないデーモンと出会った DBにアクセスするデーモンプロセスが、稀にSegmentation Faultでお亡くなりになる現象に遭遇しました。 このデーモンプロセスは、C言語で書かれており、デバッグ情報をログファイルに殆ど出力していませんでした。多くの情報は標準出力に出力されていたため、デバッグするにはデーモンプロセスの標準出力を確認する必要がありました(もしくは、GDBを使う)。 ...

July 4, 2020 · 2 min
【C言語】static(private)関数をユニットテストする3つの方法【単体テストのバッドノウハウ】

【C言語】static(private)関数をユニットテストする3つの方法【単体テストのバッドノウハウ】

前書き:C言語のstatic関数は単体テストできます C言語で単体テストを作成する際に、**「どうやってstatic関数をテストコードから呼び出せばいいのか?」**と迷った事はありませんか?例えば、以下のコードのprivate_func()を他のCソースファイル(例:テストコード)から呼び出せるでしょうか。 ...

April 26, 2020 · 4 min
【Singeltonパターン】考え方は単純だが、使いどころが大切なデザインパターン【コード例はRubyとJava】

【Singeltonパターン】考え方は単純だが、使いどころが大切なデザインパターン【コード例はRubyとJava】

前書き:Singletonパターンは奥が深い Singletonパターンは、GoF(Gang of Four)デザインパターンの一つであり、あるクラスのインスタンスが一つしかない状態を保証する方法です。「インスタンスが一つしか無い」という前提を生み出す事で、複数のインスタンスを用いる事によるバグの発生リスクを無くせます(正しく実装できていれば)。 ...

April 26, 2020 · 5 min
【Builderパターン】コンストラクタの初期化(new)引数が多い場合にオススメなデザインパターン

【Builderパターン】コンストラクタの初期化(new)引数が多い場合にオススメなデザインパターン

 前書き:Builderパターンとは Builderパターンは、GoF(Gang of Four)デザインパターンの一つであり、複雑な構造を持つインスタンス生成を容易にするための手法です。 ...

April 25, 2020 · 4 min
【Bash / Ruby / Python3】ユーザ名 / UID / グループ名 / GIDを取得する方法の比較

【Bash / Ruby / Python3】ユーザ名 / UID / グループ名 / GIDを取得する方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 12, 2020 · 3 min
【Bash / Ruby / Python3】外部コマンドを実行する方法の比較

【Bash / Ruby / Python3】外部コマンドを実行する方法の比較

自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 12, 2020 · 4 min
【Bash / Ruby / Python3】ANSIエスケープシーケンスを用いた出力文字色の変更方法を比較

【Bash / Ruby / Python3】ANSIエスケープシーケンスを用いた出力文字色の変更方法を比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 11, 2020 · 3 min
【Bash / Ruby / Python3】root権限を確認する方法の比較

【Bash / Ruby / Python3】root権限を確認する方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 11, 2020 · 3 min
【Bash / Ruby / Python3】オプション解析する方法の比較

【Bash / Ruby / Python3】オプション解析する方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 11, 2020 · 7 min
【Bash / Ruby / Python3】新規ディレクトリ作成方法、ディレクトリ削除方法の比較

【Bash / Ruby / Python3】新規ディレクトリ作成方法、ディレクトリ削除方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 10, 2020 · 4 min
【Bash / Ruby / Python3】ファイルのコピー、ファイルの移動方法の比較

【Bash / Ruby / Python3】ファイルのコピー、ファイルの移動方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 9, 2020 · 3 min
【Bash / Ruby / Python3】ファイル一覧の取得方法、ファイル数の確認方法の比較

【Bash / Ruby / Python3】ファイル一覧の取得方法、ファイル数の確認方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 9, 2020 · 3 min
【Bash / Ruby / Python3】ユーザ入力(input)受け付け方法の比較

【Bash / Ruby / Python3】ユーザ入力(input)受け付け方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 9, 2020 · 4 min
【Bash / Ruby / Python3】PATHからファイル名の抽出、ファイル名(拡張子なし)の取得、拡張子の取得方法の比較

【Bash / Ruby / Python3】PATHからファイル名の抽出、ファイル名(拡張子なし)の取得、拡張子の取得方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 8, 2020 · 4 min
【Bash / Ruby / Python3】ファイル読み込み、ファイル書き込みの方法を比較

【Bash / Ruby / Python3】ファイル読み込み、ファイル書き込みの方法を比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 8, 2020 · 3 min
【Bash / Ruby / Python3】ヒアドキュメント(文字列リテラル埋め込み)の書き方を比較

【Bash / Ruby / Python3】ヒアドキュメント(文字列リテラル埋め込み)の書き方を比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します ...

April 7, 2020 · 6 min
【Bash / Ruby / Python3】新規ファイル作成(一時ファイル作成含む)やファイル削除する方法の比較

【Bash / Ruby / Python3】新規ファイル作成(一時ファイル作成含む)やファイル削除する方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 7, 2020 · 4 min
【Bash / Ruby / Python3】ディレクトリの存在を確認する方法の比較

【Bash / Ruby / Python3】ディレクトリの存在を確認する方法の比較

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

April 6, 2020 · 3 min