サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
kkinukawa.hatenablog.com
元ミクシィのエンジニアによるex-mixi Advent Calendar 2017の3日目を拾ったk_kinukawaです。 自分のミクシィ在籍期間は2010年から2014年までで、主にiOSアプリの開発を行っていました。 その後ヤフーを経由して、現在は株式会社Subotという会社で代表取締役&エンジニアをやっています。 アドベントカレンダー書くぞ!と久しぶりにこのブログを開いて、最終更新が2年前の大晦日で何故かUITextViewの余白を消していて、時の流れの速さと過去の自分は他人という言葉の意味をひしひしと感じております。 Go書くぞおじさんになった話 1日目のmasartz氏、2日目のKAKKA氏が真面目に書いているので、ここらでネタを一つ。 今年の春先から秋にかけて、自社サービス絡みでひたすらコードを書く期間がありました。 誰しも、孤独と戦いながらやり遂げなければいけない時がある
Plannahの紹介と、新プロダクト立ち上げにまつわるいくつかの開発話 5月からミクシィ社内ベンチャー的な取り組みであるイノベーションセンターに所属し、Plannah(プランナー)というサービスの技術責任者をやっています。 新しい環境で一からサービスを立ち上げるというのは、mixiという既に大きくなってしまったサービスの開発とは違った刺激があり、毎日とても楽しいです。 得られた経験は、このブログやmixi Engineer Blog、その他色々な場所で徐々に出していければいいなーと思っています。
今までGHUnitを使っていたのだけど、久しぶりに新しいプロジェクトで使おうとしたらXcode4.5以降でCLIから実行ができないバグがあって困った。 githubを見ると、Oct 25, 2012でコミットが途絶えている。 ちょっと悩んだけど、せっかくなので別のテストフレームワークを試してみることにした。 最近(今頃になって)RSpecすごいなーと思うことがあったので、BDDなKiwiを使ってみることにした。 半日くらいハマりながら、jenkinsで動かす所まで来たのでメモ。 kiwiを動かす まずはkiwi wikiを参考に、kiwiを動かせるようにする。 https://github.com/allending/Kiwi/wiki/Getting-Started-with-Kiwi-2.0 環境は、Xcode4.6.1 Cocoa Podsが入っている前提で。 kiwiSampleと
ふと気になったので実験してみた。 Objective-Cの@synchronizedは、つまりはmutexらしい。 Appleのドキュメントに書いてあった。 例えば、 @implementation Singleton @synthesize count; static Singleton* singleton = nil; + (id)sharedObject{ if (!singleton) { singleton = [[Singleton alloc]init]; singleton.count = 0; } return singleton; } - (void)increment{ count ++; NSLog(@"%d",count); } @end こんな感じでシングルトンなオブジェクトを用意して、incrementをGCD使って10万回呼んでみた。 Singleton
電球をインターネットに接続したSparkプロジェクト – 一体何ができるのか? - Tech Crunch http://jp.techcrunch.com/archives/20121116kickstarter-spark-connects-your-lightbulbs-to-the-internets/ 自分は2009年の未踏IT人材育成事業でTrangramというシステムを作りました。 http://www.trangram.cc/ Sparkプロジェクトの記事を見ながら、最近Trangramやっていた頃のことを振り返る機会が多くなってきたなーと思ったので、なんとなく書きだしてみます。 ■■■ 未踏が終わったあと、Trangramをもっと完成度の高いものにし、世の中の多くの人に使ってもらいたいと思いました。 そのために、会社を作り、資金を集め、開発を継続したいと思いました。 ただ
BaaSをいくつか評価している。 その中でも、KinveyとParseがなかなかよさげ。 Kinveyを評価している中で、Push通知がうまく使えなかったのでメールを送ってみたところ、すぐに返事が来た。 証明書周りの設定をした上で、AppDelegateの中で #import <KinveyKit/KinveyKit.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKe
本家のチュートリアルを見ながら進めた。 [kinukawa@Kinukawa-no-MacBook-Air] # brew install mongodb ==> Downloading http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.0.3.tgz ######################################################################## 100.0% ==> Caveats If this is your first install, automatically load on login with: mkdir -p ~/Library/LaunchAgents cp /usr/local/Cellar/mongodb/2.0.3-x86_64/homebrew.mxcl.mo
iOS4までは、JSONを使うためにはjsonframeworkなどの外部ライブラリを使用しなければならなかった。 iOS5には、NSJSONSerializationというクラスが加わり、これで外部ライブラリに頼ることなくJSONをゴネゴネできる。 基本的な使い方として、 + dataWithJSONObject:options:error: NSDictionary/NSArray => NSData +JSONObjectWithData:options:error: NSData => NSDictionary/NSArray + isValidJSONObject: NSDictionary/NSArray => NSDataへ変換可能か? これに加えて、+ JSONObjectWithStream:options:error:や+ writeJSONObject:toStrea
Windows8のConsumer previewが公開された。 Developer previewの頃からかなりいいOSだなーと感じていたが、Consumer previewは一気に完成度が高まったのでかなり興奮している。 Windows8は、ウェブエンジニアこそ注目すべきOSだと思っている。 自分の考えをだらだら書きだしてみる。 前提として、Windows OSというのは、歴史的に見て数字的なインパクトが大きい。 なんの根拠もないが、8もたくさん売れると思う。 そんな8が、Metro style appのモードを採用したのは、ウェブエンジニア的にはかなり重要なポイント。 なぜなら、ブラウザからウェブアプリを利用するという流れが一気に変わってしまう可能性があるから。 Windows8のMetro style appは、PCからアプリケーションを利用するという体験を変える。 ただ、全く新し
30歳になりました。 20歳からの10年間は、充実した10年間だったと思う。 10年前、地元長野のデジタルカメラ製造会社で働いていた。 コダック製のデジタルカメラのOEMを請け負っていた会社で、設計から製造、品質管理まで社内にある、中規模の会社だった。 デジタルカメラは当時最新のハイテクガジェットで、まだまだフィルムカメラが主流だった。 高卒で入社し、まずは製造部門で組立をしていたので、ハンダ付けがやたらとうまくなった。 一日中ラインに入っている仕事は1日で飽きてしまい、時計が全然進まないことに絶望した。 19歳になった頃に異動することができ、生産技術の仕事になった。 設計されたデジタルカメラをどうやって生産できるようにするのが仕事だった。 20歳になった頃は、世の中、これからは中国で物を作る時代だ!ということで、右も左も中国を叫んでいた。 自分たちも社内で製造をしなくなり、上海の工場でデ
Lionではライブラリフォルダがデフォルトでは非表示なのね。 chflags nohidden ~/Library コマンドラインでこれを打てば表示される。 その他の見えないフォルダもこれで表示できると思う。 Firefoxの環境移行をする。
http://blog.xebia.com/2011/03/ios-xcode-4-ghunit-mobile-tddcontinuous-testing-part-2-of-n/ このページに詳しく書いてある。 このとおりにやったら動いた。 このページは英語なので、日本語でやったことを羅列する。 (リンク先の写真を見ながら進めると分かりやすい) GHUnitをダウンロードする。 https://github.com/gabriel/gh-unit GHUnitIOS-0.4.28.zip 解凍すると、GHUnitIOS.frameworkが出来上がる。 AddTargetでViewBasedTargetを作る。 include Unit Testsはチェックしない。 名前はTests。 プロジェクトツリーの一番上、青いアイコンでプロジェクトの名前が書いてあるセルをクリックすると、プロジェ
iPad2使っていますか? 初代iPadも素敵デバイスでしたが、iPad2はもっと素敵デバイスです。 単純なスペックアップのマイナーチェンジと思いきや、使い心地が本当に良いです。 そしてスマートカバー、買う前はイマイチかなーと思ってましたが、実際に使ってみるとこれまた最高。 Appleに対するこの気持ち、まさしく愛だ!! というわけで、お風呂のフタに似ていると評判のスマートカバーを、お風呂のフタから作ってみました。 昼過ぎに思い立って、結局動画までつくってしまいました。 暇なわけではないです。 材料 2年くらい前から使っているお風呂のフタ 家に転がっていたネオジム磁石 妻の持っていたフェルト生地 接着剤 成果物 (ニコニコ動画に動画を綺麗に上げる方法がわからない) 詳細 裏面にはフェルトを張っているので、本物のスマートカバーと同様に「使っているだけで画面が綺麗に拭き取られる」仕様。 カバー
このページと、iPhoneDeveloperCenterのLazyTableImagesというサンプルを参考に実装。 ほとんどLazyTableImagesを真似たものだけど、必要な部分だけ取り出してGithubにおいた。 AsyncTableViewSample ざっくりとした方針は、 cellForRowAtIndexPathの中で、 キャッシュヒットしたらそれを表示 なければ、デフォルト画像を表示、 この時、テーブルが動いてなければ、画像ロードを投げておく(非同期) テーブルの動きが止まったら, 今見えているセルの画像ロードを投げておく(非同期) 画像ロードのレスポンスが届いたら、 該当テーブルセルに画像を表示 キャッシュに画像を入れておく なぜ「テーブルが動いていないとき」にこだわるかというと、 UITableViewは、表示に困らない最低限のセルしか作らない。 テーブルを動かし、
目標が出来れば、色々と行動がしやすくなる。 そこにいたるまでの道筋を、逆算していけば良い。 何年後にどうなっていると決めて、そうなるためにはあれをやってこれをやって、、と考えていくと、今やるべきことがはっきりしてくる。 モデルケースとなる人や事象がある場合はもっと良くて、その人が何をやって今に至るのかを調べて真似すれば良い。 もちろん、逆算したり真似したりしても同じように行くわけはないけれど、間違いなく一歩踏み出すことができるし、ある程度のところまでは進むことができる。 途中でうまくいかなくなってきたら、自分流にアレンジをすればいい。 先ずは、上手くいかなくなるまでやってみる。
大学の研究室でPythonを教えていて,「Pythonにおいて,関数の引数は全て参照渡しなのだ!」みたいなことを言いつつ, >>> def change(val): ... val = 10 ... ... >>> a = 100 >>> change(a) #aは10になるはず... >>> a 100 あれれ? だった件. それでもPythonの引数は参照渡し 改めて調べてみたが,やはり参照渡しでした. 上記の例だと,aにはメモリ上の100という数値を挿している参照が入ります. 次に,change(a)が呼ばれると,change関数のval変数には,aに入っている参照がコピーされます. ここで勘違いしてしまったのは,次のval=100という式の意味でした. この式の意味は,メモリに10という数値作って,そこを挿している参照をvalに入れろ,という意味です. そして,関数のスコープから抜
id:kyoro353がmixi graph APIを使った写真投稿を書いていたので、 Pythonでmixiの新しいAPIを使うプログラムを書いてみたよ 便乗して表示系を。 mixiが先日からGraph APIを一般ユーザーにも公開を始めました。 mixi Developer Center - Graph API このAPIを使うと、外部のアプリからmixi内部のデータにアクセスすることが出来るようになります。 最近、自分もこのAPIを使って色々遊んでいます。 上のid:kyoro353の例は写真の投稿ですが、writeしたらreadもしたい。 自分の場合、Google App Engineを使って簡単なプログラムを書き、色々なデータを表示して遊んでいます。 下の例では、リダイレクトURLをlocal環境にしておいて、ローカルでGoogle App Engineを使ったmixi Grap
昨年末から8月まで取り組んでいたIPA未踏IT人材発掘・育成事業にて、この度スーパークリエーターの認定を頂きました。 2009年度下期「未踏IT人材発掘・育成事業」スーパークリエータの認定について 今後も、世の中に新しい価値を提案できるような、手を動かすクリエーター目指して頑張りたいと思います。
3週間くらい前から,何となくFacebookが楽しい気がしていたのですが,そう感じていた人が結構周りに多くて一気に活性化してきた感があります. Facebookに何かポストすると,ゆーすけべーとかid:amachangとかid:higeponさんとか宴やんとかが0.5秒で「いいねd」してくれるので,寂しがり屋にぴったりです. で,今朝,iTunesで聴いている音楽をポストしたいなーと思ったのですが,いい方法が見つかりませんでした. now playingというアプリを使えば実現できそうなのですが,無職なので小銭でもけちりたいところです. また,iPhoneからなら簡単にできるみたいですが,自宅警備が忙しくiTunesからポストできると助かるなーと思いました. そこで色々調べてみると,割と簡単に実現できそうなので簡単なコードを書いてみました. 構成 こんな感じです. 環境は MacOS 10
xapiduino Arduino用の,XBee API mode (API operation) ライブラリです. 機能は限られていますが,動作します. 基本的には,Trangramで使っていた関数群をまとめてライブラリ化したものになります. TX/RX64bit通信,ATコマンドが動作します. 過去にTX/RX16bitも一応動いていましたが,動作確認はしていません. ATコマンドは,現状SH, SL, NDを関数で提供していますが,ちょっと見れば他のコマンドも簡単に送ることができます. むしろ,レスポンスの処理がコマンド毎に異なるのでそちらの処理が面倒です. リモートATコマンドは全く実装していません. Trangramで使っていないので..今後必要になれば実装します. XBee自体はMake界隈やメディアアートなどでよく利用されているのですが,API modeの資料が極端に少ないと
この記事を読んで、気になったので調べてみた。 newspicks.com [プレゼンテーションのシェアはMSパワポが95のマーケットシェアを持っている](https://venturebeat.com/2018/02/06/beautiful-ai-helps-non-designers-create-more-polished-presentation/)らしい。macでkeynote使っているのは一部のWeb/IT系の人たちだけなのだろうか。スライド作る系のサービスはPreziを思い出すが最近使っている人を見ない。 ## Beautiful.AI www.beautiful.ai 2015年創業。サンフランシスコ。2018年に2回、合計$16M調達。2015年から2018年までは特に動きがない? 参照 https://www.crunchbase.com/organization/be
iPhoneアプリ開発のメモリ管理のエントリーのコメントで,Build and Analyzeという機能を教えていただきました. Xcodeの ビルド=>Build and Analyze で,メモリリーク警告が検出されます. Xcode画面に表示される警告をクリックすると,具体的な内容が矢印付きで表示されます. これはすごい.
昨日はメモリリークと戦っていて,自分が色々勘違いをしていたことに気がついた. retain,autorelease,release難しいよ.. 前提 そもそも,obj-cでは変数は参照であり指しているものはオブジェクトと考える. オブジェクトを生成するたびに,cで言うところのmallocで動的にメモリを確保してそこに変数を割り当てている状態になるのでユーザーがきちんと管理,解放を行わないとすぐにメモリリークする. このメモリ管理がくせ者だ. retainCountを意識する オブジェクトはそれぞれretainCountという変数をもっている. obj = [[Class alloc] init]; てな感じにオブジェクトを生成したときに,カウントが1増える. このカウントが0になったとき,オブジェクトは解放される. (解放されるとき,objがもっているdeallocメソッドが呼ばれる.)
iPadのsafariはブックマークバーが表示できます. iPad設定のsafari項目の「ブックマークバーを常に表示」をONにすれば,常時表示も可能. いちいちブックマーク画面を開かずともブックマークに飛べるのでとても便利. ブックマークバーが使えると言うことは,ブックマークレットもiPhoneに比べて便利に使えるのではないかと思ったのですが,ブックマーク登録に少し手間取ってしまった. 自分は「はてなブックマークする」と「livedoor Readerに登録」ブックマークレットをよく使うのですが,この2つはiPadのsafariからうまくブックマークできない. 両者とも,PCのブラウザから,ドラッグアンドドロップでブックマークバーに追加するようなUIになっているからだ. 色々調べていたらiMixMenuというiphoneアプリを見つけました. iMixMenu - iTunes Stor
随時追記しながら. easy_install-2.5で nose nosegae webtest をする. gaeのデフォルトのmain.pyの下の方をこんな感じに書き換える. main()の中身を分けてapplication()と半分こにした感じ. main.py def application(): return webapp.WSGIApplication([('/', MainHandler)], debug=True) def main(): util.run_wsgi_app(application()) if __name__ == '__main__': main() テストコードはこんな感じ. test.py from webtest import TestApp from main import application from nose.tools import *
Firefoxが落ちまくるので,Chromeに乗り換えてみた. mac版のChromeは,設定項目が未実装の箇所があったりするのだが,何とか使い始めることができた. 最新のバージョンでは拡張も使える. Firefoxから乗り換えられなかった大きな理由が拡張だ. 特に,vimperatorが無いともう厳しい. vimperatorを使うと,ページのスクロールやその他諸々の操作を全てvimライクなキーボードショートカットから利用できるようになる. Chromeでも使いたいと思っていたのだがvimperator自体は無かった. しかし,昨日vimiumという拡張を見つけた. 試しに入れてみたら,思いの外具合がよい. 一番良かったのが,.vimperatorrcファイルを作る必要が無い点だ. (もしかしたら作る必要があるのかもしれないが.) 細かい設定ができない代わりに,デフォルトのキーバインドの
このページを最初にブックマークしてみませんか?
『k_kinukawaの日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く