Pseudo Engineer

ソフトウェアの話とか書いてくよ

【書評】グラフデータベース

グラフデータベース ―Neo4jによるグラフデータモデルとグラフデータベース入門

グラフデータベース ―Neo4jによるグラフデータモデルとグラフデータベース入門

1年ほどの積ん読を経て、やっと読みきった(遅っ)
代表的グラフデータベースの1つ、Neo4jの開発に関わっている人が執筆している。そのためNeo4jを基準に解説されているが、内容は具体的でわかりやすい。データがどのようにストレージに保存されているのか、どうやって検索しているのかなど、実装についても触れているところがおもしろい。

”関係性”が重要なデータはグラフで表すのが適切である。グラフデータベースはその名の通り、グラフ構造でデータを保存できる。関係性はセマンティックな方向性に関係なく、双方向でストレージに保存されるため、ノード間をどちらの方向にも高速に辿ることができる。ここが一般的なリレーショナルデータベースとの大きな違いで、例えばRDBはインデックスを構築しておくことで高速に検索が可能だが、それはあくまでインデックスを順に辿る場合である。逆方向にインデックスを辿ろうとすると、テーブル全体の検索が必要になるため、とても時間がかかる。そこでいい感じにテーブル設計を行うのも可能だが、複雑になる上、スキーマ変更となると苦労するのは目に見えてる。

グラフデータベースはスキーマレスで変更にも強い。ただしグラフの構成が下手くそだと検索や拡張で苦労する。そこはRDBと同じく経験が必要かな。RDBより優れているというわけではなく、型にはまったときはすごい強力だと思う。スキーマが決まってるデータのまとまりをたくさん保存するにはRDBがいい。

アプリケーション観点ではグラフから最短経路を探索したり、SNSような人の関係性からコミュニティを見つけたり、新たなつながりを予測したりなどに応用できる。なんか使えそうなんだけど、世の中の事象をグラフで表せないか日頃から考察しないとな。それとグラフ理論を勉強したほうがいいなぁ。

プロキシ環境でのIntelliJ IDEA with SBT

プロキシ環境でIntelliJ IDEA with SBTを使う

社内ではプロキシ通さないといけないケースも結構あるでしょう。IntelliJ IDEAでscalaやる場合は、sbtがほぼ必須です。そんなときにどこにプロキシの設定をすればいいのかご紹介。

プロキシ設定する箇所は3箇所

IntelliJ IDEAのプロキシ設定

ここは環境に応じてでプロキシ設定を入れてください。
f:id:jetBeaver:20160524215311p:plain

IntelliJ IDEAからsbt実行時のプロキシ設定

ここはビルドだけでなく、sbtファイル変更時のリフレッシュでも利用されます。
赤矢印のところに「-Dhttp.proxyHost=proxy.bar.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.bar.com -Dhttps.proxyPort=8080」などを入力する。
f:id:jetBeaver:20160524215318p:plain

IntelliJ IDEAからsbt起動時のプロキシ設定

SBT Consoleを起動する場合は、ここの設定が利用されます。
赤矢印のところに「-Dhttp.proxyHost=proxy.bar.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.bar.com -Dhttps.proxyPort=8080」などを入力する。
f:id:jetBeaver:20160524215322p:plain

社内公募制度における上司の拒否権

ソニー 失われた20年」に社内募集では上司に拒否権があると言及されていました。
この拒否権、思うところもあるので少し書いておきます。

制度内容

社内公募制度とは、社内人材募集に応募し、異動先との面接で合格すれば異動ができます。一般に、現在の職場の上司に拒否権はなく、応募の秘密も守られるとされています。私の会社にも上述のルールで制度が存在します。

職場の上司には拒否権がある

私の会社でも表向きは上司に拒否権はないとされていますが、実際はあります。
そして拒否権がある以上、実際に行使されることはあります。

拒否権の行使は分かる

実際にあった話です。
異動希望者が面接で手応えがあったにも関わらず不合格の通知を受けました。せめて落ちた理由を知りたくて異動先に直接問い合わせたところ、「合格通知は出したはずですが」という回答をもらいました。拒否権が行使されたわけです。その後、上司との人間関係が急速に悪化したことは言うまでもありません。

もし落ちたら直接問い合わせてみるのも手ですが、人間、知らないほうがいいこともあります。

またこんな話もあります。
部下の公募合格を知った上司は、部下に拒否権を明かしたうえで現在の職場に留まってもらえないか話し合いを持ちかけました。結局、部下は異動することになりましたが、話し合いで解決しようとする姿勢は間違ってはいないと思います。

拒否権の無言の行使は諸刃の剣ですね。

それでも社内公募制度には意義がある

職場が自分に合っていない人や、新しい挑戦をしたい人には、十分意義のある制度だと思います。大事なのは自分の意思と覚悟なのですから。

【書評】ソニー 失われた20年

ソニー 失われた20年 内側から見た無能と希望

ソニー 失われた20年 内側から見た無能と希望

ソニーの栄枯盛衰を中から見た筆者が、凋落のはじまった出井体制以降を様々な視点から批評するという内容です。愚痴・悪口のような文章にもソニーを思う気持ちがあり、筆者のソニーへの憎愛が感じられる。社員1人の主観ではありますが、メーカーの凋落を知るにはいい本です。
私もメーカーの端くれの人間、業界全体が斜陽にいるなかいくつか共感する部分もあります。

組織の中心は人である

ソニーの凋落はトップの愚策が招いたと断言されています。確かにきっかけはそこでしょう。しかしそれを増幅させたのは他ならぬソニーの社員、”人”です。
私がこれまで会社で出会った管理職の多くは制度・ルール・文化を以って人をマネージメントしようとしていました。秩序は必要です。しかし本人の主体性を窄めてはならない。ここのバランス感覚がどうにも制度・ルール・文化に偏っているのです。組織の中心は人であることを常に考える必要があります。制度・ルール・文化は人が変化・創造するものです。先にあるものではありません。

技術の軽視

これまた多くの管理職は、押しも並べて開発の現場に疎い。我々はマネージメントする立場だ、君も早くマネージメントを覚えたまえという態度。外注をコントロールできるのは外注より技術に詳しい人だけです。でないと、納品物の”質”をどうやって担保するのでしょうか。今のところ、ぎりぎり子会社がそれを担っています。しかし子会社も外注を使って自分たちで手を動かさないわけですから、技術の空洞化は止まらないのです。
私はまだ開発の現場に明るいほうです。具体的な”質”の問題を指摘すると、最近はなかなかそういう人がいなくてとても助かるよ、と言ったりします。助かるよとか言う前に自ら学んでなんとかしようと思わなかったのでしょうか。または自分よりできる後進の育成をしてこなかったのでしょうか。問題から目を背けているか、そもそも問題と思っていないのか、私にはわかりません。

人材育成の不備

いつだって学びは自分自身でやるものです。主体性を以ってPDCAをまわしながら成長するべきなのに、高額な一回こっきりの研修で済まそうとしています。伸びる人は継続して努力する人です。努力の方法や方向はなんであれ、会社はそれを応援しなければ、どちらも成長しません。
管理職は”自分を超える”後進を育成することを考えてください。自分と同じレベルがゴールでは進歩がありません。保身のために育成を怠ると、会社が凋落し、自身の給料を下げることになります。

政治の重要性

日本のメーカーがコンシューマ向け事業から撤退し、インフラなどのB2Bビジネスを中心に据えています。企業向けの大きな仕事や、とりわけ公的市場となると”政治”がものをいいます。技術だけでは生き残れない。ここは私がまだまだ未熟なところです。

諦めない

この世にユートピアはありません。あるのは常に問題と向き合う自分です。諦めるにはまだ早い。

Xcode や iOS SDKをアップデート後にやること

XcodeiOS SDKをアップデートすると、既存のプロジェクトのビルドでエラーが出ることがある。
エラーの例)
redefinition of module 'Compression'
redefinition of module 'Darwin'
could not build Objective-C module 'CoreFoundation'

これはキャッシュやビルドしたオブジェクトが残っていることが原因。

キャッシュ削除
$ rm -rf ~/Library/Developer/Xcode/DerivedData/*
$ rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
$ rm -rf ~/Library/Caches/com.apple.dt.Xcode
Clean

Xcodeでプロジェクト開いたら、Shift + Command + K でCleanする。




Project Euler

Project Eulerおもしろいですね! はまっちゃって最近ずっとやってます。
言語はScalaで。去年勉強したHaskellの知見をScalaに取り入れてみるって目的もあります。

Project Eulerの各設問の掲示板には各々実装例載せてたりするんですが、だいたいCかPythonJava、たまにHaskellScalaは皆無、残念だ。
J言語の実装例は変態すぎてついていけません。

projecteuler.net

RPiClock

Raspberry Piで動く目覚まし時計

3年位前に構想したけど、長いことほったらかしていたRaspberry Pi目覚まし時計。とりあえず使えるところまで来たので公開。
github.com

特徴は休日/祝日鳴らない設定ができるのと(これ便利なので自分的に重要)、目覚ましの音にiTunes Storeの試聴音源に流すこと(自分で自分にAdvertisement!)。アラーム設定はブラウザでできる。

まだやり残してるのは時計表示の作成。IV-9っていうフィラメントで光る7セグを使うつもりだけど、まだ回路図を引いただけで部品も買ってない。そこはこれからやるんで、できたら公開します。あと目覚まし止める方法もないのでスイッチ作らねば。

アラーム設定画面。
f:id:jetBeaver:20160127213644p:plain


セリアで買った木箱2つで隠す。
f:id:jetBeaver:20160127212755j:plain

開けると放り込んであるだけw
f:id:jetBeaver:20160127212810j:plain

なんで作ったの?

iPhoneに換えてからも前に使っていたガラケーを目覚まし時計としてずっと使ってきた。なぜか。それは休日/祝日鳴らない設定が便利なのと、iPhoneの目覚まし時計をいくつか試したがどれもこれも微妙だったから(3,4年前時点での話ね。今は知らない。)。ガラケーもそのうち壊れるだろうし、通信もできないので時刻もずれる。そのうち祝日の法律が変わり休みなのにアラームが鳴って、朝から不機嫌になりかねない。
最初はiPhoneアプリを作ろうかとiOS SDKとか調べてたら、いろいろ制約があって難しいらしい。その後、ふと手に入れたRaspberry Piで作ろうと思ったものの、電子回路とかワカンネー。とりあえず電子回路のお勉強してたら横道に逸れてPIC触ったりして、そのうちやる気がなくなってずっとほったらかしていたのだった。
ガラケーどうなったかって? 今もアラーム鳴り続けてますよ!(壊れる気配なし)