関数合成の書きにくさ

ここまでに随分と紙幅をとってしまったが、もともとここから先を書きたかった。先に unique を示したが、重複を取り除く処理とともに、取り除かれる要素を取り出す処理を並べて書きたくなった。ナイーブに書けば、こうなるだろう。 function hoge(array) { c…

配列からの重複削除

JavaScript で、配列から重複した要素をとりのぞく処理は以下のように書ける(検索すると、たくさんヒットする)。 const unique = array => array.filter((value, index, self) => self.indexOf(value) === index); これは次のように使う: > unique([1, 3,…

ファーストクラス(第一級の〜)

関数がファーストクラスのオブジェクトである、などとスカした(かっこいい)言い方がある。言ってしまえば、関数が、関数の戻り値や引数として渡せる程度に特別扱いされている(逆か? 特別扱いされていない?)ということだ。

WinAuth 認証情報を別 PC に移植する

バッドノウハウ。 WinAuth の認証情報を複数 PC で共有したくなることがあるよね?1. エクスプローラーを開く 2. アドレスバーに %APPDATA% を入力して開く 3. WinAuth フォルダーをコピーする ネットワークに置くとか、 USB スティックに入れるとか、お好み…

リファクタリング

レビューしていると、処理がどう流れているからわからんから、ちょっと整理させてね…… ってことがよくある。 @@ -22,22 +22,17 @@ var ResultsUtils = (() => { return active_status.includes(job.status); }; var _parseMonitoringReport = function(resul…

Vue JS でのハマりポイント

template で置き換えられるトップレベルは一要素だけ template に内で参照する props や data は、テキストと属性とで指定方法が違う テキスト部分では {{ value-name }} 属性では v-bind:="value-name"

カプセル化

JavaScript でも Python でも '_' で始まるプロパティやメソッドは、そのファイルスコープ、あるいはオブジェクトのスコープだけで参照してください。これはキーワードで明示的アクセス制限できない言語で紳士協定として導入された名前規則です。尊重してく…

コールバック

「この処理は、こことそこで使いまわせるよね。差分を関数で渡して埋められるよう、コールバックで実装してもらえないか?」と振ったら、「コールバック?」と固まってしまったようなのでフォローした。そのときは、われながら教科書みたいな例を出せたんじ…

ZipFileの生存期間とyield

zip ファイルに格納されたオブジェクトを、その名前とデータのタプルの列に変換して、後で処理できるようにしたい、とおもってですね。イテレーターオブジェクトにしておけば、複数の zip ファイルを itertools.chain でつないで別の処理に回すことができる…

tar.gz から .deb をつくって Ubuntu に Oracle Java をインストール

Oracle Java の Linux 向け公式インストーラーは RPM と tarball との二択。 alian というパッケージ変換ツールを使うと RPM を DEB に変えられるというので Ubuntu で試してみたところ、インストール後のスクリプトで alternatives がないとエラーが(とい…

領域を固定パターンで埋める memfill

ある値で int 配列を埋めたい、構造体配列を初期化したい、なんて要求はざらにあるような気がするのだけれど、標準ライブラリーにはいってないのはなぜなんだぜ? 見たとおり、速度は O(log nmemb)。 void* memfill(void *ptr, const void *data, size_t siz…

AES暗号ユーティリティ

AES 暗号をお手軽に使えるよう InputStream/OutputStream にかぶせて使うアダプター Stream をつくってみた。 暗号化アダプター 暗号化したいデータを格納した InputStream is があるとして、これに 16 バイト(あるいは 24、もしくは 32 バイト)の鍵データ…

ブロック暗号の簡単な解説

以下のキーワードの関係をできるだけ平易に説明します。 ブロック暗号 鍵 IV パディング ストリーム暗号 暗号化モード ブロック暗号 AES や DES と呼ばれる暗号はブロック暗号、特定の長さのデータを「鍵」と呼ばれるデータで暗号化する方式です。 データと…

一般的なInputStreamからChannelを生成する

FileInputStream には #getChannel() があるけれど、一般的な InputStream を Channel にしたいときはこうする。: Channel ch = java.nio.channels.Channels#newChannle(InputStream);

StringをInputStreamに変換する

InputStream を受け取る API に、文字列から生成した InputStream を渡したいことがある。 このために StringBufferInputStream があったのだけれど deprecated であり、 StringReader を使うよう推奨されていて困る、ことがある。 自前で String から Input…

巨大ドメインに参加している PC での /etc/passwd, /etc/group ファイルのつくりかた

先日 Cygwin を何度か入れなおす羽目になって、そのときにコンソールに表示されるこのメッセージ。: Your group is currently "mkpasswd". This indicates that your gid is not in /etc/group and your uid is not in /etc/passwd. The /etc/passwd (and p…

Windows 共有を Linux から利用する

CIFS UTILS を使って Linux 上のディレクトリーにマウントする。 準備 1. CIFS UTILS をインストールする sudo apt-get install cifs-utils2. Windows 共有の認証情報を保存する cat > $HOME/.cifs-cred <

マングルされたシンボルのデマングル

逆アセンブルリストに出てくるマングルされたシンボルの羅列があまりにつからったので、ちょろっと調べてデマングルするためのコードを書いてみた。…だがしかし… #include <cxxabi.h> #include <cstdio> #include <cstdlib> int main(int argn, char **args) { if (argn > 1) { int stat</cstdlib></cstdio></cxxabi.h>…

半開区間の探索

連続した半開区間があるとき、与えられた整数がどの半開区間に属するかを知りたい、なんて応用があって。たとえば [0,30), [30, 50), [50, 80), [80, 100) とのような半開区間列があったとき 13 は [0, 30) に入るし、 50 は [50, 80) に入る。 この探索を J…

剰余をつかわない FizzBuzz

twitter で剰余演算をつかわずに FizzBuzz をどう実装するかというのを見かけて、それだったら…とつくってみたくなった。のでつくってみた。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if…

IBus-Anthy の日本語入力で、キーボードレイアウトを US に変える

Ubuntu 13.10 にアップグレードしたら日本語入力が日本語配列強制になって難儀していた*1。 ちょっと検索して「キーボード配列は変えられない、クソが!」というエントリーを見てしまったので諦めていたのだけれど、変えられました!コントロールパネルから …

隠しリソースを使う

アクションバーに「リフレッシュ」ボタンをつけようとして、次のようなメニューリソースを書いた。 <item android:id="@+id/action_refresh" android:icon="@android:drawable/ic_menu_refresh" android:showAsAction="always" android:title="@string/action_refresh"/> すると "error: Error: Resource is not public. (at 'icon' with value '@android:drawable/ic_menu_re…</item>

ファイルの違いを総当たりで確認

ファイルのリストが手元にあって、これらがぜんぶ同じことを確かめたい、ということがあって。いま。 リストの中の任意のふたつを取って組み合わせをつくるってことか。ううーん… foo f (x:xs) = map (f x) xs ++ foo f xs foo _ _ = [] main = do cs <- get…

不思議な計算ループ

あまりに駄文なので、もう、どうしよう。でも書いちゃったしなー。ということで。なにを計算するプログラムでしょう? というお題があって、そりゃあもう気になるじゃあないですか、あなた。 /* precondition: n >= 0 */ int mystery(int n, int *p) { int q…

配列の分割

Java の配列を、一定の長さでちぎって分割したい …って、そういう応用って結構ありそうな気がするんだけど、ない?ということでざっと書いてみた。オブジェクトの配列ならジェネリクスで全部まるっと書けるんだけれど、組み込み型の int や long、 boolean …

脱獄していない端末から、開発中アプリのデータベースファイルを引っこ抜く

ワンライナーでいけることがわかった。 パッケージ名が your.app.package、データベースファイル名が sql.db として、: adb shell run-as your.app.package cat databases/sql.db\ |sed s/\\r$// > sql.dbまず run-as コマンドでパッケージ内のファイルをコ…

6 / 2 (1 + 2)

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

スタートメニューのプログラム項目に表示される「最近使ったもの」をリセットする

Windows 7 スタートメニューの各プログラムで表示される「最近使ったもの」や、タスクバーの右クリックで開くジャンプリストの「最近使ったもの」。 とても便利に使っているんだけれど、移動した項目が残り続けて消えないだとか、なにやらわからない理由で表…

site パッケージや __future__ パッケージが見つからず python スクリプトが実行できない

先のエントリーと似た感じで、 Cygwin の話。 python スクリプトを実行するために python モジュールを入れたけれど、スクリプトを実行すると次のようなエラーが出て動かない。 'import site' failed; use -v for traceback Traceback (most recent call las…

cygwin に導入したばかりの emacs が何も言わずに終了する

とある事情で Cygwin を入れることになって、エディターも必要だなあと emacs を入れたところ起動しない。 いや、起動するのだけれどエラーの表示もなしに即終了してしまう。結論としてはバージョン 24.2-1 の emacs には libgnutls26 パッケージが必要で、…