macOS SierraでKarabinerが効かなくなったのでhammerspoon


技術ブログを無くしたのでちょっと場違い感すごいけどここに書くね。

USBでwindowsのキーボードを使っているのだけど、mac OSをSierraにあげたらKey Configの設定で使っていたKarabinerが効かなくなってしまったんだよ。

どうしたらいいのかとプログラマーズカフェで訪ねたらhammerspoonつかえばいいよと教えてもらったので、ちょっとluaを書いてみることにしたんだよ。

luaなんてラグナロクオンラインでホムンクルスのAIを書いて以来。さっぱり覚えてなくてどったんばったん大騒ぎ。

ググればそのものが出てくるかとおもったらみんな[esc]に割り当ててたりキーボードのイベントハンドラーをつかってたりして、ハンドリングしたあとのいべんとキャンセルの仕方がわからなかったしてちょっと目的と違って。こまったねー。

 

hs.hotkey.bindを使って書き直してみたので貼っておくね。homeキーとendキーのも挙動が嫌いなので書いておいたよ。

hs.hotkey.bind({}, vk_home, keyStroke({"cmd"}, vk_Left), {}, {})

みたいな書き方ができなくてちょっとまあ動けばいいか的になってるけどご愛嬌ね。

hammerspoonは

www.hammerspoon.org/

ここからダウンロードできるよ。

Preferencesをひらいてloginしたときに起動するようにしたら、config開いて、下記の内容に編集して、Reloadだよ。これなら内容がよくわからなくてもできるね!すごいね!

一応ESCのキーコードも書いておいたのでバックスラッシュじゃないのがいいっていうフレンズはvk_escにおきかえるといいよ。こういうのを弄るのが得意なフレンズがいたらあとはよろしくおねがいね。

 

local vk_jis_eisuu = 0x66
local vk_jis_kana = 0x68
local vk_backslash = 0x32
local vk_esc = 0x35
local vk_home = 0x73
local vk_end = 0x77
local vk_Right = 0x7c
local vk_Left = 0x7b
local isKanaMode = false

local function keyStroke(modifiers, character)
    hs.eventtap.keyStroke(modifiers, character)
end

HomeKey = function()
    keyStroke({"cmd"}, vk_Left)
end
ShiftHomeKey = function()
    keyStroke({"shift","cmd"}, vk_Left)
end
EndKey = function()
    keyStroke({"cmd"}, vk_Right)
end
ShiftEndKey = function()
    keyStroke({"shift","cmd"}, vk_Right)
end
KanaKey = function()
    if isKanaMode then
        keyStroke({}, vk_jis_eisuu)
        isKanaMode = false
    else
        keyStroke({}, vk_jis_kana)
        isKanaMode = true
    end
end
hs.hotkey.bind({}, vk_backslash, KanaKey, {}, {})
hs.hotkey.bind({}, vk_home, HomeKey, {}, {})
hs.hotkey.bind({"shift"}, vk_home, ShiftHomeKey, {}, {})
hs.hotkey.bind({}, vk_end, EndKey, {}, {})
hs.hotkey.bind({"shift"}, vk_end, ShiftEndKey, {}, {})

2016年プログラミング言語


最近ぐいぐい「D言語はいいぞ」って言われてるんだけど、そのよさをいまいち汲み取れない紅茶屋さんです。
個人的には使う言語なんてなんでもよいぞと思ってる人間です。

 

言語なんてあくまで手段でしかないので、伝えたいもの、表現したいものがあってこそのものだからです。
プログラミング言語は動作環境や利用可能なライブラリの関係で、言語という手段を先に限定して何かをやろうとすると、とてもとても遠回りを強いられることがあるので、目的にあわせて言語を選択するぐらいがよいと思います。
どーょ?

 
2016年の言語ランキング
www.tiobe.com/tiobe_index

2016-07-01 14_47_40-TIOBE Index _ Tiobe - The Software Quality Company

 

Java

最近はAndroid開発周りでもつかわれている。struts以前はどうしても取れないバグ相手に消耗戦が繰り広げられていた言語だが、大規模開発のデファクトになる程度にポピュラーな言語として確立した。もはや職業プログラマー界隈では避けて通れない。なんにもとっかかりがなければjavaから始めればいいんじゃないかな。たぶん、あと5年は確実にメインストリームだと思う。でも、個人的には書き方が煩わしく感じる。

 

C

プログラミング界隈で紀元前とはBefore C言語ということらしい(石はこちらには投げないでください)。
制御系とかで、オンオフをぱちぱち書くなら必須。ハード界隈かな?
Arduinoなんかを見るとJavaで代替される未来もあるんじゃないかなと思わなくもない。大穴でmrubyとかな。

 

 

C++

使われ方としてはJavaと同じ並びかな。windowsに限定できたりする業務系環境なら、圧倒的に開発コストを抑えられる。winAPIをコントロールしやすい。Microsoft Visual StudioがやっぱりIDE(統合開発環境)として優秀で、呼び出してる他のDLLとかと連携するのに便利じゃでのぉ。

 

Python

Webまわりでなんかつくるのに便利。Google App Engineで使えるのが一番かなぁ?
海外のコーディングゲーム( checkio.org/ )とかで遊ぶのにデフォルトにされてるので、ある意味世界標準ではいまはこれがエントリーポイントになってるのかもね。
科学演算系やら数値計算のライブラリ(SciPy、numpyとか)とかも充実してて、Fortranとかの界隈もPythonのほうがいいんじゃないかと思う。ほら、最近話題のディープラーニングとかのオープンソース TensorFlow とかもPythonだしね。
カメラ認識のOpenCVが対応している言語はC/C++、Java、Python。つまりそういう感じ。

 

 

C#

C++の後継だけど、web系にもつかわれてたりと使われ方が定まらない印象。かつてパッケージソフトとかを創るのに使ってたけど、いまパッケージソフトとかなくて、アプリ扱いじゃない?ちょっと没個性さん。コンパイラが無償提供になって可能性はすこし広がった。C#単体でみるより、.NETというくくりでみるべきかもね。windowsユーティリティなんかつくれって言われたらC#採用するかもね。

 

 

PHP

Web系なら必須だから触われるようにはしておけ物。どのレンタルサーバーでも動くというのが一番の利点。
テッキーな連中にバカにされがちだけど、wordpressとかdrupalみたいなポピュラーなCMSがPHPで書かれてことからもわかるとおり不可避言語。htmlをコードできるだけの人でもPHPerになるために言語に触れている人口そのものが多い。技術習熟度がとても大きな正規分布になっているので裾野が広い。
技術習熟度が低い人が居るからといって、人を侮り、下を探して安心するような技術者にはなってほしくない。言語を理由にマウンティングしていく論には汲みしないこと。あいつの言語はたった26文字しかないんだぜと英語話者をバカにするようなもの。バカっていうやつがバカなんですぅ!ばかー

 

 

JavaScript

ちょっとなにがどうなってるのか、わけわからない言語。
最近はnode.jsみたいにサーバー側でも動くようになってきた。
html5でできることを考えるとかなり色々なことができてしまう。ソケット通信から、PCやスマフォのマイク、カメラのハンドリングまで。実行がブラウザベースなので、動作環境の構築や実行について何もかんがえなくてもいいのがいい。もはやブラウザとかを蹴るためのインターフェイス言語といってもいいのかもしれない。
数万件のデータを読み込んでプロットしながらグラフを書いてもストレスなくさくさく動く。一昔前のjsとは隔絶の感。恐ろしい。でも、今と昔が混在しているカオス。書き方がヤダからとかcoffeescriptとかまであってさらにカオス。
でもま、弱点もあって、n*0.1とn/10の結果がずれていったりするなど科学計算に使うにはおすすめはしない。型がゆるいからね。でも、ちょっとなにかするのにすごく便利。

 

Perl

どうだろう?もう枯れてるとおもう。新規でこれからやる必要はあるかな?よくわかんないや。Pythonでいいんじゃね。

 

Visual Basic .NET

これもどうだろうね。C#に統合でいいんじゃないかな?

Ruby

Rubyの事を言うと必然Ruby on Railsの事になるのだけど、環境がすでに手元にあってちょっと結果がみたいものをつくるのには楽な言語。作り捨て専用。レンタルサーバで動かすためには環境構築をできるスキル、建てたサーバーのお守り、また書いた端からアップデートされる言語仕様に付き合ってコードをメンテナンスし続ける予算と覚悟と人員が必要。
初心者にあまり勧めないのは環境構築周りでしんどさがまだあるから。自前macとかに載せるだけなら別だけどね。でも、公開サーバーに載せようとすると、いまだにheroku1択じゃない?
請負とかで生命財産に絡んで稼働責任が問われる分野で採用すべき言語ではないと思ってる。バージョン齟齬で死んじゃうから。

 

Visual Basic

ここであがってるVisual BasicってVB6.0の事かな?だとしたらこれも遺物かな。化石。Visual Basic .NETの前バージョン。windowsアプリを創るのにとても開発コスト低い言語でした。新人研修も楽ちんで量産型プログラマーを投入してもなんとかなる懐の深い言語。PHPのように裾野が広い言語だったのでこれまたバカにされがちだけど、別にC++でDLLつくって表側をVBにしたり結構なんでもできたので、PHPに言えることと同じことが言える。

 

Assembly language

用途次第。触らない人は一生触らない言語なんじゃないかね。メインフレームとか、CPUに直接命令どうこうというような世界にいった人が使うものなのかな?

 

 

Delphi/Object Pascal

Delphi、Delphi、Delphi・・・。ごめんなさい、これについての経験や知識がないです。知らない世界だ。あ、HSP(Hot Soup Processor)とかが全盛だったころHSPとぶつかってたDelphiの後継?あれイルカのマークじゃなかった?はて???ごめん、やっぱ知らない。

 

 

Swift

iPhoneアプリとかを創るときに使う言語。
objective-cは触る気もおきなかったけどSwiftは結構食指が動いている人たちも多い。x-codeを含む環境構築もかなり楽ちん。2.0になって、ちょっと触ってみた感じ結構よさげ。こんど3.0になるそうな。今まさにこれからというフレッシュな言語。ただStoryboardがなんかもやっとする・・・。ただ可能性は感じちゃってます。

 

Objective-C

iPhoneアプリを作るのに今まで必須だったなにか。
死屍累々を積み上げ、先人たちが下草を刈ってくれた。苦行をされてきた先達に感謝の念を。
でも、ごめんなさい、後続はSwift使うわぁー。

 

R

プログラミング言語というよりは大量データ処理のための統計用言語。
計量経済学とか社会科学の人たちには必須かもしれない。
先日、物議をかもした東京財団の財政長期推計モデルがデータと一緒にRで配られていたのでいまさら初めていれてみた。
www.tkfd.or.jp/research/fiscal-estimate/model_b_61
まあ、プログラミングという感じではない。

政府統計局のe-Statとかで得られるデータがcsvだったり、Excelだったりするけれども、将来はこういうデータはRに寄るかもしれないですね。変な加工はしないで、未加工データで配ってくれると色々調べやすいです。ただ、どこがなんのデータか定義がわからない形で配られてもという感じ。

データビジュアライゼーションという点で考えると、最近のエクセルとかの統計関数(分散とか偏差値、近似曲線とか)、財務ファイナンス系の関数は非常に強力で実務ではこちらのほうが用をなすんじゃないかと思います。VBAはこんかいのリストではランクインしてないけれどもExcelまじ強いから併せると侮るなかれです。例えば、偏差値の算出なんかをSQLだけで書こうとすると、回帰とかめんどくせぇなぁという感じだけども、関数一発で、グラフ化までしてくれたりするので、Rとの差別化って?という心持ちもあります。扱うデータ種類量的に、Excel→Access→R→SQLみたいなイメージ。
Excelから吹きこぼれてRじゃないとできなくて、SQLより本格的じゃないという結構限定的なスチュエーションなのかなと思っています。ここらへんで競合するのはjavascriptでd3.jsとかかね。政府統計のRESAS resas.go.jp/ とかをみてばわかると思うけど、Rのみよりはjs+DBのほうが、潰しがきくので、Rの使いドコロが難しい。
やっぱり学術分野だけかなー?

 

MATLAB

MATLAB??ごめん、まったく知らない。うわさもきかないや。数値解析ソフトウェアだって・・・。ソフトウエア!?言語なんだね?CADみたいなもんかね?化学工学とかで流速とかそういうのをやるためだろうか??

 

PL/SQL

データを取り扱うための言語で主要言語ですわ。いままででてきたプログラミング言語と競合するものじゃなくて、データを扱う側で必須なものです。逆に言うとこれに馴染みがないままだと、いくら上に並んでいるような言語でエキスパートだったとしてもプログラムをつかってやれることの範囲が100倍以上違ってくる。
だって、データ構造の設計もできないんだぜ。

PL/SQLという言語に限定すれば、ストアドとかビュー、プロシジャーまで含むんだろうけど、あえてSQLに一般化して申し上げておきます。DBもDB操作系のお作法も多々あれど、どれも同じようなもんだしね。
そういう意味でいうとRuby on Railsのいいところは、この設計をよしなにすっとばして書けるところなんだろうね。NoSQL、MongoDBみたいな道もあるだろうけどRDBMSがわかったうえで行かないとダメなんじゃないかと思いますよ。

 

 

D

私が唯一知っていることは、ツイッター上で「D言語くん」とつぶやくとD言語くんにフォローされるということだけです。

 

 

COBOL

枯れすぎて残存者利益の領域に到達した唯一の言語。最近新卒の子とかが爺様方の引退に伴ってCOBOLをやらされているらしい。ただ、レガシーシステムも多く食いっぱぐれはないので「ライスワーク」と割り切れば別にいいんじゃないかなと思います。つぶしは効かないけど。

感想戦

個人的には最近はjavascriptでhtml5でwebkitが面白いなーと思っています。swiftもそのうち触りたいかもー。ぐらい。
数年前は、Flashとかで使われていた、FlexAirがコンセプトとしても面白い言語だなーといろいろ遊んだんですが、振り返っても、周りを見渡しても誰もいませんでした・・・。使われてたのは郵便局のはがきデザインキットとTweetdeckぐらいかな。ブラウザから印刷系やフォント系がいじれるので帳票まわりをリッチにつくれてなかなか便利だったんですが。今ならhtml5でいいので要らないですが。
プログラミング言語は環境を構築するのがめんどくさいです。
自分みたいに好き勝手、つまみ食いするだけの人間にはなおさら。
はやくcloud9みたいに、なんか、偉い人がよしなに実行環境をつくっておいてくれると嬉しいです。
c9.io/
empire of codeみたいに、わしゃロジックぐらいしか書きたくないんじゃ感。

2020年にプログラミング教育が必修化されるとか言われてるらしいです。
コードを教えるんじゃなくて、考え方を育てようとかいっているらしいですが、自分はプログラミングの専門教育をうけたことがないので、考え方を教えるんじゃとかいわれるともやっとします。だってプログラミングって反復させることをするための道具なので、考え方が同じだったら、誰か一人が書けばいい。考え方、優先順位にばらつきがあるからこそ多種多様なプログラミング言語と使われ方があるわけでしょ。
プログラミングで楽しむような子はいままでの教育課程からすると「吹きこぼれ」に相当して、教育で人材の知識的品質を確保するというクオリティアシュアランス的な教育にはなじまねぇだろうなという危惧もあります。型から飛び出た外れ値の子をフォローする仕組みは教師個別の情熱に依存されるだけで、制度としては設計されてないよね・・・。(スーパーサイエンスハイスクールとかAO入試とかは一応そうなのかな。)
飛び出ちゃった子とかには、環境だけあたえて好きにさせておけばいいじゃないと思うのですが、先日の佐賀B-CAS破って県内の生徒の成績集めちゃったみたいな闇堕ちケースもあるので、ヨーダは必要かもね。でも、学校+教師っていう枠組みじゃ無理だなと思います。上記の主要言語だけみても種類が多すぎて、生徒のやりたいに併せて、フォローできる人材なんていないからです。あるとしたら、門下徒弟道場制度かな。

 
子供向けの教育にはScratch でいいんじゃないでしょうか。Swift Playgrounds も面白そうね。
地元三鷹には中高生rubyコンテストがあって、rubyに縛ってやっていて子どもと侮るなかれという感じですが、プログラミングの言語を縛りはピアノコンクールとか水彩画展とか、そういうレベルでの表現の縛りなので・・・・・・、まあなんにせよ自由にのびのびやってほしいです。
とりとめなくなったので、ここらへんで終わり。


17歳が不正プログラムをつくったとして逮捕された


佐賀市の無職の少年(17)が有料デジタル放送をB-CASカードなしで見れるプログラムを公開したとして不正競争防止法違反容疑で逮捕された。不正アクセス禁止法案とか著作権上の複製権や公衆送信権の侵害あたりをやらかしたのかと思ってニュースを読んだら、不正競争防止法違反らしい。

 
テレビまわりほとんど興味がないのでB-CASカードとかがよくわからないのだけど、B-CASカードそのものが電波法が定める「公平で効率的な電波帯域の利用」という公益性に反してんじゃねぇかな。不正競争防止法違反というか、独占禁止法こそ仕事しろ案件。

 

イノベーションには2つの方向がある。
「なぜなぜ」を突き詰めて深掘りしていく下位概念。
「そもそも」をたどる上位概念。

 
<テレビを見るのに「B-CASカード」が必要なのは不便だ> という課題を、17歳の子は上位概念で辿って、そもそもなぜ「B-CASカード」が必要なのだろうか?から解決した。解決してしまった。破壊的イノベーションを実行したわけだ。破壊的イノベーションは破壊される側にいる人たち(だいたいが既に利権者側なので、地位と権力がある)はそれを嫌がる。

 

 

実にもったいない。

 
この才能をこちらにしかのばせなかった環境も、彼自身も、それを逮捕という形でしか終わらせられなかった公権力側も。そして、恐らく逮捕されて有罪になった後は、粗暴犯やらと同じ更生プログラムに入って再教育がされるのだろうが、これも実にもったいない未来である。

 

つくりあげたものは褒められたものではなかったかもしれないが、彼は技術的課題をハックして、しかもそれを公衆に提供した利他的な振る舞いができる子なわけだ。それが単純な承認欲求からくるものだとしても、彼は問題解決にまで至っている。ここにまで到れる人というのはやはり希少だ。その才をこんな無駄な課題(人間が人間のためにつくったただの障害)に費やされたことも、いろいろもったいない。

 

もっと情熱を向けられる別の課題はなかったものなのか。更生プログラムを選べるなら、彼には多くのなんらかの課題を抱えてる人たちに触れさせるボランティア罰がよいように思う。(日本にそのような制度はないが・・・。)そのほうが未来のためになる。

 

 捜査関係者は「ネット上で入手できる不正プログラムは、売買される不正カードに比べて拡散の可能性が高く、無料視聴が横行する恐れがある」と警戒している。

電波利権は利権の中でも強烈に強い利権なので、禁忌に触れちゃった感じか。
このコメントから察するに、サーバー問い合わせのないただのデジットである可能性が高い。高校生程度の子が公開されている仕様から辿れるレベルの。無駄で、無意味な障壁でしかないように思う。ハリボテを暴いてしまった子供を掴まえて「不正競争防止法違反だ!」と喚くのは実に大人気ない。「よく捕まえた!」とその仕事ぶり評価する人は現代では確実に居るだろうが、その評価が30年後まで不変であるとは思ってはいけない。

 

スティーブ・ジョブズは電話をタダで掛けられるハックツールでビジネスをスタートした。ビル・ゲイツやその他多くの名だたる経営者だって相当やらかしている。それを見出して導く環境があればこその今だ。

 

もったいな、とただ嘆息するのみである。

 

 

<不正プログラム>TV無料視聴をネット公開、少年逮捕
毎日新聞 6月8日(水)11時40分配信
headlines.yahoo.co.jp/hl?a=20160608-00000036-mai-soci

佐賀市の無職の少年(17)を不正競争防止法違反容疑で逮捕

「B-CASカード」がなくても有料デジタル放送が無料で視聴できるプログラムを独自に開発し、自身のホームページ上に無料で公開して不特定多数の人が閲覧、入手できる状態にした

「ワークキー」と呼ばれる暗号をパソコンに入力することで放送を視聴できるようになる

逮捕前の任意の調べには「カードが邪魔だった。無料視聴したかった」と容疑を認めていたという。

 

B-CAS使わず有料テレビ計70chを無料視聴 ネットで「不正プログラム」公開 17歳無職少年逮捕 警視庁
www.sankei.com/affairs/news/160608/afr1606080009-n1.html
不正視聴プログラムを公開=全国初、容疑で少年逮捕-警視庁など
www.jiji.com/jc/article?k=2016060800233&g=soc

カード使わず、新たな手口 無料視聴プログラム公開容疑
www.asahi.com/articles/ASJ68319LJ68UTIL004.html