怪しげだったものが世界を作る
2014年04月29日
さてこの仮想化って何が便利なの?というのが本日のテーマでございます。
皆さんのお持ちのPCは1台なら1台分の働きを期待します。
(変な言い回しですがご勘弁ください。)
ところが、現在のコンピュータは、今や一部の特殊な処理を除けば充分な性能を持ちます。
つまり、1台でも1台分の働きだけだと、もったいないのです。
ましてや、最近のCPU(中心回路)は1つのチップの中に複数個収められていることがほとんどです。
つまり、1台のPCでも、中を見ると複数台のPCがギュッと入っている状態なのです。

引用:http://ja.wikipedia.org/wiki/Hyper-V
もちろん、皆さんがお持ちのPCが複数台になると言っても意味がわかりませんし、必要性も普通はほぼないでしょう。
仮想化が注目を浴びているのは「サーバ」周辺です。
例えば
ホームページを置くために必要なWebサーバ
仕事の大切なデータを保管し、共有するファイルサーバー
経理情報なんかを処理する汎用機なんかもありますね。
当社も仮想化はもう欠かせないものになっています。
Webシステムを開発するときに必要なのは、もちろんWebサーバーですね。
1台のWebサーバーで、複数のWebシステムを開発する場合、色々と考えなくてはいけない問題があります。
例えば、本番では、1つの専有サーバーで運用するシステムでも、開発は複数のWebシステムが同居する環境で開発するとします。
しかし、もうこの時点で、すでに本番サーバーと開発環境が同一ではなくなり、場合によっては、開発環境でテストしてOKを出しても、本番環境でもう一度テストしなくてはいけない事態が発生します。
つまり、本来は1つのWebシステムで1つの専有開発サーバーが理想的なわけです。
(本番サーバーと完全に一致させた環境で)
仮想化はこんな時に役立ちます。
ベースOSの上に複数の仮想的なハードウェアを構築し、このハードウェアの1つをサーバーとして使用するわけです。
仮想的なハードウェアに対し、OSのインストールも行い、まるっきり本当に1台のサーバーとして、開発サーバーを構築するわけです。
そして、構築した開発サーバーはそのままコピーして本番サーバーにすることも可能です。
そうすると環境もシステム構成も完全に一致した開発環境と本番環境が手に入るというわけですね。
これならば信頼性の高い動作テストが行えます。
これは我々にとってすごくありがたいことです。
というわけで、当社の開発環境は大部分を仮想化して構築するようになりました。
ところで、最近では物理的なハードウェアをコピーして、仮想的なハードウェアに変換するP2Vという技術もあります。
古いハードウェアの場合、補修パーツがすでに存在しない場合もあります。
このため、古いハードウェアをまるっと仮想化して、延命化するわけです。
例えば古い経理システム等、専用ハードで昔から使っているようなシステムの場合、仮想化は救世主のような技術なのです。
また、Webホスティングサービスの会社も、仮想化した1台を提供するサービスをすれば、専有サーバなのに、共有サーバと似た値段で提供できると考えました。
それがVPSです。
安いところでは、数百円から提供するようになりました。
サービスにばらつきがあり、ひどいところもありますが、何しろ専有サーバをかなりやすいコストで利用することができるので、とても今流行サービスだと思います。
http://kakaku.com/pc/rentalserver/ma_0/s1=3/
Amazon Web Servicesもその一つと考えても問題ないでしょう。
(厳密にはクラウドサービスになっていきますが、それはまた、次回に・・・)
https://aws.amazon.com/jp/
で、この仮想化技術、昔はエミュレータとよく呼ばれていました。
そう、以前ご紹介したこれと根っこが同じ考えなわけです。
http://iaseteam.eshizuoka.jp/e1110170.html

当初は怪しげでなんだか信頼の置けない技術だったわけです。
しかし、考え方は昔からあり、様々な面で利用されてきました。(信頼性は低いけど)
Macintoshでは68K MacからPowerPCに変わるときにOS標準で搭載されましたし、Mac OS XのCarbonやRosettaも同じ考え方だと思います。
http://ja.wikipedia.org/wiki/Mac_68K%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF
http://ja.wikipedia.org/wiki/Carbon
http://ja.wikipedia.org/wiki/Rosetta
※考えてみればMacはアーキテクチャが変わるたびに、綱渡りをして完成度の高いエミュレータを出していたわけですね。すごい!
ところは今は仮想化はトレンド。
何しろ、インテルまで通常のPCにIntel VTという機能を盛り込んでいるぐらいです。
当初はハッカーのおもちゃだったPCが、ビジネスの主流になり、今に至る流れの中、このトレンドも同じ流れの中で進化していったわけですね。
今や、怪しげな技術ではなく、背広着たオッサンたちにとって、非常に重要な技術になったわけです。
つくづくPCの世界は不良がスタンダードを作るのだなぁと思った次第。

不良でヒッピーだった某お人
静岡市の真ん中でふじのくにオープンデータカタログをiOSからたたく
2014年04月11日
現在公開されているiPhoneアプリの大半は、インターネット上に公開されたデータにアクセスして、いろいろな情報を表示するものです。弊社で先日リリースした、「womoグルメ」アプリも自社で公開しているデータにインターネット経由でアクセスしてグルメの情報を表示しています。
ざっくりと処理の流れを示すと、アプリから「インターネットにアクセス」 → 「データを受信」→「データを解析」→「表示処理」という感じになります。では、この流れを行うアプリを作ってみることにしましょう。
使うデータを決める
まず、どんなデータにアクセスするかを考えます。そこで、静岡県が公開している「ふじのくにオープンデータカタログ」の中からデータを探してみましょう。オープンデータとは、行政や公的な機関が持っている様々なデータを二次的利用できる形で誰もが自由に利用できるデータのことをいいます。国の「電子行政オープンデータ戦略」を踏まえ、静岡県が公開するオープンデータをまとめた「ふじのくにオープンデータカタログ」が2013年の8月に公開されました。
「ふじのくにオープンデータカタログ」の「公開データ」のページを開くと、公共施設や防災情報、観光情報などたくさんの情報が公開されていることがわかります。このデータは誰もが2次利用して使ってよいことになっています。つまり、これらのデータを使ってWebサービスやアプリを作って公開することも可能なわけです。
とうことで、「観光・みどころ情報」のカテゴリを眺めていくと、「ふじのくにエンゼルパワースポット」というなんとも神秘的なデータが公開されています。"県民から広く募集した「恋愛・結婚・子宝」にまつわる噂のスポットです"とのこと。では、このデータを使うことを前提にアプリを作ってみます。
データを理解する
「ふじのくにエンゼルパワースポット」のデータフォーマットを確認してみます。形式はCSVファイルとあります。実際にダウンロードしてみましょう。中身はこんな感じでした。
番号,名称,説明,住所,電話番号,問い合わせ先,緯度,経度
165,東雲寺の摩利支天,勝負必勝の神様として有名な摩利支天。本来は安産・航海・大漁・勝負の神様として信仰を集めている。,湖西市神座463,053-578-0716,,34.739,137.495
172,はままつフラワーパーク,大温室・クリスタルパレス内にある、「サボテンの花の咲いているところ」を「好きな人」と見ることができたら、「恋がうまくいく」という噂がある。,浜松市西区舘山寺町195,053-487-0511,,34.762,137.634
170,舘山寺の縁結び地蔵,参拝すれば「縁結び」にご利益があるとされる舘山寺。境内に「縁結び地蔵」がいて、参拝したあと願いが叶ったとのうわさが口コミで広がっている。また「縁結びに効く」絵馬やお守りもあり、合わせて授与されていく人も多いそう。「心に鍵」絵馬を奉納し、良縁の願いを忘れな,浜松市西区舘山寺町2231,053-487-0107,,34.768,137.613
:
:
アプリを作る
さて、ここからは、ちょっと専門的になります。
さきほど、このオープンデータは8項目から構成されていることを確認しました。オブジェクト指向をちょっとかじったことがある人であれば、モデル(=クラス)を作ろうと思うでしょう。Spotクラスとでもしましょうか。

そして、クラスをこんな風に書きます。
1 2 3 4 5 6 7 8 9 10 | @interface Spot : NSObject @property ( nonatomic ,strong) NSString *no; @property ( nonatomic ,strong) NSString *name; @property ( nonatomic ,strong) NSString *description; @property ( nonatomic ,strong) NSString *address; @property ( nonatomic ,strong) NSString *tel; @property ( nonatomic ,strong) NSString *contact; @property ( nonatomic ,assign) CGFloat lat; @property ( nonatomic ,assign) CGFloat lng; @end |
そこで、こういったデータの処理に便利なクラスを紹介します。
NSArray と NSDictionaryです。NSArrayは配列を扱うクラス、NSDictionaryは辞書クラスです。辞書クラスというのは、Key-Value(キーと値)としてデータを扱うクラスです。JavaでいうところのMap、RubyでいうところのHashです。これの使い方は、のちほど、解析処理のところで説明します。
httpアクセスしてデータを取得する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #pragma mark - Request Data -( void )requestData { NSString *urlStr = CSV_URL; NSURL *url = [ NSURL URLWithString:urlStr]; NSMutableURLRequest *request = [ NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@ "GET" ]; [ NSURLConnection sendAsynchronousRequest:request queue:[ NSOperationQueue mainQueue] completionHandler:^( NSURLResponse *response, NSData *data, NSError *error) { if ( error ) { //エラー処理 } else if (data) { //CSVファイルをパースする self .dataArray = [ self parseData:data]; [ self .tableView reloadData]; } else { } }]; } |
データを解析する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #pragma mark - Parse Data -( NSArray *)parseData:( NSData *)data { //Shift-JISエンコードでNSStringに変換 NSString *dataString = [[ NSString alloc]initWithData:data encoding: NSShiftJISStringEncoding ]; //CSVをパース //改行文字でセパレート NSArray *lines = [dataString componentsSeparatedByString:@ "\n" ]; NSInteger lineNumber = 0; NSArray *keys; NSMutableArray *dataArray = [ NSMutableArray new ]; for ( NSString *row in lines) { // 「\r」が含まれている可能性があるので除去する NSString *newRow = [row stringByReplacingOccurrencesOfString:@ "\r" withString:@ "" ]; if ( lineNumber == 0 ) { //1行目が項目名になるためNSDictionaryのKeyとする keys = [newRow componentsSeparatedByString:@ "," ]; } else { //カンマでセパレートしてNSDictionaryを作成 NSArray *items = [newRow componentsSeparatedByString:@ "," ]; if ( [items count] == [keys count]) { NSInteger i = 0; NSMutableDictionary *dic = [ NSMutableDictionary new ]; for ( NSString *key in keys) { dic[key] = items[i++]; } [dataArray addObject:dic]; } } lineNumber++; } return dataArray; } |
まず、受信したデータはNSDataとして渡されます。これをShit-JISとしてデコードしてNSStringに変換します。
データはCSVファイルですので、改行で区切ったあとに、1行づつカンマで区切って項目を見つけていく処理になります。
ポイントは、1行目が項目の見出しになっていますので、これをNSDictionaryのキーとして配列に展開することです。
keysの中身は、こうなります。
["番号","名称","説明","住所","電話番号","問い合わせ先","緯度","経度"]
2行目以降は、対応する項目を先ほど保存したキーとともにNSDictionaryを構築し、NSArrayに格納しています。最終的にこのようなデータが作成されます。
要素[0]
{ 番号 : 165 , 名称 : "東雲寺の摩利支天", 説明 : "東雲寺の摩利支天,勝負必勝の神様として有名な摩利支天。本来は安産・航海・大漁・勝負の神様として信仰を集めている。", 住所 : "湖西市神座463", ........ }
要素[1]
{ 番号 : 172 , 名称 : "はままつフラワーパーク", 説明 : "大温室・クリスタルパレス内にある、「サボテンの花の咲いているところ」を「好きな人」と見ることができたら、「恋がうまくいく」という噂がある。", 住所 : "浜松市西区舘山寺町195", ........ }
:
:
1 | dataArray[1][@ "名称" ] |
これでデータの準備ができました。あとは、これをUITableViewに一覧表示したり、緯度経度があるのでマップ表示したりできます。

最後は、ものすごくはしょりましたが、オープンデータをNSArrayとNSDictionaryをうまく使って表示する方法をご紹介しました。
今回は、CSVファイルの処理についてご紹介しましたが、一般的なWeb APIで取得できるデータ形式は、JSONかXMLです。これらもデータを受信したら、NSArray とNSDictionaryで扱うことでデータを簡単に扱うことができます。
このアプリのソースはGitHubにあげておきましたので、参考にしてみてください(こちらのソースでは、CSVを毎回ダウンロードするのではなく、1度だけダウンロードしてキャッシュするような処理を加えています。
)。また「ふじのくにオープンデータカタログ」をはじめ、今年は、その他自治体でもオープンデータが公開されていくと思いますので、ぜひオープンデータを活用してアプリを作ってみてください。
ふじのくにエンゼルパワースポットは、県のサイトでも公開されています。
ソースコードのハイライトはSyntaxHighlighterを使用しました。
Read More
◯◯◯には向かない職業
2014年04月04日
プログラマーはせいぜい35歳まで
脳みその柔軟性もなくなり
才能も体力も枯れ果てて
全く役立たずの人間に成り下がってしまう、という説です。
さてさて、現在、私の周りを見渡してみますと
一線級の現役エンジニアで35歳以上はゴロゴロしています。
Web業界にどっぷりでアジャイル開発が基本の弊社では
なんだか必然的にそういう人が多くなっています。
さてさて、弊社の35歳以上メンバーを紹介してみますと・・・
松永さん 4◯歳
アプリをガリガリ作る怪しげなおじさん
過酷な状況でもニコニコしながら、難なくこなす。
(きっと腹黒いに違いないナイスガイ)
山口さん ◯◯歳
プログラムをガリガリ書く主婦

100台近くある社内の全てのPCのトラブルを引き受けたりするすごい人(変態かもしれない)
高山くん 35歳
ああもうなんだか

色々なネタのオチに使える人
そして私、近藤も40代です。

※写真はイメージです。
なんだよ、35歳過ぎても現役じゃないか
と、そこで調べてみました。
こんな記事がありました。
35歳定年説の真実
ようはやはりそういう現象は存在するということらしい。
しかし、上流工程のエンジニアや管理職に出世することで現場から離れることも一因とのこと。
本当にそうかなーと思う次第です。
でもう少し調べると
どうやら私なりの結論に至りました。
プログラムのトレンドの移り変わりや
プログラム技術の発展が関わっているように思います。
例えば、今のトレンドではハード周りならならクラウドでしょうか
プログラム技術なら無名関数ですね。
弊社の35歳以上組は
ある意味仕方なく、ある意味好奇心で
こういうのをチャレンジしたりします。
(山口さんは主婦ですがアプリ開発のためにMacintosh Airを購入しています。)
確かに年令を重ね、経験値も増し、出世はするでしょう。
そうなった人で現場から遠ざかる人もいるでしょう。
そうして使い物にならなくなる人もいるのはわかります。
しかし、これを寿命と言っていいのか?ということです。
ここでひとつ思い至ったわけです。
昔、オブジェクト指向が理解できるか、できないかで
プログラマーの壁が生まれた時期がありました。
(調べたら未だにあるようです。)
理解できたと言って、自慢気になっている人もいました。
こいつらのお陰でオブジェクト指向がある意味宗教みたいになった面もありました。(所詮、便利にする道具じゃないか)
つまり、プログラムの技術革新や進化の中で
拒否する人と、拒否しない人がいて
若いうちは逆らえないから
上司の言うままに習得した技術も、出世すれば習得しないわけです。
つまり、単に向いていないだけじゃん。
寿命って言うな。ってことです。
マルチタスクOSになった今のWindowsの基礎を作った
デヴィッド・カトラーは60歳超えてもソースコードを自ら記述しています。
森田将棋の森田和郎さんは『サムライスピリッツ零』等のプログラムを担当し、一昨年、57歳でお亡くなりになるまで現役のプログラマーでした。
結局、「プログラマー35歳定年説」とは
ある種の向いていない人たちのずいぶん馬鹿にした話なんじゃないかと
私は結論づけたわけなのです
(間違ったらすみません。)
ちなみに私、近藤が最近楽しく学んだのはFuelPHPでした。
このフレームワーク、欲しい機能が色々最初から入っている。すごい!!
弊社がお誕生日会で利用した、静岡のステキなレストラン 10選!
2014年04月02日
私は1月生まれのみずがめ座。もう先々月になりますが、勤務先の会社でも誕生会を開いていただけました♪
弊社では、星座や誕生月などごとに誕生会を開催してもらえるのです(会長のご厚意により!)。
普段は一緒に仕事しないメンバーもいて、交流を深める貴重な場となっています。
そこで、実際に利用させていただいた美味しい&ちょっと特別なお店を、各会参加者のコメントとともにお送りします。
あなたの大切な人の誕生日会に、ぜひ参考になさってください。
※掲載店以外にもすてきなお店がたくさんあるのですが、それは次の機会に・・・❤
2013年

みずがめ座
BEER&WINE RESTAURANT RISSO
「女性はもちろん男性も大満足!
デイリーに使える大人のダイニングバー」
(参加者の感想)
いやぁ、どれも美味しかった。ワインも。
お店も店員さんの対応も特別感いっぱいで幸せ。
ちょっとお高いコースでぜいたくな思いを満喫いたしました!

うお座
洋食Restaurant あんじゅーる
「北欧に佇むような温かレストラン
洋食のごちそうで忘年会・パーティを」
(参加者の感想)
長く続けられているお店で、おちついていて、大切な人と過ごすにはぴったりだと思った。
寒かったので、欧風の家庭的な雰囲気が良いシチュエーションを演出していた!

牡羊座
欧和食堂 Caravin
「日常づかいにピッタリな
ビストロ料理&ワインの店」
(参加者の感想)
今まで食べたイタリアンで一番美味しいとおもった。
ほんとに美味しかったので、今度行きましょう。

牡牛座
Rotisserie Un Deux
「味わえばファンになること間違いなし!
絶品ロースト料理を大切な人に贈ろう」
(参加者の感想)
もうほかのローストチキンは食べられないかも!って感想は有名な話。

双子座
駿河ダイニング 伽音 (※残念ながら、閉店されました)
「駿河の美味を粋な和食で
季節の特別メニューを堪能して」
(参加者の感想)
ケーキを出してもらいました!
和食で誕生日会ってあまりイメージになかったけど、わいわい楽しめました。

蟹座・獅子座
BISTRO&WINE FIGARO(フィガロ)
「おいしいフレンチとワインを楽しむ
立ち飲みスペースも小粋なビストロ」
(参加者の感想)
外観が白くておしゃれで、行ってみたいお店だったのでうれしかった!
お料理もおしゃべりもたのしめました。

乙女座
Bistro HaRyu はりゅう
「本格的な料理をカジュアルに…
リピート確実の魅惑のビストロ 」
(参加者の感想)
womoグルメでも人気のビストロ。
特別な日にここなら絶対外れない!って感じですよ。

天秤座
酉泰 静岡
「ブランド鶏の焼き鳥×ソムリエ厳選ワイン
大人女子のためのおしゃれな焼き鳥屋」
(参加者の感想)
やきとり美味しかった!焼き鳥!!!

蠍座
Bistro VIVACE
「“いいお店”の条件をすべて満たした
大人のためのビストロ」
(参加者の感想)
コース料理のボリュームがすごかったので男性も満足してた。
ビール、ワイン、ソフトドリンクといった大人の飲み放題セットで大人の階段を上った気分でした!

射手座
BISTRO&WINE FIGARO(フィガロ)
好評につきふたたび登場♪
2014年

1月生まれ
Le Comte
「普段も、特別な日も、2軒目使いにも
毎日でも通いたくなる駅南ビストロ」
(参加者の感想)
駅南でおしゃれな雰囲気がピカイチで、かつ隠れ家的でいい雰囲気。
レバーペーストとワインが忘れられませんのでまた行きます。
みなさんもぜひ、womoグルメですてきな誕生日会を!
(今回の写真は、すべてwomoグルメから使わせていただきました。)

そうそう、最近womoグルメのアプリが新しくなりました。
エリアからでも、現在地からでも、ジャンルからでも、クーポンからでもお店が探せて、情報満載、写真もキレイ。
サクサク動くし、お店までのルート検索もスムーズ。本当に楽しく使えます。
浜松や沼津・三島のお店も探せます。
東京じゃない街でこんな充実したグルメアプリがあるのは珍しいんですって。
ぜひ利用して、快適グルメライフをエンジョイしましょ!
ダウンロードはこちら。または、AppStore にて「womoグルメ」で検索♪
https://itunes.apple.com/jp/app/womogurume/id378991686?mt=8
※現在はiPhone用のみです。