2012年10月1日月曜日

iPhoneアプリ開発入門[Objective-C][初心者]

イトウです。

iPhoneアプリ開発に有益なサイトをまとめてみました。
これから開発を始める人は一度読んで見て下さい〜



2012年9月14日金曜日

[Git][バージョン管理][Dropbox]GitとDropbox使って、チーム開発を爆速にしよう

イトウです。

本日のテーマは「Git + Dropboxで、バージョン管理しようぜ!」です。

■バージョン管理する方法

■バージョン管理って?
■個人開発?チーム開発?
■共用リポジトリをどこに置くか?
■GitとSubversion

=======================


■バージョン管理する方法
GitやSubversionなどのバージョン管理ソフトに慣れ親しんでいる人は、
特に説明は要らないでしょう。下のスライド読みながらサクサクいきましょう。




================

ここから下は「Git?Subversion?え?え?え????」な人のために書きます。


■バージョン管理って?
・書いたソースコードを効率的に管理するための仕組み、みたいなものです。
・ソースコードを簡単に昔のバージョンに戻すことができます。
・なので、変更してる内に分けわからんくなった…、なんて時も大丈夫。

究極の手動バージョン管理は、
・作業ディレクトリをコピー
・「backup_20120914」とか別名でディレクトリを保存
・ソースに変更がある度、この手順でディレクトリを作っていく
みたいな感じ。

手動でコピーするのめんどくさい。 → コマンド打つだけで自動でやってほしい
各バックアップ毎の中身の確認が面倒。 → 差分だけ表示してサクッと確認したい
ディレクトリ作りすぎて容量圧迫やばい。 → 容量を圧迫することなく管理したい


この赤字の部分の問題を解決したのが「バージョン管理ソフト」なのです。


■個人開発?チーム開発?
・バージョン管理を使うには、「リポジトリ」というのが必要になります。
・「リポジトリ」ってのは簡単にいうと、バージョン情報を保持してるフォルダみたいなもの。
・一人で開発する時には、適当にデスクトップとかのローカル環境に作ればOK。
・しかし、チームで開発する時には、チームのメンバ全員から参照できる必要がある。


AさんのPCのデスクトップにリポジトリ(フォルダ)を作ると、
もちろんBさんのPCからはアクセスすることができません。
これではチーム間でソース共有はできません。困りました。

では、どうすればいいでしょうか?


■共用リポジトリをどこに置くか?
1. GitHub
2. どっかのサーバ上に設置
3. Dropboxを使う

1. Github
・最近話題のGitHub。
・ウェブ上にリポジトリ(フォルダ)を置くことでチーム全員がアクセスできるようにする。
・無料で使えて、操作性も高いので人気。
♦ただ、SSHとかの設定をする必要があるので、超ド初心者は時間かかる。
♦無料利用ではソースは全世界に公開されてしまうので、超ド初心者は恥ずかしい。

2. どっかのサーバ上に設置
・自分で借りているレンタルサーバ上にリポジトリを設置する方法。
・リポジトリ(フォルダ)までのURLは関係者にしか知らせないので、非公開で運用できる。
♦ただ、レンタルサーバ借りてない人はGitだけのために借りるのはアホらしい。
♦チームのメンバ分アカウント作ったり、設定にも時間がかかる。

3. Dropboxを使う
・上のスライドは、これを使った際の手順書。
・Dropboxには「フォルダ共有機能」というのがあり、チームみんなで一つのフォルダを持てる。
・この共有フォルダにリポジトリを置けば、チームのみんながアクセスできちゃう。
・Dropboxはローカル環境からアクセスできるため、SSHの設定はしなくてもOK。


僕の個人的なオススメは、
・最初Dropbox → 慣れてきたらGitHub
パターンです。理由はありません。何となくです。


■GitとSubversion(おまけ)
・本題からは少し外れるメモ。
・バージョン管理ソフトとして有名なものに、GitとSubversionがあります。
・Gitは分散型、Subversionは集約型なんて呼ばれたりしますが、初心者にはカオスです。

簡単に説明すると、
Subversionではソースコードをコミットすると、いきなりチーム共有のリポジトリが変更されます。
Gitではソースへの変更をコミットすると、いったん自分のローカルのリポジトリ内でのみ変更されます。その後、プッシュ操作を行うことで初めてチーム共有のリポジトリが変更されます。

どちらが良いというわけではなく、好みかと思います。
僕はGit派。
理由としては、最近Gitがキテルらしいというミーハー精神と、ちょいちょいコミットしたい性分だからです。Subversionだとちょいちょいのコミットが他のメンバーに見られちゃうんで恥ずかしいですよね。



以上、バージョン管理ソフト使って爆速開発しようぜ!な記事でしたー。



[Objective-C] 指定したURLにGETアクセスし、レスポンスをJSONとしてパースする

本日のテーマです。
① Objective-c からAPIを叩く
② レスポンスをJSONとしてパース


■ソースはこんな感じ

NSString* url = @"アクセスするapiのURL";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSData *json_data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSError *error=nil;
    
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:json_data options:NSJSONReadingAllowFragments error:&error];


■説明
1. リクエストURLを作成
2. sendSynchronousRequest: メソッドでURLにアクセス
3. 返ってきたデータをJSONObjectWithData: メソッドで分解


■メモ
・JSONObjectWithData~ の受け取りは、NSDictionaryの時がある。
・これは簡易にHTTPRequestできる方法で、GETでのアクセスになる。
・POSTでアクセスするにはもうちょっと複雑(後日記事書きます。)
・URLにパラメータが含まれる場合、 [NSString stringWithFormat] で作りましょう。




2012年8月23日木曜日

php高速化tips

勉強になったのでメモ。


 *  PHP コード最適化 Best Practices 63+
  * 01. static にできるメソッドは static として宣言しよう。(4倍速い)
  * 02. echo の方が print より速い。
  * 03. echo '文','字'; (カンマ区切り)の方が、'文'.'字' (ドット連結)より速い。
  * 04. ループの最大値は、ループ「内」ではなく「前」にセットしておこう。
  * 05. 大きい配列のような変数は unset() してメモリを解放しよう。
  * 06. マジックメソッド(例: !__get, !__set, !__autoload)は使用を避けよう。
  * 07. require_once はハイコストなのです。
  * 08. include や require でファイルはフルパスで指定しよう。
  * 09. スクリプト開始時間は time() でなく $_SERVER!['REQUEST_TIME'] で取得。
  * 10. 可能であれば、正規表現より strncasecmp、strpbrk、stripos を使おう。
  * 11. strtr(str_replace の4倍速い) > str_replace > preg_replace の順に速い。
  * 12. 引数に配列、文字列両方を受け入れるような関数は避け、個別に関数化しよう。
  * 13. if をたくさん使ってるなら switch を活用しよう。(訳注:ってことでいい?)
  * 14. @によるエラー制御はすんごく遅い。
  * 15. Apache の mod_deflate(Apache2系) を ON にしておこう。(No.42 参照)
  * 16. 処理が終わったらデータベースの接続は切っておこう。
  * 17. $row!['id'] は $row[id] より7倍速い。
  * 18. エラーメッセージはハイコスト。
  * 19. for 文の条件式には count($array) のような関数をいれない。(変数に格納)
  * 20. メソッド内ではローカル変数をインクリメントするのが一番速い。
  * 21. グローバル変数のインクリメントはローカル変数より2倍遅い。
  * 22. オブジェクト変数(例:$this->v++)のインクリメントはローカルより3倍遅い。
  * 23. 未定義のローカル変数のインクリメントは定義されたものより9~10倍遅い。
  * 24. 未定義のグローバル変数についても同様。
  * 25. メソッドの起動コストはクラス内のメソッド数とは無関係。
  * 26. 派生クラス内のメソッドは、基底クラスで定義されたメソッドよりも速い。
  * 27. 引数1つの空関数を呼び出すのにも、ローカル変数 $local++ 7~8回分のコスト。
  * 28. ダブルクォート より シングルクォート の方が若干速い。
  * 29. 03 と重複か。(注:これは複数の引数を受け取る echo でのみ有効)
  * 30. PHP スクリプトは静的な HTML ページよりも2~10倍の時間がかかる。
  * 31. キャッシュを利用しよう。通常、コンパイル回数 x 25~100% 分速くなる。
  * 32. これもキャッシュについて。memcached とか使おうよ。
  * 33. if (strlen($foo) < 5) を調べたいなら if (!isset($foo!{5})) と書くと速い。
  * 34. $i++ より ++$i の方が速い。(そういう opcode optimizer が走ってる場合)
  * 35. 全部が全部 OOP でなくても良い。(コストやメモリの浪費になってるかも)
  * 36. すべてのデータをクラスにしようとしないこと。配列も十分便利です。
  * 37. メソッドを分割しすぎない。(どれを再利用するのかよく考えよう)
  * 38. メソッドを分割したくなったら後でいくらでもできる。
  * 39. もとから用意されてる 関数たち を活用しよう。
  * 40. 非常に時間のかかる関数 → C言語による拡張モジュール化も検討しよう。
  * 41. コードをプロファイリングしてボトルネックを見つけよう。Xdebug とか。
  * 42. Apache の mod_gzip(Apache 1系)は、転送量を最大80%減。
  * 43. : A HOWTO on Optimizing PHP with tips and methodologies を見てね。
  * 44. 28 と重複か。
  * 45. 13 と重複か。
  * 46. 19 と重複か。
  * 47. ループ処理には foreach を使おう。
  * 48. 複雑なクラスを作ってるなぁと思ったら → Singleton モデルを検討しよう。
  * 49. DB に入れる値なら GET より POST を使おう。(パフォーマンスが上がる)
  * 50. 可能なら正規表現より、ctype_alnum、ctype_alpha、ctype_digit を使おう。
  * 51. ファイル指定は basename / file_exists / open_basedir よりフルパス指定が速い。
  * 52. require_once より require を使おう。(opcode キャッシュがらみの理由で)
  * 53. 一時的なファイルを作るときには tmpfile や tempnam を使おう。
  * 54. 外部サービスに XMLHTTP で接続するときにはエラー回避のため Proxy を使おう。
  * 55. デバッグするときは error_reporting (E_ALL); にしておこう。
  * 56. Apache の allowoverride を "none" にしておくとパフォーマンスが向上。
  * 57. 静的なコンテンツには thttpd のような高速なファイルサーバを使おう。
  * 58. パスなどの設定パラメータは配列に serialize して入れ、キャッシュしておこう。
  * 59. アクセスの多いページには PHP の 出力バッファリング を使おう。
  * 60. DB 固有の prepare メソッドではなく PDO::prepare を使おう。
  * 61. SELECT * (ワイルドカード)を使うのはやめよう。
  * 62. PHP より賢い DB ロジック(queries, joins, views, procedures)を活用しよう。
  * 63. SQL の省略表記を活用しよう。
   * (例:INSERT INTO MYTABLE (FIELD1,FIELD2) VALUES (("x","y"),("p","q"));)

 * [ PHPコード最適化Tipsのウソと本当(解説)] (PHP コード最適化 Best Practices 63+に優先度と解説つけたもの)
  * 優先度A. 頻度も高いし使えそう
   * 01. static にできるメソッドは static として宣言しよう。(4倍速い)
   * クラス内で定数代わりに使ってる変数があるなら、const にしよう。
   * 04. ループの最大値は、ループ「内」ではなく「前」にセットしておこう。
   * 19. for 文の条件式には count($array) のような関数をいれない。(変数に格納)
   * 10. 可能であれば、正規表現より strncasecmp、strpbrk、stripos を使おう。
   * 11. strtr(str_replace の4倍速い) > str_replace > preg_replace の順に速い。
   * 50. 可能なら正規表現より、ctype_alnum、ctype_alpha、ctype_digit を使おう。
   * 39. もとから用意されてる 関数たち を活用しよう。
   * 53. 一時的なファイルを作るときには tmpfile や tempnam を使おう。
   * 18. エラーメッセージはハイコスト。
   * 55. デバッグするときは error_reporting (E_ALL); にしておこう。
   * 17. $row!['id'] は $row[id] より7倍速い。
   * 23. 未定義のローカル変数のインクリメントは定義されたものより9~10倍遅い。
   * 24. 未定義のグローバル変数についても同様。
   * 31. キャッシュを利用しよう。通常、コンパイル回数 x 25~100% 分速くなる。
   * 32. これもキャッシュについて。memcached とか使おうよ。
   * 58. パスなどの設定パラメータは配列に serialize して入れ、キャッシュしておこう。
  * 優先度B. 機会があれば / 迷ったら使うかな的
   * 03. echo '文','字'; (カンマ区切り)の方が、'文'.'字' (ドット連結)より速い。
   * 08. include や require でファイルはフルパスで指定しよう。
   * 51. ファイル指定は basename / file_exists / open_basedir よりフルパス指定が速い。
   * 09. スクリプト開始時間は time() でなく $_SERVER!['REQUEST_TIME'] で取得。
   * 20. メソッド内ではローカル変数をインクリメントするのが一番速い。
   * 21. グローバル変数のインクリメントはローカル変数より2倍遅い。
   * 22. オブジェクト変数(例:$this->v++)のインクリメントはローカルより3倍遅い。
   * 28. ダブルクォート より シングルクォート の方が若干速い。
  * 優先度C. 実はほとんど効果がないけどね
   * 02. echo の方が print より速い。
  * 優先度不明. 効果がいまいちわかんないです。誰か説明 / 検証してください
   * 05. 大きい配列のような変数は unset() してメモリを解放しよう。
   * 07. require_once はハイコストなのです。
   * 52. require_once より require を使おう。(opcode キャッシュがらみの理由で)
   * 16. 処理が終わったらデータベースの接続は切っておこう。
  * 非推奨? 速度の代償が大きすぎるんじゃ…
   * 06. マジックメソッド(例: !__get, !__set, !__autoload)は使用を避けよう。
   * 33. if (strlen($foo) < 5) を調べたいなら if (!isset($foo!{5})) と書くと速い。
   * 34. $i++ より ++$i の方が速い。(そういう opcode optimizer が走ってる場合)

2012年7月27日金曜日

Developers [Social Enterprise] Summit 2012に参加してきました。

Developers [Social Enterprise] Summit 2012に参加してきました。
忘れない内に感想とかをメモしときます。

全体的なテーマはエンタープライズ向けのサービスを提供する身としてソーシャルとどう向き合うか的な感じ。
協賛にSalesforce、GREEなど多くの有名企業が名を連ねていました。
またJenkinsの開発者の方とかもいました。
普段のweb系のカンファレンスよりもエンタープライズ向けだからか年齢層は高めに感じました。
名刺見ると名だたる日系大企業の方々が多く来場されていました。

タイムテーブルはこちら

僕が参加したセッションは
【S-1】クラウドが破壊するもの、創造するもの
新野 淳一 氏 / 西脇 資哲 氏 / 藤井 彰人 氏 / 村上 明子 氏 / 関 孝則 氏

【B-1】Salesforce R&DとソーシャルとEngineer Happiness
 大沢 良樹 氏 

【B-2】エンタープライズ開発におけるコラボレーション - JIRAによる顧客と開発チームのつなぎ方
鈴木 雄介 氏

【B-3】社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~
原島 法子 氏 / 岩永 義弘 氏 
【A-4】[パネルディスカッション] エンタープライズ✕ソーシャルエンジニアのスキルセット
鈴木 雄介 氏 / 山本 裕介 氏 / 藤本 真樹 氏 / 大沢 良樹 氏 

以上です。 順番に軽く内容と感想。
【S-1】 新野さんの講演から。
クラウドが普及することでSIerの仕事が減り、単価も下がってるという破壊の側面。
実際、あるSIerの単価は二桁下がったそうです。なかなか衝撃的な下げ幅。
ハードウェアがいらなくなったこと、Paasなどでは運用もいらないことが要因だそうです。

一方クラウドが想像するものとして

  1. サービスモデル・・・誰でもどこでもサービスを開始できるようになったね
  2. マルチデバイス対応・・・モバイルでもどこでも使えるようになったね
  3. ビッグデータの活用・・・かなりのコストがかかってた大規模分散処理はクラウドで低コストできちゃうね
てなことが語られました。
すべての共通することとして「コミュニケーションの重要性」という話から、エンタープライズ向けソーシャルの話へ。

ソーシャルエンタープライズという言葉は二年ほど前にSalesforceが言い出してからかなりかなり熱い。
chatterとかそんときからがんばってる。

どんどんいろんなツール(エンタープライズ向け、コンシュマー向け含む)が出てきたけど、それを整備する共通基盤みたいなものが必要なのでは。
それらに向かう新技術としてOauth2.0とか出てきてるけど、まだまだだよね。
これからだよね!
てな感じでした。

続いてgoogle藤井さん
ユーザ側の変化。
コンシュマーとして受け入れたものをエンタープライズでも受け入れるようになってきた。
テクノロジーの変化。
クラウド、モバイル、ソーシャル。
こんなキーワードが出た上で、googleサービスの紹介。
Hangoutを使って六本木にいる社員の方と話してみたり、Google Big Quey、Google Map Engineなどの説明をされていました。
どれもgoogleは情報を与えているに過ぎない。
この上でなんかおもろいことできそうでしょ!?ってスタンスが印象的でした。
その通りだと思いますw
いろいろ妄想の膨らむお話できた。

続いてマイクロソフト西脇さん
マイクロソフトはソーシャルに向けたたくさんのラインナップ持ってますよってお話。
skype、yammer、office365、azure、windows8。
病院での事例などをもとにどう使われているか、いかにソーシャルであるべきか、が語られていました。
人だけでなく、ドキュメント、ファイルなどすべてをソーシャルに扱おうという姿勢が印象的でした。

IBM村上さん
ソーシャル活用したたくさんの分析のお話。
かなり詳細にソーシャルメディアでの行動、会話を分析してらっしゃいました。
分析ツールは作るから、どんな情報が欲しいのかもっと現場から情報ちょうだい。
て感じが印象的でした。

Salesforce関さん
chatterいいよ!!ってお話。
たしかによさそうでしたw
今までいろんなツールでいろんなとこで管理してた情報も一つにして、その中で探せるようにすることで、かなり効率があがったそうな。
chatterはほんまによさげでした。

■感想
ソーシャルエンタープライズのサービスが数多く紹介されていてその多さにびびりました。
まだまだ伸びる市場ではあると思いますが、すでに数多くのプレイヤーが世界中にいるtことも確かでした。
コンシュマーでの体験がエンタープライズにもどんどん入ってきてることを考えると、そこをとれるプレイヤーは数多くないはずなので、どこが取るか注目ですね。
また、コンシュマー向け、エンタープライズ向けを統一するような共通基盤が現れるのではないかという妄想もだいぶ楽しいですね。

【B-1】
Salesforceがどのように社内向けソーシャルを実現しているかのお話。
主に、chatterをどう使っているかのお話でした。
Salesforceの文化として「Dog fooding」使ってみなきゃわからんでしょ。
って話が印象的でした。
実際、Salesforceではかなり盛んにchatterが使われている様子。

chatterはすべての情報のハブとなり、いろんな情報をタイムラインで流してる様子。
リリース情報、コミット情報、tips、疑問、雑談などいろんな情報が流れることで、社内の部署を超えたコミュニケーションが活発に行われてる様子でした。

■感想
chatterはかなりよさそうでした。
効果がありそうなのが、目に見えた感じでした。

【B-2】
アジャイルとWFの話。
まぁ、何が最適かとか状況次第だし、最適解はないね!
ただ、エンタープライズ向けは「複雑かつ不定期で短納期でスコープに妥協がゆるされない」つまりアジャイルもWFも向いてないね!って結論が印象的でしたw
その通りだと思いましたw

その流れを組んでJIRAの説明。
プロジェクト管理としてかなりよさそうでした。
いろんなプラグインが出てて、好きにカスタマイズできそうな感覚。

■感想
JIRA使ってみますw


【B-3】
アジャイルやってみたこと報告するよってセッションでした。
会社の合併とかいろいろ合って、いろんな人と仕事するのが大変でしたよ〜
そこで、先が不透明なときはアジャイル!!
って感じで始めたけど、二人で開発するのはおすすめできません。。
って結論でした。
そのあとUXについて。
主にユーザビリティテスト大事だよね!
ってお話でした。
作ったもののつかわれなかったら意味ないよね。
ちゃんとユーザビリティテストして使われるものを作りましょう。
ってことでした。

■感想
恥ずかしながらユーザビリティテストまだやったことないので、今度やってみようと思います。。

【A-4】
パネルディスカッション形式。
テーマ1「ソーシャルとは何か」
・twitter 山本さん
今まではエンタープライズと対極。
これからはエンタープライズで応用するもの。

・GREE 藤本さん
対義語はスタンドアローン??
そんなことはありえないからそんな厳密に考えなくてもいいんじゃない?
そんなことより、エンタープライズでもコンシュマー向けでもどこまでオープンになるか。
その閾値を見極めることに興味がある。

・Salesforce 大沢さん
デベロッパーを成長させてくれるツール。
デベロッパーとして必須なスキル、ツール。

テーマ2「仕事の中でソーシャルプラットフォームをどう使っているか」
・GREE 藤本さん
人数が急増しているため、情報の管理、伝播がソーシャルな要素を取り入れないとできない。
例 github enterprizeでのソース共有
最新の情報を得るためにはtwitterが一番早い。わかった気になった問題は残るがセキュリティなど更新の早い分野ではスピードも大事。

・Salesforce 大沢さん
chatterの導入によって開発とオペレーションの差を埋めた。
最適な情報をどんどん取り入れることでエンジニアのポテンシャルも高まる。

テーマ3「オープンすぎてこまったこと」
・GREE 藤本さん
今のところない。
コードの共有も含めて議論し続けている。
ちょっとづつ公開してどこまでできるか探り探り。

・twitter 山本さん
オープンにすることは最終的に会社に返ってくる。
社内で使って誰でも使えそうであれば、どんどんオープンにする。
bootstrapはその例。
オープンにするかどうかは専門の部署がありそこが判断してる。
ソーシャルの一番の特徴はタイムライン。
古い情報はもう見なくていいよね!っていう暗黙の了解がある。
タイムラインを中心として情報を拾っていく。

ざっとこんな感じでした。

■感想
何がどこまでオープンになっていくかはかなり興味がある。
個人的にはほぼすべてくらいオープンにしてるが、たぶんそうはならない。
人によってソーシャルとの付き合い方は変わると思うが、オープンにすることのメリットがもっと普及すればいいのにと、個人的には思う。


2012年7月23日月曜日

【C言語】システムコール関数でファイル入出力(2)

前回に引き続き、システムコール関数でのファイル入出力のメモ。

【C言語】システムコール関数でファイル入出力(1)


write()関数とread()関数

writeの例.


#include<stdio.h>
#include<hogehoge.h>

int main(void){

int fd;
char filename = "test.txt";
char message = "ここにファイル出力したい文字列を書く";

//  ファイルオープン
fd = open(filename, O_WRONLY);

//  ファイル書き込み
write(fd, message, strlen(message)+1);

//  ファイルクローズ
close(fd);

return 0;

}


write関数

fd - 対象ファイルのファイルディスクリプタ
message - 書き込む文字列
strlen(message)+1 - 書き込み文字列の長さ




readの例.


#include<stdio.h>
#include<hogehoge.h>

#define BUF_LEN 1024

int main(void){

int fd;
char filename = "test.txt";
char buf[BUF_LEN];

//  ファイルオープン
fd = open(filename, O_RDONLY);

//  ファイル書き込み
while ( ( n =read(fd, buf, BUF_LEN) ) > 0 ){
     printf("%s", buf);

}

//  ファイルクローズ
close(fd);

return 0;

}




read関数
fd - ファイルディスクリプタ
buf - 読み込んだ文字列を格納する箱
BUF_LEN - 一回で読み込む文字列の長さ(バイト数)



readの返り値として、「読み込んだバイト数」が返ってきます。
つまりこのwhile文は、まだ読み込む文字がある場合はずっとループする、ということ。
BUF_LENで指定したサイズ(今回は1024)ずつ読み込み、表示します。





【C言語】プロセスIDを表示する

C言語と対話する日々のイトウです。
今回はプロセスIDの表示方法について。


UNIXコマンドだと
$ echo $$
$ ps u
で表示できるプロセスID。C言語では少し記述が必要です。



#include <stdio.h>

// (1) 必要なライブラリをインクルード
#include <sys/type.h> 
#include <unistd.h>

int main(void) {
    int pid;
// (2) プロセス番号を取得
    printf("my PID is %d¥n", getpid() );  
    return 0;
}



こんな感じで表示できます。
getpid()が自身のプロセス番号を表示する関数で、
それを使うために必要なライブラリをインクルードしてる感じです。

簡単ですね。


mac上でvirtualboxが起動きでなくなった時の対処

普段Macでvirtualboxを動かしfedoraを触ってるのですが、突然起動できなくなったので、対処法をメモ。
  今回でたエラーはこれ。

そこでいろいろ調べてみるとここにたどり着きました。 つまりvirtualboxを再インストールしてPCを再起動すれば治るとのこと。 ※アンイストールは必要ないです。 とりあえずやってみると、無事起動できました。 データも全部残っていました。 原因はよくわからないですが、ちょいちょいあるみたいです。。 そろそろ新しいVM試そうかな。。

2012年7月18日水曜日

ファイルアップロードのエラー

phpでのファイルアップロードで少しハマったのでメモ。

<input type=file>でファイルをアップするときのエラーの見方です。

http://d.hatena.ne.jp/pekeq/20100924/p1

ここに全部あります。

2012年7月10日火曜日

【C言語】システムコール関数でファイル入出力(1)

イトウです。

 今回も最近勉強中のC言語に関するエントリです。
※まだ勉強中のため記述に誤りがある可能性があります。 

・システムコールとは
OSのカーネルの機能を呼び出す機構のこと。
open()やclose()などがそれにあたる。

 ・高水準関数と低水準関数

【高水準関数】
・一般によく使われるファイル入出力関数など
・関数内にバッファ機能を保持している
・フォーマットを指定したり、高度な出力ができる
・printf, fopenなど

【低水準関数】
・低水準関数 ・バイト数単位で制御される
・入出力が即時に反映される
・ファイルディスクリプタという重要な概念がある
・open, read, write, closeなど

【参考URL】


低水準入出力関数
高水準関数と低水準関数の違いに詳しい


紫月庵-C言語-9.ファイル入出力
全体像、ファイルディスクリプタについてはこちら



高水準関数、低水準関数という呼び方も今回はじめて知りました。
実際のシステムコールの使い方については次回のエントリで書きたいと思います。



位置情報を使ったAndroidアプリを作る際の参考メモ

イトウです。

Google Mapを用いたAndroidアプリを作る際、参考にしたサイト&エラーについてメモしておきます。


色々サイトを見ましたが、簡単なものを作る場合は以下の2サイトでOK。

位置情報を取得するには/GPSを使用するには - 逆引きAndroid入門



位置情報サービスチュートリアル




マップの調整(ズームの縮尺など)は以下のサイトで。

MapViewクラス - Android入門




不明な点は公式リファレンスで。英語ですが。

Pgoogle.maps 公式リファレンス
マップの公式リファレンス


Package Index | Android Developers
Androidの公式リファレンス




おまけ

Android SDK をAptana Studioに導入する方法。

Android開発ツールの準備 - jsWaffle

Aptana Studio3にAndroid ADTプラグインをインストールするまでの手順

View more PowerPoint from kujirahand kujira



以上、最近Android開発を初めて右も左も分からないイトウの参考サイトまとめでした。

2012年7月9日月曜日

【C言語】strcat関数を自作してみた。【第二弾】

蝉がミンミンとうるさく鳴く、そんな夏がやってきました。イトウです。

【C言語】strlen関数を自作してみた。

前回の記事と同じく、ライブラリ関数自作してみようシリーズです。
今回は文字列連結のstrcatを自作してみました。


 自作のmy_strcat関数(my_strcat)
#include<stdio.h>

// str1の後ろにstr2を連結する
char * my_strcat(char* str1, const char* str2){
    char *top;

    // (1) 返り値用に先頭アドレスを保持しておく
    top=str1;

    // (2) str1のポインタを最後まで進める
    while(*str1++ != '¥0');    
    *str1--;

    // (3)str1の背後から、str2の文字をコピーしていく
    while( (*str1++ = *str2++) != '¥0');

    return top;
}


main関数
#include<stdio.h>

int main(void){
     // (4)ポインタで定義して渡すとエラー
     // char *str1 = "Tokyo";
     // char *str2 = "Japan";

     // 配列で定義して渡せばOK
     char str1[] = "Tokyo";
     char str2[] = "Japan";    

     my_strcat(str1, str2);
     printf("%s¥n", str1);

     return 1;
}



では、コードについて少しだけ説明を補足します。



(1)返り値用に先頭アドレスを保持しておく

strcat関数の中でポインタ情報を変更するので、別の変数を作って先頭アドレスを保持しておく必要がある。もし普通通りに return str1; としてしまうと、ポインタを進めた先頭アドレス(=つまりstr1の先頭アドレスとは違う値)が帰ってしまう。


(2) str1のポインタを最後まで進める

文字列の最後には'¥0'が入っています。str != '¥0' が成立するまでwhile文を回すことで、str1の最後の終端文字(¥0)までポインタを進めることができます。そしてその後の*str1-- により、終端文字の位置にポインタを戻している。次の段階では、この位置からstr2の文字をコピーしていくことになる。


(3)str1の背後から、str2の文字をコピーしていく

一文字ずつ、str2の文字をstr1にコピーしていく。終端文字までコピーが完了したら、ループを終了する。


(4)ポインタで定義して渡すとエラー

my_strcat関数に文字列を渡す際、ポインタを渡すとエラーが発生する。この原因は不明だが、メモリ領域に関係するものではないかと考えられる。
つまり、*str1, *str2と続け様に定義すると、メモリ領域の連続した部分が使用される。my_strcat関数内で、str2はconst(定数、つまり代入しちゃダメ)で定義されているので、str1のメモリ領域にズカズカ文字をつっこんでいくとstr2の領域に被さり、そこはconstだからSegmentation Fault!みたいなノリじゃないかなと。推測ですが。

本家のstrcat関数でも同様のエラーが発生することから、配列で文字列を定義して渡すのが賢いと思われます。






ポインタの扱いは難しいですね。。CはJavaなんかと違ってエラーメッセージがあまり詳細じゃないので苦労しますね。しかし、ライブラリ関数を自作するのは勉強になって良いですね。



【C言語】strlen関数を自作してみた。【第一弾】

梅雨も明け、蒸し暑い夏がやってきました。イトウです。

C言語の文字列、ポインタについて学ぶために、文字列の長さを返すstrlen関数を自作してみました。 実際にライブラリにあるstrlen関数と同じふるまいをします。


 自作のmy_strlen関数(my_strlen)
#include<stdio.h>

unsigned int my_strlen(const char* str){
    unsigned int length = 0; // (1)文字列の長さを入れる箱

   // (2)文字列の長さを数える
    while(*str++ != '¥0'){
        length++;
    }
    return length;
}


main関数
#include<stdio.h>

int main(void){
    char str[] = "Tokyo";

    printf("%d¥n", my_strlen(str) );
   return 0;
}



これだけなんですが、少しだけ勉強したことを補足します。



(1)文字列の長さを入れる箱

なぜintでなくてunsigned intなのか?
それは、取れる値の幅が関係してきます。値の取れる範囲は、
int -32768~32767
unsigned int 0~65535

です。
つまり、今計算したいのは「文字数」なので、マイナスになることはない。
なのでここで適切なのはunsigned intだということです。


(2)文字列の長さを数える

文字列の最後には'¥0'が入っています。なので、str != '¥0' が成り立つまでループを繰り返すことで、文字列の最後まで確認することができます。
また、引数はcharのポインタ型なので、*str++ とすることで、次の文字を見にいくことができます。




C言語で最初に直面する壁は文字列とポインタかと思います。大変ですが重要な基礎の部分なので、色々試してしっかり理解していきたいと思います。



2012年7月3日火曜日

offline access tokenがなくなるのでいろいろまとめ

開発者がFacebookのデータを使いたいときやっかいなのが
認証で使うアクセストークン。

2012年の5月まではoffline access tokenという最強(最恐)のトークンがあったのですが、いろいろあってなくなっちゃいました。

offline access tokenなくすからちゃんとしたの使ってよーってことが
ここに書かれてます。

このページの冒頭に

 Instead please check the Deprecation of Offline Access Permission document which explains how to start using access tokens that are valid for up to 60 days.

なくす代わりに60日くらい有効なやつあるからそっち使ってね!
って書いてます。

今回アクセストークンと呼んでるものは三種類あるアクセストークンのうちuser access token に該当する記載だと思われます。
ここに載ってないアクセストークンでもう一個app access token というやつがありますが、これは基本的に無限の寿命を持ってるっぽいので。。
ただできることは限られてます。
参考:http://wktcoder.blogspot.jp/2012/06/facebook.html


基本的にこのページをある程度日本語でまとめてます。
間違ってたら教えてくださいw


offline access token はやめますよー
アクセストークンはいろんなもんソーシャルにできたりするので使ってね。
offline access tokenやめる代わりに有効期限長いアクセストークン使えるようにしたよ!
基本的にはアプリに来た時に新しくアクセストークン発行するよ!(下に例外もあり)

・寿命短いアクセストークンの寿命伸ばせますよー
通常のアクセストークンの有効期限は1~2時間です。
寿命伸ばすオプションあるのでそれ使えば60日になるよ!
このオプションは一日に何回やったも最初の一回だけが有効だよ!

例外が3つ
例外1 デスクトップアプリ
デスクトップアプリの場合はFacebookにログインした状態で一回認証すれば寿命長いアクセストークンあげるよ

例外2 古いSDK使ったネイティブモバイルアプリ(iOS、android)
寿命長いアクセストークン取れる新しいSDK出したからそっち見てね。
古いの使ってると定期的に認証いるよ。

例外3 新しいSDK使ったネイティブモバイルアプリ(iOS、android)
新しいSDKだとユーザがログインする度に新しい寿命長いアクセストークン取ってるから基本的に気にしないでいいよ。



ここから新しい設定への移行のためのシナリオ5つ
このページにある設定にしとけば、過去にoffline access token取得してる場合はユーザにダイアログ出さずにいけるよ。

シナリオ1 過去にoffline access token 要求してないアプリの場合
基本的には何も変わりません。
もし、クライアント側でアクセストークン取得してた場合は

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

ってやつ使えば簡単に寿命延長できるのでやった方がいいかもよ!

シナリオ2 過去にoffline access token 要求してたアプリの場合
過去に要求して取得してる場合は基本的にはそのまま使えます
ただ、新しいユーザーに関しては要求しても帰ってくるのは寿命短いやつなので気をつけてね!

offline access token を完全に廃止する頃になると自動的に60日の寿命にしちゃうので気をつけてね!詳しくはロードマップで。

シナリオ3 サーバーサイドの開発者の方へ
サーバーサイドのAouthで認証したアクセストークンはデフォルトで寿命長いアクセストークンです。

cronなどで自動的に寿命を延長することはできません。
Aouth認証には有効な"authorization code"が必要でその寿命は1~2時間であり、それを得るにはログインしてるユーザが必要だよ!

シナリオ4 クライアントサイドで寿命伸ばしたい方へ

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

クライアントサイドでやる場合は基本的にこれやれば大丈夫です。
寿命長いアクセストークンかえってきます。

シナリオ5 ページアクセストークン
ページアクセストークンはgraph api[User ID]/accountsみたいなクエリでとれます。
このときのユーザーアクセストークンが寿命短いアクセストークンであれば取れるページアクセストークンも寿命短いバージョン。
寿命長いユーザーアクセストークンでリクエストして取ればページアクセストークンも寿命長いバージョンが取れます。


以上がページのまとめです。

いろいろやってみた感じシナリオ3のサーバーサイドでデフォルト寿命長いってのはたまに違ったことがあったので、

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

やる必要があることがありました。
まだ移行期間だからかな。。

間違ってるとことかあったらご指摘おねがいしまーす!

2012年6月28日木曜日

phpの設定いろいろでハマったのでメモ

php.iniとか編集してますか??

そこらへん余りわかってない部分が多くてはまったのでメモ。

今回はphpのfile_get_contentsとfile_put_contentsではまりました。

まずはfile_get_contents。
これはurlやパスからファイル情報をとってくる関数ですね。

この関数はphp.iniの設定において
allow_url_fopen = Off

となってると使えません。
自作サーバとかでphp.iniを自由にいじれるときはいじればいいですね。
ただ、レンタルサーバなどでphp.iniをいじれない。
phpのini_set関数も使えない。

んなときはcurlでやりましょう。
参考:http://blog.mach3.jp/2010/12/use-curl-for-filegetcontents.html

これによるとcurlのんが早かったりするみたいですねw
基本こっちのんがいいのかも。
めんどいけど。

もう一つはfile_put_contents。
これはfile_get_contentsなどでとってきたファイルを特定の場所に保存する関数ですね。

ファイルを保存する動作なので、権限でよくひっかかりそう。。

そう権限設定がやたらとややこいです。
参考:http://sb.xrea.com/showthread.php?t=10222
公式ドキュメントみただけではなんのこっちゃわからんので、上記の例がわかりやすいです。

つまり、phpでmkdir("hogehoge");とかしてフォルダを作るとそのフォルダのオーナーはApacheです。
Apacheがオーナーのフォルダ内に新たにファイルを作成することができないことがあるよ!
ってことらしいです。
カオスですね。

ということで忘れないようにメモ。
php.iniとかhttp.confとかちゃんと勉強しないとですね。

2012年6月27日水曜日

Facebookのアクセストークンのいろいろ

Facebookのアクセストークンでいろいろハマったのでメモがてら。

Facebookには三種類のアクセストークンがあります。(2012年6月現在)
  1. user access token
  2. page access token
  3. app access token
それぞれ簡単に説明すると、user access tokenはその名の通り
Facebookの各ユーザごとに承認のいるとても厳しいアクセストークンです。 これを取得すると、apiとかでいろいろできますね。
できることは要求する権限によって違うので割愛します。

で、残り2つですが(最近追加されたのかな??)、
それぞれFacebookページ用のアクセストークンと
アプリ用のアクセストークンです。

とりあえず2012/7/5でoffline access tokenという、
それさえあれば何でもできちゃったアクセストークンがなくなるので
今後はpage access tokenとかapp access tokenとかで
どうにかしていくことになります。

ってことがFacebook公式デベロッパーサイトに書いてます。


ここで注意したいのが
user access token、page access tokenは期限が最大60日
app access tokenは期限がないことです。

アクセストークンの期限がくると取得し直す必要があります。
つまりapp access tokenだけでいろいろやりたいわけです。

今回はアプリからFacebookページに自動投稿するバッチを作ろうと思い、
投稿するアプリのapp access tokenがあればいけるかと思いぐぐり始める。。
んでたどり着いたのがこの記事

app access tokenでウォールに投稿できるっぽい!
てことで実装してみる。

今回は写真を投稿したかったので、

$post_data = array(
'source' => '@' .$finename, 
'message' => $message,
 'access_token' => $this -> facebook_app_access_token
 );

$post_result = $facebook -> api('/' . $this -> facebook_page_id . '/photos', 'post', $post_data);
            

だいたいこんな感じ。
url叩いてみると。。
A user access token is required to request this resource.

えw
user access token求められてる。。。

投稿先を自分のウォールにしてみても、写真投稿を普通にfeedに投稿にしてみても同じでした。。
アクセストークンをpage access tokenもしくはuser access tokenに変えると投稿できました。
けどこいつらは期限が期限が60日。。

自動投稿するには期限のないapp access tokenを使いたい。。

けどできませんでした。

app access tokenのみでウォール投稿できた方がいらっしゃいましたらぜひお話お聞かせください。

2012年6月8日金曜日

fedoraにperl環境(cpan)作成

ちょっとperlの環境を作る機会があったのでメモ。

基本的にはここみればだいたい行けます。
fedoraだとyumでいろいろ入れるだけですね。

ちょっとだけつまずいたのでメモ。
fedoraだとディストリビューションをインストールした時点でperlは入ってます。
あとはcurl、gcc、makeあたりを入れとけば大丈夫です。
今回はTDDを実践するためにcpanを使いました。
cpanをインストールするために
perl-ExtUtils-MakeMaker
というものが必要でした。


 yum -y install perl-ExtUtils-MakeMaker


でいけます。

参考URL : Perlの開発環境をCasualに作ろう
              : Perlモジュールパッケージ管理システム導入(cpan2rpm)

2012年6月7日木曜日

PHPでリダイレクト

cakeだけかもしれませんが、リダイレクトでちょっとはまったのでメモ。

リダイレクトよく使いますよね。

cakeだと

$this -> redirect('url');

ノンフレームワークだと

header("url");

ですね。
これ使うまえになにかブラウザに出力してるとリダイレクトできませんw


echo "aaaaaaa";
$this -> redirect('url');


とかするとリダイレクトしてくれません。
要注意。

2012年6月5日火曜日

jQueryのsubmit()ではまったのでメモ

jQueryでsubmit関数を使うとき少しはまったのでメモ。

$('form').submit(function(){
 ほげほげ
});

って使えるかのように書いてありますが、取ってくるDOMによってsubmitできない場合もあるみたいです。


そんなときは。


$('form')[0].submit(function(){
 ほげほげ
});

とすると使えます。

ソース:jQuery の submit() ではまった

PHPUnitで自動テストを実行する

前書いたコードがあまりにバグだらけで、QA(テストチーム)さんにご迷惑をかけまくりだったので、前から気になってた自動テストを導入することにしました。

テストコード書くと、タイピングの量は倍近くなるので、開発遅くなると思われがちですが作ったものの質を考えると、どの道あとでやるテストをコードを書きながらやるだけなので、開発全体としてはむしろ早くなるのかなとも思います。
何はともあれ実践してみないとわかんないですね。
てことで本題。

今回はPHPUnitというPEARモジュールを使うことにしてみました。
理由はぐぐって一番よさげだったからです。
これはユニットテストしかできないので、よさげなやつがあれば教えてください。

基本的にはここみながら作りました。

ホストOS:windows7にvirtualboxをインストール。
仮想環境にfedora16を用いて仮想環境を作ってます。
この環境だとここのコマンド通りでいけました。

あとはこのあたり見ながらがんばろうかなと。
また報告しまーす。

2012年6月1日金曜日

勉強になったことメモ

今日勉強になったことのメモ。
この形式いいデータベースになると思うので、投稿することにしました。

mysqlでindexを貼ることの意味と張り方。
http://d.hatena.ne.jp/kiyo560808/20101117/1289952549

jQueryで複数のセレクタを選択するやり方。andとor
http://d.hatena.ne.jp/ryoff/20090409/1239245130

cakephpでコントローラ内で共通の処理がある場合に便利なメソッド
http://liginc.co.jp/programmer/archives/199

2012年5月28日月曜日

サーバに投げられたメソッドを判別するスーパーグローバル変数

イトウです。

PHPの便利なスーパーグローバル変数を紹介します。

$_SERVER['REQUEST_METHOD'];

これです。$_POSTや$_GETみたいに使えます。中には”POST”や"GET"といった値が入っており、
これを使えばGETの時とPOSTの時で処理を分けることができます。

他にも便利なグローバル変数はこちら。
スーパーグローバル変数 | php&javascript room

2012年5月26日土曜日

Uncaught TypeError: Property '' of object [object Window] is not a function の正体

イトウです。

JavaScriptをいじいじしてたらこんなエラーに遭遇しました。
Uncaught TypeError: Property 'message' of object [object Window] is not a function


調べてみると、関数の競合が起こってしまっているのが原因みたいです。
僕の場合だと、messageというプロパティが既にjQueryで定義されているのに、
自作でmessage()関数を作っちゃってました。
なのでプログラム的には、「どっち使えばいいの!?」という状態だったみたいです。

解決策としては、
var $j = jQuery.noConflict();

のように記述して、明示的にコンフリクション(衝突)を避けてやれば良いみたい。
jQueryとPrototype.jsなど、ビッグなライブラリを同時に使う場合は注意が必要ですね。

ここらへんを参考にしました。

2012年5月25日金曜日

gitでssh接続がPermission denied (publickey) になるとき

かなりググったのでメモ。

結局ここが一番参考になりました。

linuxでssh接続するときはroot/.ssh/が参照されるみたいです。
設定できるかもやけど。

そこにconfigファイルおいてさっきのリンクの通りに書けばうまくいきました。
公開鍵のパスは変更してね。

では。

2012年5月13日日曜日

mysqlとmysqliの違い

PHPからMySQLを呼び出す関数について調べてみました。
mysqlとmysqliの2つがあります。

【mysql】
MySQLデータベースにアクセスするための関数群。
select文やinsert文など、MySQLのクエリがそのまま発行可能。
主な関数としてはmysql_connect, mysql_select_db, mysql_queryなど。

【mysqli】
mysqlを拡張し、より便利にした関数群。PHP5+MySQL4.1以上の環境で動作。
mysqlでできることは全てmysqliで実現可能。
主な関数としてはmysql_connect, mysql_queryなど。



参考 : http://okwave.jp/qa/q7234078.html

2012年5月12日土曜日

フォームのfocus操作

イトウです。
HTMLでフォームを書く機会が増えてきましたね。
今日はそんなフォームのお話です。

<input type="text"> のフォームで、デフォルト値を設定しておいて、
フォーカスされたタイミングでそれを消す方法です。
Twitterのログインページなんてそうですね。
twitterのTOPページ。薄い灰色でデフォルト値がフォームに表示されている。

ユーザビリティを考えてもこれはしっかり導入したいところ。
これ、簡単にできます。コードは以下。

<form>
<input type="text" value="ユーザ名"
    onfocus="if(this.value==defaultValue){this.value='';}"> </form>

これだけです。簡単ですね。
HTML5からは使えるフォームタイプも増えたことですし、
わかりやすいフォーム作りを目指して頑張りましょう。

参考 : フォーカスすると初期値が消去されるスクリプト

2012年5月7日月曜日

UNIXをマナブ

UNIX周りの知識、忘れがちポイントをまとめました。

LinkedInに買収されてイケイケのslideshareでまとめました。

ただ、これだけ読んでも意味分かりませんので注意です。

- UNIXとLINUX
- UNIXコマンド
- シェルスクリプト
等が主な内容です。

2012年4月30日月曜日

ブログにソースコードをきれいに表示する方法

ブログにソースコードを貼ってみます。


var key;
     for(var x=0; x < 100; x++) {
     key = "key"+(x);
     localStorage.setItem(key, x);
}


SyntaxHighlighterを当ブログに導入したので
かなり見やすくなりました。

<pre>タグでclassを指定して囲んであげるだけ。
------
<pre class="brush:クラス名">
ソースコード
</pre>
------

ちゃんとHTMLエスケープしてね。
encoderを使うととっても便利です。
class名はココを参考に。


参考記事:

LocalStorage入門

HTML5の新機能、LocalStorageの使い方。

var key;
     for(var x=0; x &lt; 100; x++) {
     key = "key"+(x);
     localStorage.setItem(key, x);
}
上のソースのようにsetItem()してやれば、
key1 => 1;
key2 => 2;

と連想配列チックに記憶させることができます。数字や文字列だけでなく、JSON型のオブジェクトも格納できるようなので熱いですね。

取り出す時は localStorage.getItem('key3'); という風に。
詳しくは以下のURLか、とらえもんにある本が詳しいです。

http://dqn.sakusakutto.jp/2011/07/javascript-html5-localstorage-chrome.html

2012年4月29日日曜日

amazonの商品をブログに貼る方法

ここでhtmlを良い感じに生成できます。
こんなんとか

こんなんとか
Robert C. Martin
2100円
評価平均:
powered by yasuikamo
職業倫理の本
すべての技術者とその関係者に読んでほしい
技術者なら目を通して読んだ方がいい。

こんなんとか

clean coder

おすすめの本です。

ソフトウェア技術者なら読んどくべき本だそうです。


Robert C. Martin
2100円
評価平均:
powered by yasuikamo
職業倫理の本
すべての技術者とその関係者に読んでほしい
技術者なら目を通して読んだ方がいい。

みんなぜひ読んでね。

2012年4月26日木曜日

C言語をマナブ

Slideshareブームが来る予感がするのでいまのうちに。
自分で勉強した内容をメモしておきます。

自分にしか分からない内容で申し訳ない。
C言語は文字列の操作が難しいですね。

2012年4月24日火曜日

PHPからJSを呼ぶ

こんなに簡単に呼び出せるなんて驚きですね。

DBから値取得(PHP) → GoogleMapにマーカー追加(JS)
の部分で使いました。
備忘録としてメモしておきます。

if ($id == 1) {
  echo "<script language=javascript>sample_function(".$id".")</script>";
}

2012年4月3日火曜日

chromeアプリを作ろう!

Chrome アプリについて調べたのでメモ。

Chrome Web Store

こちら

Googleの提供するマーケット。
有料アプリと無料アプリとがある、Google版App Store。
Google Apps、Google Extension、Google Themeの3種類がある。

有料アプリでは売上の30%がGoogle側に回収されるが、
アプリ内課金だとGoogle側の取り分はたったの5%。
95%ももらえる開発者に心地よいマーケット。


Google Apps
通常のWebサービスみたいなもん。
Google Apps独自のAPIみたいなんがあって色々できる。らしい。


Google Extension
かつてのChrome 拡張機能。


Google Theme
かつてのChrome テーマ。




2012年2月2日木曜日

Excelの表をtex形式に変換する簡単な方法

execlで表作ると便利ですよね。
すぐ図にできるし関数が豊富なので、あんなことやこんなことまでできちゃいます。
ただ、Excelで数値をまとめるとめんどいのが、texになおすとき。
僕も手で地道に打ってました。。 

しかし!

こんなもんはテキストエディタに一回コピーすれば余裕なんですね。。 

つまり、こういうことです。

1.Excelのデータをコピー
2.それをテキストエディタに貼付け
3.テキストエディタ上で "¥t" を"&"に変換

終わりです。

Execlのセルはタグで分けられるので、それを変換しましょう。
うまくいかない場合は正規表現を使えるエディタにしましょう。
フリーでいいのいっぱいあるので。
これいろんなところで使えそうですね。。
ただ、プログラマーとしてはこんなんをスクリプト書いてさっと処理したいですね。
次はそうしましょう。

2012年2月1日水曜日

TEXで複数行コメントアウトする方法

C言語とかでいう
/*
hogehoge
*/

texでは

\if0
hogehoge
\fi

です。
以上。

Terminalで文字コードを変換する方法

メモ帳などのエディタでテキストデータを作成すると,
文字コードが勝手に埋めこまれてることがあります.

ファイルの先頭に<U+FEFF>みたいな表記がある.
(メモ帳では見えないが,lessコマンドで見れる.)
これはバイト順マークといって,UTF-8を識別するためのもの.
しかし日本国内のみのものであり,国際的には認知されていない.
(どんだけ厄介やねーーーーん!!)

これ,テキストデータ処理するときにかなりじゃま.
実際(扱えない謎の)文字列として認識されちゃうので除去しましょう.

コマンド:
nkf [option] [file]


使用例:
1) nkf -g ex.txt
ex.txtの文字コードをチェックする.

2) nkf -w ex.txt
ex.txtの文字コードをUTF-8に変換して出力する.

3) nkf -w --overwrite ex.txt
ex.txtの文字コードをUTF-8に変換して上書きする.


こんな感じ.ちょー簡単!


参考:

コンソール出力関数一覧

イトウです。

新しいスポーツを始める時に重要なのが走りこみ、
新しいプログラミング言語を勉強し始めた時に重要なのがコンソール出力、ですよね。
プログラミング言語別のコンソール出力関数のまとめです。

-------------------------------------------------------
C
printf("%s", message);

Java
System.out.println(message);

JavaScript
console.log(message);

Objective-C
NSLog(@"message: %@", message);
-------------------------------------------------------


Cベースの言語とはいえ文法全然ちゃいますね。とっつきにくいですね。
他の言語も勉強次第追記していきます。

2012年1月6日金曜日

double型の比較にはfabsを使おう

研究でめちゃ詰まったのでメモ。

double型を扱う際、比較演算子の使い方には要注意。
if( a == b )
ではだめ。
if( fabs(a-b) < gosa )
にする。

※gosaの部分は自分で決めた誤差精度を指定すること(0.000001など)。
※math.hをincludeしておくこと。