「シンタックス・ハイライト機能で対応してほしい言語」と聞いて真っ先に PowerShell が浮かんだ
PowerShell は言わずと知れた Microsoft 謹製のシェルスクリプティング言語ですが、残念なことにシンタックス・ハイライト機能に対応していません。 自分の周りでは Windows の CLI, シェルスクリプティングといえばいまだにバッチファイルや WSH といったイメージがありますが、PowerShell とて Windows 7 (2009年登場。もう7年前) 以降は標準搭載ですし、はてなさんもそろそろ対応くるんじゃないかなーと期待しています。
PowerShell 未対応の現状
PowerShell 書くときは GitHub に書いてリンクしたり http://alexgorbatchev.com/SyntaxHighlighter/ 使う人が多いみたいですね。
とても同感なエントリ
Java で文字列を16進ダンプする方法
ときどき使うけど覚えていられないメモ。
だいたいはコレで OK
String str = "ジャバ"; // EUC-JP for (byte aByte : str.getBytes("EUC-JP")) { System.out.printf("%2X", aByte); } // A5B8A5E3A5D0
String str = "ジャバ"; // Shift_JIS for (byte aByte : str.getBytes("Shift_JIS")) { System.out.printf("%2X", aByte); } // 83578383836F
こういうのも
String str = "ジャバ"; for (int i = 0; i < str.length(); i++) { String hex = Integer.toHexString(str.charAt(i)); System.out.print(hex.toUpperCase()); } // 30B830E330D0
なぜか周囲は ASCII どころか JIS X 0208 まるごと覚えているような人が珍しくない。
*1:UTF-16BE
Rhino で JavaScript の予約語と同じ名前をもつメソッドを呼び出す方法
Rhino の jrunscript で File#delete() が動かなかった時のメモ *1
起きたこと
File#delete() メソッドを呼ぶとエラーになる。delete は JavaScript の予約語だからダメってことらしい → https://bugzilla.mozilla.org/show_bug.cgi?id=229895
> jrunscript js> new java.io.File('C:\\Users\\shrimp\\hoge.txt').delete(); script error: sun.org.mozilla.javascript.internal.EvaluatorException: missing name after . operator (<STDIN>#1) in <STDIN> at line number 1
JavaScript の予約語ということで typeof を試したけどダメ。他の予約語もダメ。
package hoge; public class JSRW { public void hoge() { System.out.println("hoge"); } public void typeof() { System.out.println("typeof"); } }
$ jrunscript -q Language ECMAScript 1.6 implemention "Mozilla Rhino" 1.6 release 2 $ jrunscript -cp . js> var jsrw = new Packages.hoge.JSRW(); js> jsrw.hoge(); hoge js> jsrw.typeof(); script error: sun.org.mozilla.javascript.internal.EvaluatorException: missing name after . operator (<STDIN>#1) in <STDIN> at line number 1
解決策
ブラケット表記なら OK.
> jrunscript
js> new java.io.File('C:\\Users\\shrimp\\hoge.txt')['delete']();
true
少し気になったこと
https://bugzilla.mozilla.org/show_bug.cgi?id=229895 では「1.5R5 で直るよー」みたいに書かれてるけど、1.6 でも直ってない?
> C:\Program Files\Java\jdk1.6.0_45\bin\jrunscript.exe -q Language ECMAScript 1.6 implemention "Mozilla Rhino" 1.6 release 2
Nashorn はちゃんと動く
> C:\Program Files\Java\jdk1.8.0_77\bin\jrunscript.exe -q Language ECMAScript ECMA - 262 Edition 5.1 implementation "Oracle Nashorn" 1.8.0_77 > C:\Program Files\Java\jdk1.8.0_77\bin\jrunscript.exe nashorn> new java.io.File('C:\\Users\\shrimp\\hoge.txt').delete(); true
*1:Ant で allbutlast リソースコレクションを使いたかったのだけどバージョンが古くてが使えず、taskdef タスクで JavaScript 書いたのが元ネタ
Windows で空のドットファイルを作る方法。
隣の人が Windows でドットファイルを作ろうとしてはまったときのメモ。
エクスプローラではドットファイルを作れない
エクスプローラのメニューで [新規作成] -> [テキストドキュメント] を選んで .dotfile のようなファイル名にすると「ファイル名を入力して下さい」というメッセージが表示されて作成できない。既存ファイル名の変更も先頭をドット (.) にすると同じメッセージが表示される。すごく不便。
CLI を使う
PowerShell を使う
個人的にはこれが手に馴染んでる。
PS C:\Users\shrimp>New-Item -Type File .dotfile ディレクトリ: C:\Users\shrimp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2016/03/25 12:06 0 .dotfile
cmd.exe を使う
>type nul > .dotfile >dir .dotfile C:\Users\shrimp のディレクトリ 2016/03/25 12:07 0 .dotfile
echo でもいいけど空ファイルにならない。
>echo.> .dotfile >dir .dotfile C:\Users\shrimp のディレクトリ 2016/03/25 12:07 2 .dotfile 1 個のファイル 2 バイト
HogeれるところでひたすらHogeってみた + 1
HogeれるところでひたすらHogeってみた #hogedriven - 日々常々
「Hoge といえばこんなんあるよー」と Twitter で教えてもらったので Hoge 的なものをもう1つ書いてみる *1
public class Hoge { public static void main(String[] args) { ((Hoge)(null)).hoge(); } public static void hoge() { System.out.println("hoge"); } }
コンパイルは通るし実行時エラーも発生しない。ちゃんと "hoge" と出力される。
一瞬「?」と思うけど文法的にはまったくおかしいところもないし動くのも理解できる。まあ、こんな変な書き方する人いないだろうけど。
*1:何年遅れかってツッコミは事実すぎて何も言えない
GVim のフォント設定のオプションの並びを忘れたときのメモ
GVim は vimrc で guifont を使ってデフォルトフォントを設定できる。Windows 版ではボールドやイタリックなどのオプションを指定できるが、めったに設定しないので忘れがちだ。この並びを思い出すのが面倒だったときのメモ。
フォント選択ダイアログでフォントを選択
メニューから [編集] -> [フォント設定] を選択するとフォント選択ダイアログが表示される *1 ので、使いたいフォントやスタイルを選択する。ここではフォントサイズ10の太字「IPAゴシック」を選択した。
フォント設定の確認
コマンドラインモードで設定を確認できるので、vimrc なり gvimrc なりで :set guifont すればいい。
:set guifont? guifont=IPAゴシック:h10:b:cDEFAULT
結論
こんな面倒なことをしなくてもヘルプを見れば全部書いてある。
Win32のGUIについて *E244* *E245* - フォント名には以下のオプションを指定できる。 hXX - 文字高が XX (単位はポイント。浮動小数点数でもよい) wXX - 文字幅が XX (単位はポイント。浮動小数点数でもよい) b - ボールド (太字体) i - イタリック (斜字体) u - 下線付き s - 打ち消し (文字を横切る線付き) cXX - 文字セットが XX。使用可能なものは以下の通り: ANSI, ARABIC, BALTIC, CHINESEBIG5, DEFAULT, EASTEUROPE, GB2312, GREEK, HANGEUL, HEBREW, JOHAB, MAC, OEM, RUSSIAN, SHIFTJIS, SYMBOL, THAI, TURKISH, VIETNAMESE ANSI, BALTIC 通常は "cDEFAULT" を使うとよいだろう。 オプションの区切りには ':' を使うこと。
PowerShell のカレントディレクトリは他プロセスから削除できる。
コマンドプロンプト (cmd.exe) のカレントディレクトリを他のプロセスから削除しようとすると「項目 <パス> を削除できません: 別のプロセスで使用されているため、プロセスはファイル '<パス>' にアクセスできません」というメッセージが表示されて削除できない。セーフティであるとも考えられるが、他のセッションでコマンドプロンプトを開きっぱなしにするようなお行儀の悪いユーザーがいる場合などは不便に感じる。
PowerShell を使えばすべて解決する。
cmd.exe のカレントディレクトリ
cmd.exe のカレントディレクトリを削除しようとすると切なさあふれるメッセージが表示される。
:: cmd.exe
C:\Users\shrimp\hoge>
# powershell.exe PS C:\Users\shrimp>rmdir hoge rmdir : 項目 C:\Users\shrimp\hoge を削除できません: 別のプロセスで使用されているため、プロセスはファイル 'C:\Use rs\shrimp\hoge' にアクセスできません。 発生場所 行:1 文字:1 + rmdir hoge + ~~~~~~~~~~ + CategoryInfo : WriteError: (C:\Users\shrimp\hoge:DirectoryInfo) [Remove-Item], IOException + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
powershell.exe のカレントディレクトリ
powershell.exe のカレントディレクトリは無言のうちに削除できる。
# powershell.exe
PS C:\Users\shrimp\hoge>
:: cmd.exe C:\Users\shrimp>dir hoge /b C:\Users\shrimp>rmdir hoge C:\Users\shrimp>dir hoge /b ファイルが見つかりません
PowerShell プロンプトも特におかしな動作はない。
# powershell.exe # カレントディレクトリは変わらず PS C:\Users\shrimp\hoge>pwd Path ---- C:\Users\shrimp\hoge # カレントディレクトリにアクセスするとエラー PS C:\Users\shrimp\hoge>ls ls : パス 'C:\Users\shrimp\hoge' が存在しないため検出できません。 発生場所 行:1 文字:1 + ls + ~~ + CategoryInfo : ObjectNotFound: (C:\Users\shrimp\hoge:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
結論
コマンドプロンプトを開きっぱなしにするようなお行儀の悪いユーザーが PowerShell を使ってくれればいいが、そういうユーザーは大概 PowerShell を使いたがらないので何の解決にもならない。