Runner in the High

技術のことをかくこころみ

いま大学生がSpeeeのbizTechインターンに参加すべき5つの理由

 どうもみなさん、2015年夏のBizTechインターンに参加しました@IzumiSyです。現在は別の企業にてインターンをしているのですが、あまりにSpeeeのインターンが素晴らしすぎたのでアドベントカレンダーの一日を拝借して記事を書かせてもらいました。僕自身、趣味でJavaScriptばっかり書いている文系大学のろくでもないエンジニア志望学生ですが、そんな僕にエンジニアを目指す学生ならすぐにでも参加すべき理由を5つばかり紹介させてください。

 

1. RubyRails)力がアガる

 ご存知RubyKaigiのスポンサーもつとめているのがこのSpeee。会社全体で開発言語のRubyRails)化を推し進めていて、エンジニアの方たちもRubyに造詣が深いことは目に見えて明らか。僕もSpeeeのインターンに参加するまでRailsを満足に触ったことは正直なかったのですが、度重なるレビューの嵐で否応なしにRails力が向上します。とはいえ、そもそもRubyに限らず技術自体に明るい人しかいないのでJavaScriptでもScalaでもドンと来い!という人が実際にいます。その辺を考えると、そもそもRubyの力どころか技術力全般がアガると思ってます。ちなみにRuby化の話では@nisshieeさんの「Ruby初心者チームが「Ruby日本一」を目指して半年の話」が僕的にはおすすめです。

 

2. メンターがアツい

 個人的な話になりますが、夏のSpeeeのインターン含めこれまで5, 6社で短期〜中期インターンに参加していました。つまり少なくともそれだけの会社のメンターの方たちを見てきたわけですが、その中でも最もインパクトのあったのが、正直なはなし、Speeeの是澤さんでした。
 SpeeeというTechカンパニーの重鎮という感じがハンパないです。Speeeには技術顧問としてMatzさんと元クッ社の井原さんを招いていますが、とはいえアツさでは経歴・思想ともに個人的には是澤さんを推したいです。ちなみにSpeeeのインターンでは是澤さんから直接1on1でアツいフィードバックがもらえて、大抵このフィードバックでみんな一皮むけます。

 

3. どうしたら強くなれるかを知れる

 2と少し絡むはなしですが、Speeeのインターンで得られるのは、いわゆる1weekとか1dayのインターンのようなものとは違うと個人的には感じています。Speeeのインターンは、実際にプロダクトを作るためのビジネス的な視点だったり、自分が技術的・人間的に成長するための謙虚な精神をいかに養うか、のようなよりエンジニアとしての根底的な成長に関わってくるものだと思っています。
 「自分になにが足りないか、そのためには何をすべきか」という問題意識をもって、Speeeでは自分の成長への距離を常に計っていました。学生のうちに自分に何が足りなくて、何を足せばもっと(エンジニアとして)強くなれるのか、ということを知れるのは今後の自分が何をすればよいのか、という指針になるはずです。

 

4. ビジネスの視点を垣間見れる

 Speeeという会社自体がそもそも全体的に頭脳集団という印象が強いので、なんとも言えないのですが、数字やデータを効率的に使ってビジネスを推し進めている会社です。口外禁止と釘を差された内容もあるので、多くは語れませんがインターンに参加して中に入ってみると、いろんなビジネスをロジカルに広げているのがよく分かるはずです。(実は本当にいろんなことをやってます)
 インターンでもまた、このビジネスの視点というものを継承していて、プロダクトの開発から実際に設計をしてコードへ落とし込むまで、ひとつひとつをユーザー側の視点や意図に立ちながら客観的な物事の見方のもとに訓練されます。ここがまさに学生にとってはタフな部分なのですが...これが経験できるのがひとつデカいところです。

 

5. おいしいコーヒーが飲める

 Speeeにはコーヒー文化が強く根付いています☕
そして、僕がインターンをしている期間中にはなかったのですが、最近新しくスター◯ックスみたいなフロアが増えたらしいです。どうやらバリスタの人もいるらしいです。(http://speee-blog.jp/?p=279

f:id:IzumiSy:20161118174735j:plain


さらにこのフロア、技術力強化の一環でなんとオライリーの本が全部揃っているらしいです!!技術を勉強したい学生は行くしかない!!!!11

開発マシンとしてのChromebook

Feedforceさんとiidさんの2社でインターンに参加してました。

 iidさんのほうでは座学でリーンスタートアップを学んだのちに共感マップやリーンキャンバスを使って2週間のうちに企画→開発という業務の流れを体験し、Feedforceさんではアジャイル開発を用いながらGitとRailsに関するより技術よりの開発フローやKPTの回し方などを学びました。めっちゃ楽しかったですね!

 ところで、両方のインターンの参加者のほとんどがMacユーザーな中で、ひとりだけChromebookを使っていたのが僕です。(過去の参考記事: Acer C720のこと

正直Chromebookを使い始めたときは、このマシンじゃ開発は無理かな〜と思っていたのですが、探してみればブラウザ上で動かせる便利なサービスがいろいろあることがわかってきました。そういうサービスを活用しながら、インターン含め自分で開発をやるときにも結局Chromebookが使えるようになってきているので、Web開発に限ればChromebookもかなり優秀な開発マシンになりうる可能性が無きにしも非ずである、ということがこの記事で紹介出来ればと思います。

***

【必要なもの1】リモートサーバ (さくら, DigitalOcean, etc...)

 ChromeOS自体はLinuxと同じっぽいのですが、ローカルではroot権限もなくロクなことができないので、まずはリモートで作業をできるサーバを準備しましょう。僕は去年の秋あたりのOSCでさくらインターネットさんからもらったクーポンを使ってさくらのクラウドを使ってます。さくらでもなんでもリモートで作業ができる環境が揃ってしまえばこっちのもの。

【必要なもの2】SecureShell

 ChromebookでももちろんSSHターミナルは使えて、Chrome AppでSecure Shellというのがあるのでこれを使います。タブを開くとか言う便利なことはできないのでおとなしくtmuxかscreenを使う。ちなみにSecureShellでは日本語の入力ができないので、これを解決するエディタを使います(後述)

【必要なもの3】Codeanywhere (あるいはShiftedit)

 ブラウザ上で動くエディタの2大巨塔(?)のひとつ、CodeanywhereがUI的にもUX的にもおすすめ。SFTP接続をサポートしていて、かつ日本語入力のできるエディタを備えているのでここからリモートサーバに接続してゴリゴリとコードを編集する。ShiftEditも使えなくはないけどあんまり見た目がすきじゃない。なんか古臭い感じがする。リモートサーバからここまで揃ってしまえば、インターネットが使える限りどこでも開発ができるChromebookが完成したと言えます!!

【あったらいいもの】Koding(あるいはNitrous, Cloud9, etc...)

 Kodingに限らずNitrousとかCloud9みたいなコンテナを使った仮想の開発環境を提供するサービスが増えていて、そしてしかもこれが無料でつかえるというところに興奮を覚える。共用サーバじゃないからroot権限もあってGitももちろん使えるし無料でもそこそこのスペックあるし、この辺のサービスがもうちょっと安定してつかえるようになればそもそもリモートサーバは不要だし、ともすればCloud9なんかはSSHでの接続までサポートしているあたり、接続さえできればいいChromebookの大正義感が見え隠れしていると思う。Kodingを一番にしている理由は一番ごちゃごちゃしてなくてシンプルで使いやすいから。

***

 Chromebookが便利すぎて、もはやWindowsマシンなんてよっぽど何か理由があるときしか触らないくらいになってしまったので、もう開発もこれでやってしまえ!という気持ちになったので参考としてこの記事を書きました。ただ、チーム開発とかで周りの人たちと環境を揃えたりするときには構築がもしかしたらものぐさな人には手間かもしれないので、そういうときはムリしないでおとなしくMacマシンを使ったほうがいいかもですね!

Chrome Dev EditorではGitで512kb以上のコミットをプッシュできない

Error whilst pushing changes #3456 - Chrome Dev Editor
Git push fails for huge changes. #2553 - Chrome Dev Editor

詳しくは上の2つのチケットを参照のこと。
Chrome Dev Editor(CDE)ではjs-gitというGitをJavaScriptで実装したものを利用してコミットやリモートリポジトリへのプッシュなどができるのだけれど、調子に乗って大きな変更を一気にプッシュしようとすると、失敗して痛い目を見る。画像は準備できなかったが、確かダイアログで fatal: The remote end hung up unexpectedly が出てくるはず。
Unfortunately the browser https protocol only allows to send a packet max of 512KB. For security purposes the browser explicitly disallows to set dangerous headers to have a open connection. This is currently a limitation of CDE. We are working on a more fledged port of libgit2 which will fix this.
Sorry that you are running into it :-(
詳しい理由は分からないが、どうやらhttpプロトコルのセキュリティに関係しているらしい。ワークアラウンドとしてはできるだけコミット毎にこまめにプッシュすることくらいか。Githubのチケットを見ないと情報が載ってないほどメジャーではないバグ(?)らしいのでとりあえずメモ。ちなみにこのときのバージョンは0.19.3493

Acer C720のこと

最近ちょっとあってAcerChromebook C720を手に入れたので
これについて軽く記事を書こうかなと思った今日このごろ

 


マシンの写真とかはそこらへんにごろごろしてるのでこんなもんで。

【スペック】
CPU: Intel(R) Celeron(R) 2955U @ 1.40Ghz 2core
Memory: 4G
Storage: SSD10G

充分軽い

 普段はmobusのバックパックで学校に持って行ったりするけれど、まずそんなに負担にはならない。MBAと比べたらそりゃ重いけど。基本的にスポーツといえばサッカーくらいしかやったことのないthinな人間でもこの体感、というくらいの軽さということで。

ぬるぬる動く

 スペックを見るとCeleron 2955Uとさほど早いCPUではないにもかかわらずストレスを感じさせないスピードで動く。そもそもできることが限られているという点で、マシンに負荷をかけることが難しい気がする(タブを100個開くとかすれば重くなるけどね!)

 特筆すべき点は起動・シャットダウン・スリープの速度MBAを持ってないからわからないけれど、やつらに匹敵するかそれ以上のレベルで早い。Amazonか何かのレビューで起動時間を測定する動画があったけれど、ぜひそれを見て欲しい。この点でのストレスは皆無。

 加えて、SSDなのでHDD特有の動作音がなくて静かなことと、忘れてはいけないのがWi-Fi接続までの速さ。これはもう本当に抜群に早い。環境によってスリープ復帰後とか起動直後のWi-Fiの接続にちょっと時間がかかってしまうことは度々あるけれど、C720ではまだそういうのは体験していない。この点は非常に優秀。

バッテリの持ちがやばい

 まだ一ヶ月ちょいしか使ってないから、ということもあるかとは思うけれど、バッテリの持ちはその辺のラップトップの比じゃない。スマホとかだと、バッテリの消費を抑えるために機内モードにしたりするけれど、そもそもそういうことをする必要なく、よっぽどぶっ続けでYoutubeでHD動画を見たりでもしなければ、半日くらいは持つ余裕を感じる。Lifetouch NOTEを持つ人間としては、あのマシンのバッテリの持ちにも相当のものがあるとは思っていたけれど、それに匹敵するレベルで(ネットブックという機能の上でのアドバンテージを加味すれば)最高のマシンだと思った。

個人的な総評(IMAO)

 まず、自分の基本的なChromebookでの作業習慣について説明しないと、評価の指針というものが理解されないと思うのでこれについて少し。Chromebook上でやる作業は、学校で提出するレポートを書いたりその情報収集をしたり、あとはたまにSSHでリモートの作業をしたり、と言った感じ。それ以外に基本的にはYoutubeで音楽を聴いたり動画を見たり、ネットサーフィンをしたりする程度。Google Keep, Text, Writebox, Serverauditorがヘビーユースアプリ。

 開発をやる人間が決して忘れちゃいけないことは、Chromebookでは開発はできませんよ、ということ。開発ができない、というのはもしかしたら語弊かもしれない。というのも、Chrome Dev EditorでChrome AppもDart Appも作れるし、ShifteditとかCodeanywhere、KodingなどのIDEも使えるっちゃ使えるわけで。ただ、個人的に一番負担になっているのは、gitとかsubversionとかのバージョン管理システムが使えないこと。croutonやchubuntuを導入するというワークアラウンドがあるのも事実ではあるけれど、そういうことではなく、ChromeOSとして使いたいのに、使えないということに負担を感じているということ。ChromeOSはそれ自体とても完成・洗練されていて、とても好きだから、そこにまた何か入れてやろうとは正直思わない。これとは別に、FTPクライアントでろくなものがないというのもどうにかしたいなという感じにはなっている。これはこれで自分で今度作ろうかな。

 なんとか言ってきたけれど、それでもなんだかんだ言ってChromebookは着実に僕の時間を奪う存在になりつつある。なにより普段からゴリゴリとコードを書いてコミットするわけじゃないし、むしろブラウザが使えるだけ、ということがいかに自分の作業内容へのフォーカスを後押ししてくれているのかがChromebookによって実感できた気がする。MacLinuxWindowsもそれぞれやっぱりできることの幅は大きくて、必ず持っていなければならないマシンであることはわかるけれど、そこにChromebookが入ってくることによって、その存在価値が無になるとは思えないし、とりわけ上のOS(Macは違うのかもしれなけれど)に特有の鈍重さになんらかの不満を持っているのであれば、むしろChromebookはその不満点を補う形で、実際に僕がそうだったように、ユーザーをサポートしてくれるだろうなと感じた。

結論: Macユーザー以外は買い

chrome.browsingDataの呼び出し回数制限

どうやらchrome.browsingDataには規定時間内の呼び出し回数制限があるらしい。
確かにコンマ何秒位の差で何度も呼び出されちゃオーバーヘッドも大きそうだしね。


みたところ、1秒未満の間に何度も呼びだそうとすると、エラーになるらしい。
もしかすると他にもこういうエラーを吐くAPIがあるのかもしれない。

EclipseでAndroidエミュレータ上のSQLiteのデータを見る

 EclipseAndroidエミュレータ上のSQLiteのデータを見るためのプラグインにはいろいろあるかとは思いますが、今回は最もシンプルで使いやすそうなQuestoid SQLite Browserとやらを使ってみます。

導入

  1. ここからQuestoid SQLite BrowserをEclipseにインストールする(Eclipseのフォルダ内にあるpluginsフォルダに放り込む)
  2. 再起動して有効化されているかどうか(dbファイルを選択したときに、右上のアイコンがクリックできるようになるかどうか)を確認。
  3. 拡張子がdbのファイル以外は選択しても中身を見れないので注意。
 

【コード】

package com.example.dbtest;

import android.app.Activity;
import android.widget.Toast;
import android.os.Bundle;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class MainActivity extends Activity {
private final String DBNAME = "test.db";
private final String TABLE_NAME = "Info";
private final String[] column = { "name", "job", "age" };
private SQLiteDatabase database;
private Cursor cs;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

database = this.openOrCreateDatabase(DBNAME, MODE_PRIVATE, null);
database.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (name TEXT, job TEXT, age INTEGER);");
database.execSQL("INSERT INTO " + TABLE_NAME + " (name, job, age) VALUES('Jonathan', 'Engineer', '24');");
database.execSQL("INSERT INTO " + TABLE_NAME + " (name, job, age) VALUES('Bobby', 'Teacher', '45');");
database.execSQL("INSERT INTO " + TABLE_NAME + " (name, job, age) VALUES('Ricky', 'Taxi Driver', '32');");

cs = database.query(TABLE_NAME, column, null, null, null, null, null, null);
cs.close();
}
}
  • openOrCreateDatabase関数で、データベースファイルが存在していればファイルを作成、なければ新たにファイルを作成して、そこにデータを格納する。
  • SQLiteDatabase型変数のdatabaseから最後にclose()が呼ばれていないことに関して違和感を覚えるかもしれないが、最終的にDalvikVMによってオブジェクトが破棄されるため問題はない。だが、Cursorに関してはしっかりとclose()を呼んでおく必要あり。 (詳しくは「SQLiteをつかうための注意点」を参照)

【中身を見る】

Questoid SQLite Browserを起動するとこんな感じの画面に。
  • データベース構造」タブからテーブルの一覧とそのカラムが見られる。
  • Browse Data」タブからテーブルを選ぶとその中身が見られる。
 
ちなみにQuestoid SQLite Browserからできるのは、テーブルのカラムやその内容を見たりすることだけで、データの修正や追加はできません。あしからず!

(参考)http://www.coderzheaven.com/2011/04/18/sqlitemanager-plugin-for-eclipse/

LINEで「正常に処理できませんでした」が出る

 

 LINEストアにだれかが2回ほどログインしようとしたので、パスワードとメールアドレスの変更を試みるも、「An error has occured. Please try again later.」というダイアログが出て先に進めない。
※ちなみに日本語版だと「正常に処理できませんでした」という文章になる。

【対処法】
Wi-Fiをオンにする

(参考)
http://did2memo.net/2014/06/24/naver-line-e-mail-address-registration-error/

Chrome.storage.syncを使ってみる

Chrome.storageを使うと、異なるマシン上のChromeブラウザ間で同じ拡張機能が保存しているstorageを同期してくれる。

このサンプルの機能は、テキストボックスに入力された文字列をChrome.storage.sync.setでストア。起動時にChrome.storage.sync.getで読み込んで上のdivに内容を表示。同期されていれば、その内容が異なるマシン上で同じになる、というもの。 

  • setもgetも何らかのエラーが起きるとChrome.runtime.errorに文字列をセットする。ちなみに、getで指定されたデータが存在しなかった場合にはundefinedが帰ってくるだけでエラーにはならないので注意。
  • setでデータをセットするときには連想配列でキーを指定すること。ここがlocalStorageと違うところ。
  • データが同期されません!!という場合には、chrome://settings/syncSetup拡張機能にチェックが入っているかどうかを確認のこと。
  • うまく機能していれば、chrome://sync-internalsのSync Protocol Logとか、Transient CountersのCommited Countが増えたりする。