「技術」カテゴリーアーカイブ

Anyprint – いろんな言語のprint命令がPythonで使えるライブラリ

ライブラリ anyprint をインポートするだけで、Python で以下のような出力文が書けるようになります。


printf("printf %d\n", 10);

fmt.Println("hello")

cout << "Hello, C++!" << endl;

Print["Hello from Mathematica!"]

console.log("yes");

io.write("lua land")

System.out.printf("java stuff\n");

System.Console.WriteLine("C# looks awkard");

Ada.Text_IO.Put_Line("Ada is cool")

IO.puts("elixir")

現在サポートされている他言語は、go, Java, VB .NET, C(とその類似言語), ActionScript, Ada, Amiga E, ASP, B, D, PureBasic, Clipper, C++, C#, Delphi, JavaScript, Lua, Mathematica, matlab, nim, Pascal, Pike, Elixir のようです。

Objective-C の NSLog, Ruby のp はプルリクエストが出ています。Closure風 と Rust風は Python の中では難しいと作者が答えていますが、誰か解決できる人がいたら挑戦してみてはどうでしょうか。

Pythonがメインの言語でない人でも、これを入れておけば自分の慣れた方法でprintできますね。

利用者からの推薦文が載ってますが、味わい深いです。

  • 「おかしいよあんた」
  • 「馬鹿馬鹿しいし役立たずだ」
  • 「僕の推薦文を追加してよ『なんて正確な推薦文たち』」
  • 「kragniz, おかしなPythonのメタモジュールばっかり公開するのはよせよ」

via Hacker News

「ギャンブラーの誤謬」ダイスプログラム

「ギャンブラーの誤謬(ごびゅう)」と呼ばれる言葉がある。コイン投げで表、表、表と連続して表が出ると、次は裏が出そうな気がする心理傾向である。実際は何回表が連続して出ようとも、次に表が出る確率は1/2である。なぜなら、コイン投げは、毎回独立事象(前回の結果と次のコイン投げは無関係)だからである。

ギャンブラーの誤謬 : カイジに学ぶ

現実のサイコロをまっとうにプログラムで再現すれば、乱数を使って毎回同じ確率で出るようになりますが、あえてギャンブラーが間違うような結果を出すサイコロを書くこともできます。Javascript で書かれたギャンブラーダイス

このダイスクラス、コンストラクタで与えた数字の面のサイコロとなります。6ならD6, 20ならD20。物理的な制約がないのでD7でもD13でも何でもできます。

このダイスでは、6面サイでたとえば1が出ると、次回は1が出にくくなります。何度も1が出れば、次に1が出る確率はどんどん下がっていきます。「これだけ1が続いたから、次は1は来ないだろう」というギャンブラーの思い込みが、本当に再現してしまうわけですね。

ボードゲームでこのようなダイスを用意するのは大変ですが、コンピューターゲームなら、こういった判定機を使うことで、プレイヤーがギャンブラーの誤謬のせいで「こんなはずはない」「騙されている気がする」と感じにくいようにすることもできるんでしょうね。実際やってるゲームがあるのかも。

via Hacker News
image credit: Flickr James Bowe

降りた時のパワーを登るときに返してくれる階段

ジョージア工科大学エモリー大学の共同研究として発表された、Assistive Stair(支援階段)は、降りた時に発生したエネルギーを貯めておき、登る時にはそれを使って楽に踏み上がることができるという階段です。

階段を降りる時には、踏み込んだ板が下へゆっくり沈んでいき、その力がバネに貯められます。階段を上る時は、そのバネの力が解放されて足と一緒に上に戻ろうとします。

下りの時に足首で自分を支えようとする力の26%を保存し、登りの時には普通の階段を上るための膝の力を37%軽減する、とあります。元気な人にとっては階段を上がるのなんて日常の動作ですけれど、足腰が弱った人にとって6割程度の力で階段を登れるというのは大きな違いでしょうね。

足を乗せたことを検知する圧力センサーが板の上に置かれているので、力学的な仕組みだけで完結してるわけではなさそうですが、既存の階段をそのまま使ってその上に設置できるのが、補助リフトなどと違うところだそうです。また、一旦つけた装置を外すのも簡単なので、妊婦とか怪我人とかの期間限定で補助が必要な人のためにも便利とのこと。

研究者の一人、カレン・リウさんが、平地を歩くのは問題ないけど階段の上りが大変、でもそのために特殊な靴を履いたりはしたくない、という72歳の母親のために作ろうと思い立ったそうです。

まだ動画の2段を作成しただけですが、今後協力してくれる企業を探しているそう。一回降りると板が沈んだ状態になってしまうので、家に二人以上いる場合にどうするか、なども解決すべき課題です。改良と大量生産が行われ安価に入手設置できるようになれば、階段の上り下りに困っている世界中の人たちの助けとなるかもしれませんね。

via New Atlas

[動画] 年式が17年違う2台のカローラをぶつけてみた、という動画

ニュージーランド自動車協会(AA New Zealand)が公開した衝突実験の動画です。

1998年製のトヨタカローラと、2015年製のトヨタカローラ、同じブランドで17年の違いがある二台を、実験室でぶつけてみた結果を見せてくれます。2015年版はフロントとサイドにエアバックがついてます。

衝突は道で対向車線にはみ出したという想定の、オフセット前面衝突試験。その速度は64km/h

新しい方は、室内部分が潰れておらず、ドアも開けることができています。エアバッグが一番効いてるようですが、ダミー人形の映像を比べても、古いモデルの方では足の部分がまずい感じに見えます。

最近は10年以上の中古車でも調子よく走れたりするので、レンタカーを借りる時なども以前ほどは車の新しさにこだわらなくなっていたのですが、万一の事故の時のことを考えると新しい車の安全性の進化というのも無視できないようですね。

ニュージーランドでは自動車の平均的な古さは14年だそうで、古い車を大事に乗る人が多いんですね。「安全性は贅沢ではありません」という締めの言葉が印象的です。

via Geekologie

ブログでチャット風の会話を表示するCSS

先日の記事「電話番号間違ってますよ」がどうしても信じてもらえない! 内で、チャットのやりとりを表現したかったので、フキダシ会話っぽく見える CSS を書きました。

WordPress の場合は、[外観]-[カスタマイズ]-[追加CSS]に貼りつけてください。特定のポストでだけ使いたい場合は .post-9067 とかを全部の前につけます。

アイコンの画像はこのCSSの中に URL を書き込んであります。別のアイコンにしたければそこを変えてください。


.akky_conv {
padding-top: 1em;
}
.akky_conv li {
display: flex;
flex-direction: row;
max-width: 95%;
}
.akky_conv li div {
width: 32px;
height: 32px;
box-shadow: 2px 2px 0px #aaa;
flex-shrink: 0;
flex-grow: 0;
z-index: 1;
}
.akky_conv li:not(.me) div {
background:url('/akky/wp-content/uploads/2017/04/user-alt-1_0.png') center no-repeat;
background-color: #fcf;
}
.akky_conv li.me {
justify-content: flex-end;
}
.akky_conv li.me div {
background:url('/akky/wp-content/uploads/2017/04/user-alt-2.png') center no-repeat;
background-color: #cff;
order: 2;

position: relative;
bottom: -3em;
}
.akky_conv li p {
background-color: #ddd;
margin: 1em;
padding: 1em;
position: relative;
text-align: center;
}
.akky_conv li.me p{
order: 1;
}
/* 吹き出し */
.akky_conv li p:before {
content: "";
display: block;
width: 0;
height: 0;
position: absolute;
}
.akky_conv li:not(.me) p:before {
border-right: 12px solid #ddd;
border-bottom: 12px solid transparent;
top: 0px;
left: -12px;
}
.akky_conv li.me p:before {
border-left: 12px solid #ddd;
border-top: 12px solid transparent;
bottom: 0px;
right: -12px;
}

会話の方はこんなかんじ。右の発言の人には、li 要素に me クラスをつけます。


<ul class="akky_conv">
<li>
<div></div>
<p>左の人の発言</p>
</li>
<li class="me">
<div></div>
<p>右の人の発言と思いねえ</p>
</li>
</ul>

その結果

  • 左の人の発言

  • 右の人の発言と思いねえ

RegexOne – 正規表現を段階的に学べるインタラクティブ・チュートリアル

RegexOneは、クイズ形式で合致する正規表現を見つけると次に進める、という形のオンラインのチュートリアルサイトです。

regexone-problem

いくつかのマッチさせるべき(MATCH)、あるいはマッチさせるべきでない(SKIP)テキストと、抜き出さないといけないテキストが提示され、それを満たすような正規表現をフィールドに書いていくと、その場でマッチした箇所が変化していきます。

regexone-finish

少しずつ違う正規表現を覚えられるように出題されていくレッスンと、それを終えた人のためのさらなる練習問題があります。

regexone-problem-1

その場の問題をしのぐために検索した正規表現を使ってそのまま、という仕事のやり方だといつか痛い目に遭うので、段階的に正規表現の基礎を身に着けたい人にはいいかもしれません。

via Hacker News