<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>雑記帳</title>
<link>https://ameblo.jp/tack-u/</link>
<atom:link href="https://rssblog.ameba.jp/tack-u/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>今日やったことなどを。</description>
<language>ja</language>
<item>
<title>犬を育成するアプリが簡単でかわいい！おすすめの無料ゲームです！アイフォン/アンドロイド対応</title>
<description>
<![CDATA[ <p>とってもかわいい。</p><p>4日に1回餌をあげるだけだから、忙しい人でもゲームが苦手な人でも飽きずにやれる。</p><p>&nbsp;</p><p>アイフォン　<a href="https://itunes.apple.com/jp/app/xingseno-quan-yu-chenggemu3d*wu/id1128351806?mt=8">https://itunes.apple.com/jp/app/xingseno-quan-yu-chenggemu3d*wu/id1128351806?mt=8</a></p><p>&nbsp;</p><p>アンドロイド　<a href="https://play.google.com/store/apps/details?id=jp.eikomz.dogsim&amp;amp;amp;hl=ja">https://play.google.com/store/apps/details?id=jp.eikomz.dogsim&amp;amp;amp;hl=ja</a></p>
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-12204541407.html</link>
<pubDate>Wed, 28 Sep 2016 22:26:31 +0900</pubDate>
</item>
<item>
<title>TitaniumAlloyでModelSingletonDataBind</title>
<description>
<![CDATA[ TitaniumAlloyを触り始めました。今までclassicスタイルで書いていたのですが、$.destroyとデータバインディングに惹かれて挑戦してみました。<br><br>ネット上の情報などを参考にしたみたのですが、Collectionでのデータバインディングは結構書いてあるのですが、単体Modelでのデータバインディングについてがあまり書いてなかった。<br>（単体Modelってそもそもありえないのかな？）<br><br>ViewでModelバインドするには、<br><br>&lt;Model src="MyModel" id="MyModel" instance="true"/&gt;<br>と宣言しておくことで、XML内部で{{$.MyModel.title}が使えました。<br><br>意図しなかったこととして、modelのdefaultsに値を入れておいてもcontrollerでfetchしないと値が挿入されませんでした。fetchなどをしてmodelに変化を与えないとviewにnotifyされないのかな？とか妄想。<br><br>また、modelのfetch方法ですが、controllerでidを指定するのがだるかったので、modelのinitializeでidをセットしてしまって(id:1とか)、controllerではfetchするだけにしました。<br>(initializeでfetchしてもviewには伝播されなかった）<br><br>次の実験として、window1とwindow2で同じようにmodelをインスタンス化してset,saveしたのですが、互いのwindow内の値は変化しませんでした。<br><br>まあ考えてみればわかることなのでしょうが、同じstorageから引っ張ってきたとしても、オブジェクトが一意じゃないからですよね。ということでシングルトンにするにはどうしたらいいのかと。<br><br>ゲームなんか作っていたら、バトルでお金が増えてホームに戻ってきたらお金が増えてるようにしたいですよね。ホームに戻ってきたら、というイベントでfetchするのはちょっといけてないので、やっぱりシングルトンにしたい。<br><br>シングルトンにするには、<br>&lt;Model src="MyModel" /&gt;<br>とするだけだった。<br>{MyModel.title}で値は取れる。<br><br><br>でも相変わらず新しいバインド先にはfetchはしないと反映されない。<br><br>という調査。
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-12008703797.html</link>
<pubDate>Wed, 01 Apr 2015 03:59:52 +0900</pubDate>
</item>
<item>
<title>iTunesAPIとYoutubeDataApi(v3)の結果をMongoDBにキャッシュ</title>
<description>
<![CDATA[ MongoDBを初めてサービスに適用してみました。<br><br>iTunesのAPIとYoutubeDataApiのjson結果をMongoDBにキャッシュするのに使いました。<br><br>そんときにやった自分の処理などを。<br><br>cache_key, json, createdという単純なスキーマでcollectionを作って、APIの結果をjsonにまるごとぶちこむ感じですね。<br>createdはexpireのために残しておく。<br><br>cache_keyなんですが、これはちょっと独特のやり方で決めていまして。<br><br>もともと、APIを叩くクラスを持っていたので、それをラップするというかProxyするというか、そんな感じの、CacheProxyクラスを作って、そいつ経由で実際の関数を叩きます。<br><br>class CacheProxy{<br>public function fetch($Model, $method, $args=array()){<br>  $cache_key = get_class($Model) . "_" . $method;<br>  foreach($args as $val){<br>    $cache_key .= "_" . $val;<br>  }<br>  $res = $MongoCache-&gt;get($cache_key);<br>  if($res) return $res;<br>  $res = call_user_func_array(array($Model, $method), $args);<br>  $MongoCache-&gt;set($cache_key, $res);<br>  return $res;<br>}<br>}<br><br>叩く方は、<br>$res = $CacheProxy-&gt;fetch($YoutubeApi, 'search', array('unko'));<br>こんな感じですね。<br><br>controller側は特にキャッシュするしないを意識せずに、proxyが勝手にやってくれるイメージです。
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-12006586912.html</link>
<pubDate>Fri, 27 Mar 2015 01:18:38 +0900</pubDate>
</item>
<item>
<title>最近MySQLにメモリが食いつぶされてる</title>
<description>
<![CDATA[ 気がついたら運用しているサーバーの一つがメモリ不足になってた。<br>WEBサービスごときにメモリとか不足しないだろとか思ってたけどどういうこっちゃ。<br><br>と調べてる見ると犯人はMySQL。<br><br>チューニングとか全然知らないんだけど調べてみる。解決しない。原因不明。<br><br>といろいろ探ってたら、ひとつのテーブルがやたら肥大化してた。プログラムミスったようだ。<br>ただのキャッシュテーブルだったので、えいや！とトランケートしちゃいました^^<br><br>そしたら落ち着いた、ような気がする。。。
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-12006422336.html</link>
<pubDate>Thu, 26 Mar 2015 18:52:15 +0900</pubDate>
</item>
<item>
<title>CentOSにyumでMongoDBをインストール</title>
<description>
<![CDATA[ 一時期NoSQL最強だぜ！ってMongoDB流行ってたけど今聞かないね。<br><br>個人的に作ってるサービスで、jsonをキャッシュしたいなと思って、mongoDBを導入。<br>MySQLのtextカラムにjsonぶち込んでやってもいいんだけど、まあ導入。<br><br>公式サイトにyumでのインストール方法が丁寧に書いてあった。<br><br>http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/<br><br>/etc/yum.repos.d/mongodb-org-3.0.repoを作成する<br>[mongodb-org-3.0]<br>name=MongoDB Repository<br>baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/<br>gpgcheck=0<br>enabled=1<br><br>で、<br><br>yum install mongodb-org
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-12006403270.html</link>
<pubDate>Thu, 26 Mar 2015 18:07:56 +0900</pubDate>
</item>
<item>
<title>YoutubeIframeAPIをiphoneに対応させる</title>
<description>
<![CDATA[ PCにあわせて作っていたら問題が二点でてきた。<br>1. iphoneで動画が再生されない<br>2. バックグラウンドで連続再生できない<br><br>1. iphoneで動画が再生されない<br>YoutubeのIFrameAPIを触っていたのですが、iphoneの場合は一度タップして再生しないとloadVideoByIdを叩いても再生されません。<br><br>タップした、というよりは、一度は再生したというフラグをもたせて以降はloadVideoByIdを叩くようにしたいと思います。<br><br>最初の動画は、queVideoByIdで再生待ち状態で待機させます。<br>その後、onStateChangeイベントで渡ってくる、dataでstateをみて、再生できた = 1、だったら再生したフラグを立てるようにしました。<br><br>2. バックグラウンドで連続再生できない<br>動画の再生が終わると次の動画をajaxで非同期で取得してloadVideoByIdしてましたが、これだとバックグラウンドで動かないんですよね。。<br>おそらくバックグラウンドだとhttpリクエストが投げられないないのかな？とか妄想して、最初に動画を全て取得するように修正しました。<br><br>動画の数が決まっていればいいんですが、無制限となると難しいですね。。
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-12006073236.html</link>
<pubDate>Wed, 25 Mar 2015 21:37:49 +0900</pubDate>
</item>
<item>
<title>JavaScriptを再度勉強中</title>
<description>
<![CDATA[ JavaScriptというと、ブラウザ版JavaScriptが一般的だと思いますが、自分の場合TitaniumMobileでJavaScriptを覚えたのでブラウザ版JavaScriptがいまいちよくわかっていません。<br><br>最近ブラウザ版JavaScriptを触りまくってみて感じたことなどを。<br><br>感じたこと1<br>jQueryは捨てるべきか。<br>まあ確かに便利なんだが、使うAPIはほんの一部だし（セレクタ、ajaxくらいかな。。）、コーディング中に、これは生のDOMオブジェクトなのかjQueryオブジェクトなのかわからなくなる。<br>とりあえず$(this)しとけー的な。<br>jQueryオブジェクトはaddEventListenerも動かない（？）様子だし、バージョンでAPIの仕様かわるし。。<br>jQueryはやめて使う分だけ自前で実装してしまった方が自分には合ってるんじゃないかなーとか妄想中。でも効率的なライブラリの開発手法までは知らないので勉強中。<br><br>感じたこと2<br>データバインドは必要なのか。<br>Vue.jsやangular.jsを触ってみてデータバインド確かに便利そうに思えたけど、デスクトップアプリのようなSPAでも目指さない限りいらなくね？と感じた。<br>ViewとModelを切り離す設計はとてもいいと思うので、observerパターンでModelの変更通知をviewに伝える機構だけあればええんちゃうかと思った。<br><br>感じたこと3<br>coffeeScriptは覚える気にもなれない。クラス書くときに便利そうだけど、そんなにクラス書きまくるほどのアプリケーションを作らないかな。<br><br>感じたこと4<br>HTMLを動的に書き換えるのはSEO的にどうなのよ？<br>クローラーボットに対しては静的で出力するという話も聞いたが、それもそれでSEO的にどうなのよ？クローラーに違う表示させるのは昔流行ったスパムじゃないすか。<br><br>感じたこと5<br>いろんなJavaScriptライブラリやフレームワーク使ってみんな何してんの？<br>正直そんなに使いどころがあるとは思えないのだが。。。<br>そんなにページ遷移させたくないのかしら。。<br>
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-12003075350.html</link>
<pubDate>Wed, 18 Mar 2015 14:54:50 +0900</pubDate>
</item>
<item>
<title>TitaniumでUI.create系をラップしておく</title>
<description>
<![CDATA[ Titaniumで生(?)のcreateUI系を直接叩くのはあまり好きではない。<br>後で変更しようと思った時に簡単に変更できるように関数でラップしておくが好き。<br><br>exports.createWindow = function(param){<br>  return Titanium.UI.createWindow(param);<br>}<br><br>みたいな。<br><br>あとで、<br>window全体の色をかえたいよぉ。。。<br>androidのwindowだけちょめちょめしたいよぉ。。。<br>っていうとき。<br><br>exports.createWindow = function(param){<br>  param.backgroundColor = "#000";<br>  if(isAndroid()) param.backgroundColor = "#FFF";<br>  return Titanium.UI.createWindow(param);<br>}<br><br>みたいな感じでデフォルトを追加できるしね。<br><br>ってことでやってきたんだけど、<br>UI分exports関数作るのすらだるくなってきたのでこうした。<br><br>function ui(method, p){<br>if(!p) p = {};<br>switch(method){<br>case "createWindow":<br>if(!p.backgroundColor) p.backgroundColor = "#FFF";<br>break;<br>case "createLabel":<br>if(!p.font){<br>p.font = {fontSize:16, fontWeight:"bold"};<br>}<br>break;<br>}<br>return eval("Titanium.UI." + method + "(" + JSON.stringify(p) + ")");<br>};<br><br>var window = ui("createWindow");<br><br>eval使ってんじゃねぇよ！って言われそうだけど気にしない。<br>
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-11998532834.html</link>
<pubDate>Sat, 07 Mar 2015 16:43:42 +0900</pubDate>
</item>
<item>
<title>Observerパターンのnotify中にstate変えちゃあかんのか</title>
<description>
<![CDATA[ ゲームを作っていると、いろんなviewに対して非同期で実行していかないといけないので複雑なプログラムになります。<br><br>例えばドラクエだと。<br><br>1. 勇者の攻撃メッセージ<br><br>2. 勇者の攻撃エフェクト<br><br>3. モンスターがダメージを受けるエフェクト<br><br>4. ダメージメッセージ<br><br>5. モンスターの攻撃メッセージ<br><br>6. モンスターの攻撃エフェクト<br><br>7. 勇者がダメージを受けるエフェクト（画面揺れたり）<br><br>8. ダメージメッセージ and HP表示の再描画<br><br>こんなのが、非同期で実行しないといけない。<br><br>1が終わったら2を実行して、3を.....<br><br>終わったらcallbackのネストが深くなるのでなんとかならんかなぁということで、observerパターンを検討。<br><br>適当なオブジェクト(model)に状態(state)をもたせて、stateが切り替わったことを各viewに通知(notify)する。<br><br>非同期だけど、同期処理っぽくかけるぜひゃっはーって思ってたら、<br>viewのupdate処理中にmodelのstateを書き換えちゃうと、次のviewへのnotifyを待たずに新規のnotifyが走っちゃう。<br><br>どうしたもんか。
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-11998327245.html</link>
<pubDate>Sat, 07 Mar 2015 01:13:20 +0900</pubDate>
</item>
<item>
<title>PHPのExceptionを拡張する</title>
<description>
<![CDATA[ PHPのExceptionってあんまり活用してなかったけど使える。<br><br>try{<br>  // めっちゃいろいろやる処理<br>}catch(Exception $e){<br>  echo $e-&gt;getMessage();<br>}<br><br>これが標準な使い方だけど、<br>めっちゃいろいろやる処理の中で何が起きたかを分岐してとりたいときはこうするといい。<br><br>class PageNotFoundException extends Exception{}<br>class SqlErrorException extends Exception(){}<br><br>try{<br>   // めっちゃいろいろやる処理<br>  // if(!$is_page) throw new PageNotFoundException();<br>  // if($mysql_error) throw new SqlErrorException();<br>}caatch(PageNotFoundException $pe){<br>}catch(SqlErrorException $se){<br>}caatch(Exception $e){<br>}<br><br>こうやっておけば、例外処理を分岐して使える。<br>致命的なエラーはログに仕込んだり、ユーザーにはエラー表示見せないようにしたり。<br><br>
]]>
</description>
<link>https://ameblo.jp/tack-u/entry-11994997660.html</link>
<pubDate>Fri, 27 Feb 2015 00:56:06 +0900</pubDate>
</item>
</channel>
</rss>
