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

abbreviate – 英単語の省略形を機械的に決めてくれるツール

dnnrly/abbreviate は、英単語を決まった規則で省略してくれるという、単機能のツールです。

Goで書かれていて、フルに書いた複数の英単語の並びを、内蔵の辞書で決まっている短縮形に置き換えます。

指定によってキャメルケース、パスカルケース、スネークケースなどにもしてくれます。

辞書ファイルに定義されていない単語は出ないため、実用にするにはもっと辞書の拡張が必要かなとも思います。

僕は基本的には省略形の利用に反対なのですが、プログラミング言語や環境によっては、命名に文字数の上限があるものもあるでしょう。abbreviateコマンドの作者は、AWSのリソース名をつける際に上限が問題になることが多くてこのツールを思いついたということです。

省略を多用するプログラマーやそのチームにおいて、元の英単語が必ずこの省略形になる、という保証をツールでするのであれば、ツールを使わないよりはずっと良いのかなとも思いました。

via Hacker News

[動画] よくあるプログラミング・チュートリアル動画

Every programming tutorial は、YouTube上にあまたある、残念なプログラミングチュートリアルを再現したパロディ動画です。

たった28秒の動画で、17秒あたりにすごい進捗がありますが…

喋り方とか構成とか、ちゃんとしたチュートリアル動画を作るのって結構たいへんですよね。

Toodles – ソースコード内コメント中の ToDo を集めてやるべきTodoリストを一覧、更新できるwebツール

Toodles は、ソースコード中に書かれたコメントの ToDo を収集し、次やるべきことを可視化してくれるというオープンソースのwebアプリです。

ツール自身への入力として、Toodles 自体のソースコードを使いましたが、それとは別に適当なソースコードに ToDo コメントを仕込んで、一緒に読ませてみました。


var MAX_HEIGHT = 320;
var SQUARE_SIZE = 150;
var thumbnailBucket = process.env.DESTINATION_BUCKET_NAME;

// TODO (hoge|p=8|#js|#test|#newTag) - アレをナニしないといけない
exports.handler = function(event, context, callback) {
var originalBucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;

ソースコードとして指定したディレクトリ以下で、対応しているプログラミング言語(readme に一覧が載っていますが、主要なプログラミング言語やシェルスクリプト、yamlファイルなどをサポートしています)のファイルをすべて解析して、ToDo リストを更新してくれます。

また、Webアプリ側からもToDo を消したり、優先度やタグなどを更新したりでき、その結果は元のソースコード側にもちゃんと反映されます。

コメント内の ToDo の表記で、担当者、タグ、優先度などとコメントを書くことができ、webアプリ上ではそれらを使って ToDo を絞り込んだり、ソートしたりもできます。

Toodles は Haskell で書かれていて、GitHub でソースコードが公開されています。

# Haskell の環境が無かったので、Docker で動かしましたが、Stack でのアプリのインストールにかなりメモリが必要で、Docker が使えるメモリを2Gb→3Gbにしてやっと動きました。

巨大なプロジェクトの ToDo をこれで管理するのはさすがに難しいかと思いますが、個人レベルのちょっとしたのプロジェクトなんかだと、別管理することでむしろソースコードと issues の対応が取れなくなってしまうこともあるし、ソースコード内で ToDo 管理してしまうというこういうアプローチも、回る場合もあるのかもしれません。

via Hacker News

voicecoder.net – Alexaの音声でカスタマイズできるゲーム

Voice Coder、「音声でコーディングを学ぼう」とあるこのプロジェクトは、Amazon Alexa を使って初歩のプログラミングを学べる、というサービス/スキルです。

Alexa スキルと連動させたブラウザゲームにおいて、横スクロールゲームで背景画像を切り替えたり、自機が地面や障害物、アイテムと衝突した際に起こるイベントを切り替えたり(ライフが減る、音が鳴る、ポイントが増える、など)を、音声で指示することができます。

と、動画のデモでは動いているのですが、実際に自分で使おうとすると、Alexaスキルがうまく動いていないのか、アクセスコードを話してくれず、自分でプログラミングを試すことはできませんでした。

元のゲームのパラメータを音声で変えられる、と言ってしまえばそれだけで、「音声でプログラミング」は言い過ぎかもしれません。ですが、スマートフォンで文字を書いたり、パソコンでキーボードを打ったりすることが身についてない小さな子供でも、このような音声インタフェースなら使うことができます。ゲームもプログラムで動いていて、それを変更することができるんだ、という体験をさせるにはいいのかもしれません。

via Hacker News

コンピューター無しで子供にプログラミング体験させるキット

Space Race Game for Studentは、印刷して使えるプログラミング体験キットです。

地球や月、人工衛星や宇宙人の駒と、「進め」「左折」「n回繰り返す」「もし□なら」といった命令パーツが一枚の紙にカラーでデザインされていて、切り離して使います。

碁盤上のボードに駒を配置し、たとえば「地球から月へ、宇宙船などにぶつからずに行く」みたいな問題を出し、それを命令パーツを組み合わせて実行するゲームとなっています。簡単な問題を出し、審判をしてあげれば、すぐに子供同士で遊べるようになるのではないでしょうか。

子供向けのロボット/プログラミング教育の研究会に子供を連れて行ったことがあり、そこでいろいろなロボットを体験させてもらったのですが、その中にはこのキットの内容とほぼ同じことを実際のロボットで実行するというものもありました。

ロボットの上に命令ブロックを差し込んで並べる形でプログラミングをし、大きなボードの上で動かして障害物を避けられるか確認する、といったものです。

うちの子も楽しく遊んでいて、もし買ってもらえるとなれば間違いなく喜んだことでしょう(教育の研究会なので販売とかはしていなかった)。ただ、このロボットでできるプログラミングの複雑さを考えると、買って家に置いたとしてもそう長いことは遊べないかな、と。おもちゃとしては高価なので、科学館や児童館などに有って、順番にいろんな子供が体験でき、指導できる大人もついていればいいのかなと感じました。

価格の面からいえば、このような紙のキットで、プリンターの印刷代だけでほぼ同じことはできますね。プログラミングというものを体験してもらう最初の最初、子供がそっち方面に興味がありそうかどうかを見るのにいいかなと思いました。

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

書かなければバグも出ない、は真理で、コードの量で生産性を測ることが間違ってることの何よりの証拠ですね。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