2013年6月10日月曜日

armクロスコンパイル

VagrantとVirtualBoxはインストール済み。
1. DebianのBoxをVagrantに追加。今回はSqueezeの32で(深い理由はない)。
$ vagrant box add debian_squeeze_32 http://mathie-vagrant-boxes.s3.amazonaws.com/debian_squeeze_32.box
2.Vagrantのインスタンス置き場を作成し、初期化
$ mkdir ~/vagrant_work/debian_squeeze_32
$ cd ~/vagrant_work/debian_squeeze_32
$ vagrant init debian_squeeze_32
3. VirtualBoxインスタンス起動 & ログイン
$ vagrant up
$ vagrant ssh
4. ここからはDegian側での作業。armクロスコンパイル環境をバリバリと構築
$ sudo aptitude install emdebian-crush emdebian-grip emdebian-archive-keyring
5. apt-listにエントリを追加する
$ sudo vi /etc/apt/sources.list
追加するのは以下の2行。
deb http://www.emdebian.org/debian/ squeeze main
deb-src http://www.emdebian.org/debian/ squeeze main
6. さらにインストール
$ sudo aptitude update
$ sudo aptitude upgrade
$ sudo aptitude install gcc-4.4-arm-linux-gnueabi
で、
$ arm-linux-gnueabi-gcc test.c
みたいな感じでコンパイルできる。

2013年6月3日月曜日

TeX環境作成(MacTeX2013使用)

BoxenではTeXShopしか入らなかったので。手作業でごりごり。調べてみたらMacTeXは2013が出ているらしいので、うまくいかなくて良かったと安心してみることに。

1. とりあえずBoxenでTeXShopは入っている。
2. brewでghostscriptとimagemagickとか入れる。
$ brew update
$ brew install ghostscript
$ brew install imagemagick

3. ここからmactex-2013.pkgをダウンロード。結構でかい。

MacTeXでは「カスタマイズ」にしてTeXLiveだけをインストールする(ghostscriptとかかぶるので)。
あとは ここここを参考にしつつ。

  • 文献管理はPagersがあるのでインストールしない
  • Excaliburをインストール
  • LaTeXiTもインストール
  • TeXShopはすでにBoxenでインストールしていた
  •  TeXworksもインストール
TeXLiveでのパッケージ更新は、インストールしたのがMacTeX2013だったせいか、更新が見つからなくてスキップした。
pmetapostとuptexのインストールは実施。
フォントの追加はしない。
LaTeXiTの設定をして。
TeXShopの設定をして。

そんな感じで、インストール完了。

毎回TeXは結構面倒だなぁと思うので、なんとかしたいがどうにもならん。

2013年6月1日土曜日

Macの環境をなんとかする(Boxenを使ってみる)

Airがブートしなくなり、ジーニアスバーに連れて行ったらそのまま入院してしまい。
 帰ってきたらSSD交換で記憶を失っていたり、TimeMachinから戻そうとしたら失敗したりで、いっぺん環境を作りなおすかと作業中。
また何かあった時にイチからやり直すのはちょっとキツイので、この機会に出来るだけ自動化を目論んでみる。Boxen導入。

1. とりあえず、ソフトウェアアップデートをしたあとでTimeMachineにバックアップ。
2. XCodeをインストールする。コマンドラインツールも入れる。
3. githubのアカウント設定をする。ここを参考に。
4. githubの秘密鍵とかあるなら、.sshの下においておく(多分必要)
5. Quiitaの ここらへんを参考にする。

Puppetfileは、元からあったものはそのままにして必要なものを下に追加。追加したのは

  • chrome
  • iterm2
  • sublime_text_2
  • dropbox
  • firefox
  • github_for_mac
  • mou
  • tmux
  • virtualbox
  • skype
  • appcleaner
  • fluid
  • osx

manifests/site.appは編集して、一番新しいバージョンだけNodejsとRubyを入れるようにする(古いものはコメントアウト)。
modules/people/manifests/{Githubアカウント名}.ppを編集。Puppetfileで追加したもののincludeを設定したり(osxはincludeしない)。homebrew経由およびダウンロードでインストールするものを追加したり。

  • homebrew経由
    • autoconf
    • automake
    • bash
    • bash-completion
    • rbenv-gemset
    • tig
    • zsh
  • ダウンロード
    • GoogleJapaneseInput
    • Sophos Anti Virus for Mac Home Edition
    • Mac Vim + Kaoriya
    • Vagrant
    • MacTeX
    • TexShop

あとはzshにログインシェルを変更したりとかそんな感じで。

script/boxenでインストール(ディスクの暗号化をしないオプション付きで)。

失敗したこと
1. modules/peopleの下に個人設定ファイルを置いてしまい、「自分で追加したものがインストールされない。な〜ぜ〜?」と苦しんだ。エラーメッセージが出ない間違いは、気付きにくい。
2. sourcetreeはエラーが出てインストールできなかった。
3. MacTeXはダウンロードに失敗したのか、実行中にインストールエラーが発生
4. MacVim+Kaoriyaはエラーが出ないのにどこにも見当たらない...どこだ?
5. 途中で何度も「/opt/boxen/homebrew/binにパスが通っていませんぜ」とワーニングが出る。homebrewが入ったところあたりでパス設定ができると幸せになれる気がする。
6. よくわからんエラーが出ているところがある。どこが原因かわからないので、何もケアしていない....

依存関係とかpuppet-osxとか使いこなせると色々できそうだけど、ダウンロード途中で失敗したりした場合のケアとか考えないとまずいのかなと思うところがある。MacVimとMacTeXはとりあえず手動でインストールすることに。

今回のファイルはどっかにあげとくと、次回に活かせるかなということで。どっかにあげよう。

2013年5月23日木曜日

CでJSONをパースする

自分でゴリゴリ書くと辛い。そんな訳で、parsonを試してみた。
[{"Name":"Taro", "Age":"10"}, 
  {"Name":"Hanako", "Age":"20"}]
みたいなJSONを解析するには
int i;
JSON_Value *root_value;
JSON_Array *persons;
JSON_Object *person;

root_value = json_parse_file("ファイル名");

persons = json_value_get_array(root_value);
for ( i = 0; i < json_array_get_count(persons); i++ )
{
  person = json_array_get_object(persons, i);
  printf("%s, %s\n", 
                json_object_get_string(person, "Name"), 
        json_object_get_string(person, "Age"));
}
json_value_free(root_value);
みたいな感じでやればパース出来る。 日本語とか大丈夫なのかはまだ未確認だけど、便利そう。

2012年4月3日火曜日

iPhoneでYouTube(その2)

先日の投稿で書いた通りにやると、うまくいかなくなってしまった。gdata-objectivec-clientにSBJSonが入らない状態でダウンロードされるためと思われる。 で。こんな感じで回避。

1. svn checkout http://gdata-objectivec-client.googlecode.com/svn/trunk/ gdata-objectivec-client-read-only

これでSBJSonの入っていないgdata-objectivec-clientが取得できる。

2.ここからさらにダウンロード。 

2に入っているJSONフォルダを1のSourceにコピー。

そのあとはここで紹介されている手順で作業。

もしかしたら2つめにダウンロードしたやつだけでうまくいくのかもしれない....と後で思った。

2012年2月10日金曜日

iPhoneのPush

とりあえず、SandBox使用の場合

1) App IDではちゃんと開発用のPushの設定をしておく
2) Pushが使えるProvisioningで署名をする
3) 1. で取得した証明書とか秘密鍵でp12ファイルを作って、サーバーにおいておく

3を忘れてひどい目にあったので、めもめも。

2012年2月8日水曜日

YouTube API for Objective-C(iPhone)

設定はここを見れば、大体問題なし(YouTube APIになっていないところは、適宜直す)。

xxx.hでは
#import "Headers/GDataYouTube.h"
#import "Headers/GDataServiceGoogleYouTube.h"

を記述した上で、プロパティにGDatFeedYouTubeVideo*を設定しておく。

特定ユーザのフィードを検索するにはviewDidLoadあたりで

    GDataServiceGoogleYouTube *service = [self youTubeService];
    NSURL *feedURL = [GDataServiceGoogleYouTube youTubeURLForFeedID:nil];
    GDataQueryYouTube* query = [GDataQueryYouTube 
            youTubeQueryWithFeedURL:feedURL];
    [query setStartIndex:1];
    [query setMaxResults:5];
    [query setAuthor:@"ユーザ名"];
    [query setOrderBy:@"published"];
   
    [service fetchFeedWithQuery:query delegate:self
          didFinishSelector:@selector(request:finishedWithFeed:error:)];
   
    [super viewDidLoad];       


とやっておく。

youTubeServiceは
- (GDataServiceGoogleYouTube *)youTubeService {
    static GDataServiceGoogleYouTube* _service = nil;
    if (!_service) {
        _service = [[GDataServiceGoogleYouTube alloc] init];
        [_service setUserAgent:@"てきとうに"];
    }
   
    // fetch unauthenticated
    [_service setUserCredentialsWithUsername:nil  password:nil];
    return _service;
}

検索が終わったら
- (void)request:(GDataServiceTicket *)ticket
finishedWithFeed:(GDataFeedBase *)aFeed
          error:(NSError *)error {
    if (!error) {
        [self setFeed:(GDataFeedYouTubeVideo *)aFeed];   
        [self.listView reloadData];
    }
}

みたいにして、検索結果をプロパティに設定して、UITableViewを更新する。
タイトル文字列なんかは
    GDataEntryBase *entry = [[feed entries] objectAtIndex:indexPath.row];
    NSString *title = [[entry title] stringValue];
    NSString *descriotion =
   [[[(GDataEntryYouTubeVideo *)entry mediaGroup]
               mediaDescription] contentStringValue];
    NSArray *thumbnails =
   [[(GDataEntryYouTubeVideo *)entry mediaGroup] mediaThumbnails];


こんな感じでとれる。

ここから基本的なコードは取得できる。