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

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

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

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

     

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

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

     

     

    実にもったいない。

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

     

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

     

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

     

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

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

     

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

     

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

     

     

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

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

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

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

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

     

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

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

  • 楽しめる人のほうが少なそうなゲームEmpire of Code

    楽しい。
    clash of clans(クラッシュオブクラン)に代表されるタワーディフェンスゲームにプログラミングの要素が加わったゲームがでた。Empire of Code いつでたのかはわかんない。これを作成したのが、checkio.orgと同じところだというので絶対時間奪われると思っていたのだけど、やり始めてしまった。

     

    empireofcode
    https://empireofcode.com/game/
    checkioはPythonでしか書けなかったけど、empireofcodeはjavascriptも選べるので自分はjs側を選択した。
    結局ゴールデンウイークはこれと、会社のパソコンが身代金Rockyウイルスでロックされてしまってメールにアクセスできないタスケテ!!っていう対応で奪われてしまった・・・。流行ってるみたいだから、みんなバック・アップしておこうね・・・。

     

     

    さて、今みてみたら、checkioで遊んだのはもう2年2ヶ月前、Lv7まで遊んで放置したようだ。画面もずいぶん変わっていたのでバージョンアップしてまだ続いているみたい。一週間か1ヶ月か遊んで後半の問題をみて俺にはこれ以上先はしんどいなーと放置しちゃった気がする。

    checkio

    https://checkio.org/user/kuippa/
    世界だとTopCoder、日本だとAtCoderとかに代表されるような競技プログラミングの世界があるのだが、個人的には詰将棋をやっているみたいで好きじゃない。反覆練習かって感じ。チューニングみたいなことを趣味でやりたくないし、人が考えた課題で先人達が上手くやっているにようなことに取り組むのはいまいち気乗りしないのだ。

    みんなで車輪の再発明して職人芸を競うのには紅茶屋さんなので残念ながら興味もてないのだ。
    クリアがないタワーディフェンス系のゲームは正直ゲームとしてはあまり面白くない。

    使った時間と課金勢バンザイになるからだ。惰性でやめられなくなってる系。

    ただ、このゲームでは課金の変わりに「プログラミング」があって、ユニットの索敵破壊アルゴリズムや、パワーアップが直接編集できたり、コードクイズを解くことで進化させることができる。

    2016-05-07 14_43_27-新しい通知

     

    最初の自分の兵隊ユニットのロジックが突撃&破壊とあまりにもバカすぎるのでロジックを一生懸命弄ってたのだけど、

    • askUnitsで一番最初に登場したユニットは他の仲間ユニットが参照できない
    • doMove、doMovesで移動中にdoAttackをいれちゃうと移動がキャンセルされる
    • 移動が終わるまでまってから攻撃をいれようとするとwhenIdleは一回しかコールされない

     

    など、作りこみに限界と難があって。苦労する。自分は戦闘ユニットのロジック変更から入ってしまったけど、やらなくてよかったかもしれない。ストラテジーは必要最低限いじるだけに留めて、基地のバージョンアップをさせていったほうがいい。
    デベロップメントクイズは、いまのところまだ簡単な問題がおおい。
    さくっと合間時間に解けるので息抜きになる。
    ただPlace Queensだけ、うへーーってなった。
    8×8のチェスボードに縦横自由に動けるクイーン駒を8つ、互いにぶつからないように配置しなさいというクイズ。

    例えば

    placeQueens([“b2”, “c4”, “d6”, “e8”])

    と渡されたら、

    [“a5”, “f3”, “g1”, “h7”]

    を返しなさいって感じ。
    これが、予想外にいろいろな出題パターンが出現して結構悩ましく苦戦した。

     

    codegolf

    codegolfという問題があるのだが、コレが自分には未知の世界すぎてホンゲー!!?ってなる。

    できるだけ少ない文字数でプログラミングをしなさいというジャンルなのだけど、Perl書きでもるまいし、このリソースリッチな時代に可読性下げてまでコードを短くする意味どこまであるのか知らないけど、このジャンルに苦戦している。

     

    例えば、

    For example: The number given is 123405. The result will be 1*2*3*4*5=120.

    という問題があったとして、これを70文字以内に実装できればOKという問題。
    これは、こんな風に書いた。

    function golf(n){r=1;for(v of(n+””).match(/[1-9]/g)){r*=v};return r;}

    解き方は人によって千差万別だろうが、正直自分で書いて気持ち悪い。三項演算子とかすら嫌いなので、こういうのヤダ。正規表現とか嫌い。
    なんだこの変態ジャンルは。

    golf

    Weak Pointは、与えられた2次元配列にたいして縦、横の合計が一番少ない数字を返せって問題。

    普通に書けばこんな感じ

     

    [code lang=”js”]
    "use strict";
    function golf(m) {
    l=m.length;
    p=m[0].length;
    sumr = new Array(l);
    sumc = new Array(p);
    sumr.fill(0);
    sumc.fill(0);
    for (var i=0;i<l;i++) {
    for (var j=0;j<p;j++) {
    sumr[i] += m[i][j];
    sumc[j] += m[i][j];
    }
    }
    // console.log(sumr + "/" + sumc);
    return [sumr.indexOf(Math.min.apply([],sumr)),sumc.indexOf(Math.min.apply([],sumc))];
    }
    [/code]

    ちょっと意識して短く書いたつもりだけどこれで、スペース込みで408文字。303文字

    [code lang=”js”]

    function golf(m){
    l=m.length;
    r=Array(l).fill(0);
    c=r.concat();
    for(i=l;i–;){
    for(j=l;j–;){
    r[i]+=m[i][j];
    c[j]+=m[i][j];

    }

    }
    return [x(r),x(c)]
    }
    function x(r){return r.indexOf(Math.min.apply([],r))}
    [/code]

    変数の宣言を省略したり、concat()をつかってシャローコピーしたり、for文を–でデクリメントしたり、一個だけ関数をつくって外出ししたりして文字を稼ぐ。
    これでスペース込みで265文字。186文字
    ここから要らないスペースを取り除く。

    [code lang=”js”]
    function golf(m){l=m.length;r=Array(l).fill(0);c=r.concat();for(i=l;i–;){for(j=l;j–;){r[i]+=m[i][j];c[j]+=m[i][j];}}return [x(r),x(c)]}
    function x(r){return r.indexOf(Math.min.apply([],r))}
    [/code]

     

    スペース込みで190文字。186文字

    Rank1:Any code length.
    Rank2:Your code should be shorter than 175 characters.
    Rank3:Your code should be shorter than 125 characters.

    ここまでやってRank2もとれない!!

     

    l=m.length;
    r=Array(l).fill(0);

    を1行にまとめて

    r=Array(l=m.length).fill(0);

    これで2文字切り詰めて、

    c=r.concat();

    c=r.slice();

    にして1文字稼ぐ。

    Math.min.apply([],r)

    Math.min.apply(0,r)

    にできるのでこれでも1文字稼いで…

    こんなんしてもまだRank1で、rank3になるにはさらに70文字削らなきゃいけないって気がついて、この路線無理!!ってなった。乾いた雑巾絞りすぎだろ。ちぎれるわ!!
    でも、他のやりかたを考えると、かえって文字数が増える。ふんごーってなってます。
    ループを使わずにeval(m[i].join(‘+’));とかなんだろうけど、2次元配列のピボットのショートカット手段が思い浮かばない。なんか、解けてもバッドノウハウの塊になりそうだよね。

     

    これで躓いて、コードゴルフ問題が今何問も溜まってます。
    このブログの文章よろしく、短く書くってことに思考を割いてこなかったのでちょっと苦労してます。

    で、こんなゲームだれが楽しめるんじゃろ。ま、楽しいんだけど。

     

     

    (追記)

    [code lang=”js”]
    function golf(m){
    r=[];
    p=[];
    m.forEach(function(v) {
    p.push(eval(v.join(‘+’)));
    v.forEach(function(e, i) {
    isNaN(r[i])?r.push(e):r[i]+=e;
    });
    });
    return[x(p),x(r)]
    }
    function x(r){return r.indexOf(Math.min.apply(0,r))}
    [/code]

    function golf(m){r=[];p=[];m.forEach(function(v){p.push(eval(v.join(‘+’)));v.forEach(function(e, i){isNaN(r[i])?r.push(e):r[i]+=e;});});return[x(p),x(r)]}
    function x(r){return r.indexOf(Math.min.apply(0,r))}

    スペース込みで206文字。202文字

    長くなっちゃった・・・。

    なんか!j?b=a:1;とか無茶な書き方をいっぱいしてチェックしてたらチェックサーバーが落ちちゃって、昨日から帰ってこない。。。

     

  • iコンピテンシ・ディクショナリと無意識的無能

    情報処理試験やらでお馴染みのIPAさん「いまオシ」のiコンピテンシ・ディクショナリ(以下、iDC)のセミナー聞いてきました。オレが聞いてどうするという感じなのだけれど、聞いたというか、主催側なので・・・。

     

    規模的に60人以上技術者を抱えている受託や派遣型のソフトハウスぐらいからは効果を発揮するんじゃないかなと感じました。業務上ISOとかPマークとかを取得しないといけないような会社にはいいとおもう。iDCはITスキル標準(ITSS)みたいな何かです。2014/7に試用版を公開して、2015/6に2015版を公開、ちょうど今頃に前年の取り組みや実績があがってきた感じです。

     

    プレス発表 企業の目的に応じた人材育成に利用できる「i コンピテンシ ディクショナリ2015」を公開
    https://www.ipa.go.jp/about/press/20150630.html

    ここらへんは情報システムユーザースキル標準(UISS)、組込み技術者スキル標準(ETSS)などわちゃわちゃしているんですが、ここらへんがまとまってきた感じなんでしょうか?流行りもの感はぬぐえませんが、それだけ要望が強い分野でもあります。
    iDCは主にタスクディクショナリとスキルディクショナリから構成されていて、業務遂行にあたりスキルセットを確認するためのチェックツール(というよりリスト)になっています。なんかIT系のヘッドハンターとかがヒアリングしながら値踏みしていくときのチェックしていくシートっぽいよね。

     

    これをつかって抱える人材の弱点や強みの確認や、人材育成や教育にやくだてていきましょう。ということです。
    印象としてはPMBOK(ピンボック/プロジェクトマネジメント標準知識体系ガイド)ぽいなーと。設計のときに相互互換は考慮したというようなことは言っていました。

     
    ただ、なんかこういう評価項目がupWorks(oDesk/海外のクラウドソーシングのサービス)とかにあったら、外国の人、特にインド人とかは全部に◎をつけてゴリゴリっとアピール返してくるよね、と。そういうときどうしたらいいんだろうね?

    学習には段階があって、よくいわれているのは、

    1.無意識的無能:できないことがわかってない状態
    2.意識的無能:できないことがわかっている状態
    3.意識的有能:意識すればできる状態
    4.無意識的有能:意識するまでもなくできる状態

    とかになっているって言うじゃないですか。(たしか本当は5段階)
    こういう自己申告によるチェックリストの場合、

    「できないことすらわかっていない人物」と「できることを意識する必要もない人物」が、同じ自己評価になる可能性があるんですよね。

    例えば、
    Q「(戦略) 市場機会の評価と選定 > ビジネス環境分析手法 > ニーズ&ウォンツの把握」

    無意識的無能くん「◎だろ、余裕ダシ!フンイキでびしばし伝わっし!いつもやってっし!!」
    無意識的有能さん「☓かな。難しいんだよね。こないだも顧客の要望汲み取りきれなかったし…」
    なんて具合いに、予想される成果から判断すると評価が逆転する可能性すらある。
    そもそもできる子のほうが状況把握が正確なので評価が厳し目になる。
    「できる子」は条件が出揃わない状況で安易にできるとか言えないもんですし。

     

    それに、「できる」と言っても、アウトプットが金になるレベルとゴミにしかならないレベルは実際には混在する。そんで、業界や所属会社によってはゴミでも金にできたりするのが、またなんとも・・・難しいところ。
    プログラミングも成果物と実績でしか評価できないという点では、小説家や作曲家とたいしてかわらないのだけれども、「漢字が書ける」「バイエルンが弾ける」を持ってして、同じスキルやタスクを処理できるものとしてあつかっていいものか?
    正確にその部分だけを反復して市場で競争するわけではないから、外形評価も自己評価もとても難しい。
    それに同じ作者だって名作と駄作は混在する。
    定量的な何かがないと、スキルセットとしてはインディケーター(ものさし)の問題がつきまとう。
    人間も負荷をかけてベンチマークをとることぐらいはできるけれども、やはり表層的にならざるを得ない。

    「握力20Kgなのに大車輪ができるのはおかしい」とか、コンピテンシーディクショナリがビッグデータになるほどデータを貯めてスキルやタスクの相関が見えるようになっていけば、無意識的無能と無意識的有能の区別がつくようになるかな?

     

    でもコワーキングとかコライティングとかの協創の未来を予想すると、寄与度がどうこうだとか、いばらの道になるかもしれないし、どうなんだろーねー。

    人から評価されたり評価したりする世界から遠のいちゃってるので、鈍って答えが出ません。

     

    どうおもいます?