My Footprint

どんな靴を履いてても、歩けば僕の足跡。 目標に向かって歩き続ける日々を書いていくブログです。

新地開拓

大分久しぶりの投稿になってしまいました。
色々バタバタしていて、ついついさぼってしまいました。。。

実は連休中に東京に引っ越してきました。
まぁなんだかんだ東京にいた方が都合がいいことってあるのかなぁと、この業界。
とりあえず経験しておく必要はあるだろうと。

んで、早速東京にいる利点を活かしてきました。

孤独のグルメ の第三話で紹介された、池袋にある 中国家庭料理 楊 2号店 に行ってきました!!

ITの話じゃないんかいという突っ込みはさておき、実は私、ドラマの「孤独のグルメ」が大好きでHuluで何回も何回も見ています。
ただただおっさんが飯を食うのを指を加えて眺めているだけのドラマですが、なんとも言えない面白さがあります。

んで、この孤独のグルメでは東京を中心に実際のお店をスタッフが足で探して制作されています。
ドラマで紹介されるそれらの料理のうまそうなこと。。。

東京にきたらこの孤独のグルメ巡りをやるのが密かな夢でした。
ということで今回は友人との予定もあって池袋の 汁なし担々麺 を食べにいってきました。

まずはここの目玉、「汁なし担々麺」

汁なし担々麺

まさにドラマで出てきたあいつです!
こいつをぐっちゃぐちゃによくかき混ぜて食べます。

汁なし担々麺

味はなかなかおいしかったです。
ただ辛みというのはあまりなくて、ドラマでも言っていたように山椒で舌がビリビリにしびれます。
もうなんて言うかとりあえずしびれます。初めての体験でした。
水を飲んでも辛さのように引きはせず、むしろひりひりして変な感じ。舌が馬鹿になった気分。

おつぎは「焼き餃子」!

焼き餃子

丸。。。圧倒的丸。。。

この丸はなかなか見事。
このはねをパキパキやって餃子を発掘していくのはちょっとワクワクしましたwww

この餃子はすごくおいしかったです。まぁようは餃子の味なんですが、アンが肉々しく、ほとばしる肉汁が汁感のまったくない担々麺でつらくなった喉に潤いをくれます。

山椒で舌が痺れて水を飲んでも分けわからんのですが、餃子はしっかり旨味を感じられました。
正直担々麺だけでは最後の方がかなりきつかったので、餃子がいい感じに中和してくれました。

実は水餃子も食べたのですが、取り忘れたので残念ながら写真はなし。
他にもおいしそうなのが色々あったので、次はチャーハンあたりを食べにいこうかなと思います。

まだまだ行ってみたいお店があるので、暇を見つけては巡ってみたいと思います。 次は焼き鳥行ってみたいなぁ。

アプリつくったどー

どうも、昼に辛さ10倍ラーメン15分で食べきりチャレンジに挑戦して見事腹を下したふーみんです。
腹は下しましたが、なんとか15分でおいしく食ってやったぜ。

それはさておき、ミニゲームアプリを公開しました。
実際作ったのは半年前なのですが、アイコンだけ作ってなくて放置してたら春が来てました。

仕事を終えてからの時間で1週間くらいでぱぱっと作ったアプリなのでまぁクソゲーなんですがwww
むかーし子供の頃に遊んでたフロッピーのゲームを元に作ったのでまぁぶっちゃけパクリですwww

良かったら遊んでください。

icon

appstore play

Youtube Player API

東北も少しずつではありますが、春が近づいてきました。
あったかくなってくると眠くて仕事もしたくなくなりますね。

今日はちょっとyoutubeの埋め込みについて調べる必要があったので
メモ的な記事。

最近?でもない気がしますが、YoutubeFlashでのプレーヤーとHTML5でのプレーヤーを提供し始めたようです。

んで、基本的にはデフォルトでFlashが使われるんですが、iOSなどFlashに対応していないブラウザやWebViewなどでは当然使えないので自動的にHTML5のプレーヤーになる訳です。

また、何故かはわかりませんが、自分のアカウントではiframeで埋め込んだ物はHTML5になるという謎な現象がおきました。

でまぁ、それで何が困るの?というお話なんですが、実は今まではGETのパラメータとしてクエリストリングにvq=hogehogeを追加で画質の指定ができていたんです。

Youtubeはプレーヤーのサイズやら回線速度やらで自動的に画質を切り替えるという処理が入っているようで、今までは上記の方法で指定すれば、その画質になっていたのですが、なんとHTML5用のプレーヤーは指定しても無視されるという仕様になっているようなのです。

まぁPCのブラウザはいいんですよ。
自分でプレーヤーの設定アイコンクリックすれば画質変更できるので。
ところがどっこい、iOSのwebviewで表示されるプレーヤーにはそんな設定箇所が見当たらない!

これはよろしくないということで対応策をさがしていたんですが
Javascriptからプレーヤーを操作できるYoutubeの公式APIを見つけました。

ドキュメントをみると画質設定のAPIがあったので試してみたらばっちり行けました。
試した結果、画質の変更はプレーヤーの再生状態が変更したときにかましてあげるとうまく行くようでした。

以下は画質をHD720に指定するサンプルです。
リファレンスのページのサンプルをちょっといじっただけです。

<!DOCTYPE html>
<html>
  <body>
    <div id="player"></div>
    <script>

      var tag = document.createElement('script');

      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

      var player;
      function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
          height: '390',
          width: '640',
          videoId: 'M7lc1UVf-VE',
          events: {
            'onStateChange': onPlayerStateChange
          }
        });
      }

      var done = false;
      function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.PLAYING && !done) {
          done = true;
          player.setPlaybackQuality("hd720"); // ここのタイミングで画質を設定するとうまく切り替わる
        }
      }
      function stopVideo() {
        player.stopVideo();
      }
    </script>
  </body>
</html>

簡単ですね!
これっぽっちで動いてしまうのであとはWebページでもWebViewでも好きなところに埋め込んだらいいのです。
うまくCSSやらでUIを作ってあげれば独自のコントローラーなんか作れちゃうんでしょう。
機会があればやってみようかな。

そろそろ東京に引っ越そう。

git管理ツールRepoを入れてみよう

Repo

最近Repoについて調べたので、簡単にまとめておこうと思います。

repoはAndroidのプロジェクト管理用に作られたgitの管理ツールです。
複数のgitリポジトリを一括で管理することが出来ます。
普通に独自のプロジェクトに利用することが可能なため、規模が大きくなり、複数リポジトリを管理する
必要があるようなプロジェクトに使うと良いでしょう。

Repoのインストール

ここは公式にのっている通りに

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

あとはパスを通すなりしてください。

マニフェストファイルの作成

マニフェストファイルはrepoコマンドでどのリポジトリを取得してくるかを
書く為の設定ファイルのような物です。

マニフェスト用のgitリポジトリの作成

まずはマニフェスト用に別途gitのリポジトリを作成します。
例えば

mkdir HogehogeProject
cd HogehogeProject
mkdir manifest.git
cd manifest.git
git init --bare --shared

とか。
gitコマンドはこれで正しいか分かりません。ググってください。

default.xmlの作成

repoコマンドで取得する場合、default.xmlというxmlファイルに記述した設定で取りにいくようです。
ここに取得するリポジトリやリビジョンなどを指定していきます。

以下は最低限必要と思われるファイルの例です。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote  name="origin"
           fetch="git://hogehoge.com/HogehogeProject"/> 

  <default revision="master"
           remote="origin" />

  <project path="project1"
           name="project1"/>
  <project path="project2"
           name="project2"/>
</manifest>

remote

・name
リモートの名前です。
大抵何も考えないとoriginになるかと思うので、originにしておけばいいでしょう。
好きなようにしてもいいでしょう。

・fetch
repoで一気に取得する時のURIの接頭辞的なものです。
詳しくはprojectのところで説明します。

default

project要素の各属性値を省略した場合のデフォルト値を設定します。

・revision
取得するリビジョンを設定します。
上記の例ではmasterブランチを取るようにしています。
リビジョン番号を指定して特定のリビジョンを取得することも可能です。

<default revision="35ba1ca3d6fa1eca0605bf9a047bf9105a4fa5da"
         remote="origin" />

・remote
使用するremote要素のname属性を指定します。

project

リポジトリの取得設定をします。
defaultで設定したものを使いたくない場合は各project要素内で属性値を
オーバーライドしてください。

・path
repoで取得してきたときにローカルに自動生成されるディレクトリ名。
ローカルマシンのhogehoge_dirディレクトリでrepoコマンドを実行した場合
hogehoge_dir以下にpathに記述された名前でディレクトリが生成されます。

・name
リポジトリのパスを設定します。
ここに書く物には.gitはいりません。
remote要素のfetch属性と組み合わされ、最終的には以下のように展開されます。

${remote_fetch}/${project_name}.git

上記のproject1の場合、以下のようになります。

git://hogehoge.com/HogehogeProject/project1.git

Repoの初期化

まず、リポジトリ群を展開したいディレクトリを作成、移動します。

mkdir HogehogeProject_repos
cd HogehogeProject_repos

展開先に移動したらrepo initコマンドを実行します。
repo initは以下のようになります。

repo init -u gitのURI -b ブランチ名

サンプルのマニフェストでは以下のようになります。

repo init -u git://hogehoge.com/HogehogeProject/manifest.git

-uオプション

マニフェストのgitリポジトリを指定します。
先程の例ではHogehogeProjectディレクトリ以下にmanifest.gitというリポジトリ
作成したので

-u git://hogehoge.com/HogehogeProject/manifest.git

となります。

-bオプション

取得するブランチ名を設定します。
ここで設定するのは マニフェスト用のリポジトリのブランチ です。
取得したいリポジトリ群のブランチを指定しても駄目です。
default.xmlの設定を書き換えてブランチを切っている場合などに使います。
指定しない場合はmaterを取ってきます。

Repoによるリポジトリの一括取得、更新

repo initをかましたディレクトリ内で今度はrepo syncコマンドを実行します。
repo syncを実行するとマニフェストファイルに記載されているリポジトリを一括で取得してきます。

repo sync

repo syncが成功するとリポジトリが一括でダウンロードされています。
repo syncでコンフリクトが起きたりした場合の対処はそれぞれコンフリクトが起きた箇所をgitで
修正していくのが基本になると思います。
あまり試していないのでその辺は自分で調べてください。

ブランチを切る

repoコマンドを使って取得してきたリポジトリに新しく作業用のトピックブランチを
一括で作ることが出来ます。

repo branch ブランチ名

または普通にgitコマンド、またはsource treeなどを使って各リポジトリ毎にブランチを切って
作業することも出来ます。
全てのプロジェクトを編集するということはなかなかないと思うので、あまり使うことはないかもしれません。 

以上がrepoの基本的な使いかたです。
後はコマンダーな方はコンソールでgitを叩くもよし、GUIっこはSource Treeを使ってボタンポチポチ管理でもよし。
各々好きなように使ってください。

更にrepoを使いこなしたい方は

repo help

以上のコマンドでrepoのコマンド一覧が見れるので、そちらを参考にしてください。
以上!

小悪魔女子に俺はなる!

いや、ならないけども。

普段私はアプリケーションレイヤーな生き物なんですが
最近Webな仕事をやっていて思ったのはもうちょっとインフラ周りの
知識が必要だなーってこと。

やはりアプリケーションのパフォーマンスを最大限引き出すには
サーバー周りの設定だったり、知識がないとあかん!!と思った訳です。

そんなこんなで最近はvagrantで突っ込んだcentosとかいじってちょこちょこ遊んでいるんですが、ちょっと前にバイトに来てる大学生からこれ面白いっすよと教えてもらったので、買ってみました。

その名も「 小悪魔女子大生のサーバーエンジニア日記 」!!

小悪魔女子大生のサーバーエンジニア日記

出たのが2、3年前なので既に女子大生ではなくなってると思いますが、文系出身でITなんていっさいわかりません状態からバイト先でサーバーやネットワークについて学んで、イラストチックにまとめてブログにしてたら人気でちゃったテヘペロ☆見たいな本のようです。

中身は半分くらいイラストな感じでゆる〜く、しかし内容はしっかりと言った感じになっているみたいです。

実際ちょっと読んだ感じさらさら読めていい感じです。
ちょっと手書きの文字が読みにくいことがありますが、大抵同じ内容がタイプしてあるのでまぁ何とかなります。

先日も書きましたが、MySQLの本とかも読んでいるので、またO'Reillyとかのごっつい本を買うとなかなか読み切れないので、これくらいさらさら読めるやつだとちょっとした時間で読めるので嬉しいです。

本当なら大学いったんだから知ってろよ!っていう内容だとは思いますが、僕はそんなに優秀ではないので女子大生に優しく教えてもらおうと思います。

兎にも角にも、なかなか面白そうな本なのでしっかり読破して
小悪魔女子サーバーエンジニアに俺はなる!

プログラミングについておもふこと

タイトルはなんとなく"おもふ"の方がシャレオツな気がしたのでやってみた\(^o^)/

今日は何となくプログラミングについて思っていることを雑記的に書こうかなと思います。
エンジニアもたまには思想にふけるもんである。(ワロス)

ネットなんぞを徘徊しているとしばしば初心者がフレームワークなんか使うな!基礎をやってからにしろ!
なんて意見を見かけることがある。

こういう意見には是非が問われる。
基礎を積んでいないのに高機能なフレームワークを学んでも、使いきれない、逆に学習コストが高くついて
つまずいてしまうなどの意見もあれば、フレームワークを使うことで学べることもあるはずだという意見もある。

個人的には前者にはおおむね賛成で、自分がJavaを勉強しだした時は、最初は言語自体の文法や
仕様などを主に勉強し徐々に他のことをやりだした。
実際これのおかげで他の言語を学ぶときの手助けにもなったし、フレームワークやらAndroidなどのプラットフォームをやるときは
割とすんなり入れた(もちろんそんなにできるわけじゃないけど 笑)。

この経験から基礎は大事だとは思ってます。
ただ、"おおむね"と書いたように絶対そうでないといけないとは思っていません。

プログラマーには大きく分けて2種類の人間がいるんじゃないかぁと思います。

一つは技術が大好きな人。
技術を追い求め、コンピュータの道を極めんとする人。
いわゆるギークな人たち。

こういうギークな人たちは言語仕様を完全に理解し、更には言語仕様に口出しするようになり
しまいには言語そのものを作り出す。みたいなことが多分すき。
技術自体を生み出したり、極めることに情熱を燃やしている。

もう一方は技術を使ってモノ作りをするのが好きな人。
実際に動く物を作ったり、サービスとして世の中に公開して行く。

自分はこっちがすきです。実際に自分が作った物が動き出したりするのがすき。
技術はモノ作りをする為のツールだと思っています。

もちろん新しい知識や技術を身につけるのはそれなりに楽しいことではあるのだが、
ひゃっはー!!最高にクールだぜ!!!とはあまりならない。

元々コンピュータ系の大学に入ろうと思ったのは映画がきっかけでした。
高校生の頃、ALLWAYS 三丁目の夕日をみて、そのCGに圧倒され、自分もあんな物を作ってみたい!
と言うのが始まりでした。
まぁ結局CGの道には進みませんでしたが(笑)

技術自体にこだわりはないですが、プログラミングはすきなので、モノ作りにエンジニアとして
参加して面白い物を作って行きたい!!と思いながらプログラマーやってます。

だいぶ話がそれましたが、プログラマーをやっていく上で大事なことはモチベーションなんじゃないかなと思います。
ギークな人たちは技術自体を学ぶことが好きなので、言語の基礎とかそういったところからスタートするのはいいと思います。

ただ、モノ作りが好きな人、例えばJavaを極めたい!ではなく、Androidで面白いアプリ作ってみたい!みたいな人。
こういう人にいきなりAndroidなんてやるな!まずはJavaの基礎からやれ!とか、
かっこいいWebサイトが作りたい!面白いWebサービスが作りたい!と言う人にフレームワークなんて使うな!PHPもわからねーくせに!
と言って低レベルなレイヤーをいきなり押し付けるのはどうなのかなと思う。

確かに基礎は大事だ。基礎がなっていないのに応用をうまく使えるわけがない。
でも、上のような人たちが必ずしもそこをスタート地点にする必要はないんじゃないかと思う。

モノを作りたい人にそういったところをいきなりやらせても、おそらくつまらないと感じてモチベーションを保てないと思う。
だって早く動く物がみたいんだもん。
最高にクールで完璧なプログラムを書きたい訳ではないんだもん。

最近はとりあえず作ってみたい!って思って始める人も多いんじゃないかと思います。
特にスマートフォンが身近になってから、自分でもアプリ作ってみたいとか。

だからそういう人たちにいきなり、それはまだはやい!今すぐやめて基礎をやってこい!と言うのは酷だと思う。
とりあえずやってみる。そして自分が作った物をより良い物にするべく基礎や応用を学んで行くという手順を踏んでも
言うほど悪くはないんじゃないだろうか。

CentOS6.4でPercona Server 5.6

最近MySQLももっと使いこなせないといかん!と思いハイパフォーマンスMySQLをちょこちょこ読んでいるのですが
本書にも出てくる(著者の誰かが作ってる?)し、最近担当してる案件でもPerconaを導入しているため
PerconaをつかってMySQLのお勉強をしてみようということでインストールメモです。

環境はMacvagrantを入れてCentOS6.4(64bit)を使っています。
vagrantのインストールや使いかたはドットインストールの ローカル開発環境の構築Vagrant入門を参考にするとわかりやすいかと思います。

Percona Server

Perconaは並列処理やディスクI/Oに配慮した設計になっていたり
Toolkitなど通常のMySQLよりも色々と機能が充実しているようです。
いいものならがんがん使っちゃおうぜ!ということでとりあえずインストール。

インストール手順

リポジトリの追加

今回はyumでインストールするのでRPMをインストールしてリポジトリを追加します。

rpm -Uvh http://www.percona.com/redir/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

上記のコマンドを実行で/etc/yum.repos.d以下にPercona.repoが 追加されます。

インストール

あとはyumでインストールするだけ。 適当にいりそうな物をインストール

yum install Percona-Server-server-56 Percona-Server-client-56 Percona-Server-shared-56 Percona-Server-shared-compat percona-toolkit xtrabackup -y

phpとかと連携する場合は適宜必要なモジュールをつっこんでください。
また既にMySQLが入ってる場合は消しておいてください。

起動

起動は通常のMySQLと一緒です。
yumで突っ込んでるので適当にserviceで起動してやれば動きます。

service mysql start

起動に成功したら後はmysqlのコンソールを立ち上げていつものように 使えば完了です。

mysql -u root -p

これでとりあえずPerconaが動きます。