2010年12月31日金曜日

ふりかえってみると

ふりかえってみると今年もいろいろあった年だった.


  • 修論発表
  • 就職
  • 勉強会での発表
  • いい椅子を手に入れたこと
  • 仲間とのiPhone Programmingの勉強

他にもいろいろあったと思う.
感想としては充実はしていたが,少し疲れたかな.
そして,時間がなかった関係もあったけど,色々な意味でぎりぎりすぎた気がした.

今年は来年の活動にはとても重要であった1年だったと思う.

いろいろなチャンスをくれた方,助言をくれた方など多くの人に感謝したい.
来年はもっとがんばりますので,よろしくお願いします.

残念だったことを書こうとおもったが,それについては来年の目標としてがんばろうと思う.
それではよいお年を.

2010年12月26日日曜日

とりあえず,Smalltalk使いたい人へ その2

前回Smalltalkのチュートリアルの資料について紹介しましたが,前回の改訂版?を出しましたので(出したのは11月),ご紹介

第26回Smalltalk勉強会
http://www.smalltalk-users.jp/Home/gao-zhi/dai26kaismalltalkbenkyoukai
当日の資料です

かってに配布しちゃっても構いません.
Keynoteで作成したので,Keynoteが欲しい方がいらっしゃいましたら,ご連絡を.
もちろん無料でさしげます(←あたりまえw).

とりあえず,Smalltalk使いたい人へ - トウヨウリンゴ

"もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら"を読んでみた

"もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら"を読んでみました.

面白いと思いました.
マネジメントを分かりやすく,そして様々なものに応用がきくことが具体的にわかります.

アイディアや目標に対する達成させていくプロセス,そして成果に結びつける方法を考えることの重要性が伝わってきます.

このブログを読んでいる人はお分かりの通り私は文章がうまくないので,本の感想もうまく伝えれていない気がしますが,
一度読んでみるといい本だとは思います.

何かを成し遂げたいと思っている人にはおすすめです.
私も少し考えが変わりました.

2010年11月24日水曜日

iOSのベータ版から公開版にアップデートする方法

iOSのベータ版から公開版にアップデートする方法のご紹介.
iPhone, iPadにはDFU (Device Firmware Upgrade) モード*1 というのがあります.
これを利用すると公開版iOSにアップデートできます.

  1. iPhone, iPad touchまたはiPadをパソコンに接続
  2. iPhone, iPad touchまたはiPadの電源を切る
  3. 電源ボタンとホームボタンを10秒間同時押しする
  4. 電源ボタンだけ放し,ホームボタンはパソコンがUSBデバイスを認識するまで(約10秒)押し続ける

iTunesから復元を行なうと,公開版iOSがダウンロードされ,インストールされます.

ちなみに私のiPadは,この方法でiOS 4.2.1にしております.



*1 DFU (Device Firmware Upgrade) モードは,iPhone等のファームウェアのバージョン関係なく,復元可能にする

2010年10月31日日曜日

とりあえず,Smalltalk使いたい人へ

本当は本を購入してきちんと勉強してもらいたいけど,とりあえず味見したい人のために,以前作った資料をどうぞ.

http://docs.google.com/viewer?a=v&pid=sites&srcid=c21hbGx0YWxrLXVzZXJzLmpwfGhvbWV8Z3g6MTgyYWZkMmY3NjVhNmRlMg

第24回Smalltalk勉強会(roppongi.st)
http://sites.google.com/a/smalltalk-users.jp/home/Home/gao-zhi/dai24kaismalltalkbenkyoukai

はやくチュートリアルを完成させたい.

2010年9月26日日曜日

iOS 4.2 iPadで3G回線を利用する方法

iOS 4.2 iPadをインストールすると「PDP認証に失敗しました」と表示されて3G回線が利用できなくなる.通常はiTunesに接続をして同期を行えば改善されるのだが,Beta OSだとダメのようです.
せっかくの3G回線が使えなくなってしまうのは非常にもったいないので、調べて見たところ解決方法がありました.

(以下の内容を行い,何らかの問題が発生しても当方は責任を一切責任を負いません).
以下のサイトでAPNプロファイルを作成します.

http://www.unlockit.co.nz/

1. サイトにアクセスしたらContinueを選択
2. Custom APNを選択
3.
APN: sbm
Username: data
Password: softbank
を入力.
(Carrierは入力しなくても大丈夫です)
4. CreateProfileを選択してプロファイルをインストールします
5. インストール後,3G回線が接続できない場合は再起動をすると接続ができます

ということで3G接続ができるiPadを持って,外で朝ごはんを食べながらこの記事を書いています.





2010年9月20日月曜日

[Command] rsync

 更新されたファイルのみバックアップをするツールとしてrsyncがありますが,Mac版のrsyncには-Eというオプションがある.これは,リソースフォークスもコピーするオプションなので,覚えておくといい.

2010年9月16日木曜日

MacPorts 1.9.1

MacPortsがいつの間にか1.9.1になっていたので,アップデート.

MacPortsを使っている人は以下のコマンドで更新できます.
sudo port selfupdate


アップデートされたパッケージを更新
sudo port upgrade outdated 

2010年9月4日土曜日

[Objective-C] リファレンスカウンタとの戦い

以前かいたObjective-Cのリファレンスカウンタについて,再び考える.

[Objective-C] 詳解 Objective-C 2.0 リファレンスカウンタ 不明なところ - トウヨウリンゴ
http://newringo.blogspot.com/2010/05/objective-c-objective-c-20.html

コードはこちら.

#import <Foundation/Foundation.h>
#import <stdio.h>

int main(void)
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
  NSObject *obj = [[NSObject alloc] init];
  printf("init: %d\n",[obj retainCount]);
  [obj retain];
  printf("retain: %d\n",[obj retainCount]);
  [obj retain];
  printf("retain: %d\n",[obj retainCount]);

  [obj release];
  printf("release: %d\n",[obj retainCount]);
  [obj release];
  printf("release: %d\n",[obj retainCount]);
  [obj release];
  /* 実行するとエラーになるはずなのだが・・・ */
  printf("release: %d\n",[obj retainCount]); 

  [pool drain];

  return 0;
}

そして,今日わかったのは,詳解 Objective-C 2.0と同じ結果を得るためには,以下のコンパイルをすればよい.

gcc -framework Foundation -m32 reference.m

結果
init: 1
retain: 2
retain: 3
release: 2
release: 1
objc[2758]: FREED(id): message retainCount sent to freed object=0x103f60
Illegal instruction

ただ,このオプションで本通りになるというのは,なっとくいかない.

-m32のオプションなしの場合

結果
init: 1
retain: 2
retain: 3
release: 2
release: 1
release: 1

64bit用では,同様の結果が得られないのは,なぜか.
さっぱりだ.

2010年9月1日水曜日

プロセスを起動しているユーザとプロセス数の確認

プロセスを起動しているユーザとプロセス数の確認をするため,以下のものをかいてみた.

$ ps ax | awk '{ print $1 }' | sort -n | uniq -c | awk '{ print $2,$1}'

psコマンドでプロセス確認,awkで1列目だけを取り出し,ソート.
そのあと,重複行を削除し(重複回数を表示),awkで重複回数とユーザ名を交換して表示する.


2010年8月29日日曜日

プログラムの実行ログの確認方法

Linuxでプログラムの実行ログの確認する方法は以下のようにすればよい.

$ tail -f /var/log/messages

/var/log/mesagesも重要だけど,個人的には確認する際の,tailコマンドのオプションfの方が重要だったりする.

2010年8月26日木曜日

[Smalltalk] GLASSを起動してみようとしたが,失敗.

GLASSを起動してみようとしたが,失敗.
せっかくサーバを新調したのに,使えないので,ショック.

前回,GLASSをinstallGemstone2.4-Linux.shを使ってインストールしたのだが,Seasideが動作してくれない.Smalltalkのことなのに,すぐに解決できない.情けないorz

installGemstone2.4-Linux.sh入れただけでは,Seasideが動かないのか,きちんとApacheとの連携をしないといけないのか,それとも「ひよっこはVM版を使いなさい!」っということなのか.

失敗したのをメモしようと思う.
書き出してみると,何かわかるかもしれない.

以下の内容を.bashrcに書き込む.
source /opt/gemstone/product/seaside/defSeaside

netldiプロセスを起動し,Gemstoneを起動するために,以下のコマンドを実行.
startnet
startGemstone

以下のコマンドで,Seasideを実行.
startSeaside_Hyper 50081

そして以下のエラー
_____________________________________________________________________________
|                             Configuration Files                             |
|                                                                             |
| System File: /opt/gemstone/GemStone64Bit2.4.4.1-x86_64.Linux/seaside/data/system.conf
|                                                                             |
| Executable File: /opt/gemstone/GemStone64Bit2.4.4.1-x86_64.Linux/seaside/data/gem.conf
|_____________________________________________________________________________|
Using GEM_TEMPOBJ_CACHE_SIZE 50000 from -T command line option
 _____________________________________________________________________________
|               Gem Configuration Options for process id 15795                |
|_____________________________________________________________________________|

DUMP_OPTIONS = TRUE;
GEM_GCI_LOG_ENABLED = FALSE;
GEM_FREE_FRAME_CACHE_SIZE = -1;
GEM_FREE_FRAME_LIMIT = -1;
GEM_HALT_ON_ERROR = 0;
GEM_IO_LIMIT = 5000;
GEM_KEEP_MIN_SOFTREFS = 0;
GEM_MAX_SMALLTALK_STACK_DEPTH = 1000;
GEM_PRIVATE_PAGE_CACHE_KB = 1000;
GEM_PGSVR_FREE_FRAME_CACHE_SIZE = -1;
GEM_PGSVR_FREE_FRAME_LIMIT = -1;
GEM_PGSVR_UPDATE_CACHE_ON_READ = FALSE;
GEM_RPCGCI_TIMEOUT = 0;
GEM_SOFTREF_CLEANUP_PERCENT_MEM = 50;
GEM_TEMPOBJ_AGGRESSIVE_STUBBING = TRUE;
GEM_TEMPOBJ_CACHE_SIZE = 50000;
GEM_TEMPOBJ_INITIAL_SIZE not used on this platform
GEM_TEMPOBJ_MESPACE_SIZE = 0;
GEM_TEMPOBJ_OOPMAP_SIZE = 0;
GEM_TEMPOBJ_POMGEN_SIZE = 0;
GEM_TEMPOBJ_POMGEN_PRUNE_ON_VOTE = 50;
GEM_TEMPOBJ_POMGEN_SCAVENGE_INTERVAL = 1800;
LOG_WARNINGS = TRUE;
SHR_NUM_FREE_FRAME_SERVERS = 1;
SHR_PAGE_CACHE_NUM_SHARED_COUNTERS = 1900;
SHR_PAGE_CACHE_SIZE_KB = 500000;
SHR_PAGE_CACHE_NUM_PROCS = 1017;
SHR_TARGET_FREE_FRAME_COUNT = -1;
(vmGc spaceSizes: eden init 2000K max 9368K , survivor init 400K max 1568K,
 vmGc    old max 37496K, code max 10000K, perm max 5000K, pom 10 * 4168K = 41680K,
 vmGc    remSet 1008K, meSpace max 47800K oopMapSize 262144 )
 _____________________________________________________________________________
|             GemStone/S64 Object-Oriented Data Management System             |
|               Copyright (C) GemStone Systems, Inc. 1986-2010                |
|                            All rights reserved.                             |
|     covered by Patent Number 6,567,905 Generational Garbage Collector.      |
+-----------------------------------------------------------------------------+
|    PROGRAM: topaz, Linear GemStone Interface (Linked Session)               |
|    VERSION: 2.4.4.1, Tue Jul 13 15:19:49 2010                               |
|      BUILD: gss64_2_4_4_x_branch-23813                                      |
|  BUILT FOR: x86-64 (Linux)                                                  |
|       MODE: 64 bit                                                          |
| RUNNING ON: 6-CPU localhost x86_64 (Linux 2.6.18-194.11.1.el5 #1 SMP Tue Aug|
| 10 19:05:06 EDT 2010) 7480MB                                                |
| PROCESS ID: 15795     DATE: 2010年08月26日 06時38分42秒 JST           |
|   USER IDS: REAL=ringo (500) EFFECTIVE=ringo (500)                          |
|   DATEFORMAT: %Y年%m月%d日 %H時%M分%S秒                               |
|_____________________________________________________________________________|
topaz> topaz> topaz> topaz> topaz> topaz> topaz> topaz> [Info]: LNK client/gem GCI levels = 844/844
[Info]: User ID: DataCurator
[Info]: Repository: seaside
[Info]: Session ID: 1
[Info]: GCI Client Host: 
[Info]: Page server PID: -1
[Info]: Login Time: 2010年08月26日 06時38分42秒.198 JST
[2010年08月26日 06時38分43秒.095 JST] gci login: currSession 1 rpc gem processId -1
successful login
topaz 1> topaz 1> [268 sz:0 cls: 68097 Boolean] true
topaz 1> topaz 1> GemStone Smalltalk Compiler Errors:
   | service server site |
   true "enable for remote breakpoints and profiling"
     ifTrue: [
       GemToGemAnnouncement installStaticHandler.
       Exception
         installStaticException:
           [:ex :cat :num :args | 
             BreakpointNotification signal.
             "needed to avoid infinite loop when resuming from a breakpoint"
             ex _incrementBreakpointsToIgnore. ]
         category: GemStoneError
         number: 6005
         subtype: nil.
      System commitTransaction ifFalse: [ nil error: 'Could not commit for GemToGemSignaling' ]].
   
   System transactionMode: #manualBegin.
   
   Exception 
     installStaticException: 
       [:ex :cat :num :args |
         "Run the abort in a lowPriority process, since we must acquire the
          transactionMutex."
         [
           SeasidePlatformSupport transactionMutex 
 *         ^1                                                         *******
             critical: [ 
               SeasidePlatformSupport doAbortTransaction ].
           System enableSignaledAbortError.
         ] forkAt: Processor lowestPriority.
       ]
     category: GemStoneError
     number: 6009
     subtype: nil.
   System enableSignaledAbortError.
   "This thread is needed to handle the SigAbort exception, when the primary
    thread is blocked on an accept. Assuming default 60 second 
    STN_GEM_ABORT_TIMEOUT, wake up at 30 second intervals."
   [ 
     [ true ] whileTrue: [ (Delay forSeconds: 30) wait ].
   ] forkAt: Processor lowestPriority.
   
   
   service := SeasideHTTPService onPort: 50081 acceptInForeground: true multiThreading: false.
 *            ^2                                                                               
   GsFile gciLogServer: 'Hyper Server started on port ', 50081 printString.
   service start.
   "does not return, unless there's an error"

1: [1031] undefined symbol
2: [1031] undefined symbol

Now executing the following command saved from "iferr 1":
   where
Stack is not active
topaz 1> [268 sz:0 cls: 68097 Boolean] true
topaz 1> 


もし,分かる人がいれば,教えていただけるとうれしいです.

2010年8月24日火曜日

Windows 7を購入してみました

いろいろなソフトウェアなどの検証のために,Windows 7を購入してみました.


インストールもXPより楽になっています.また,Vistaのようにログインが遅くありません.

言いたいことはそれだけです.はい.


2010年8月21日土曜日

[Smalltalk] GemStone(GLASS)をインストールしてみた

サーバを新設したので,GemStone(GLASS)をインストールしてみました.

GemStoneは,OODBと説明されるのですが,OODBというより多人数で使えるSmalltalkの処理系の1つだととらえるとしっくりきます.

インストールしたのは,Cent OS 5.5.
GemStoneは64bit環境で動作するため,インストールする際にはご注意を.

http://seaside.gemstone.com/downloads.html よりinstallGemstone.shをダウンロードして,実行する.
このとき,シェルを実行する際は通常ユーザで行ないましょう.

あとは,サーバにインストールして外部に公開する人は,ファイアウォールの設定を変えておきましょう.

GLASS (GemStone Seaside)
http://seaside.gemstone.com/about.html

ちなみに,公式サイトではVMWareのイメージも配布されているので,すぐに使いたい人はそちらでお試しすることができます.

2010年8月5日木曜日

[Command] script

ターミナル入出力をログとして保存するには,scriptを使いましょう.

任意のディレクトリに移動して,以下のコマンドを入力します.
$ script test.log

ログを終了させるには,
$ exit
を入力します.

2010年7月31日土曜日

[Squeak] ボゴソート?

同僚にボゴソートというのいうソート?があるのを聞いたので,作ってみた.
説明を受けた通りに実装したみた.

合っているのかよくわからない・・・.
最悪計算量,無限大ってどうなんでしょうね.

Transcript clear.
x := 10.
box := Array new:x.
1 to:x do:[:v | box at:v put: (1 to: 100) atRandom].
box do:[:v |Transcript show:v; show:Character space. ].
Transcript cr.
c := 1.
counter := 1.
[box size = counter] whileFalse:[
  counter := 1.
  box := box shuffle.
  2 to: box size do:[:i | 
    ((box at: i -1) < (box at: i) )
         ifTrue:[ counter := counter + 1]
  ].
 c := c + 1.
].

box do:[:v |Transcript show:v; show:Character space. ].
Transcript cr;show:'loop counter='; show:c; cr.

ソートとよべるのか? これは,奇跡を待つだけのソートだと思う.

2010年7月26日月曜日

[Smalltalk] Smalltalkの虎の巻

sumimさんがSmalltalkのチートシートを書かれたようです.
個人的には,読む価値がかなりある記事だと思います.

話題の Big Scripting Languages チートシートの Smalltalk の空欄を埋めてみた - Smalltalkのtは小文字です

http://d.hatena.ne.jp/sumim/20100726/p1
http://d.hatena.ne.jp/sumim/20100727/p1

最初見たとき,ちょっと感動しちゃった.

タイトルを虎の巻にしたのは,Eclipseの日本語ローカライズが「チートシート」を「虎の巻」と訳していたからw

[Squeak][Objective-C] へっぽこSqueak SmalltalkユーザによるSqueak Smalltalkで考えるObjective-C その1

私はinputはしてもoutputをあまりしてこなかったので,文章を書くのが下手.
未だに知識がしっかりつかないのは,outputがきちんとできないため.

ということで,需要があるかわかりませんが,へっぽこSqueak SmalltalkユーザによるSqueak Smalltalkで考えるObjective-Cを書いてみます(おそらく大学の身内しか必要ないだろう).

でも,時間がないので,テキトーなメモです.

Hello World

Squeak Smalltalk
Transcript cr; show:'Hello World'.

Objective-C
// file name   ->  test.m
#import<foundation/foundation.h>
int main(void){
  NSLog(@"Hello World");
  return 0;
}

実行方法
Squeak Smalltalk
"Workspaceに記述し,do it"

Objective-C

端末で以下のような方法でコンパイル
$ gcc -framework Foundation  test.m


リテラル
Objective-CはC言語のリテラルが使えます.

コメント
Squeak Smalltalk
ダブルクオーテーションで囲みます.

Objective-C
// または,/* ・・・*/ です.




Squeak Smalltalk
全てオブジェクトとして扱います.

Objective-C
Cの基本データ型の数値とNSNumberクラスのインスタンスがある.
NSIntegerは普通のintまたはlong.


NSNumber *number = [NSNumber numberWithFloat: 1.0];

文字列

Squeak Smalltalk
シングルクオーテーションで囲みます.
'文字列です'

Objective-C
C言語の文字列以外に,NSStringのインスタンスの文字列があります.

ダブルクオーテーションで囲み,先頭に@を付けます.
@"文字列です"

代入
Squeak Smalltalk
 :=

Objective-C
=

文末
Squeak Smalltalk
."ピリオド"

Objective-C
; //セミコロン

メッセージ式

Squeak Smalltalk
'Ringo no Tane' size. "文字列の長さを求める"

Objective-C
[ ] で囲むことにより,メッセージが送信できます.Objective-Cにはメッセージ式による優先順位がない.優先順位は括弧の付け方で決定される.
[@"Ringo no Tane" length]; //文字列の長さを求める

算術演算

Squeak Smalltalk
Smalltalkでは,メッセージ式の優先順位で計算をする.

Objective-C
C言語と同様な優先順位で行なわれる.

カスケード

Squeak Smalltalk
; "セミコロン"


"カスケードなし"
Transcript cr.
Transcript show:'Hello'.

"カスケードあり"
Transcript cr; show:'Hello'.

Objective-C
存在しません.

ブール値

Squeak Smalltalk
true "真,Trueクラスのインスタンス"
false "偽,Falseクラスのインスタンス"
nil "不定"

Objective-C
Bool型はブール値を扱うための方
YES //真を表す定数 0でない値
NO //偽を表す定数 0
nil //nullのオブジェクトを示す.nilはid型の空ポインタ.値は0.

制御構造

if

Squeak Smalltalk
if文はありませんが,ifに相当するメソッドが実装されています.

1 > 0 ifTrue:[  Transcript show:'Ha Ha Ha!!'; cr. ].
Objective-C

if(1 > 0){
  printf("Ha ha Ha!\n");
}

while

Squeak Smalltalk
i := 0.
[i<4] whileTrue:[ Transcript cr;show:'hoge'. i := i + 1. ].

Objective-C
int i = 0;
while(i<4){
  printf("hoge\n");
}

for

Squeak Smalltalk
for文のように振る舞うto:, to:do:, to:by:do:があります.


1 to: by:1 10 do:[:v | Transcript cr;show:v ].

Objective-C

int i;
for(i=1; i<11; i=i+1){
  printf("%d",i);
}
SmalltalkのイテレータとObjective-C高速列挙
別の時に説明します.

switch

Squeak Smalltalkにはありません.
余談,SmallTalk R4.1 http://smalltalk.smalltalk-users.jp/ ならあります.

Objective-C
略します.


次回は,クラス定義について書こうと思います.

[Objective-C] 基礎から学ぶ iPhoneアプリ開発

「Objective-C逆引きハンドブック」の著者である林 晃さんが,新しい本を出されました.

「基礎から学ぶ iPhoneアプリ開発」

昨日本屋で発見.思わず購入.

Core DataについてがAppleのDocumentより分かりやすいことと,具体的なサンプルがあって,良書です.



Objective-C逆引きハンドブックは,萩原さんの詳解Objective-C 2.0と一緒に持っておくとかなりいい.


Objective-Cのサンプルコードが,これほど多くまとめられているものは私の知っている限り数少ないと思う.
特に日本語で,非常に意味のあるサンプルコードばかりなので,Objective-Cをしっかりと使いたいひとにはお勧めだと思います.


2010年7月25日日曜日

[Squeak][VisualWorks] fold:

相変わらず,どうでもいいこと書きます.

http://lists.gforge.inria.fr/pipermail/pharo-project/2010-July/029669.html

fold:

foldと言われると,Squeakでは,inject:into:がすぐに思いつく.

#(1 2 3) inject:0 into:[:v1 v2 | v1 + v2 ].

Haskellでは
foldl (+) 0 [1, 2, 3]
Schemeでは
(fold + 0 '(1 2 3))

私のような初心者プログラマーは,初期値を考えるのが大変なので,ついつい,以下のようなコードを書いてしまいそうになってしまう.
array := Array with: 1 with: 2 with:3.
x := array first.
xs := array allButFirst.
xs inject:x into:[:v1 :v2 | v1 + v2 ].

このプログラムでは,allButFirstで,新たに配列を生成しているので,非効率.
やはり,きちんと初期値を決めなければなりません.

一方,Schemeでは,
gosh> (define array '(1 2 3))
gosh> (fold + (car array) (cdr array))
6

cdrは新たにリストを作成しているわけではないので,心配ありません.

それなら,初期値を考えていれればいいと言われる方もいると思いますが,これが意外と難しい.
例えば,配列の中から最大値を求めるのをinject:into:を書こうと思うと・・・.

array := Array with:-10 with:2 with:100.
array inject:  Float infinity negated into:[:v1 :v2 | v1 max: v2 ].
この場合は,マイナス無限大を初期値にする.


ちなみにVisualWorksでは,SequenceableCollection>>fold: が実装されている(さすが!).

array := Array with:1 with:2 with:3.
array fold:[:v1 :v2 | v1 + v2 ].

実装方法は,以下の通り.
SequenceableCollection>>fold: 
 | size nextValue |
 (size := self size) = 0 ifTrue: [^self emptyCollectionError].
  nextValue := self at: 1.
  2 to: size do:
  [:i | nextValue := binaryBlock value: nextValue value: (self at: i)].
  ^nextValue

先ほど,プログラムも簡単にかけます.

array := Array with:-10 with:2 with:100.
array fold:[:v1 :v2 | v1 max: v2 ].

ただし,SequenceableCollection>>fold: では,空のコレクションが与えられると,エラーになるので,注意が必要.エラーを発生させたくないなら,inject:into:を使うべき.
#() inject: 0 into:[:v1 :v2 | v1 + v2 ] "0が,かえってくる"

gosh> (fold +  0 '())
0

ふー,つかれた.

素人の意見としては,fold:が実装されるのは賛成.
みなさんはどう思われますか?



さらに,どうてもいいこと.

今回のでVisualWorksすごい!ってと思いましたが,Squeakユーザなので,操作がなかなか慣れない.

もともとHaskell,Schemeは,ほどんと書けなかったのですが,さらに書けなくなりましたorz

やっぱりReal Worldを購入すべきなのだろう.
英語本はもっているけど,読む時間がかかるので,やっぱり翻訳版を購入しようかな(でも高い・・・).
学生の頃に,翻訳本が出るとは思わなかったので,ついつい買ってしまった.

プログラミング言語の本を献本でもらえる人っていいなって思うけど,感想書くのが大変そう・・・.

2010年7月24日土曜日

日本語変換

高階関数を入力しようとおもったら,ことえりの変換では「後悔関数」.
がっかりだorz
ATOKはどうなんだろう.

iPhone, iPadもきちんと変換できなかった.

2010年7月22日木曜日

[Squeak] クイックソート その2

前回のクイックソートをSqueak 4.1以前のSqueakでも実行できるように変更してみました.

相変わらず,コストは無視しています.

quickSort := [:array  |
 | x xs left right |
 array isEmpty ifTrue:[ array ] ifFalse:[
 x := array first.
 xs := array allButFirst.
 left := xs select:[:v | v < x].
 right := xs select:[:v | v >= x].
  (quickSort  copy fixTemps value: left),(Array with:x), (quickSort copy fixTemps value:right )]].

quickSort copy fixTemps value: #(30 10 20 40 80 60) .


やっぱりSqueak 4.1がいい!

[Squeak] クイックソート

Squeakのブロックの使い方の例として.クイックソートを考えてみた.

コストは気にせず書くと,Haskellっぽく記述できます.

Squeak 4.1以前のSqueakだと以下のプログラムは実行できません.

quickSort := [:array |
| x xs left right |
array isEmpty ifTrue:[ array ] ifFalse:[
x := array first.
xs := array allButFirst.
left := xs select:[:v | v < x].
 right := xs select:[:v | v >= x].
(quickSort value: left ),{x}, (quickSort value:right )]].

quickSort value: #(30 10 20 40 80 60).
ここでのポイントは,ブロック内リターンを使わないこと.
ブロックは最後に評価したオブジェクトの返り値がかえるので,それを利用すること.


2010年7月19日月曜日

iSqueakを動かしてみる

iPhoneやiPad上で動かせるSqueakとしてiSqueakというのがあります.

そのためのコードを作者であるJohn M McIntoshさんが公開してくださっています.
John M McIntoshさんに感謝です.

http://isqueak.org/HomePage

このiSqueakのVMを利用してEtoysのイメージを動かしているのが,先日公開されました.



このソースはBert Freudenbergさんが公開してくれています.こちらでは,キーボード入力ができるようになっています.マルチタッチも可能.

ということで試してみました.
きちんと利用できるのにするためには.少し手間がかかったので,ここに記録しておきます.

いろいろと間違っていたらすみません.

必要なもの

  • Mac(intel + Snow Leopard )
  • Xcode(iPhone開発環境が含まれているのもの)
  • iSqueakのソースコード
  • PharoV10.sources.zip(iPadでEtoysを動かさないなら必要ない)
  • iPadでEtoysを動かすためのソースコード(キーボード入力を可能にする人)
  • Etoys(Etoys-To-Go4-Final.zip)
  • iPhone Developer Program(実機で動かしたい場合には必要です.1ライセンスで100台まで動かすことが可能なので,私に連絡していただけたら,一部の方だけなら・・・.)
  • iPhoneまたはiPad(実機で動かしたい場合には必要です)
  • あとは根性w?
まずは,iSqueakのソースコードをダウンロードしましょう.Subversionで公開されているので,保存したいディレクトリに移動して,ターミナルで以下のように入力します.

$ svn co http://squeak.org/svn/squeak/trunk/
$ svn co http://squeakvm.org/svn/squeak/trunk/

続いてPharoV10.sources.zipをダウンロードします.

http://www.pharo-project.org/pharo-download

PharoV10.sources.zipを解凍して,PharoV10.sourcesをtrunk/platforms/iOS/vm/iPhone/ に入れます.

trunk/platforms/unix/plugins/SocketPlugin/sqUnixSocket.cを以下のように編集します.

82行目
# include <netinet/udp.h>

以下のように変更します.

# ifndef TARGET_OS_IS_IPHONE
# include <netinet/udp.h>
#endif

ダウンロードしたiSqueak内のSqueakPureObjc.xcodeprojをダブルクリックをします(trunk/platforms/iOS/vm/ 内にあります).
「ビルドと実行」をします.問題があったら大変なので,まずはシミュレータを使って実行しましょう.

続いて,iPadでEtoysを動かしてみたいと思います.Xcodeを開いてる場合,終了します.

以下のアドレスから,Etoys4iPad-VM.zip,touchHand-bf.1.cs,touchSensor-bf.1.csをダウンロードします.

Bert Freudenbergさんに感謝

http://lists.squeakland.org/pipermail/etoys-dev/2010-June/005098.html

touchHand-bf.1.cs,touchSensor-bf.1.csは,拡張子をcsファイルとしてダウンロードしてください.

Etoys4iPad-VM.zipを解凍して,Etoys4iPad-VMディレクトリのplatforms/Mac\ OSObjC/vm/iPhone/Classes の中にあるファイルをtrunk/platforms/iOS/vm/iPhone/Classesにコピーします.


続いて,Etoys-To-Go4-Final.zipをダウンロードします.

http://www.squeakland.org/download/

Etoys-To-Go4-Final.zipを解凍しましょう.Etoys-To-Go 4.appで右クリックをして「パッケージ内容を表示」を選択します.

Contents/Resourcesからetoys.image,etoys.changes,EtoysV4.sources,fontsディレクトリをtrunk/platforms/iOS/vm/iPhone にコピーをします.

コピーしたetoys.imageをEtoys-To-Go 4.appにドラッグして起動します.
起動したら,日本語フォントを導入するかは任意です.

touchHand-bf.1.cs,touchSensor-bf.1.csをWorld内にドラッグをして読み込ませます.

etoys.imageでワークスペースを開く方法がわからなかったので,Etoysのライセンス表示で開かれるWorkspaceを利用して以下のプログラムを実行.

TouchCmdMorph new openInWorld.

表示されたMoprhは好きな一に移動させておきます.
変更内容を保存します.etoys.imageだとどのように保存するかわからないので,Workspaceで以下のコードを実行.

Smalltalk snapshot: true andQuit: true.

終了したら,コピーしたfontsディレクトリは削除しても構いません.

Xcodeを開きます.etoys.image,etoys.changes,EtoysV4.sourcesをXcodeの左側に表示されているResourcesフォルダにドロップします.

Xcodeで「プロジェクト」—「アクティブターゲット"SqueakNoOGLIPhone"を編集」を選び,「ビルド」のタブを選択します.

GCC 4.2 - プリプロセスのプリプロセッサマクロにISQUEAK_SOURCES="PharoV10"とISQUEAK_IMAGE="iPhone"を追加します.
動作させるイメージはetoys.imageですけど,追加しないと動作しません.
ここまでが終わったら,ビルドと実行をしましょう.最初はシミュレータを使ってビルドすることをおすすめします.

起動すると,画面がおかしいので,command + ← をして画面を横にします.
横になるときちんと表示されます.

command + → で画面を縦にするとキーボードが表示されます.
仕様で画面を縦にしないと表示されません.

TouchCmdMorphを押しながら,pなどをするとprint itができます.



素敵ですね!!
よかったらお試しあれ.

私は,iPadを3.2.1にアップデートしてしまったので,iPadインストールができない状態ですorz

iOS 4.1 betaには対応しているけど,3.2.1には対応していないのはどうなんだろう・・・.
Xcode早くアップデートして欲しい.

さすがに,ここまで書くと疲れる.



ビルドしてきちんと動作しない場合は,Xcodeで「キャッシュを空」にして「全てのターゲットをクリーニング」しましょう.
他にもいったんXcodeを終了して,再度ビルドをしてみるのもいいかもしれません.

2010年7月17日土曜日

スティーブ・ジョブズ 驚異のプレゼン

「スティーブ・ジョブズ 驚異のプレゼン」をようやく購入.

あまりこういう本は買わないのですが,プレゼンというのが気になり購入してみました.




ジョブズにはなれないけど,学ぶべきことは多いと思う.連休中に読むぞ.
http://twitter.com/newapplesho/status/18760555873


[Squeak] Squeak SmalltalkのwhileTrue: 謎だ

Squeakでいろいろ探索していたら,whileTrue:が謎.

BlockContextを読んでいたけど,Squeak 4.1だからBlockClosureだw
BlockClosure>>whileTrue: aBlock 
"Ordinarily compiled in-line, and therefore not overridable.
This is in case the message is sent to other than a literal block.
Evaluate the argument, aBlock, as long as the value of the receiver is true."

^ [self value] whileTrue: [aBlock value]

いったいどうなっているんだろう.英語がわからないオバカだけど,インライン展開しているとこと?
どんな?

何かすごい寂しい気分になった.


2010年7月16日金曜日

[Objective-C] Objective-Cのカテゴリを使ってみる

Objective-Cのself,superを確認してみるのプログラムをObjective-Cのカテゴリを使ってきちんと動作するようにしてみる.

#import <Foundation/Foundation.h>

@interface NSObject (MyTest)
- (id) methodA;
@end

@implementation NSObject (MyTest)
- (id)methodA
{
  NSLog(@"NSObject");
}
@end

@interface TestA:NSObject
- (id) methodA;
- (id) methodB;
- (id) methodC;
@end

@implementation TestA
- (id) methodA
{
  NSLog(@"class A");
}

- (id) methodB
{
  [self methodA];
}

- (id) methodC
{
  [super methodA];
}
@end

@interface TestB : TestA
- (id) methodA;
@end

@implementation TestB
- (id) methodA
{
  NSLog(@"class B");
}
@end

int main(void){
  SAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  TestB *objB = [[TestB alloc] init ];
  //selfの確認
  [objB methodB];
  //superの確認
  [objB methodC];
  return 0;
}

実行結果

2010-07-16 06:55:59.383 a.out[512:903] class B
2010-07-16 06:55:59.385 a.out[512:903] NSObject

カテゴリを用いたことで,NSObjectにmethodAを実装することができました.

Objective-Cのカテゴリはメソッドの整理だけではなく,既存クラスにmethodを追加することができます.これは非常に便利ですが,やはり既存クラスに追加するのは,できる限りさけたいものです.

カテゴリで注意しなければならないのは,インスタンス変数を付加できないということ,そして,既存のクラスのメソッドと同じ名前でメソッドを定義すると,上書きができてしまうことです.これはメリットでもありデメリットでもあります.上書きした場合,元のメソッドは呼び出すことはできません.

[Objective-C] Objective-Cのself,superを確認してみる

何をいまさらと言われてしまうが,最近いろいろな言語をやっていたりすると不安になってきたので,一応確認.

#import <Foundation/Foundation.h>

@interface TestA:NSObject
{
}
- (id) methodA;
- (id) methodB;
- (id) methodC;
@end

@implementation TestA
- (id) methodA
{
  NSLog(@"class A");
}

- (id) methodB
{
  [self methodA];
}

- (id) methodC
{
  [super methodA];
}
@end

@interface TestB : TestA
{
}
- (id) methodA;
@end

@implementation TestB
- (id) methodA
{
  NSLog(@"class B");
}
@end

int main(void){
  TestB *objB = [[TestB alloc] init ];
  //selfの確認
  [objB methodB];
  //superの確認
  [objB methodC];
  return 0;
}

このコードをコンパイルすると以下の警告が表示されます.

main.m: In function ‘-[TestA methodC]’:
main.m:24: warning: ‘NSObject’ may not respond to ‘-methodA’
main.m:24: warning: (Messages without a matching method signature
main.m:24: warning: will be assumed to return ‘id’ and accept
main.m:24: warning: ‘...’ as arguments.)

NSObjectにはmethodAを実装されていないため,もしかしたら動作ができないかもしれないと警告が表示されます.
警告を無視して,実行してみます.


2010-07-16 06:30:27.310 a.out[430:903] class B
2010-07-16 06:30:27.313 a.out[430:903] -[TestB methodA]: unrecognized selector sent to instance 0x10010d980
2010-07-16 06:30:27.315 a.out[430:903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TestB methodA]: unrecognized selector sent to instance 0x10010d980'
*** Call stack at first throw:
(
0 CoreFoundation 0x00007fff837b6cc4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x00007fff88f6c0f3 objc_exception_throw + 45
2 CoreFoundation 0x00007fff83810140 +[NSObject(NSObject) doesNotRecognizeSelector:] + 0
3 CoreFoundation 0x00007fff83788d4c ___forwarding___ + 860
4 CoreFoundation 0x00007fff83784e28 _CF_forwarding_prep_0 + 232
5 a.out 0x0000000100000d51 -[TestA methodC] + 56
6 a.out 0x0000000100000dfe main + 136
7 a.out 0x0000000100000ccc start + 52
8 ??? 0x0000000000000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
Abort trap


[objB methodB]では,TestBのmethodAが実行されます.

[objB methodC]はTestAのスーパークラスであるNSObjectのmethodAを実行しようとしますが,NSObjectにはmethodAがないので,実行することができないので,エラーになります.

他の言語でも,同様なプログラムを書くとself,superの動作を確認することができますので,お試しあれ.
あと,このプログラムから分かるように,Objective-Cは実装されていないメソッドがあっても,コンパイル時に警告はだしますが,実行できるということが重要です.

2010年7月12日月曜日

そら案内 for iPad

iPadでよく利用するアプリの紹介.

iPadで天気予報を見る際には「そら案内」を使っています.



縦向き,横向きに対応しており,無駄なデータが表示されておらず,非常に使いやすいです.

そら案内 for iPad

 iTunes Store(Japan)

iPhone 4とiPhone 3Gのスクリーンショット

iPhone 4とiPhone 3Gのスクリーンショットを改めて比較してみると,当然iPhone 4の方がきれいですね.


2010年7月11日日曜日

iPadとi.softbank.jp

今更だけど,iPadでは,i.softbank.jpのメールをプッシュできないようだ.
今日はじめてiPadのi.softbank.jpのアドレスにメールを送った際に,気がついた.
プッシュをしないため.フェッチにするか,もしくはプッシュが対応しているメールアカウントを利用するしかない.

2010年7月10日土曜日

[Objective-C] 詳解 Objective-C 2.0

6/10/2008
http://newapplesho.blogspot.com/search/label/Book より

詳解 Objective-C 2.0の本が発売されています.
作者はもちろん荻原さん.


今,お世話になっています.7/10/2010

Objective-Cを非常に詳しく説明している.サンプルコードが少ないが,ある程度オブジェクト指向言語を学んだ人なら何となく読めると思う.
Objective-Cの文法,考え方,用語をしっかりと学び人にお勧めです.

[SQL] 初めてのSQL

6/01/2009
http://newapplesho.blogspot.com/search/label/Book より

SQLを勉強し直す.

そのため,MySQLをインストールする.

参考にしたサイト
log.metatype - http://log.metatype.jp/?p=26

SQLを勉強するなら,やはり手を動かして勉強したほうがいいと思ったので,とりあえず参考書を購入した.

選んだのは,オライリーの初めてのSQL.
タイトルは初めてのと書かれているが,実際は初心者本ではないと思う.
原本のタイトルはLearning SQLで,何故「初めて」がついたのか不思議です.


再び勉強が必要になってきた.
私は いつもその場しのぎの勉強だったので,きちんと勉強するべきだと思う.7/10/2010

SQLを使いながら学ぶようなスタイルで記述しているので,手を動かしながら学び人にお勧めです.
ただし,「初めて」というタイトルは信じないほうがいいと思いますw
SQLを少し学んだ人にお勧めです.

管理者になる人のはじめてのUNIX

5/30/2009
http://newapplesho.blogspot.com/search/label/Book より

Linux等をCUIでの操作について勉強したい人におすすめの本.

管理者になる人の はじめてのUNIX

学部生の講義のアシスタントする際にいただいた本なのですが,読んでみると内容がしっかりしていて,パスワードの決め方なども書かれているので,初心者の人にはおすすめ(僕を含めて).

コマンド集を買う前に,これを読んでみてはいかがでしょうか.


LPICを受けてみようかな.7/10/2010

[Lisp] 関数型言語の本

7/10/2010
http://newapplesho.blogspot.com/search/label/Book より

SmalltalkはWikipediaによるとLOGO,Lispの影響を受けているらしいので,Lispを勉強することに.

Lispというと関数型言語ですが,関数型ってたくさん種類があるので大変.
僕程度の人間が短期間でマスターできると思いませんので,本選びは重要です.

Common Lispなら


薄くて,重要なのだけそうなので買っちゃいました.
今読んでいますが,かなり面白いですw

そういえば,関数型言語で有名な本と言えば・・・



ですが,量が多いのでさすが今は読んでいる時間がありません.
もうちょっとスキルアップしたら読みます.

>(+ 1 2)
>3
なんかいいw 2/22/2007


それにしても,いまだに未熟ですorz 7/10/2010



[Objective-C] たのしいCocoa プログラミング

7/19/2007
http://newapplesho.blogspot.com/search/label/Book より

先日,本屋でこんな本を発見.
即買ってしまいました.



木下さんの本はいつか全て買いたいと思っていますが,特にこの本はプログラミングがぜんぜんできない僕にはよさそうです.
いよいよObjective-Cの世界へいけそうかな?

今はiPhone Programmingを勉強中.
この本はObjective-Cを学ぶ際に購入して,よかったと思う.7/10/2010

Objective-Cをかなり優しく解説しているため,初めてObjective-Cを学ぶ人にお勧めです.オブジェクト指向の解説もあり,C言語経験者でもわかるように記述しています.

[Ruby] たのしいRuby

7/26/2007
http://newapplesho.blogspot.com/search/label/Book より

Potential - りんごの種 by blogger: Rubyの本

以前こんな記事も書きましたが,追加です.

たのしいRuby 
こちらは入門書として,かなりいいです.

手放せない本ですね.

サンプルと適度な量の解説で,Rubyでプログラミングをする楽しさを実感できると思います.Rubyを初めて勉強する人にお勧めです.


オブジェクト指向入門 第2版 方法論・実践

8/19/2008
http://newapplesho.blogspot.com/search/label/Bookより

Potential: オブジェクト指向入門 第2版 方法論・実践 いよいよ発売へを書いたついでに・・・.

最近,オブジェクト指向の本について話題を見かけますが,僕はそのような本を読みましたが,読むより手を動かしながらオブジェクト指向をなんとなく理解しました.
用語というのは知らない人間にとっては魔法の言葉であって,経験こそが一番理解へ道だと思います.

Squeak SmalltalkやRubyと講義でJavaをふれながら,雰囲気はわかったと思います.

実際,しっかりと「オブジェクト指向は○○だ」とか,「開発プロセスと○○だから」ということは知りませんが,僕はまずはそれでいいと思うのですが,どうでしょう.

平凡な学生が考える幼稚な考えかもしれませんが・・・.

オブジェクト指向入門 第2版 原則・コンセプト

11/05/2007
http://newapplesho.blogspot.com/search/label/Book より
これこそが本当の入門かもしれない.



未だにこの本の全てを理解できない.
私の知識は,入門レベルですらないようだw 7/10/2010

[JavaScript] JavaScriptの本

4/15/2009
http://newapplesho.blogspot.com/search/label/Book より

最近,わけあってJavaScriptを勉強している.
といっても,あまり時間がないので,しっかりと勉強できているわけではない.

Web APを作るとき,ときどきお世話になっていたが,まじめに本を読んでみると実に変わった言語である.
ただ,いろいろとできるので,侮ってはいけない.
オブジェクトのような,関数のような.

僕程度のプログラミングレベルだと,オライリーの「はじめてのJavaScript」でも十分だとは,思うけど,やはりサイ本(オライリーのJavaScript)が欲しい.
ちなみに,はじめてのJavaScriptはコサイで,JavaScriptはサイの表紙になっている.

本リストをトウヨウリンゴにまとめます.

 以前のりんごの種の本リスト,今持っている本,欲しい本をこのブログにまとめようと思う.

iOS 4で便利になったこと

iOS 4で便利になったこと.

SafariでPDFを見た際に,他のアプリケーションで開くことが可能になったこと.

2010年7月5日月曜日

Mac(Snow Leopard)にEclipseを入れてみる

会社で必要そうなので,Eclipseを使ってみようと思う.ただ自宅では当然Macしか使わないので, Mac(Snow Leopard)でEclipseを使うことにする.

そこでEclipseの導入方法について紹介する.

まず,Javaの環境はDeveloper環境を導入していれば,標準でインストールしているため,特に設定の必要はない.

続いて,Eclipseを以下のサイトよりEclipse IDE for Java Developerをダウンロードする.

http://www.eclipse.org/downloads/

これだけでは,Eclipseは英語環境のみであるため,日本語化を行なう.

日本語環境はPleiadesをいれることで可能になる.
Pleiadesは以下のアドレスよりダウンロード可能である.
http://mergedoc.sourceforge.jp/

2つのファイルをダウンロードしたら展開をする.
EclipseはApplicationフォルダに移動させればよい.
そして,Pleiadesフォルダの「features」と「plugins」の中のデータをApplicationフォルダに移したEclipseのフォルダ内の「features」と「plugins」の中にコピーします.

Eclipse.appで右クリック「パッケージの内容を表示」を選び,Contents/MacOS/eclipse.iniの最後に下記の内容を追加します.

-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

追加後,Eclipse.appを起動すると,日本語化されているはずです.

2010年7月4日日曜日

いまさらながら,iPad レビュー その2

最近更新がものすごく遅いですが,前回のiPadレビューの続きを書きたいと思います.

iPadとiPhone 3Gを並べて大きさを比較してみた.素人なので,写真の撮影が悪いのは勘弁していただきたい.写真を見て分かるように非常に大きい.

iPadを保護するケースだが,今回はApple純正のものにした.いろいろとケースは販売されているが,なかなかいい物がない.

私が選んだ条件.
  • iPadがケースから落ちない
  • 汚れが目立たない
  • 傾斜が付けれる






実際,本体をケースに入れようと思うと,少し力がいる.
そのためケース内でiPadが移動することはない.また,スタンド形式にした場合でも,iPadがケースから落ちない工夫がされている.

そして,遠目で見るとノートを見ている人に思われるので,注目を浴びなくて済む.

iPad用の液晶保護フィルムは画面が大きいためか少しお値段が高い.
そのため今回はすこし安めのものにした.
simplismというシート.

よく言われるのが,iPadは他人から画面がみれるため,困るという意見だ.
確かにその意見は分かるが,プライバシーフィルタを貼ってしまうとiPadのIPSディスプレイが台無しになってしまうので,できれば最初からは貼らないでほしいという気持ちがある.


2010年6月26日土曜日

iPhone 4 レビュー その1

 オンラインで予約したiPhone 4が25日に届きました.
でも,iPhone 4を入れるためのケースが届かなかったので,25日には開封せず,今日までじっと耐えていました.


ケースが届いたら,さっそく段ボールからiPhone 4を取り出す.
Softbankショップと違い,iPhone 4を箱から開封することも自分でできるので,かなりうれしいです.

開封すると,美しいiPhone 4を見ることができました.

iPhone 4の下には,説明書とアクセサリが入っています.
iPhone 4はApple USB 電源アダプタで充電可能です(Appe Storeを見るとiPad用の電源アダプタでも充電できるようです).
やっぱりAppleのロゴのシールが入っています.

iPhoneにGoogleカレンダーとMobile meのカレンダーを同期させる方法

 iPhoneにGoogleカレンダーとMobile meのカレンダーを同期させる場合には,注意が必要のようだ.

先ほど,同期させる順序を間違えたため,Googleの複数のカレンダーが表示されないという問題が発生した.
解決方法は,Googleカレンダーを同期させた後に,Mobile meのカレンダーを同期させる.
そうすることで,Googleの複数カレンダーがきちんと表示される.

2010年6月24日木曜日

いまさらながら,iPad レビュー その1

20日にiPadを購入しました.
今更ですけど,一応レビューします.



購入したのは,iPad Wi-Fi + 3Gモデル.
箱はMac等と同様に白色の表面に本体の写真がプリントされている.

箱をあけると,大きな画面.

さっそくiPadを持ち上げる.
店頭でデモ機を持ち上げて重さを確認した際にも実感したが,少し見た目より重たい.
この重さは高性能とそしてありがたみだと思えば,気にならない.

本体が入っていた箱には,簡単な説明書とそしておなじみのAppleロゴシール.

さらに下には,USBケーブルの電源アダプタ.

電源アダプタはiPhoneとは異なり,少し大きめのものとなっている.

2010年6月23日水曜日

[Squeak] Cog VM

Squeak Smalltalkの高性能VMが公開されました.
Teleplace社,ありがとうございます!!!!

いろいろと既にすばらしい記事が公開されているので,ここではその記事のリンクをまとめておきます.


Teleplace Cog VMs are now available
http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-June/151422.html

[OOPL] Cog VM リリース記念: Squeak、Ruby、Python を恒例のフィボナッチベンチで戦わせてみる
http://d.hatena.ne.jp/sumim/20100621

Mac OS X用のCroquet Cog VMをビルドする方法
http://d.hatena.ne.jp/nqthm/20100623/p1

Squeak4.1のイメージをMacのCogで起動する方法
http://d.hatena.ne.jp/nqthm/20100623/p2

iPhone 3GユーザがiOS 4にするメリット

iPhone 3GユーザがiOS 4にするメリットは.アプリをフォルダ管理できることとユーザ辞書が登録できることだと思う.後者は意外に重要だと思う.


iPhone 4 予約続き

ソフトバンクショップでの予約の記事はいろいろ書かれていますが,オンラインショップの場合が書かれていないので,書こうと思います.

22日に以下のメール(一部掲載)が来て,本申し込みをします.

 ソフトバンクオンラインショップをご利用いただき、ありがとうございます。
お客さまのお申し込みについて、下記の通りご連絡いたします。

ご予約お申し込み分の在庫が確保できましたので、下記URLより本申し込みのお手続きをお願いいたします。

なお、ご予約お申し込み商品の本申し込みにつきましては、本メールでのご案内から10日間とさせていただいております。
10日間を経過した場合は、ご予約お申し込みはお取り消しとさせていただきますので、ご了承ください。

23日(さきほど)以下のメール(一部掲載)がきました.

■■■■■■■■■■■ 審査完了のご連絡 ■■■■■■■■■■■

iPhone4ご予約のお客様へ

 ソフトバンクオンラインショップをご利用いただき、ありがとうございます。
お申し込みいただきました内容で審査が完了しましたので、ご連絡させていた
だきます。

───────────────────────────────────
■商品お届け予定日 6月25日(金)


25日が楽しみです.

2010年6月19日土曜日

iPhone 3Gのケース

iPhone 3Gのバッテリーが低下していたので,Apple Careを利用して無料交換.
ケースも新しくしたので,これでばっちり.
今回のケースは以下のもの.



ケース,フィルム,クロスが付いてこの価格ならなかなかいいと思う.

2010年6月16日水曜日

iPhone 4予約完了

オンラインで,iPhone 4予約しました!

さていつ届くかな.
オンラインで購入した人はアクティベーションを自分でやらなければならないらしい.
まぁこれも楽しみの1つです.

2010年6月15日火曜日

iPhoneのUIを考えるツール(Omni Graffle)

私は図を作成する際には,ほぼOmni Graffle.
そのため,iPhoneのUIを考える際も,やっぱりOmni.

Omni Graffleのステンシル集のサイト

Graffletopia
http://graffletopia.com/

iPhoneのタグがあるので,これを選択するとステンシルがダウンロードできます.



HDMI端子搭載のMac mini登場

HDMI端子搭載のMac miniがこんな日に発売というのは,ちょっとかわいそう.
なんだかひっそりした感じですけど,Mac mini自体はかなり高性能です.

  • 2.4GHzまたは2.66GHz Intel Core 2 Duoプロセッサ
  • NVIDIA GeForce 320Mグラフィックプロセッサ
  • FireWire 800
  • SDカードスロット
  • HDMIポート出力
  • Mac miniは電源アダプタを内蔵

今回もServer版もきちんとあります.
なかなかおすすめな機種ですね.




iPhone 4予約開始

今日からiPhone 4の予約が開始です.

Apple Store,ソフトバンクショップ,ソフトバンク・オンラインショップで予約可能です.

今回はフルモデルチェンジなので,かなりおすすめです.

  • 326ppiという高解像度のRetinaディスプレイ
  • 5メガピクセルカメラ
  • フラッシュ(Flashではないよ!!! LEDフラッシュだよ)
  • HD画質のビデオ撮影と編集
  • 2つのカメラ

従来のiPhoneとの比較表がに「リンゴが好きでぃす♪」載っていたので,詳解.

リンゴが好きでぃす♪
http://kjx130.blog19.fc2.com/blog-entry-1610.html 

2010年6月9日水曜日

MacPorts 1.9

MacPorts 1.9がリリースされている.

MacPortsを使っている人は以下のコマンドで更新できます.
sudo port selfupdate


アップデートされたパッケージを更新
sudo port upgrade outdated 


http://www.macports.org

MacPortsをインストールしたら

2010年6月7日月曜日

CentOSのバージョンの確認方法

cat /etc/redhat-release


2010年5月30日日曜日

[Command] ポートを開いているプロセスを表示

Macでポートを開いているプロセスを表示をするためのコマンド

"例 9090ポートを開いているプロセスを表示"
lsof -i 9090






Apple Care iPhone版

iPhone版のApple Careに入っているのですが,iPhoneの場合は入っておいた方がいいと思います.

というのは,バッテリーの減りが早くなったら交換(新品w),USBケーブルに亀裂が入ったら,交換.
非常にお得です.

でも,あくまでも普通に使っていて,上のような問題が発生したら保証されますので,ご注意を.





iPad発売

いよいよiPadが発売されました.

僕も購入!っと言いたいところですが,購入どころか予約もしていませんでした.

理由としては,金銭面ですが,よくよく考えてみるとSoftbank2年契約にすれば,よかったなぁって反省しています.

6月に行なわれるWWDCの発表を見て,購入するかどうか再検討します.

購入するとしたら,iPad 3G.

あの高性能な機能を持ち出さないのは,もったいない!

2010年5月20日木曜日

Twitter

Twitter公式クライアント,Twitterが公開されました.
以前までTweetie2と呼ばれる有料アプリでしたが,Twitterが買収したため,名前を変更し,無料で公開されています.
人気があり,公式にもなったソフトウェアであるため,非常に使いやすいアプリです.





Twitter
 iTunes Store(Japan)

2010年5月18日火曜日

iPhoneプログラミングUIKit詳解リファレンス

UIKitの本を購入.



すごく丁寧に書かれているので,これは大事にしたい本の1つです.




2010年5月17日月曜日

[Objective-C] 詳解 Objective-C 2.0 リファレンスカウンタ 不明なところ

先日,萩原さんの詳解 Objective-C 2.0 リファレンスカウンタのプログラムを実行してみたら,出力結果が予想と異なるものであったので,現在も困っています.

困っているのは,以下のコードです.
#import <Foundation/Foundation.h>
#import <stdio.h>

int main(void)
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
  NSObject *obj = [[NSObject alloc] init];
  printf("init: %d\n",[obj retainCount]);
  [obj retain];
  printf("retain: %d\n",[obj retainCount]);
  [obj retain];
  printf("retain: %d\n",[obj retainCount]);

  [obj release];
  printf("release: %d\n",[obj retainCount]);
  [obj release];
  printf("release: %d\n",[obj retainCount]);
  [obj release];
  /* 実行するとエラーになるはずなのだが・・・ */
  printf("release: %d\n",[obj retainCount]); 

  [pool drain];

  return 0;
}


コンパイル  gcc -framework Foundation reference.m
環境 os 10.6.2

出力結果
init: 1
retain: 2
retain: 3
release: 2
release: 1
release: 1


obj にreleaseメッセージを3回送ったあとに,参照カウンタを見ようとしたらエラーになるはずですが,参照カウンタが1と表示されてしまいます.
何故なんでしょうか.



2010年5月16日日曜日

Macネタ増やします!

最近,役に立つようなMacネタをほとんど書いていない.
別にネタがないわけではなく,会社が忙しいこともあって,書けませんでした.

これからは,以前の「りんごの種」ようにもっとガツガツ書いていこうと思いますので,よろしくお願いします.

ガンダムカフェへ行ってきた

ゴールデンウィークにガンダムカフェへ行ってきました.

東京へ引っ越してから何度か秋葉原へ行く機会があったのですが,いつも混んでいたので,なかなか行けなかったのですが,遂にいってきました.
夜メニューも一応確認しようと思ったので,夜に行ってみました.土日の昼間よりは空いていたので,めちゃくちゃは並びませんでした(本当は並ぶのは,すごい嫌い).

写真は撮影しませんでしたが,トイレがちょっと凄かったかな.



ガンダムカフェ http://g-cafe.jp/

SafariとTab

SafariでWebページを開き,Tabキーで操作していると,チェックボックスやラジオボタンが操作できないことがある.
今日はこれの改善方法について説明する.

方法は非常に簡単.
Safariの「環境設定」を開き,「詳細」を選択する.
その中にある「Tab キーを押したときにWebページ上の各項目を強調表示」にチェックをする.

そうするとTab キーを使って,チェックボックス等に移動でき,操作ができる.



[Command] nohup

nohupというコマンド.


ログアウトした後もコマンドを実行し続ける

参考 - IT Pro Linuxコマンド集

[Command] rlwarp

任意のプログラムをreadline対応させるコマンド.

CUIでプログラムを起動する場合に便利なので,入れておくとよいでしょう.

macportだったら,以下のコマンドで入れることができます.
port search rlwrap


例えば,Gaucheを起動する際は,rlwrapをコマンドの前に付ければいいです.

$ rlwrap gosh


2010年5月15日土曜日

[CCNA] CCNAの本

CCNAを勉強する人におすすめの問題集.



がんばってください!

問題と解説がしっかりとしており,実際の試験で出題されるような問題もあります.この本がすらすら解けるなら実際の試験もいい結果が得られるのではないのでしょうか.

[Objective-C] どう書く?org IPv4アドレスのマスクの変換 をやってみた.

どう書く?org IPv4アドレスのマスクの変換 をObjective-C でやってみました.
コードを公開しますけど,いじめないでくださいね.


#import <Foundation/Foundation.h>

int main(void){

int prefixNumber = 0;
int i,j,temp;

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSString *addressString = [NSString string];

//NSString *subnetString = @"255.255.255.0";
NSString *subnetString = @"255.255.255.240";
//NSString *subnetString = @"128.0.0.0";
//NSString *subnetString = @"255.248.0.0";

NSArray *subnetStringItems = [subnetString componentsSeparatedByString:@"."];

for(i = 0; i < 4; i++){
temp = [[subnetStringItems objectAtIndex:i] intValue];
for(j=0;j<8;j++){
prefixNumber += (temp & 1);
temp >>= 1;
}
}
NSLog(@"prefixNumber=%d",prefixNumber);

for(i = 0; i < 4; i++){
if(prefixNumber >= 8){
addressString = [addressString stringByAppendingString: @"255"];
prefixNumber = prefixNumber - 8;
}else if(prefixNumber > 0){
temp = 0;
temp = 255 - ((1 << (8-prefixNumber)) - 1);
addressString = [addressString stringByAppendingString: [ NSString stringWithFormat : @"%d", temp ]];
prefixNumber = 0;
}else{
addressString = [addressString stringByAppendingString: @"0"];
}

if(i<3){
addressString = [addressString stringByAppendingString: @"."];
}

}
NSLog(@"addressString=%@",addressString);

[pool drain];

return 0;
}


どう書く?org IPv4アドレスのマスクの変換
http://ja.doukaku.org/253/nested/

2010年5月9日日曜日

Twitter API プログラミング

Twitterのクライアントを作りたいと思っている人にぴったりそうな本.
本屋で見つけて,欲しいと思った.



Oauthについてきちんと書かれているので,よさそうですね.

最近,大学院時代の研究成果を使って,Twitterのタイムライン管理をどうにかしようと思っているのですが,Oauthについては知らないので,本で簡単に勉強できるのは非常にうれしいことです.

お金がないので,これも来月購入しようかな.


ガベージコレクションのアルゴリズムと実装

本屋へ行ったら,こんな本を見つけた.
ガベージコレクションのアルゴリズムと実装



これは欲しい!
さまざまなGCの実装方法について書かれているようなので,GCにお世話になっている僕には非常に気になる本です.

でもお金がないorz
来月購入しようかな.

2010年5月5日水曜日

[Haskell] おすすめHaskell本

Haskell本もだいぶ充実してきました.

個人的には,この2つの本がおすすめ.



オライリーのは翻訳される前に購入したので,つらい本になってしまいましたが,英語の勉強と思えば・・・.
内容はすばらしいです.


[Haskell] GHCとMacPorts

もう,ずいぶん前にGHCが10.6版MacPortsでも,インストール可能になりました.
みなさんもどんどんインストールしちゃいましょう.

sudo port install ghc


[Objective-C] UIKitの本

UIKitについて学びたいと思っていたら,このような本が出ていました.



先日,本屋で少し内容をみたら,とてもすばらしい内容でした.
その日は手持ちがなかったので,後日購入したいと思います.

[追記] 購入しました.
Interface Builderを用いずにUIを開発するスタイルで書かれており,どのようにしたらこのUIが記述できるのかがハッキリしてとてもいいです.
この中に書かれているサンプルはどれも実際に利用できそうなものばかりで,非常に勉強になります.

UIKitを学びたい人にお勧めです!

[Java] Javaを勉強してみる

GWに何も頭を使わないのはよくありませんので,Javaを勉強してみることにしました.
ちょこっと触ったことはあるので,せっかくなのでしっかりした本で勉強してみることにします.



この本を注文してみたのですが,分厚いですね.
なんか少しやる気でてきました.


Javaに関することが,1章1章丁寧に記述されており,これほど無駄がない本は珍しいのではないのでしょうか.サンプルが少ないので,手を動かしながら勉強したい人には少し向かないかもしれませんが,しっかりとJavaを学ぶにはお勧めだと思います.

私もこれで,しっかりと学びたいと思います!

2010年5月4日火曜日

Xperiaをさわってきた

Xperiaを秋葉原のヨドバシカメラで触ってきました.

個人的な感想としては,なかなかいい感じです.
操作反応はよく,またすっきりとしたデザインでした.
マルチタッチがないので,それが残念です.
また,コピーペーストが少し難しいかも.
コピーペーストはiPhoneに慣れすぎたかもしれませんけどね.

iPhoneも競争相手ができていいのではないかなと思います.




いまさらながら,MDR-NC600Dのレビュー

MDR-NC600Dを購入したのですが,レビューを書いていないことに気がついたので,書いてみます.
以前までは,Bose on-ear headphonesを使っていたのですが,新しい音が欲しくなってきたので,今回はSonyの音を選んでみました.



お店でも実感したのですが,ちょっと本体が大きいので,なかなか持ち歩くことが難しいですが,音は最高です!
とても優しい感じで,さすがSonyだと思いました.
ノイズキャンセリングはしっかりしており,僕のように外付けHDの音が気になる人に最適です.
ちょっとうれしいのは,電源の供給方法が,電源ケーブル,内蔵電池,外部電池と3タイプ用意されているところ.
これは,持ち出す際には意外に重宝します.

気になるのは,音源と接続しないで利用する場合,「シャー」という音が聞こえる点.接続なしでも,利用できるとうれしいんですけどね.
あと,本体のつや出しは,傷がついたら気になりそうだからマット調のほうがよかったです.



しばらくはいいけど,もしこれに飽きたら次はどうしたらいいんでしょうねw




2010年4月18日日曜日

日本経済新聞 電子版

日本経済新聞 電子版を購読してみる.

最初はパソコンで新聞は抵抗がありましたが,使ってみるといろいろと配慮されている感じがして,なかなかいいです.
ただ,残念なのはiPhoneに対応していないところ.
iPhoneも携帯ですから,きちんと対応していただきたいものです.

紙版と比較して,4月中にどちらを利用するかを決めたいと思います.

2010年4月13日火曜日

iPhoneの強制再起動

通常のiPhoneの再起動は,スリープボタンを長押しして,電源を切り,そして起動ですが,他の方法を紹介.
(意外に必要な場合があります)

iPhoneの強制再起動方法

「スリープボタン」と「ホームボタン」を同時に押し続けると,再起動をします.

2010年3月30日火曜日

Apple-iPad-Guided Tours

Apple.comがiPadの紹介ビデオを公開.
非常に使い方がよくわかるビデオです.

Apple.com http://www.apple.com/ipad/guided-tours/

見ていると本当に欲しくなってきます.
Flash使っているサイトをみると最近はどうせならHTML5版で書き直したら?と思ってきました.

私もHTML5覚えないとな.あと,CSS3もね.

iPadでOmniGraffle

Macin' Blogで紹介されていた動画をみたら,iPadでOmniGraffleが使えるみたい.
もちろん有料ですけど,これは何か楽しみですね.

Macin' Blog http://doubleko.blog18.fc2.com/blog-entry-4677.html

Mac版を持っている方は割引とかになるといいけどなぁ.
たぶんそれはApp Storeの仕組みから無理だろうな.

2010年3月27日土曜日

Microsoft Messenger for Mac 8 Beta

Microsoft Messenger for Mac 8 Betaが公開されました,
ついにMac版でも通話とビデオが使えるようになったようです.



2010年3月19日金曜日

[Squeak] Seaside 3.0 セッションの設定

Seaside 3.0のセッションをCookieベースにする方法や,セッションの有効時間の方法についてメモします.
セッションの有効時間の方法は本当にこれでいいのか微妙です.

2.8系
initialize
"self initialize"
| app |
app := self registerAsApplication:'sas'.
app preferenceAt: #useSessionCookie put:true.
app preferenceAt: #sessionExpirySeconds put: 3600.
^application


3.0系
initialize
"SASFComponent initialize" 
|app|
app := WAAdmin register: (self asApplicationAt: 'sas').
app preferenceAt: #useCookies put: true.
app cache expiryPolicy configuration at: #cacheTimeout put: 3600.


一時変数appに格納されるのは,WARegistryクラスを継承したWAApplicationのインスタンスです.

3.0系でも,WAComponent>>(class)registerAsApplication: があるので,アプリケーションの登録方法は従来通りできますが,別の方法もあるようなので,メモしておきました.

2010年3月17日水曜日

Seaside 3.0 レスポンス

Seaside 3.0のレスポンスに関するメモ.
SVGのXML情報を返すための方法.
(さらにattachmentWithFileName: を使ってファイルとして返すのもいいと思う)
慣れないとな.

2.8系
renderContentOn:html
self session returnResponse: (WAResponse new
contentType: 'text/xml';
nextPutAll: self makeSVG;
yourself)


3.0系
renderContentOn: html
self requestContext respond: [:response |
response
initializeOn: self makeSVG ;
contentType: 'text/xml']


Seaside 3.0を使ってみた感想

12月にSmalltalkの勉強会でSeaside 3.0の紹介を聞きましたが,ようやく自分でもSeaside 3.0を使うことに.

学内のWeb APを作るのにSeaside 3.0で作っています.
SeasideでWeb APを作る理由としては,ポータブルな開発環境で,バックアップが楽であり,そしてイメージを起動すれば,すぐにWeb APが起動できるところ.
(でも,一番の理由は作りやすいから! デバックが楽ですからね)

基本的なところは,今までと同じですが,変更点が多いと思った.
その中でも,Ajaxのフレームワークが充実したので,うれしい.

今回から
self requestContext

というのが導入されたみたい?
そのため,レスポンス周辺のコードを変更しないといけなかったので,ちょっと大変です.

self session returnResponse: 

で返す方法は好きだったのに.


Seasideでは,何故iframeしかコンポーネントの埋め込みができないんだろう.
objectタグでコンポーネントの埋め込みも有効にしたほうがいいと思う(するべきだと思う).
XHTMLではiframeタグは禁止されているのに,何故なんでしょうね.
そのため,自分は使うときは,WAIframeTagを参考にWAObjectTagを改良してしまう.

それにしてもSeasideに慣れていると他のWeb Frameworkでの開発方法を忘れてしまいそうになるので,怖い.

2010年3月14日日曜日

Smalltalk ML集

SmalltalkのMLをこのページにまとめてみる.
載せるべきものがありましたら,コメントしてください.

Squeak-ja
http://www.smalltalk.jp/mailman/listinfo/squeak-ja

Squeak-dev
http://lists.squeakfoundation.org/mailman/listinfo/squeak-dev

Pharo-users
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-users

GemStone Seaside beta
http://seaside.gemstone.com/mailman/listinfo/beta


2010年3月9日火曜日

デザインパターンについて

超素人プログラマーから素人プログラマーになったと思う最近,Objective-Cのドキュメントを読んでいたら,デザインパターンの用語が登場してきて,さぁ大変.

何かいいものがないかと思っていたら,sumimさんの日記(日記というのは失礼ですね.プログラミング言語参考サイト)を思い出す.

http://d.hatena.ne.jp/sumim/20100115

The Design Patterns Smalltalk Companion (Software Patterns Series)が紹介されていた.

昔,Seasideを勉強する際に梅澤さんに紹介されて,購入したのはいいのですが,当時はまだわからないところだらけでした(すみません,梅澤さん).
今ならきっと分かるはず.



2010年3月8日月曜日

iPadのCM

iPadのCMを観ていたら欲しくなってきました.
どうしような・・・.