Hatena::ブログ(Diary)

C_memo(5) このページをアンテナに追加 RSSフィード

2013/August/13

C84活動報告

04:32 | C84活動報告を含むブックマーク

今回は、3種類の同人誌を売ってたんですが全部完売になった。昼前くらいの売り上げがラッシュでした。3冊セットで買って行く人もけっこういた。

東のレガリア1:10冊(完売)原価190,売値200
東のレガリア2:25冊(完売)原価600,売値500
東のレガリア3:30冊(29冊売、1冊持ち帰り)原価150,売値300

Android記事のほうがiOS記事よりも開いてみてくれる人が多かった。 今回、表紙の絵はアイマスの真のつもりだったんですが、誰もそのことには触れてくれなかったですね。。。前回はじょしらくの手寅。こういうところを手を抜くとダメということですね。

で、冬何書くか?これもなかなかテーマ決めが難しい。候補としては以下のような感じか。
Haskellでサービス作る
・XNUカーネル実装を読み解く

でも作ろうかと思っているが、今週末までに様子をみて、テーマを決めたい。

2013/May/20

TypeScriptセットアップ手順

01:18 | TypeScriptセットアップ手順を含むブックマーク

$ brew install node
$ brew link node
Linking /usr/local/Cellar/node/0.8.12... Warning: Could not link node. Unlinking...

Error: Could not symlink file: /usr/local/Cellar/node/0.8.12/lib/node_modules
/usr/local/lib is not writable. You should change its permissions.
$ sudo chmod 777 /usr/local/lib
$ brew link node
$ sudo chmod 755 /usr/local/lib

$ curl https://npmjs.org/install.sh | sudo sh

$ npm install -g typescript
$ tsc test.ts

2012/November/26

OpenCV2.4.3 Androidビルド手順

03:17 | OpenCV2.4.3 Androidビルド手順を含むブックマーク

環境
Mac OS X 10.7(MacBook Air)
Eclipse Juno rev1
Androidの環境構築はすでに済んでいるものとする。

CDT入ってなければ入れておく。
デフォだとEclipseC++/CのBuild Setting項目がないのでこれで増える / “EclipseC/C++ 開発ツール (CDT) をインストールhttp://htn.to/K4GbjP

ここからOpenCV落とす
http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.3/OpenCV-2.4.3-android-sdk.zip/download

unzip

(1)OpenCV-2.4.3-android-sdk/sdk/java/.settingを削除する。
理由は、以下のようなビルドエラーがあとで出るため。
(サンプルコードにも全部.settingがあるので全部消すこと)
http://answers.opencv.org/question/4209/build-errors-after-opencv-library-import/

(2)Eclipseに上記をimportする。

(3)Project propertyで、java compilerを1.5->1.6に変更する。

ここまででLibraryのビルドはうまくいく。
以下はサンプルのビルド

(4)Project propertyで、AndroidのLibraryをaddで指定する。
Libraryがきちんとビルドできていれば、選択肢にOpenCV2.4.3が出る。

(5)Project propertyで、ndk-buildを正しいパスにする。
C++/C Build Settingsで、${NDKROOT}/ndk-build.cmdになっていると思うが、これを
/Users/adachic/android-ndk-r8c/ndk-build など、
NDKをインストールした正しいパスに変更する。

(6)unzipしたうちの、sdkワークスペースにコピーする
cp -rf sdk ~/Documents/workspace/OpenCV_sdk

(7)Android.mkの以下の行を書き換える
include ../../sdk/native/jni/OpenCV.mkを
include ../OpenCV_sdk/native/jni/OpenCV.mkなど、コピーしたディレクトリに書き換える

これでビルドがうまくいった。

2012/November/20

Android環境セットアップ(Mac10.8)&ADT動作確認まで手順

05:19 | Android環境セットアップ(Mac10.8)&ADT動作確認まで手順を含むブックマーク

過去に書いた手順が古すぎるので、今の手順をついでにメモっとく。(たまに参考にする人がいるらしい?)
今回はAndroidアプリというか、Android ADKを動かしたいのでそれ関連の動作確認ができるところまで書く。

Eclipse IDE for Java EE Developers(Eclipse JUNO)
http://www.eclipse.org/downloads/

ADTプラグイン
Eclipse->Help->Install New Software
https://dl-ssl.google.com/android/eclipse/をaddする。
全部チェックする。
ライセンスにagreeし、Finishする。

Eclipse再起動すると、
このADTプラグイン古いから更新しろ的なダイアログ出るので、
Android SDK Managerをそのまま開く。

ADTに対応するのは
Android3.2,Android2.3.4以上、GoogleAPIs2.3.3以上なのでそれらをぬかりなく入れればおk。
API level 10くらいがいいのではないだろうか。
自分のそもそもの環境にはAPI10はいってたが、rev1だったので、これが2じゃないとダメらしい。
必要に応じて上げる。

で、SDK Managerでチェックをいれてインストールはじめたら、いろいろとごちゃごちゃでてくる。
Eclipse Installのタグでプラグインを背後で落とし始める。
待つ。
SDK Managerで更新しきれない旨でるので、Eclipse再起動する。
起動直後、ADTのバージョンは21以上が必要だが、お前のSDKでは古いというダイアログ出る。
SDK Managerで勝手に更新始まる(Fetch URLされてより詳細になる)ので、
より詳細に選べる。

いろいろ気になるものあるわ
f:id:adachi_c:20121121045104p:image

で、気になるものをチェックつけて、updateして、Eclipse再起動かける。

あとは、EclipseのプロジェクトのpropertyのtargetにAndroid2.3.3とgoogleAPIの2つにチェックをいれる。
import com.android.future.usb.UsbAccessory;
ビルドが通ればOK。

2012/October/18

ios-ntp導入手順

15:02 | ios-ntp導入手順を含むブックマーク

ゲットする
$git clone https://github.com/jbenet/ios-ntp.git

ios-ntpプロジェクトをXCodeビルドする
ここで、Build SettingsのValid Architecturesにarmv7sを追加する。


スタティックライブラリをリンクして、ユニバーサル化するところでエラーが出る。
framework: creating universal lib /Users/akinori_adachi/Library/Developer/Xcode/DerivedData/ios-ntp-fizitzcmivjjjgetxxzfmshjurtr/Build/Products/Debug-framework/ios-ntp.framework/ios-ntp

lipo: can't open input file: /Users/akinori_adachi/Library/Developer/Xcode/DerivedData/ios-ntp-fizitzcmivjjjgetxxzfmshjurtr/Build/Products/Debug-iphonesimulator/ios-ntp.framework/ios-ntp (No such file or directory)
Command /bin/sh failed with exit code 1

ターゲットをiPhone Simulatorでビルドしたあと、iOS deviceでビルドする。
そしたら、
Library/Developer/Xcode/DerivedData/ios-ntp-fizitzcmivjjjgetxxzfmshjurtr/Build/Products/Debug-iphoneos/

ios-ntp.frameworkがあるので、これをインポートしたいプロジェクトにコピーする。

UDPAsyncSocketが必要なので、ゲットしてインポートしたいプロジェクトにコピーする。

2012/October/16

MsgPack Android導入手順 JUnitTestまで

03:48 | MsgPack Android導入手順 JUnitTestまでを含むブックマーク

環境
MacOS X 10.8
jdk1.7
Eclipse Juno

ゲットする
$git clone https://github.com/nagoya0/msgpack-java.git
$git checkout compati2

ビルド
$mvn package
$mvn install
$mvn eclipse:eclipse
Eclipseのプロジェクトファイルができるので、importする。

プロジェクトのpropertyにJava Build Pathに以下を追加
M2_REPO = $HOME/.m2/repository

JUnitTestを動作させる。全部Passするはず。

実機動作はまた明日。

2012/October/06 Scala開発環境導入手順(Mac) このエントリーを含むブックマーク

javasdk1.7にする
http://jdk7.java.net/download.html
ここからゲットし、インストールしたのち、ユーティリティのJava Preferenceで1.7を優先にする。

Scalaを入手
http://www.scala-lang.org/downloads

.bashrcに下記を追記
export SCALA_HOME=/Users/adachi_c/env/scala-2.9.2
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
PATH=$PATH:$HOME/.rvm/bin:$HOME/env/scala-2.9.2/bin:$JAVA_HOME/bin # Add RVM to PATH for scripting

IntelliJを入手
http://www.jetbrains.com/idea/download/download_thanks.jsp
ここからゲットし、インストールする。

IntelliJプラグインをいれる
とりあえず、起動。
PreferencesからPluginsを選び、Scalaダウンロードし、インストールする。
そのあと、プロジェクトをつくればOK。

JDKがないとか言われるが、そのときは、直接JDKを指定する。
JDKは、上のjavasdk1.7がはいったディレクトリを指定すればOK
/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
こんなかんじかな?

で、あとはnew fileでHellowWorld.scalaを作って、ビルドして、Runしてコンソールに出たらおk。

2012/August/19

github page+ Octopress

| 06:26 | github page+ Octopressを含むブックマーク

XCode4.3にアップデートしたら、gcc,configureなどがインストールされてないので、
XCodeのPreferenceのDownloadから、Command Line Toolsをインストル。

rvmインストールする。(ruby 1.9.3を使うため)
url -L https://get.rvm.io | bash -s stable --ruby
rvm install 1.9.3
rvm use 1.9.3
rvm rubygems latest

Octopressインストールする。
git clone git://github.com/imathis/octopress.git octopress
cd octopress # If you use RVM, You'll be asked if you trust the .rvmrc file (say yes).
ruby --version # Should report Ruby 1.9.3
bundle install

失敗する

creating Makefile

make
Configuring libffi
Launch of "gawk" failed: the PowerPC architecture is no longer supported.
config.status: error: could not create include/Makefile
make: *** ["/Users/adachic/.rvm/gems/ruby-1.9.3-p194/gems/ffi-1.0.11/ext/ffi_c/libffi"/.libs/libffi_convenience.a] Error 1


gawkが古い。入れなおす。
sudo port install gawk

再トライ
bundle install

OK.

rake install

アカウント対応付け
rake setup_github_pages
(git@github.com:adachic/IJT3.git)

記事を書く
rake new_post["title"]
source/_post以下にエントリが作成されるので、markdownで書く

デプロイ
rake gen_deploy

簡単にできた
http://adachic.github.com/

まぁ、アクセス解析とかはこっちが充実してるんで、ミラーリング的に使うかも。

参考にしたサイト:
http://www.sankitch.me/blog/2012/05/05/build-octopress-on-github-dropbox/

マークダウン:
http://tokkono.cute.coocan.jp/blog/slow/index.php/programming/markdown-skills-for-github-beginners/

2012/May/07

人狼/Android、C81、C82展望1

| 02:29 | 人狼/Android、C81、C82展望1を含むブックマーク

かなり前だけど、イケメン人狼Android版をリリースした。
https://market.android.com/details?id=com.regaria.ijt
そのあたりの話と、あとAndroidシステムで高速にプロセス間通信をどうやるか、を書いた40ページくらいの薄い本をC81で出した。全体的な人口がもとにもどりつつあるんで、ノーマナーな人なんかも増えたみたいだが、村がかなり復興して、これはこれでよかったかなと。

次のC82にも一応応募はしていて、内容としてはAndroid/iOSシステムのメモリ管理、あとは、iOS同士でいい感じに(高速に)通信する具体的なことについて調べていて、このあたりはあまりやってる人がいなさそうで、簡単なものでもいいから一つでも作りたいと思っている。

なんでそういうのやりたいかというと、イケメン人狼ではサーバが必要で、サーバ側、Androidの両方を開発して、かつ、サーバの運用といってもcronが動くだけだけども、サーバがあるというだけで、運用コストまでがかかるのが趣味でやるにはだるい。一度公開してしまうと、こちらが手仕舞するとなにも残らない。

今どきのゲームってのは、もうサーバなんて用意する必要なくて、端末間で通信して、すれ違いとか、そういうカジュアルなつながりでも、皆十分に楽しんでいるように見える。人人を繋げるコストが低くなってて、親しくなりたい人のプロフィールをソーシャルグラフとかで後から追えるし、だからこそ、ずっとログインしっぱなしでいる必要もない。あと、サーバ持ってないからシンプルでいい。モンハンとか、ダークソウルはそうなってる。

僕が知っている、昔のMMORPGとかだと、ずっとたまり場にいないと親しくできないとか、親しくした人がある日、ふっと消えて追いかけようがないとか、そういう不便すら、もう時代遅れなんだろうな。

2011/April/20

実機に同一アプリを複数インストールする

| 22:56 | 実機に同一アプリを複数インストールするを含むブックマーク

これは今のところ、パッケージ名を変えて
Manifest.xml のpackage=で指定するしかない。
不便。

速度計測時の注意点

| 11:04 | 速度計測時の注意点を含むブックマーク

出力は最後にまとめて出す。
分解能は適切か。
データは複数回とる。
最悪値を出す。
ヒストグラムを出す。
キャッシュの確認。

2011/April/04

Android開発環境セットアップ(Mac OS X 10.6.7)

| 01:28 | Android開発環境セットアップ(Mac OS X 10.6.7)を含むブックマーク

Mac OS X 10.6.7(家)


Eclipse 3.5.2(Galileo)
Eclipse IDE for Java EE Developers
Eclipse Galileo SR2 Packages (v 3.5.2)
http://www.eclipse.org/downloads/packages/release/galileo/sr2


・日本語化
ヘルプから、追加インストールを選択し、
Locationのところに、
http://download.eclipse.org/technology/babel/update-site/R0.8.0/galileo


Android SDK r10
android-sdk_r10-mac_x86.zip
http://developer.android.com/sdk/ndk/index.html
/optにインストールする。


Android NDK r5(ネイティブコード書かないなら不要)
android-ndk-r5b-darwin-x86.tar.bz2
http://developer.android.com/sdk/ndk/index.html
/optにインストールする。


Android標準APIAPIレベル設定
ヘルプから追加インストールを選択し、以下を追加。
https://dl-ssl.google.com/android/eclipse/
1.6... API Lv4
2.0... API Lv5
2.1... API Lv6,7
2.2... API Lv8


Android platform
SDK and AVDマネージャからインストールする。


設定から、Android SDKのパスを通す。
Android 2.2を使う。(好きなやつを使うといい)


プロジェクト作成。実機をUSBでつなぐ。実行構成をmanualにする。ビルド、実行。動作確認完了。

以上。

2011/January/26

before_fileter 非login時の定義は、routes.rbに書かない

| 12:50 | before_fileter 非login時の定義は、routes.rbに書かないを含むブックマーク

before_filter :login_required
で、ログインされてないときのページは、routes.rbではない。

lib配下に関数があるので、そっちを変更する。
http://rubist.blog77.fc2.com/blog-entry-95.html

2011/January/24

char*からNSString*への変換

| 17:23 | char*からNSString*への変換を含むブックマーク

char* cp = "test";
NSString* str = [NSString stringWithCString: cp
encoding:NSUTF8StringEncoding];



ここで、testが終端文字で終わっていなければ、
strにはnilがはいるので注意。


ついでだから書いておくと、
IBOutletを使用している場合、Static TextがEnableになっていると、
いくらアクセサを設定しても、上書きできないので注意。


さらにもう一点、
IBOutletのlabelを書き換えるときは、必ずaddSubviewした後で書き換えましょう。
labelに限った話ではないが。
addSubviewの前だとこれも、どれだけ頑張っても上書きできませんので注意。


アホみたいな話ですが、普通にハマります。上の3つは最初にチェックしたい。

2011/January/17

UIGestureRecognizerが糞使えない理由

| 12:32 | UIGestureRecognizerが糞使えない理由を含むブックマーク

皆使ってる UIGestureRecognizer ですが、こいつで泣かされる人もわりと多いと思う。


UIGestureRecognizerについては、ググってくれればいい。
UIGestureRecognizerの派生クラスで以下のものがある。


UITapGestureRecognizer タップ
UIPinchGestureRecognizer ピンチインアウト主に拡大縮小
UIPanGestureRecognizer ドラッグ
UISwipeGestureRecognizer ページめくりやスクロール等のスワイプ
UIRotationGestureRecognizer 指2本で回転させる感じ
UILongPressGestureRecognizer 長押し


いわゆる、1~4本指スワイプ、2本指回転、長押しあたりを検出するクラスである。
こいつがほぼ使えない。


なぜかというと、touches{Began|Moved|Ended}との相性がとても悪い。
Gesture系のイベントが発生すると、touch系のイベントが発生しない。


これによって、touchesMovedを検出したいのに、swipeGestureが検出されるということが起こる。
あるいは、swipeGestureを検出したいのに、touchesBeganが発生するというようなことが起こる。
また、swipeGestureやLongPressGestureから、touchEndedへつなげるといったようなことができない。


例えば、単なる長押しならいいが、長押しのあとにスライドを検出したい場合や、
回転の後に、指離しを検出してなにかしたいという場合は、
UIGestureRecognizerでやろうとすると、複雑な実装になる。


つまり、回転、スワイプなどは、結局自前で作ってdelegateして使うということが一番簡単なので、
簡単なビューで即席的なものならありだが、それ以外の場面では、これらのクラスは極力使わないようにしたい。
touches{Began|Moved|Ended}だけでタッチ処理を実装するのが、今のところ一番いいと思う。

2011/January/12

ResponderChainとDelegate

| 23:23 | ResponderChainとDelegateを含むブックマーク

UIKitでプログラミングしていると、サブビュー(UIViewとその派生)が次々と増えていく。


ビューが重なりあった状態では、最も下層にあるビューが、FirstResponderとなる。
FirstResponderというのは、最初にイベントを受け取るオブジェクトのこと。
例えば、TextFieldにフォーカスがあってたら、TextFieldがFirstResponderである。


で、指でViewに対してタッチすると、touches{Began|Moved|Ended}の一連のイベントが発生するが、
このイベントというのは、FirstResponderがまず受け取る。
FirstResponderにてイベントハンドラが定義されている場合、実行される。
イベントハンドラが定義されていなければ、NextResponderがFirstResponderになる。
UIViewの場合は、その親ビューにイベントが渡される。
このように、次々とスーパービューへとイベントが渡されていく。
これをResponderChainという。


FirstResponderにイベントハンドラがあるが、
その親ビューや、そのさらに親ビューのイベントハンドラ関数を実行したい場合は
Delegateを使う。


Delegateは大体の場合が、非公式プロトコルというObj-Cの仕組みで実装する。
Javaでいうところの、Interfaceのような感じ。


コンパイル通るかわからないけど、簡単な例を示すと、だいたい次のような感じ。
View1が、View2の親ビュー。
View2でタッチしたイベントを、View1にdelegateする。


というわけで、はてな様、私にMac11インチくださったら、役立てますので宜しくお願いします。



touchDelegate.h

@protocol touchDelegate
   - (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
@end

View1.m

#import "touchDelegate.h"
@interface View1:UIViewControler <touchDelegate>
{
   UILabel *label;
}
@end

@implementation View1
- (void) viewDidLoad
{
   UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100,100)];
   view2.delegate = self;
   [self.view addSubView:view2];
}
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
   label.text = @"aho";
}
@end

View2.m

#import "touchDelegate.h"
@interface View2:UIViewController <touchDelegate>
{
   id delegate;
}
@end
@property (nonatomic,retain)id delegate;

@implementation View2
@synthesize delegate;
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
   [delegate touchesBegan:touches withEvent:event];
}
@end