小ネタプログラミング

シェルスクリプトでJavaScript文字列リテラル用のエスケープ

「JavaScript文字列リテラル用のエスケープ」という表現は微妙だけど、要はサーバサイドでJavaScriptを動的生成する時に、文字列リテラルとして任意のパラメータを出力したい場合のエスケープ処理。先日(というか先月)書いたHTMLエスケープ用のシェルスク…

シェルスクリプトでHTMLエスケープ

PHPやPerlでのHTMLエスケープの話はよく目にするけど、そういえばシェルスクリプトでは見かけないなあ、なんて思った次第でございます。動的Webコンテンツの先駆けであるCGIの普及期でさえ言語としてPerlが大々的に使われていたわけで、そもそもサーバサイド…

リンク切れしたシンボリックリンクを探す

id:eel3:20121112:1352651058 でシンボリックリンクを張りなおすMakefileを書いたのだが、デッドリンク(リンク切れしたシンボリックリンク)がそのまま残ってしまう問題があった。この問題に対処するために、デッドリンクを探す方法を――『覚えて便利 います…

diruseの出力結果をCSV形式に加工する

HDDをあさったら、古いプロトタイプ・コードが見つかった。ちょっと晒してみる。今は不明だが、かつてWindowsサーバの管理用にdiruseというコマンドがあった。Unixのduのように指定したフォルダのディスク使用量を表示するツールで、その昔はWindows Server…

gawkやmawkで1byte/1文字ずつファイルを読む方法

id:eel3:20151212:1449931944 へのはてブのコメントより。 gawk なら簡単にできるけど、これも意外と知られてないかな。 http://b.hatena.ne.jp/entry/273514414/comment/Rocco コメントのように、拡張アリアリなら、gawkで1文字/1byteずつ読むことや、mawk…

AWKで1byteずつファイルを読む方法 + 1文字ずつ読む方法の構想

id:eel3:20151102:1446476928 のhcaslのsh版にて、AWKで標準入力/ファイルを1byteずつ読むために試行錯誤したので、独立した記事として書いておく。現時点での結論としては、POSIXの範囲内では、awk(1)単体で標準入力やファイルから1byteずつ中身を読む方法…

8つの言語でテキストフィルタを書き比べた

※2015/11/15追記:現段階では8言語から12言語に増えている。その昔 id:eel3:20120129:1327845759 なんてことをやったのだが、性懲りもなくまた同じようなことをやってみた。作ったものはこちらに置いてある。 GitHub - eel3/hcasl: Command line tool for "h…

CoffeeScript用のMakefile雛形4つ(GNU Make専用)

いやまあ普通は「Cakefile使えよ」となるのだろうけど……それでもメジャーでポピュラーなビルドツールといえばmake(1)で、数あるmake(1)の実装の中で一番人気なのはGNU Makeだと思うわけです。大概のLinuxディストリやMac OS Xのmakeの実体はGNU Makeだ。Free…

英辞郎の辞書ファイル(テキスト形式)をPDIC 1行テキスト形式に変換する

英辞郎のテキスト形式の辞書ファイルが入手できなくなったと聞いて、あわてて『英辞郎 第八版(辞書データVer.141/2014年8月8日版)』を入手した。付属する辞書はVer.1.41。以前購入したのがVer.1.02(2007年03月ごろ)なので、8年半ぶりだ。私の英辞郎の使い…

シェルスクリプトにGo言語を埋め込む

Go言語のコードをスクリプトとして即時実行する方法は、 go run するなり、もう少し工夫して shebang もどきを使って単体のコマンドっぽく実行するなり、いずれも簡単で情報もそれなりに見つかる。一方で、例えば perl(1) や ruby(1) でオプション -e を使う…

ソースコードから標準Cライブラリに含まれてそうな識別子を検索する

組み込み関連でクロスプラットホームなライブラリを開発する時、私の周囲十数メートルの範囲では、使用している標準Cライブラリの機能をドキュメントに明記することがある。というのも、そのライブラリがフリースタンディング環境で使用される可能性があるか…

ゼロパディングされた連番を出力+ディレクトリを作成

1〜12月の各月のデータを格納する目的で、ゼロパディングされた数値でディレクトリを作成したい。楽をしたいので、まずはゼロパディングされた連番を出力する方法を探ってみた。 シェルスクリプト(/bin/sh)の場合 seq(1)には、ゼロパディングして数値の幅…

テキストレコードのフィールドにセパレータを含むデータを埋め込みたい

問題編 テキストデータを、改行区切りのテキストレコードに埋め込んで出力したい。例えばusp Tukubaiでいうところのネーム形式やフィールド形式のフィールドの値として出力したい。問題は、元データに改行が含まれている可能性があることだ。また、フィール…

バッチファイルでISO 8601っぽい表記で現在時刻を出力する

id:eel3:20131109:1383976213 に関連した一発ネタ。バッチファイルで現在時刻をISO 8601っぽいフォーマットで出力してみる。 @echo off :: とりあえず JST固定で echo %DATE:/=-%T%TIME: =0%+09:00 ISO 8601では小数点として `,' と `.' のどちらもOKらしい…

定例処理用バッチファイルでログを日時付きファイル名で出力する

問題編 Windowsのタスクスケジューラなどで定例処理を行う時、ログないしレポートの類を毎回別の名前のファイルに出力したい場合がある。この名前の付け方には、次の2パターンが考えられる。 ファイル名に連番を付ける。 ファイル名に処理を実行した日時を付…

シェルスクリプトで統計処理初級、awk(1)なしで

統計処理と言えるほどではないが、データ処理して中央値や最頻値を眺めていて思った。ある程度本格的に統計処理する人はR言語とかOctaveとかPython*1とかを使うと思うし、そうでない人もPerlやRubyなどのスクリプト言語を使うと思う。シェルスクリプト使いも…

バイナリファイル同士を比較したいけどcmpが無かったので頑張った話

id:eel3:20130826:1377522419 と似たようなパターンのネタ。相変わらずbusyboxな組込みLinux環境で作業していて、バイナリファイルを比較しようとしたらcmp(1)が無かった。dirname(1)に引き続き2度目……。組み込んであるbusyboxのdiffがバイナリファイルに対…

関数/メソッドのコード行数の累積グラフを表示する

Software Design 2013年08月号の第2特集にて、コード行数(LOC)の累積グラフがジニ係数のグラフに似ているとの記述があった。Software Design (ソフトウェア デザイン) 2013年 08月号 [雑誌]出版社/メーカー: 技術評論社発売日: 2013/07/18メディア: 雑誌こ…

シェルスクリプト自身のパスを取得しようとしたらdirnameが無かったので頑張った話

シェルスクリプトを書いていて、実行時にそのスクリプト自身のパスを取得したくなった。バッチファイルでいうコレみたいな感じ。 @echo off echo %~dp0 そのスクリプトは環境変数PATHに登録されたディレクトリに置くことはなく、必ずカレントディレクトリか…

GnuPGで公開鍵暗号方式でファイルを暗号化する為のGUIラッパー

id:eel3:20130526:1369569828 の続き的なネタ。GnuPGで公開鍵暗号方式でファイルを暗号化する場合、使用する公開鍵を指定しなくてはならない。復号化する相手が決まりきっている場合は、バッチファイルに使用する公開鍵まで含めてコマンドを記述しておき、そ…

GnuPGで暗号化されたファイルを復号化する為のラッパー

公開鍵暗号方式で暗号化されたファイルをGnuPGで復号化することがある。Windows上で作業しているので、こんなバッチファイルを作成して「送る」メニューにショートカットを登録している。 @echo off gpg.exe --decrypt-files %* 「送る」メニューのショート…

「クリップボードのテキストをGnuPGで復号化」の代替品の代替品

id:eel3:20120521:1337527087 にて、Windows上でクリップボードにコピーされているGnuPGの暗号化テキストを復号化してテキストビューアで表示するツールを作成した。あのツールはバッチファイルで実装していて、GnuPG(gpg.exe)とttPageとクリップボード上…

Rhino上でCoffeeScriptのコードを実行するインタプリタもどきを作る

CoffeeScriptのスクリプトを直接実行したい場合、CoffeeScriptのコンパイラを動かしているJavaScript処理系で実行することが大半だ。現状ではデフォルトのNode.js、Webブラウザ*1、PhantomJS*2、Windows Script Host*3で実行できることは分かっている。しか…

フロッピディスクのデータ消去作業を自動化する

手元に大量にある3.5インチフロッピディスクを処分したいので、暇を見て必要なデータをサルベージして、データ消去(ランダム値での上書き)とフォーマットを行っている。作業用に購入したUSB-FDDをUbuntuで使用したらなぜかフロッピが軒並み壊れたので*1、W…

フィルタ・ライクなXSLTプロセッサを自作する

色々あって簡単なXSLTプロセッサを作った。HDDの中にはXSLTを使ってXMLを変換する類の仕組みが3つもあるのに、どれも変換するドキュメントとXSLTプロセッサ等のツールをセットにして環境を構築してある。なので手元でちょこちょことXSLTを書いてXMLを変換す…

WSHでファイル選択ダイアログを表示するのに飽きたので、他言語にて。

飽きた。ファイル選択ダイアログを表示する為の標準的な手段が用意されていないのにダイアログを表示しようだなんて高望みするから妙な苦労をするのだ。やはりここは別の言語に活路を見出すべきだろう。 PowerShellの場合 例えばPowerShellなら.NET Framewor…

JVMベースの言語処理系用にシンボリックリンクを張りなおすMakefile

Javaプラットフォームで動作する言語処理系を幾つかUbuntuに入れている。$HOME/langs以下に各処理系のアーカイブを伸張・展開しておき、付属の実行スクリプトへのシンボリックリンクを$HOME/binに作成して使用している。アーカイブを展開した後のディレクト…

ソースファイルをHTML化する(シンタックスハイライト付き)

シンタックスハイライトは偉大だ。断言してもいい。世の中にはシンタックスハイライトの為なら魂を売り渡しても構わないと考えるプログラマがごまんと存在する。彼らにとって、はてなダイアリーを使っている理由=ソースをシンタックスハイライト付きで表示…

Ubuntuで音が出ないWMV(Windows Media Video)を音が出るフォーマットに変換する

問題編 手元のUbuntu 10.04はWMV形式の動画を再生できるようにしてあるのだけど、時々コーデックの関係か音声が再生されないファイルがある。大概は音声コーデックとしてWMA(Windows Media Audio)9が使われていて、ライセンスの関係でUbuntuにはこれ用のコ…

「クリップボードのテキストをGnuPGで復号化」の代替品を作る

問題編 仕事でGnuPGを使用している。Windows上で使うこともあり、今までは古いWinPT*1を使用していた。鍵の管理はWinPT経由で行い、メールの暗号化/復号化にはEnigmailを使用し、ファイルの暗号化/復号化は内製のツールを使用していた。古いWinPTを使って…