ベルリンのITスタートアップで働くジャバ・ザ・ハットリの日記

日本→シンガポール→ベルリンへと流れ着いたソフトウェアエンジニアのブログ

プログラミング

個人開発サイトnode-node-nodeに対するご意見とその回答はきっと全てのエンジニアにとって参考になると思う

先日公開した個人開発サイトnode-node-nodeに対するご意見とその回答。全ては掲載できないので一部を抜粋してコメントと、それをいただいた後の対応状況を載せた。ご意見をお送りいただいた全ての方へ ありがとうございます!もしこれらのコメントが無ければ…

 個人開発ウェブアプリのご意見を募集してネット文化の素晴らしさを再認識した

先日、個人開発して公開したウェブアプリの率直な感想を募集したら、とても親切かつ有用なコメントをいただいて「ネット文化はなんて素晴らしいんだ」と無邪気に感動してしまった。ネット上には罵詈雑言が溢れている、などと言われるが、そんな人ばかりが大…

GraphQLを導入してみて得た知見と雑感。GraphQLはタイタニックの救命ボードになりえるかも

GraphQLは実装内容に合えばタイタニックの救命ボードのように混沌から救い出してくれる。だからと言って全てのプロジェクトがタイタニックな訳ではないので、使い所が合わなければそんな救命ボードにもあまり意味は無い、という話。先日、個人開発して公開し…

エンジニアの集合知をノードグラフで図解するSNSサイトを作った。「ノード・ノード・ノード(デスクトップ版)」

サイトコンセプトはエンジニアの集合知をノードグラフにして図解するSNS。 サイト名は「node-node-node(ノード ノード ノード)」。デスクトップ版のみ。エンジニアの集合知をノードグラフで図解するSNS。 「node-node-node(ノード ノード ノード)」 http…

YAGNIはソフトウェア実装の原則。直訳は「そんなモン要らんって!」

YAGNI (You Ain't Gonna Need It) 直訳は「そんなモン要らんって!」 YAGNIの原則は「機能は実際に必要となるまでは追加しないのがよい」とすること。後で使うだろうという予測の元に作っても、実際に使われるのはほんの一部。ソフトウェア実装において「予…

6000番を獲得した「ほとんどのエンジニアには解けるパズル」解答者のメッセージはここにも表示しますよ、と

かつて「ほとんどのエンジニアには解けるが、下位10%のダメなエンジニアにだけ解けないパズル?」なんてモノを作った。パズルが解けたら、解答者用のコメントが入る仕組みになっていて、それが後もう少しで6000番に到達しそう。作った本人としてもまーま…

Rails 5 モデルの条件付きbefore_destroy

Rails 5 でモデルに条件付きbefore_destroyを設定する方法。例えばPostモデルがあって、レコードを消す前に条件判定をするとする。ステータスがアクティブだったら消さない。アクティブ以外の場合だけレコードを消してもOkとしたい。そこで以下のようなコー…

ReactのRedux非同期処理がサルでも分かる超解説

この記事はかつての私と同じように「Reduxを使った非同期処理がいまいち分かんねー」という方に向けて書いた。とりあえずはReactの公式サイト、Reduxの公式サイト、Dan氏のReduxビデオ解説を観たが、なんかスッキリしない。特にReduxの非同期処理が分からな…

フィボナッチ工数見積は「完成させます!(徹夜で)」という無理ゲーによる弊害を最小化するプロジェクトマネージメント手法

今まで数々のプロジェクトマネージャーとそのプロジェクトマネージメント手法に翻弄されてきたが、現在の勤め先であるベルリンのITスタートアップで取り入れている手法が歴代の中でも一番マシ。まず工数見積がとても洗練されている。エンジニアが無理やりに…

Rails 5.1のwebpack (gem無し)を使ってReact, Redux, Material-UIの環境構築

RailsのViewをReactにする場合のお手軽な環境構築としては少し前ならreact-railsやreact_on_railsといったGemを使って統合していた。それもRail 5.1になってGem無しでもカンタンに環境構築が可能になった。もちろんGemを使えばそれらに付随する機能が使えて…

RubyのblockやProcを分かったつもりになっていて見事にハマった

反省した。RubyのblockやProcを分かったつもりになっていて、しょうもないところでハマった。自戒を込めてブログに残しておくことにした。 $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15] 例1 def method_1 if block_given? puts…

Rubyのクラスで定義されたattr_accessor一覧をそのクラスのインスタンス変数から取り出す方法

一応題名の通りで「Rubyのクラスで定義されたattr_accessor一覧をそのクラスのインスタンス変数から取り出す方法」なのだが、何を言ってるのか書いた本人でも「?」となりがちなのでまずはやりたかったことから説明する。例えばBookクラスがあって、そこに a…

『〈インターネット〉の次に来るもの 未来を決める12の法則』書評

『〈インターネット〉の次に来るもの』を読んで「これはごちゃごちゃ言い訳してないで、とにかくモノ作って公開しよ」と思った。そして今、まーまー高いモチベーションでコードを書いている。たった1冊の本でここまで「やったるぞー」的な気持ちにさせる本…

「世界のITエンジニア向け調査結果 スタックオーバーフロー2017」はいつも興味深い

毎年やってるスタックオーバーフローのIT技術者向けのアンケート結果2017版が出た。これがいつも興味深いので一部を抜粋した。 アンケートに回答があった地域 英語でアンケート取ってるのが理由だろうが、ほぼ英語圏に集中している。日本からの回答は全…

GitHubでフォークしたリポジトリを最新状態に保つ方法

OSSなんかのプロジェクトをGitHubでフォークして自分のレポジトリに入れた場合、しばらくほったらかしにしておくとフォーク元はどんどん先に進んでいるのに自分のところのレポジトリは古いまま、となってしまう状態を避ける方法。履歴書の技術欄にRailsとか…

海外転職では最初の壁を超えてしまえば後は楽勝。ただしある条件は付く

海外転職において最も難しいのは最初に日本から海外へ渡る際にある壁でそこを超えたら後は比較的楽勝ですよ、という話。言いたいことの結論を図にすればこんな感じ。 | | | | 高 い 壁 | | | | 日本 | シンガポール | ヨーロッパ(ベルリン)なん…

Chef client-server入門 <男は黙ってChef client-server>

Chef client-serverモデルの入門者向け解説。いまだになぜなのかはよく分からないが、Chef-soloや Knife-soloの解説はよくあるのにChef client-server版の解説があまり見当たらない。英語で検索すればたくさんヒットするし、英語圏でChefはclient-server版が…

テキトー実装だとハッカー攻撃の恰好の的になりがちなRubyライブラリopen-uri

open-uriってちゃんと実装しないとなにかと危険な香りがしますな、という話。module OpenURI (Ruby 2.4.0)例えば外部のAPIを叩く必要があって require "open-uri" として使っていたとする。 フォームから受け取ったパラメータを入れてopen(なんやら)とする場…

まともなコードが書けるエンジニアならどこでも海外移住できるという単純な理由

ベルリンでもシンガポールでもITスタートアップのエンジニアチームで一緒に働いたチームメンバーの中に現地人はひとりも居なかった。そういう現状からITエンジニアならほぼどこでも移住できますよ、という理屈になる。現地人とはその国で生まれ育った人のこ…

Web系エンジニア必須の環境設定 <その2>ssh接続 は全てsshrc

前回の続き。週に1度でもサーバーにssh接続して作業するなら生のsshを使わずにsshrcにしましょう、と。普通にsshをするとvimの設定なんかの全ての設定がサーバーの設定に依存する。vimでサーバーファイルを編集していて、いつものキーバインドを使っても「…

Web系エンジニア必須の環境設定 <その1>dotfilesをGitHubで管理

シンガポールからヨーロッパに来てもソフトウェアエンジニアとしての職種が同じで言語も英語なので「やってることほぼ同じだな」と感じることがほとんど。そして開発の環境設定もほぼ同じ。人種国籍問わずエンジニアなら「これはやってるだろー」というよう…

ITエンジニアの海外転職で出された技術問題をそのままここに貼り付ける - その1

エンジニアが海外転職をする際に必ず出されるのが技術問題で、それらは本当に玉石混交。いい問題もあれば、なんかしっくりこないクソ問題もある。私が現職で応募者に技術問題を出す際にはいつも「外部のネットに書いたり、人に問題の内容を教えたりしないで…

動的計画法(Dynamic Programming)をサルでも分かるように説明する - その1(フィボナッチ数列)

「動的計画法(Dynamic Programming、以下DP)をどんな人にも分かるように丁寧に解説する」というこれまで何人もの優秀な方々が挑戦した内容にあえてまた参戦することにした。「動的計画法」とか「Dynamic Programming」でググると山のように解説ページがヒ…

「プログラマが知るべき97のこと」はやたらリピート率の高いキンドル本

「プログラマが知るべき97のこと」の英語版がKindleに入っていて、結構な頻度で読んでいる。エンジニア向けエッセイ集で全てのエッセイが2ページほどに収まっており、スキマ時間に読むのにちょうどいいからだ。各エッセイには97人の熟練エンジニア達がそ…

天才プログラマーと自分との実力差をカンタンに測定する方法

天才プログラマーと自分との実力差をカンタンに測定する方法を発見しましたよ、という話。結論から言うと、いろんなところで過去に開催されたプログラミングコンテストの入賞者の結果を見て、その問題を同じ条件で解いてみること。あるウェブサイトに201…

RubyのEnumeratorとEnumerator::怠惰(Lazy)の使い所とベンチマーク

RubyのEnumeratorとEnumerator::Lazyの使い所とベンチマークをまとめた。使うと意外と便利なのがEnumerator。 Enumeratorの基礎動作 irbを起動して配列のeachの後にブロックを渡さないでおくと、それはそのままEnumeratorオブジェクトにして返される。 ~ $ i…

5000件の解答者登録達成!ほとんどのエンジニアには解けるパズル1

ほとんどのエンジニアには解けるが、下位10%のダメなエンジニアにだけ解けないパズル?などというITパズルを作成して、それが解けたら解答者登録できる仕組みにしておいたら、8ヶ月かかってやっと5000件に到達した。「だからナニ?」と言われてもそれま…

クソコードとは何か?を写真で説明した

「クソコード」と言っても一体なにをもってクソとするのかは難しい。さらにほとんどのコードは一応は動いている。目の前で動いているコードに対して「クソ」と判断するからにはもうちょっと分かりやすい説明があってもいいんじゃないだろうか、と考えたので…

RubyのリファクタリングでNull Objectを使ってコードをスッキリさせる方法

前回、Rubyのリファクタリングでイケてないコードを美しいオブジェクト指向設計のコードへ改良するための方法という記事を書いて、いい反響をいただいたので第2弾を書いた。Ben Orenstein氏の講演で話されていた前回のとはまた別のリファクタリング方法。元…

Rubyのリファクタリングでイケてないコードを美しいオブジェクト指向設計のコードへ改良するための方法 - その3

前回からの続き。 Rubyのリファクタリングでオブジェクト指向設計に沿った美しいコードになるまでの方法を書いた。 「イケてない」から「マシ」にするためのリファクタリング 「マシ」から「いいね」にするためのリファクタリング 「いいね」から「スゲーい…