サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
taichino.com
チケットは同じチームの別の人が当てたのですが、休暇取るから行けないというので、棚ぼたで行ってきました。初めてのWWDCと言う事で勝手がよくわからなかったのですが、@nakiwoさん(以下敬称略)に色々教えてもらいまして、なんとかなりました。せっかくなのでダラダラと雑感を書きます。 keynoteの為に並ぶところ 教えてもらうまで知らなかったのですけど、keynoteは並ばないと会場に入れません。@nakiwo が3時から並ぶと言っていて、1600ドルのチケット買って7時間並ばないといけない設計に唖然としましたが、初めてでKeynoteをスキップする度胸も無く、仕方なしに僕も3時から並びました。iHeartRadioからは僕ともう一人来てたのですが、彼は並ぶのは嫌だと言うので、僕は一人で行くはめになりました。並んでみると真後ろに、日本人のグループが並んでいて、最初は声かけたら負けやと思ったの
Google Glassはまだ一般には販売されてなくて、あらかじめExplorer Programに申し込んでおいて、枠が空いたらメンバーに招待される感じになっています。しかもアメリカに住所がないと買えません。僕は1年くらい前に申し込んで、ようやくInvitationが送られてきました。まぁ1500ドルとか笑えない金額なんですけど、せっかくアメリカに住んでるし、ウェアラブルコンピュータが次のトレンドっぽいし、Androidも覚えたいし、ボーナスも貰ったし、まぁいいかというので買いました。 開封 家に直接送ってもらう事も出来るんですけど、僕はチェルシーマーケットにあるGoogleのオフィスに取りにいきました。そうするとフレームの調整とか最初の設定とかアップルストアでいうところのジーニアスバーのノリで教えてもらえます。まぁ英語キツかったですけど。実際はその場で開封したんですけど、以下は家でもう
iOS7以降、主なアプリはほぼフラットなスタイルに移行していますね。iHeartRadioでもフラット+iOS7対応は一旦完了しているものの、まだ試行錯誤の途中でバージョンアップ毎に結構デザインを変更しています。 そこで問題になるのがリソースの管理です。プロジェクトの体制にもよると思いますが、一般に新しいファイルの追加は簡単でも、古いファイルを削除するのは本当に使われてないか確認するコストが高くて面倒です。そうして気がついたらプロジェクトの中が古い画像ファイルだらけになっていて、これは良くないなというので使われてない(かもしれない)画像ファイルを列挙するスクリプトを書きました。 RubyにはXcodeprojというXcodeのプロジェクトファイルを色々弄れる便利なRubyGemがあります。Cocoa Podsでも使われているモジュールで、最初はPythonにポートして使おうと思っていたので
「僕が英語話せないのは日本の教育のせい」と書いたところ、結構反応を貰いまして、そのうち半分くらいは批判的な内容でした。まぁ皆さん厳しいですね。コメント欄も結構荒れています。プチ炎上と言っても良いかも知れません。文章がまずかったのもあって、誤解されている部分があったので補足を書きます。 コメント頂いた皆さんありがとうございました。賛否どちらの方も結構ガッツリしたボリュームで、コメントを書いてくれていて、1つ1つ返せないので、このエントリで大雑把にコメント全体への返信とさせてください。 まず書きたかったのは次の事です。 他国から来てる非ネイティブに比べて、自分も含めて日本人の英語での会話能力が軒並み低い。これは日本の文法偏重の英語教育の結果だと思う 英語できなくてツラい! 何でも無いです。そしてそれ以外の事は別に言うつもりはありませんでした。 文法軽視してない 別に文法が要らないとは言っていま
InstagramがPgBouncer使っているというので、試してみようと思って忘れてたのですが、ふと思い出したので使ってみました。 とりあえずインストールします。現在の最新は1.5.4でした。pgbouncer.iniとuserlist.txtを忘れず/etc/pgbouncerにコピーしておきます。 $ sudo yum install libevent-devel $ cd ~/src $ wget http://pgfoundry.org/frs/download.php/3393/pgbouncer-1.5.4.tar.gz $ tar zxvf pgbouncer-1.5.4.tar.gz $ cd pgbouncer-1.5.4 $ ./configure $ make $ sudo make install $ sudo mkdir /etc/pgbouncer $ sud
30才目前でこんな事をいうのはアレなんですけど、もう愚痴らずにはいれないです。 iHeartRadioで働き始めて1ヶ月が経ちました。技術的なスキルの観点では通用してるので、プログラマ的な仕事はこなせてますが、英語が全然通用してないです。これで良くチームに受け入れてもらってるなと思います。 ジョブインタビューではそこそこ大丈夫だったので、意外となんとかなるんじゃないのと思ってたのですが、対面でかつ1対1で、さらに相手がソコソコ気を使ってくれていて、やっとコミュニケーションが取れる状態なんだと痛感している毎日です。 まず雑談がキツいです。1日に数回くらいの頻度で、冗談とか仕事の愚痴(この部分のコードが汚い的な)を誰かが言い出して雑談タイムになります。周りの皆が盛り上がってる中で、会話に入れないので僕だけヘラヘラ笑いを浮かべながら仕事しています。この時の疎外感っていったらありません。仕事の愚痴
先ほどMacがOSごとクラッシュしました。バックエンドにSQLiteを使ったクローラを走らせていたのですが、再起動してデータベースを叩いてみると、表題のエラーがでてデータにアクセス出来なくなりました。2週間ほど回し続けていたデータなので、一瞬変な汗をかきましたが、復元出来たのでメモ書きを残しておきます。 ちょっとググったら、このページが見つかったので、とりあえず書かれていた内容を試してみました。一旦壊れたデータベースのダンプを取って、データベースを作り直す方法です。 $ sqlite3 corrupted.db sqlite> PRAGMA integrity_check; # データが壊れているのを確認 Error: database disk image is malformed sqlite> .mode insert sqlite> .output dump_all.sql sql
先日カッコいいと書いたBlitzを、頑張ってiOS用にビルドしたという話です。 元々Blitzに限らずC/C++で書かれたライブラリがiOSに対応している事はまれで、あーiOSに対応してたら使いたいのになーというシーンはちょくちょくあります。なんですけど、.frameworkを作ろうとすると.xcodeprojを作ってどうのこうのという話になりがちで、普段Autotoolsでビルドしているソースツリーに特定のしかもプロプリエタリなIDEのプロジェクトファイルを追加するとか、醜すぎて誰もやりたくないわけです。 ところが最近OpenCVがiOS用の.frameworkのアーカイブを別途配布しているのを知りまして、どうやってビルドしてんのかなと見てみると、CMakeで一旦xcodeprojを吐いてから、xcodebuildという流れになっていて、それをPythonスクリプトで纏めて、ワンコマンド
働き始めて2週間経ちました。個人的な嗜好でいうと、働くのは別に好きでも何でも無いというか寧ろ嫌いなんですけど、環境が新しい事だらけなのもあって今のところ毎日楽しいです。それで実際働いてみてすげー思ったのが、アメリカはやたら余裕があるなという事です。 例えば僕の所属してるチームの労働時間。フレックスなので一定しませんが、皆さん平均すると10:30前後に出社して18:00前後に帰って行きます。ランチもゆったりで作業してるのは6時間位です。僕は今張り切っている事もあって、9:00頃から19:30頃まで働いているのですが、その程度で僕が一番長い時間働いています(全社で)。それなのに、就活記録のエントリでも書きましたが、給料は日本の相場の2倍は楽勝です。そうすると、働く時間半分で給料2倍なら、単位時間辺りのパフォーマンス4倍必要なはずなので、どんなけバケモノぞろいやねんと戦々恐々としていましたが、別
今年の1月末位から就職活動をしてたんですが、一昨日iHeartRadioにモバイルエンジニアとして採用されまして、来週くらいから働く感じになりそうです。せっかくなので就職活動を始めて採用されるまでの記録を残しておこうと思います。 概要としては6社検討しまして、5社にアプライ、3社落ちて、1社は受かって、1社に途中で断りを入れたという感じです。長いです。 僕のスペック スキルは一般的なモバイルエンジニア(C++/Objective-C)と一般的なWebエンジニア(Django/Python/JavaScript)を足したような感じです。どっちもできるけど、どっちも中途半端な感じは否めません。ドラクエの勇者を目指していますが、今のところFFの赤魔導士です。 githubでは幾つかPythonモジュールを公開していますが、どれも大した事無いです。croniterというモジュールに37個スターがつ
ちょっと画像の類似度を使って分類実験したいと思います。 それでどうやって画像の類似度を測ろうかなぁと悩んだのですが、その画像を代表する幾つかの色でパレットを作って、その距離でもって類似度にするのが簡単そうなのでやってみることにしました。 なお画像の特徴色は正式な言葉ではありません。英語だとDominant Colorという単語はあるようですが、対応する日本語はわかりませんでした。この記事ではDominant Colorの意味で特徴色と書きたいと思います。 Median Cut じゃあどうやって特徴色を抜き出そうかなと色々調べていると、よくよく考えてみると当たり前なんですが、画像の減色処理で同じような事が行われているというのが分かりました。そして減色処理で使われてるらしいアルゴリズムにMedian Cutというのがあります。 Wikipediaに説明が無いので、ざっと書くと以下のようなアルゴ
面倒で放置してますが、2年くらい前からPySideを覚えたいなーと思っていました。昔少し触ってたんですけど綺麗に忘れていて、やっぱり記事書きながら覚えていこうと思います。 まずインストール。本来はPython3.x環境で使った方が良いらしいので、pipで入れようとしたのですが色々エラーになって解決出来ませんでした。まだ本気じゃないのでbrewで良しとしています。/usr/local/lib/python2.7/site-packagesにインストールされるのでパスを通しておきましょう。 $ brew install pyside 何も覚えてなかったので、チュートリアルの最初の方を見ながら、画像を読み込んで表示するだけのコードを書いてみました。 #!/usr/bin/env python # -*- coding: utf-8 -*- import os from PySide import
StackOverflowでHidden features of Pythonという面白い質問がありました。原文の方では何十も項目があるのですが、独断と偏見で9個に絞って紹介します。 1. chaining comparision operator 不等式を連結出来るなんて初めて知りました。スーパーかっこいいです。今まで1 < x and x < 10とか書き続けてました。 x = 5 if 1 < x < 10: print "yay" if x < 10 < x*10 < 100: print "yaay!" if 5 == x > 4: print "yaaay!!" 他の言語でも出来んの?と思ってちょっと調べてみましたが、どうもPythonだけっぽいです。やっぱりPython最高ですね! 2013.03.05 追記 twitterで突っ込まれました。Pythonだけって言うのは嘘で
とりあえず最新Stableの3.3をインストールしないと試せないですね。brewだとformulaがまだ無くて、この辺からも普及してなさが伺えますが、仕方が無くMac用のインストーラを使いました。 またPython3.3からはvenvというvirtualenvと似た機能がビルトインされている様なので、そちらを使って環境を作ります。本体はvenvというモジュールですが、コマンドライン用にpyvenvというコマンドが用意されています。venvはデフォルトでdistributeもpipも入らないので、自前で入れる必要があって若干面倒です。まぁ公式モジュールなので仕方ないかもしれません。あとiPythonが3に対応してたので安心しました。 $ which pyvenv-3.3 /usr/local/bin/pyvenv-3.3 $ pyvenv-3.3 py3x_test $ tree . ├──
先日Bargain Netの英語対応を行いました。何度か英語の対応はやってるはずなんですけど、毎回覚えてなくて調べ直すのでメモ書きです。 settings.py まずsettings.pyの設定です。USE_I18N等の設定に加えて、LOCALE_PATHSに翻訳ファイルのサーチパスを通しておく必要があります。毎回こんな設定あったっけと思います。 USE_I18N = True USE_L10N = True MIDDLEWARE_CLASSES = ( ... 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', ... ) LOCALE_PATHS = ['%s/../myapp/locale/' % (PROJECT_ROOT,)] 翻訳
今まで自分のサーバでまともなメンテナンスをした事がなかったのですが、PostgreSQLをRPMの8.4から自前ビルドの9.2にアップデートしたいということで、そうすると結構な時間サービスを止めるので、その間メンテナンスページを表示したいと言う事です。 ちょっとググると良い感じで下記2ページが見つかりました。 Nginxでrestart, reloadをすることなくメンテナンス画面に切り替える nginxで特定ホスト以外からのアクセスをメンテナンス画面にする方法 (2) 上記参考ページを元にしたnginxの設定が以下です。/var/tmp/.maintenance_modeファイルがあるときにメンテナンスページを表示します。自分のIPとメンテナンスURLを除外したりと参考ページのほぼ丸パクリです。 server { ... set $maintenance false; # ファイルがある
このエントリを読んでからfluentdを導入したいと思ってたのですが、手元に頑張って監視するに値するサーバが無くてほったらかしてました。最近Bargain Netが監視しても良いかな位になったのでfluentdを導入してみました。先ほどのリンク中のスライドでzabbixにグラフを書かせてたので、真似してzabbixもついでに導入しています。 まずfluentdをインストールします。td-agentという名前でRPMパッケージが提供されていますので、そちらを利用します。 $ vi /etc/yum.repos.d/td.repo --- [treasuredata] name=TreasureData baseurl=http://packages.treasure-data.com/redhat/$basearch gpgcheck=0 $ sudo yum install td-agen
先日uWSGIのログをfluentdで取り始めたと書きましたが、寝て起きてみると早速問題が発生していて、zabbixにデータが送られてなくてグラフが空の状態になっていました。何で、と思ってみて見るとuWSGIのログが空になっていました。どうもログローテートが走った後にuWSGIがログを開き直しておらず、新しいファイルが空のままになっていたようです。これは酷い。 それでどうするんだっけと、/etc/logrotate.d/の他のファイルをチラチラ見てると、HUP送ったり再起動したりするのが定石っぽいので、uWSGIでもそうするのかなと思ってuwsgi –helpを読んでいると、 --touch-logreopen というオプションを見つけました。このオプションにファイルを指定すると、そのファイルを監視して変更されたタイミングでログを開き直すというものです。再起動するよりコチラの方が良さそうな
先日Googleからペナルティを貰ったBargain Netですが、Amazonからも問題児扱いされました。実は最近までAmazonのアフィリエイトにサイトの追加申請が必要なのを知らなくて、本ブログのリンクを流用していました。それはマズイなと思ってサイト申請をしたのですが、3回程審査に落ちたので記録しておきます。 突然ですが、Amazonの審査に落ちると下記のようなメッセージが来ます。僕の場合は審査を通さずアフィリエイトリンクを使っていたので、リンク撤去の指示も含まれています。 松本様 Amazon.co.jpアソシエイト・プログラムにご興味をお持ちいただき、ありがとうございます。 このほどご連絡いただいた追加を希望されるURLの内容を確認させていただきました。 残念ながら当プログラムでの審査基準に合致しなかったため、 このほどご連絡いただいたURLの追加を承認いたしかねますことを ご了承
ちょっとGoogle AnalyticsのWebだとやりにくいアクセス集計がやりたくて、Analytics APIを叩いてみました。以前Google CalendarのAPIを使った事があるので大丈夫かと思ったら、結構手間取ったので記録しておきます。 まずコードを書く前に準備が必要です Google APIコンソールでAnalytics APIを有効にする Google APIコンソールからclient_secrets.jsonをダウンロードしておく それで何に手間取ったかというと、Analytics APIにはCollectionとConfigurationとReportingの3つの機能があるのですが、訪問数とかページビューとか取得するのがCollectionだと思い込んでいて、中々機能が見つかりませんでした。欲しい機能はReportingでした。なおドキュメントはコチラ。 それでコー
HelloWorldができたので次は画面遷移をしたいですね。それで適当にググりながら下記の様なコードを書いてみたのですが上手く動きません。アニメーションされずにパッと画面が切り替わってしまいます。 // 実験1 var win = Ti.UI.createWindow({backgroundColor: 'blue'}); var btn = Ti.UI.createButton({title: 'push to open'}); btn.addEventListener('click', function() { var win2 = Ti.UI.createWindow({backgroundColor: 'red'}); win2.open({animated: true}); }); win.add(btn); win.open(); そこでwin2.openを呼び出す際のプロパテ
CentOS上で動かすuWSGIをデーモンとして扱いたかったのですが、起動スクリプトを書いたことがなかったので少し調べてみました。 軽くググると/etc/init.d/skeletonにテンプレートファイルがあるという事だったのですが、手元のCentOSでは存在しませんでした。一方でUbuntuでは存在を確認できたのですが、UbuntuのテンプレートファイルをCentOSでそのまま流用はできないようです。 もう少し調べてみると、手元のCentOS 6.2の場合は下記のファイル内に、起動スクリプトのテンプレートが含まれていることがわかりました。(パス中の数字は環境によって異なりそうです。) /usr/share/doc/initscripts-9.03.27/sysvinitfiles 上記ファイルからテンプレート部分を抜粋したものが以下になります。 #!/bin/bash # # /etc
以前、BeautifulSoupでのスクレイピングのまとめを書きましたが、ベンチマークを取ってみるとlxmlの方が圧倒的に速いので、lxmlが使えるならlxmlを使った方が良いです。それで久々にlxmlを使おうとしたら、例によって全く覚えていなくて悲しいのでメモ書きです。 基本的にはXPathを使いまくるだけです。BeautifulSoupとかに比べると、正規表現の指定方法が複雑ですね。ハマりポイントは以前も少し書きましたが、positionを指定する際に、//(descendant-or-self)とdescendantは違うという事です。直感的ではないのですぐ忘れてしまいます。注意しましょう。 #!/usr/bin/env python # -*- coding: utf-8 -*- import lxml.html html = ''' <html> <body> <div id="
学校が始まったのと、触っていくにつれてTitaniumが銀の弾丸ではない事が分かってきて、ペースダウンしてしまっているのですが、一応継続してTitaniumの習得を試みています。 表題の件なのですが、Titaniumの1.8以降ではシングルコンテキストなコーディング作法というのが推奨されています。その作法ではrequire関数でモジュールをロードします。まぁrequireを使っている分にはあまり疑問も無かったのですが、先日試してみた軽量ORMのjoliに含まれていた以下のコードを見て疑問が湧いてきました。 /** * In case joli.js is loaded as a CommonJS module * var joli = require('joli').connect('your_database_name'); * var joli = require('joli').co
同一View内に2つTableView A,Bがあって、AからBにドラッグドロップする機能を書きたいんですが、現状のTiUITableViewだとセルをつかむ処理をフックできなさそうなので、モジュールを作ってみようと思います。 まずは空のモジュールを作ってみます。例によってiPhone用です。公式ドキュメントの通りにやればできるのですがハマりました。何処かにidはネームスペースと書いていたので、モジュールはid.nameの形式になると思い込んでいてハマりました。以下の例だとcom.taichinoがモジュール名です。firstmodに意味はありません。 このコマンドを打つと、モジュール用のxcodeprojが生成されます。このxcodeprojに変更を加えてビルドするとモジュールができる仕組みです。プロジェクトのディレクトリ構造は以下のようになっています。Classes以下に普通にObje
先日のSNMPに続いてRRDtoolの使い方を調べています。設定などが面倒なのちょっとサーバ管理したいだけならCactiなどを導入した方が楽だとは思うのですが、僕はサーバのリソース管理以外にもRRDtoolは利用できるシーンがたくさんある気がしているので敢えて頑張ろうという事です。基本的な手順は以下の通りです。1,3が複雑なので慣れるまでは辛いです。 rrdファイルの作成 rrdファイルにデータの保存 rrdファイルからグラフの作成 とりあえず簡単そうなロードアベレージを取得してグラフにしてみます。 1. rrdファイルの作成 早速rrdファイルを作ります。 $ rrdtool create load.rrd \ --start `date +%s --date "2012-04-08"` \ --step 300 \ DS:load:GAUGE:600:0:U \ RRA:AVERAGE
OSXで共有ライブラリを触ったことがなかったので、試しにdylibを作ってみました。Linuxだと.soですがOSXだと.dylibのようですね。フォーマットの差異については調べていません。Appleの「Dynamic Library Programming」というドキュメントのさわりだけ参考にしました。 まずdylib側のコードです。ただのHelloWorldですね。 /** * hello.c */ #include <stdio.h> void hello_dylib() { printf("hello dylib world!\n"); } これをdylibにコンパイルします。-dynamiclibオプションを指定すると直接dylibを生成できます。簡単ですね。一応otoolでできたdylibを確認するとfiletypeがDYLIBになっています。 $ gcc -dynamicli
先日のRecipinterestですが、まぁまぁ時間かけた割に1日のアクセス数が10とかで悲しいです。自分のアクセス抜いたら一桁じゃないですか。これはもうアカンとしても、流石に勿体無いなと思いまして、使い回したろうという事で、今度はAmazonの割引率の高い商品をひたすら並べてみました。名前はBargain Netです。たまにブラッと見てみると掘り出し物が見つかるかもです。 アクセスはコチラから。これ見てると、「何故か水が安い」とか「謎の高級炊飯器が投げ売られてる」とか分かって、割と面白いんじゃ無いかと思うんですけど、どうでしょうか。 最初はAmazonのAPI叩いてたんですけど、レスポンスがXML形式のみだったり、サーチオプションがWeb上の機能より少ないなどイマイチだったので、スクレイピングに切り替えました。amazon.co.jpのページが未だにShift_JISだというのに驚いた以
あまり使う事はないのですが、たまにあれどうするんだっけと思うので記事にしておきます。 とりあえず何となく自分で書いてみたのが以下のようなコードなんですが、タグも取りきれてないし色々微妙で、正規表現面倒くさくて辛いです。 def strip_tag(url): resp = requests.get(url) texts = re.findall(r'<[^>]+?>(.+?)<\/[^>]+?>', resp.content) return " ".join(texts) それでなんか無いのと思って調べていると、DjangoとNLTKがHTMLからタグを取り除くユーティリティ関数をもっている事がわかりました。こちらがDjangoのユーティリティ関数。別に何でもないですが、あーテキスト取り出すんじゃなくてタグを消せば良いのかということですね。 # django/utils/html.py d
次のページ
このページを最初にブックマークしてみませんか?
『taichino.com – 永遠のネバーランド』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く