カテゴリー: プログラミング

  • 2017Resasハッカソン@電通大

    一年に一回ぐらいはハッカソンに参加しようとおもってはいます。できるかは別。
    Resasっていう政府統計のビジュアライゼーションをするサイトがあるのだけど、これに絡んだハッカソンに参加してきました。調布の電気通信大学での開催です。

     

    【内閣府主催】RESASハッカソン2017 in 東京 ~IoTで創る東京のミライ~
    RESASやIoT等による地域ビッグデータを利用して東京の「ミライ」のためのサービスを作ろう!
    https://connpass.com/event/67436/
    https://resas.go.jp/

     

    去年もこれに参加していて、地域の価値を大都市との物理距離と経済距離をぶつけて散布を書くみたいなめっちゃ統計に偏ったハックだったのだけれども、「去年は何したの」と聞かれて調べるまで、欠片も覚えてなかった。日記がわりのブログメモ大事。
    http://kuippa.com/blog/%E5%9C%B0%E6%96%B9%E5%89%B5%E7%94%9F%E3%81%A8resas-%E3%83%8F%E3%83%83%E3%82%AB%E3%82%BD%E3%83%B3/

     

    なので、今年もなにをやったかは書いておこう。

    今年は概念をハックとかふわっとしている感じで、言語化むずす、頭の中の整理必要かも。

     

    経緯

    チームビルド集まった面子四人で楽しくやろうやとなり、選択肢が複数でたときは、どうなるか想像できない難しいのをやろうというむちゃ指針が決まる。

     

    自由になりたいそうな。

    じゃぁ何に縛られてるのかとかいう話しになり、リストに「重力」などと書くものあり。重力からも自由になるという発想を得たことで、当たり前になりすぎたものはそれに束縛されているとも認識できないほど、縛られるものなのだね。では、常識やステレオタイプをぶっ壊すには何が必要だろうか?何を壊せばよいのだろうか?

     

    単位をぶっ壊そう。

    あたらしいモノサシを得ようという話しになった。度量衡を制覇しよう。

     

    昼飯を食いにエレベーターで移動するときに、エレベータの移動に必要なのは滑車を回すハムスター何匹分なんだろうねなどという談笑。すべての単位をハムスターで換算するかなど。どんな単位をぶっ壊せばいいかについて議論。システム開発のとき人の仕事を人月で表し、価格で評価するけれども、あいつの人月とこいつの人月はアウトプットがちがうのに同一尺度で評価している。だったらいっそハムスター何匹分とかで表しても一緒なでのはないか。

     

     

    まだ定量化されていないクリエイティブの単位をつくろう。

    クリエイティブの最小単位は何で計れるかについて考える。幼稚園児の紙粘土など。表現が固定されたもの。誰かしらの表現をみたものが、それらを見た人に与える影響などで計れるのではないか。心拍数や表情の変化、動歩行の変化など。

     

    あーじゃないこーじゃないというブレストを経て、実現可能なレベルにおとしこみ。

    タイトルは「重力からのクリ」もう、タイトルからしてようわからん。

    クリが10クリあつまれば、徳利で日本酒に変換できるなど。まあ、おふざけがほどよいハック。

     

    つくったもの

    クリエイティブだなと評価したときに「クリ」というポイントを譲渡できる仕組み。

    「クリ」が誰から誰にわたってきたかという記録がのこっているブロックチェーン(ボトルメール)のイメージ。

     

    「クリ」を得る仕組みは2系統あり、環境からえるものと誰かから譲渡されるもの。

    環境から得る仕組みは、ギャラリーやライブ会場にカメラを設置して、入場者が入ったときと出てったときで閲覧者の感情が変化していれば、表現者にクリを発行。これは、web camで表情認識(C#、Azure、コグニティブ、人感センサー、カメラ)で拾うことで実装された。(サーバー連携まではいけなかった)

     

    譲渡系は、自分のスマホにはいっている特定の「クリ」のQRコードを相手のスマホが覗くとその「クリ」が移動する仕組み。(iPhoneネイティブアプリ[言語なんだったんだろ?]、サーバー側:Cloud9、ruby sinatra)

     

    クリにはひとつひとつにユニークなIDが振られていて、ユーザにもIDが振られいてるので、それらの「クリ」が誰から誰に付与されて、どういう変遷を辿ったのか、どのユーザー間でやり取りが盛んなのか、どこで相互評価しあうクラスタができているのかなどをForce-directed graph(d3js)のちょい弄ったもので描画。また、クリの譲渡時にスマホから緯度経度をもっているので、移動状況を地図(google map)に表示。最後の表示系の担当。

     

    URL等でみせられるものはありません・・・。今回はスクショものこしてないやw

    コードも汚いやっつけで書いたので多分もう開いても追う気はおきないな。

     

    どんな風につかわれることを想定したのか

    Resasのような統計情報を利用したハックというよりは、これから定量化する情報を集めるための仕組み。
    例えば、街の通りなどにカメラを設置して、この通りはクリの集まりが低いね。高いねなどと、記録されていくことで、その他の統計値となんらかの相関が見えるようになるかもしれない。起業率や、過疎率などに生きてくるのではないか。

     

    また、だれがだれを評価したのかのような流れも追えるので、ハブとなるクリエイターがどこにいて、地域をどのように流入しているのか、もしくは転出しているのかもわかり、ここに効いてくる超精密ターゲッティング施策もできる。

    単に芸術的なクリエイティビティを推し量るだけじゃなくて、旅館のホスピタリティを評価することでその循環を追ったりできるようにんり、定量化が困難だったものが見えるようになるんじゃないかな。とか、まあ、審査員からは概念だねと言われた感じ。

     

    そのほか

    この、クリ値については、いろいろ思うところもあるし、審査員さんにはICOとかのことも教えてもらったし、これまでに考えてきた部分もあるので、ちゃんと考えてみたいね。

     

    このハッカソンの裏でエイベックスのハッカソンをやっていたらしく、なんか世間のハッカソン好きはそっちに流れて盛り上がってたみたいで羨ましい感じです。どこかのハッカソンイベントから2日目流れてきたひとが、こっちは地味だねとつぶやいていました。

    avex-xRハッカソン(VR/AR/MR)
    https://entertech.connpass.com/event/69545/

     

    電通大な感じの質実な感じのハッカソン。

    いくまえは内閣府と内閣官房の区別がついていなかったのだけれども、少しだけ賢くなりました。

    でもいまだにどっちがどっちだかはわからない。

  • 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は

    http://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年の言語ランキング
    http://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で使えるのが一番かなぁ?
    海外のコーディングゲーム( https://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で配られていたのでいまさら初めていれてみた。
    http://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 https://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みたいに、なんか、偉い人がよしなに実行環境をつくっておいてくれると嬉しいです。
    https://c9.io/
    empire of codeみたいに、わしゃロジックぐらいしか書きたくないんじゃ感。

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

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