「プログラミング」タグアーカイブ

一番セキュアなプログラムは、書かないことだ

書かなければバグも出ない、は真理で、コードの量で生産性を測ることが間違ってることの何よりの証拠ですね。GitHub で公開されて大人気となっている nocodeは、そんな最高の手段を表現したソフトウェアです。

当初公開されたファイルは、以下の3つ

  • README.md
  • LICENSE (Apacheライセンス)
  • CONTRIBUTING.md (コードを含まない限り、あらゆる変更を歓迎)

ソースコードはありませんね。

その後、README にあった使い方

echo "" > /dev/null

は「Windows対応」で削除されたようです。また、Docker 対応で

"FROM scratch"

だけの Dockerfile が追加されましたが、「Docker の脆弱性の可能性を考えるとこれは追加すべきではない」という意見も出ています。

Issues がすごい

Issues に、現時点で300を超える要望が上がっています。プロジェクトへの期待の多さを感じますね。

一番人気はこれ。タイトルは「」。コメントも「」が多いです。議論が空白なことがセキュリティにつながるかわかりませんが。

他にも、「#2 PCの電源を入れないといけない (Kindle や ニンテンドーSwitch など既に多彩なプラットフォームに対応しているのでは)」「#137 MITライセンスにするべきでは? (から各種ライセンスの提案)」「#179 nocode はテストするのが非常に困難では」「#195 何もしてないのに動きません! (他にも、Ubuntuで動かない、Commodore64で動かない、IEで動かないなどのissuesも)」「#8 .gitignore でコードが混入しないようにすべき (指定は **/**)」「#80 ドキュメントが必要では? それも多言語で (トルコ語「」とブルガリア語「」が既に提案されています。日本語で書くなら「」といったあたりでしょうか)」といった多くの Issues が上がってきており、活発な議論が繰り広げられています。

via Hacker News

プログラミング言語TrumpScript

TrumpScript は、高名なドナルド・トランプ氏を基にした新たなプログラミング言語です。現在のプログラミング言語の中に、トランプ氏の豪華な金髪バーコードヘアにも気に入られるような言語が無いことから制作されました。

https://www.flickr.com/photos/80038275@N00/17008571157/

特徴

  • 浮動小数点数無しで整数のみ。アメリカに中途半端はありません
  • 数は100万以上に限ります。それ以下の数字は取るに足らないからです
  • import はできません。すべてのコードはアメリカで作った国産でなければなりません
  • True/False(真/偽)ではなくfact/lie(事実/嘘)を使います
  • 良く知られた、トランプ氏の好きな(2000個ちょっとの)英単語のみ。立候補者の名前は変数として使えます
  • ほとんどのエラーメッセージはトランプ語録から採用されました
  • プログラムは「アメリカは偉大だ(“America is great.”)」で終了しなければなりません
  • TrumpScriptはそのままではWindowsで動きません。なぜならトランプ氏はPCを信じるような男ではないからです(註: PC=パソコン、と、PC=政治的正しさ、をかけてます)
  • 大文字小文字は完全に無視します

文法

文法の方はというと、演算や条件文についてはおおむね普通のものが用意されていて、TSの記法を覚えればすぐ書けるでしょう。

  • is や are は代入。?で終われば比較になります
  • make America great で、America に great を代入できます
  • tell や say で出力できます
  • as long as でループします
  • 不要な単語は全部無視されるので、うまく使えばかなり自然な演説文と両立させられます

トランプ氏が失敗について語りたがらないのと同様に、プログラムは多くの場合静かに失敗します。デバッグをゲーム的に楽しんでください。

実行

テストファイルがいくつかあるので、まずはこれを試してみるのがいいかもしれません。

ヒラリー・クリントン氏とのディベートを再現したスクリプトを動かすと、こうなりました。

trumpscript-hilary

元ネタがわかりません。まだ直接対決はないと思うので、コメントか何かで応酬した時のものでしょうか。

テストスクリプトには手元ではエラーになるものも多いです。

また、エラーになるのが正しいものも。not_english.txt では、スペイン語で書かれたスクリプトに対して、

trumpscript-not-english

「ここは英語で喋る国だ(“This is a country where we speak English”)」という例外が発生してます。

他にも、「トランプはそんなことは聞きたくない(“Trump doesn’t want to hear it”)」など、少ないエラーの中にもトランプ氏のきらりと光る名言があるようです。

作者

ライス大学のハッカソンでコンピューター専攻の二人の学生サム・シャドウェルさん(Sam Shadwell)とクリス・ブラウンさん(Chris Brown)らによって作られたこの新言語、初日夜の酔っぱらってのブレインストームと翌日の20時間のプログラミングで完成したそうです。

ハッカソンの優勝は逃したということですが、GitHubで公開されたコードに対して多数のバグ報告や修正提案が送られていて、日々改良されているようです。

この言語によって、「トランプ氏がアメリカを再び偉大にするように、プログラミングを再び偉大にすることを願っている」ということです。

via The Verge

シリコンバレーでは女子中学生のダンスもコードの話になる

codecracker

パロアルトにある女子中高一貫校カスティエーハの8年生(中学2年生相当)がダンスの授業で発表したのは、ナットクラッカー(くるみ割り人形)ならぬコードクラッカー(コード割り人形)。

codecracker-1

クリスマスのプレゼントとしてプログラミングできるくるみ割り人形を貰ったクレア。しかしねずみの王に率いられたネズミたちにパソコンを奪われそうになります。

codebraker-bubble-sort

個人情報を盗んだねずみの王を、クレアがバブルソートを使って撃退しようとするシーン

Re/code のカーラ・スィッシャー氏が言うように「シリコンバレーでしかありそうにない」出し物でしょうね。

via Re/code

Untrusted – JavaScriptをいじって先へ進むRogueライクゲーム

ローグライクゲーム、というジャンルがあります。Rogue(ローグ)を代表とする自動的に生成される迷路・迷宮から脱出するというゲームで、日本で有名なものでも、ネットハック、トルネコの大冒険、チョコボの不思議なダンジョンなど多数あります。

Untrusted は、そのようなローグ風ゲームのバリエーションなのですが、JavaScriptのコードを操作することでパズル的な迷宮を解き、先へ進むというのが最大の特徴です。

untrusted-3

画面左の迷宮で、自分のキャラクター”@”を、階段”□”まで、カーソルキーを使って導かなければいけません。しかし、普通に上下左右に移動しただけでは、出口にたどり着くことはできなくなっています。

そこで、右側のコードに書かれた、迷宮を生成するJavaScriptのコードのうち、書き換えて良いという黒地の部分を変更し、Ctrl+5 で実行するとあら不思議、壁や出口の場所を書き換えてしまうことで、次の階へと進むことができるようになるというわけです。

いかだを使ったり鍵を探したりと、面ごとに違う趣向の障害が配置されています。

その階がどういうトラップなのか、どんな障害が設けられているかというヒントがJavaScriptのコメントとして書かれているので、解く際の参考になるでしょう。

untrusted-2

壁を描画している部分の位置を書き換えるとか、出口の場所を移動するとか、で解ける面もありますが、後の面ではそれらを防ぐようなバリデーション・コードが追加されたりして、同じ手は2度使えないようになっています。

UntrustedのソースコードはオープンソースとしてGitHub上で公開されています。ソースコードを見れば現在のダンジョンが何階あるかはわかってしまうのですが。

# HackerNewsで紹介されたせいで、現在ゲームはちょっと重かったり、正しく動かなかったりすることがあるようです。その場合は、footerにリンクのあるミラーサイトで遊んだり、オープンソースですから自分のところで動かしたりということもできます。

via HackerNews

デバッグの6段階 (Six Stages of Debugging)

  1. ありえません
  2. 私のマシンでは再現しません
  3. それは起こるべきじゃありません
  4. なんで起こるのかな?
  5. あー、なるほど
  6. なんで今まで動いてたんだろう?

あるある。サポート担当者として1や2の返答をしてしまうと、あとでバツの悪い思いをしちゃいますね。

少なくとも2003年には流通していた文章を、発掘した人のブログから

via HackerNews

Codespell – Java言語がそのまま呪文となる教育用3Dゲーム

カリフォルニア大学サン・ディエゴ校の計算機科学者達が開発した Codespell は、一人称視点の3Dゲームなのですが、その一番の特徴は、プレイすることでJavaプログラミングを身につけられるという点です。

Codespellでは、プレイヤーは小動物ノーム(gnome)たちが住む土地にやってきた魔法使いです。ノーム達は過去に魔法を使って生活していたのですが、今は魔法をうまく使えなくなっています。魔法の呪文はJava言語プログラムで、物体を浮遊させるとか火を起こすといった7つの手持ちの呪文を使って、ノーム達を助け、火を消したり川を渡ったりといったクエストを解き、バッヂを獲得するのがゲームの目標です。

ゲームプレイ

3D世界の岩が燃えていますが、

codespell-target

岩オブジェクトというターゲットオブジェクトに対して onFire()メソッドにfalseを渡す、という呪文を呼ぶプログラムを書き、実行することで、

codespell-target-program

燃えていた岩の火が消える、という例がデモ動画で紹介されています。

codespell-target-extinguish

プログラミングの達人を昔からWizard、魔法使い、といいますが、ここでは、プログラムがそのまま魔法であるような仮想空間を作りこんだ、ということですね。

ゲームの教育効果

これを開発した研究者たちが、プログラミング経験がまったく無い10歳から12歳の女子40名にこのゲームを遊ばせたところ、少女たちは一時間もしないうちにJavaの基本的な構造を把握し、自分たちで新しい遊び方をプログラミングしたということです。たとえば、呪文(プログラム)を間違えてターゲットのオブジェクトを空中高く、届かないところに持ち上げてしまったグループは、自身を他のオブジェクトの上からジャンプさせるコードを書いて、ターゲットに次の呪文を掛けることができるようにしたそうです。

入手方法

ゲームはオープンソースで公開され、マック版はバイナリがダウンロードできます。Windows版も近々リリースされるということ。

via UC San Diego Computer Scientists Develop First-person Player Video Game that Teaches How to Program in Java via