Create and share beautiful images of your source code. Start typing or drop a file into the text area to get started.
はじめに 日本語プログラミングの議論が続いていますが気分転換にこんな奇抜なプログラムはどうでしょうか。 経緯 木村 明さん 1 の傑作かつ芸術的な日本語プログラムに「ポエム(Poem)」があります。 1986年に作られました。当時はPC-9801やFMRなどMS-DOS環境のPCが全盛で、このプログラムもPC-9801向けに書かれていました。プログラムは大変面白いのですが、そのような事情で現在では実際に動かすことはできず長いこと眠っていました。 一方で、Mindのほうは長らく開発していたGUI版が動き始め、Poemが使うグラフィック描画もできるようになったことから、Poem を実際に動かしてみたくなりました。9801グラフィックの互換処理を差し込むことでなんとか動かすことができました。動いたときは「ああ、こんなプログラムだったな」とちょっと感動しました。 公開について 氏の許可を得てソース
I won't deny there may well be cases where a microservices-first architecture makes sense, but I think they're few and far in between. The vast majority of systems are much better served by starting and staying with a majestic monolith. The Prime Video case study that blew up the internet yesterday is but the latest illustration. Maybe once you reach the scale of Netflix or Amazon, there are areas
どうも、フリーランスエンジニアの人です。 今まで関わったプロジェクトにおいてコーディングルールが曖昧だった環境で苦労したので、例に出しながら振り返ろうと思います。 ※ 本記事に登場するコード例は実際に存在するコードではありませんがヤバさは忠実に再現しました。 2022/11/5 追記 曖昧かつ実態のズレた変数名 変数の命名というものはエンジニアによって少々偏った傾向が見られますが、その変数が指し示す実態と命名に大きなズレがなく、主旨が伝わればエンジニアリングにおいて大きな問題はないはずです。 ですが、世の中には曖昧かつ実態と一致しない変数名が書かれたプロダクトコードが存在します。 以下のコードをご覧ください。 ※ 今回はJSを例に出します // ユーザーのデータを取得 export const getUserData = async (id) => { const res = await
スタンフォードのコンピュータサイエンスの授業で、ときどきこれは良問と思う問題がテストで出ることがある。僕の印象に残っているのは「xをfloatとするとき、x + 0.25 - 0.25 = xが成り立たないxを求めよ」というものだ。浮動小数点数を理解していないと、両辺が同じにならないケースがあるほうが不自然に思えるだろうから、この問題は浮動小数点数の奇妙さを結構うまく突いていると思う。この問題を元に浮動小数点数についてちょっと説明してみよう。 まずコンピュータ上での数について少し考えてみよう。コンピュータにおける数と、数学の整数や実数は、よく考えてみると全然違う。コンピュータは有限の記憶領域しか持っていないので、無数にある数を表すことが根本的にできない。つまりコンピュータ上の数は「本物の数になるべく似せた別の何か」だ。現実的には、例えば32ビットの数なら2^32パターンしか表せないので、そ
属人化の理由 個人の問題 手抜きやバグを隠す たとえば、仕様書外の動作を実装し、それをプロジェクトで利用する 解雇されないための保険的行動 チームの問題 マニュアルを作る文化の欠如 他人のタスクに対する無関心 他人の監査なしにプロジェクトを更新可能 どうやって属人化を避けるのか 間違った対策 ○○さん以外にもマニュアルなしで操作できる人間を育成 育成した人が全滅すればやっぱり同じ状況 全員がすべてのプロジェクトに精通するとかはムリ 正しい対策 モジュールごとに仕様書を用意 間違って使うことが難しい仕様とする 即ち、仕様書を読まなくてもある程度正確に使える お互いにコードレビューさせる 具体的にはどうすれば良い? テスト・仕様書・利用例 テストは仕様書のベースとなる 仕様書を見れば、深い動作がわかるようになる 仕様書を読まなくても、利用例を見れば使える 全員がテストできる環境を作る 前提条件
前回書いた「「正しく書かれたソースコードにコメントは必要ない」なんて幻想だという話( http://d.hatena.ne.jp/t_tutiya/20170519/1495197904 )」は土屋のブログ記事にしては珍しくはてブやコメント、twitterで反響を幾つか頂きました。その中の幾つかを紹介します。分かっているとは思うけど、サンプルコードはJavaScriptを意識してますがてきとーです。 案1:マジックナンバーを定数化する MAX_OPAQUE = 1.0f //定数宣言のつもり if (alpha < MAX_OPAQUE){ //処理A } "1.0f"に意図を設定すればコメントが不要なのではないか説。うーん、これはちょっと難しいかな……。"MAX_OPAQUE"が正しい変数名だとは思えませんが、どんな名前にすれば意図が説明できるのかちょっと思いつきません。また、数式が複雑
エミュレータを作ってみたいなぁという漠然とした思いがずっとあったので、ファミコンのエミュレータを書いている。スクリーンショットにあるような表示はできる。 ファミコンにした理由 エミュレータは作りたいが、よく知らない機械のエミュレータを作ってもつまらないので、多少は親しんだファミコンにした。 一番印象深い���ーム機はスーパーファミコンだが、スーパーがついてないほうが簡単かな、と思ってファミコンにした。 買ったもの カートリッジからROMイメージを吸い出すために、吸い出し機をAmazonで購入した。 GAMEBANK-web.comオリジナル「FCダンパー」 / ファミコン ファミリーコンピュータ Famicom Kazzo DUMPER レトロゲーム 吸い出しツール [0217] 出版社/メーカー: GAMEBANK-web.comメディア: エレクトロニクスこの商品を含むブログを見る ゲーム
週末の午前中、カフェでアイスコーヒーを飲みながらふとポエムでも書いてみようかと思い立ってしまったので、ちょっと前からよく考えていることを書く。本当に思いつきで書くので乱文になる可能性が高いけどご容赦いただきたい。そもそもブログを書くこと自体が相当久しぶりだ。 僕ももう 30 をすぎて、プログラマの世界ではさすがにもう若手とは呼べなくなり、教育っていうのはおこがましいけど、まあ自分より若い人たちの指導みたいなことをやらないといけない立場になってきたからこそ、「いいプログラマとはどういう人なんだろう。この人たちはどういうことを学べたら幸せだろう。」ということをよく考えるようになった。そういう話をする。 プログラマは手段のスペシャリストである 世の中には目的・手段論みたいな論調が存在する。 「それは手段だよね。目的をはき違えたらダメだよ。」という話はいたるところでよく耳にするんだけど、僕はこれを
まだ満足のいく回答を得られていないみたいなので二度目の回答を 一回目の回答で文系と書きましたが、それは世の中から法則性を見付け定式化できる能力があるかどうかという意味です Jiamari459さんは、RPGなどのコンピューターゲームはしますか? するとしてキャラクターのレベルが上がって強くなったとき、将来どれくらい強くなるか知りたいと思いますか? そして知りたいならどうやって知ろうとしますか? インターネットで検索するのが一番早くてスマートな問題解決方法かもしれません でも、私の場合なら幾つかのレベルのサンプルから計算式を推測します (武器のレベル+キャラクターの能力値)×技による倍率-敵のレベル+乱数 といった感じです こうして次のレベルの数値を予測しレベルを上げて計算式の正しさを証明していきます これは科学的手法そのもので、いわゆる理系と呼ばれる人達はこの能力が長けています 掛け算九九
DIコンテナ使ってるけど、アノテーションってなんなの!って聞かれて、作ってみたらわかるよと答えてみたので、自分でも作ってみました。 よくわかった。 「DIコンテナ使うと何がいいの?」ということも、作ってみるとわかります。あと「DIって何がいいの?」に関しては、「DIはちょっとコードを書くのが楽になるだけで、それだけあっても仕方ない、大事なのはコンテナ」と答えるようにしてますが、コード比率からもそれがよくわかります。 続編としてWebフレームワークも作っているので参考まで。 作って理解するWebフレームワーク - きしだのHatena まずはコンテナを作る とりあえず1ソースの状態で。 こんな感じで、管理する型を登録できるようにします。 static Map<String, Class> types = new HashMap<>(); static void register(String
これを一部でシェアしたのは2014年なので結構前ですが、エンジニアのキャリアパスを考えるにあたって参考になるかと思って公開します。あくまで個人的な体験談で会社の見解などとは関係ないということに注意してください。 -------- 入社日記念の無料マッサージクーポンのメールを受け取って気づいたんだけど、こないだで入社後7年が経過したらしい。僕は結構長い期間をここで過ごしたことになるんだなと思った。ちょっと以前のことを振り返ってみようと思う。言うまでもないけどこれは僕の書ける範囲での個人的な感想と体験談であって会社の見解等を表しているものではない。 きっかけ そもそも最初は2007年にGoogle Japanのリクルーターからメールをもらったのがきっかけだった。Google Japanの知り合いから紹介で誘いがきて、「お、これは引き抜きってことかな?」と思ってよろこんで話を聞きに行ったのだった
ソフトウェア業界はドラゴンボールの世界と似ています。 「私の戦闘力は53万です」 というのはフリーザの有名なセリフなのですが、ソフトウェア産業でもまさに同じようなことが起きていて、戦闘力(=生産性)が桁外れの人がごろごろいるのです。 100人のプログラマが2週間かかって出来ないことをスーパープログラマが2時間であっさり解決とか普通にある世界です。 Google Code Jam とか Top Coder のアルゴリズム部門といったオンラインプログラミングコンテストに出場してみればわかると思います。(誰でも出場できます) 全世界一斉によーい・・ドン!と始まって、1問目の問題文を読み始めます。 すると・・三分の一も読むか読まないうちに、スコアボードにはすでにプログラムを提出して正解判定をもらっている人がちらほら出始めます。 なん・・だ・と・・?! あなた方は魔人ブウの団体様ですか?? なんとか
2010年9月24日・25日に開催された「PHPカンファレンス2010」にあわせて、PHP開発者のRasmus Lerdorf氏が来日されました。日本を訪れるのは2度目という氏に、PHPの現状とその根底にある思想についてお話を聞きました。 現在の仕事について 大垣:昨年 Yahoo! Inc.を退職されましたね。現在はどのような仕事をされているのでしょうか? Rasmus:WePayという起業したばかり小さな会社にいます。WePayはカリフォルニアにある、グループで支払いを行う処理を行うベンチャー会社です。 大垣:グループで支払いを行う、というのは、どういうことですか? Rasmus:グループで何かを買いたいときに、グループとしてお金を管理したいですよね。例えば、大学で学生が集まってプレゼントを買いたいという場合があります。どんなものでも構わないですが、10人が集まって共同でオンラインショ
はじめに プログラミングをやっている人であれば、スタック・オーバーフロー(Stack Overflow)を知らない人はいないと思います。 エラーメッセージをコピペしてググるとトップによく出てくる、このページのことです↓ Stack Overflow - Where Developers Learn, Share, & Build Careers また、ご存知の方も多いかもしれませんが、去年の12月からは日本語版サイトも登場していて、現在は日本語で質問と回答が投稿できるようになっています。 スタック・オーバーフロー とはいえ、ネットで見つけて回答を読むことはあっても、自分から質問したり回答したりする人はまだまだ少数派のような気がしています。 そこで、今回のエントリでは日本語版サイトをメインターゲットにして、スタック・オーバーフローの使い方をまとめてみようと思います。 注:このエントリでは関数
マルウェアを解析する際にはVMで解析を行うことが多いので、VMを検知してアンチデバッキングするマルウェアが存在する。それらが用いる手法についてまとめた。 1. TSCを用いる TSC(IA32_TIME_STAMP_COUNTER_MSR: TSC_MSR)とは、CPUクロックごとに加算される64bitのタイムスタンプカウンタであり、これを RDTSC(Read Time Stamp Counter)命令を使って読み出すことで、CPUクロックと同じ分解能を持つ精度のタイマを使うことができる。 CPUクロックに基づく相対時刻の計測 このタイマを用いて、VMとホストマシンで実行した時の時間差を確認することでVMを検知できる。以下のコードはwin上のgccで動作する。 # include <stdio.h> int main(void) { unsigned int time1 = 0; uns
詳細については後述しますが、MapReduceの処理モデルは、上記の通り各区分ごとにそれぞれ単純化(限定)されたモデルであったと言えます。 また、MapReduceの関数プログラミングおよびグラフ的な特徴も合わせて以下に整理してみます。 関数プログラミング的な特徴 MapおよびReduceフェーズは、それぞれ関数型プログラミングのMapおよびReduce処理をモデル化したものです。MapReduceは、参照透過性がある純粋な関数処理と言えます。参照透過性とは入力により出力が一意に決まる性質のことです。言い換えればMapReduceの処理は、大域などの処理に影響する外部の環境は持たず、内部的にも静的な一時変数などの状態も持たないことを意味します。 純粋な関数処理は複数の処理が同時に実行されても他の並列に動作している処理の状態には左右されないため、この参照透過性は並列化に向いている性質がありま
Photo by Jason Cartwright こんにちは。谷口です。 プログラミングの勉強で「ちょっとあの開発言語の勉強をしてみたいな~」「実際にコードを書いて動かしてみたいな~」という時に、ハードルとなるのが「実行環境の作成」だと思います。 そんな時に役立つのが、書いたコードをブラウザ上で実行できる「オンライン実行環境サービス」です。 今回は、実行環境の手間を省いて「書いたコードをブラウザ上で実行できる無料サイト」を紹介します。 目次 ・複数言語対応系 ・ideone ・CodePad ・paiza.io ・repl.it ・Codecademy ・runnable ・Wandbox ・SourceLair ・JavaScript系 ・JSFiddle ・jsbin.com ・Codepen ・jsdo.it ・PHP系 ・PHPfiddle ・PHP Sandbox ・Write
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く