So-net無料ブログ作成
コンピュータ言語 ブログトップ

ページを縦書きにするとは? [コンピュータ言語]

 最近縦書きを覚えたので縦 
書きで投稿しようかなと思いそ 
うしたのですがこの縦書きど 
うやらググルエンジンには検 
索にかからないようですつま 
り機械が読めないらしいで  
とするとこのブログはな 
かなか他人に知られることは無 
いと言うことになりそうです 
てしまえば縦書きにするメ 
トは何も無いと     
ならばこういう使い方をしたら 
良いんじないかと言うことで 
考えましたトで独り言を 
言うには丁度良いかなです 
このブログは科学的見地に立 
たものの言い方をしているつも 
りなのですが検索エンジンは 
縦文字も見つけているはずで  
しかし検索はプログラム 
のルルに従ているから左 
から右にしか検索できないと 
なるとこの文章の上段一列を 
左から右へ読んで行くとまるで 
意味不明の文章になり検索と 
しての言葉の羅列は一回ぐらい 
となりヒト回数が低くなり回 
数が多いほどトプに上て行 
く仕組みでは最下位となて 
しまうわけです私に言わせて 
もらえばこれも検索エンジンの 
落とし穴ですけれども    
私の場合このペジの部分は  
プテン狙いでもなければ 
どうしても知てもらいたいこ 
とでもないので縦書きでも良 
いと思ていますつまり読 
める人が読んで理解してくれれ 
ばそれでいいんだと     
私が主に読んでいる新聞は 
大概縦書きの文章です横の文 
章も有りますが新聞の升目を 
十分に利用したりインパクト 
を抑揚を付けるには縦横を上 
手く活用するとメリハリがつく 
ことも周知の事実です    
 これから話題に触れたいと思 
うのですが今世間を騒がして 
いる話題にスタプ細胞の話が 
有ります見ているとなんでこ 
んな事件が起こるのかなあて 
感じですけどなんとか推理サ 
スペンス劇場科学細胞編とか 
の題名が付きそうなテレビドラ 
マみたいな話ですけど事実な 
んですよねえ嵌められたの 
は功を焦て論文を提出するは 
めとなた某氏その裏で巧みに 
彼女を操て来た学会研究  
果たして真の犯人   
は?みたいな番組のタイトル 
いかにも朝新聞番組で面白 
そうだ見なく的気持ち 
にさせるような話です本当に 
ドラマだたら終わてしまえ 
それまででしうけれど 
当事者としては一生付き纏う話 
であ笑い事では済みませ 
             
 もう一つの話題は集団的自衛 
権という話が有ります私から 
見るとこれも理解し難い話なの 
ですがそもそも論から言え  
日本人とは何か日本国と 
は何かですけれどもこの定義 
が最近ではかなり崩れていて 
何でも有り的発想になている 
のではないかと思ています 
今私はネトでは珍しい縦書き 
で書いていますが元々日本人 
は縦書き文化だたんじない 
ですか?それをあさりアル  
ファベトと同じルルに変え 
てさもこれが日本だと言うのは 
どうかと思うのですが横書き 
でも理解に不自由さは生じない 
のでナンセンスと言て片付け 
られそうです        
では日本人とは何かと言たら 
妥当な答えが出せるでしう  
これが可笑しくなてくる 
のですさり変えてしまう 
のが日本の一面の文化とする  
とひどい場合あさり 
英語に変えられるのも日本の文 
化と言うことになり友好国とさ 
れるアメリカとも益々友好関係 
になりますてそれてもう 
アメリカ国家に組み込まれても 
可笑しくないて話になるん  
ないですかまあそう  
ても今より良い指導者が提 
唱してくれるのであればそれ 
はそれでよいのかもしれません 
けれども例えば今のアメリ 
カ大統領であるオバマさんが片 
言の日本語でyes we can. と 
たところで選挙に当選す 
るとは思えませんけどこの先 
はどうかは窺い知れたことでは 
有りません         
では日本人とはの定義なので 
すが言語だけの問題なので  
うか違いますよねえ大 
まかに言えば今の憲法では 
日本に国籍を有する人が日本人 
ということになているのでは 
ないでしうかてしまえ 
ばそう言う見方が大半だとそ 
うすると新たな問題が出てき 
ますネイティブでない外国人 
も日本人の部類に含まれるケ 
スですさてこの比率は将来と 
も一定ではなく当然変化して行 
く比率ですとすると日本人の 
定義はもと限定したものでな 
いときりとしませんで 
持論なのですがこうしまし  
日本の貨幣経済とは無関係 
その場所で生きて行ける人 
が日本人であると例えば自給 
自足をしている人物々交換で 
生活できる人無理が大有りで 
すがあそれ以外の人は何 
人になるかというと混成多国 
籍人に入れれば良いんじない 
でしうか         
と言う過程で話を進めると日 
本人の財産を守るために集団的 
自衛権の拡張行使をすると言う 
話はごく一部の日本人のために 
莫大な武力を行使すると言うこ 
とになり意味などなくなりま 
つまり守るものなどたいし 
た無いのです        
 この話はこのくらいの長さで 
終わるような小さな話ではない 
ので今回はこのくらいでさ 
イアウトされるでしうか  

*追記:取り敢えず直したのですが、htmlのコードならインスペクターで見れると思うので省略します。次からは応用編に入りたいと思います。


プログラム言語の哲学的考察 [コンピュータ言語]

Objective-C を、お更いしている内、変な疑問と法則とは大げさですが、そんなものが生じました。良くある入門書を読んでみても、ちっとも頭に残らない程、記憶音痴な私には、頭に残すために自分なりに工夫をしなければならないので、最近考えついた、化学の原子の状態を頭に入れながら、対応する箇所に文字を入れながら、試行錯誤して行くと、今の自分(self)が機械言語のプログラムと同じことをしている自分(self)に気付いたのです。つまり、私にとってプログラムとは、暗記するものではなかったのです。これは一つ明るい展望が開けました。

では、そのごく一分で説明すると(一分が全てでも有りそうです。)
プログラム言語では、始まりと終わりが必ず有り、対で良く使われます。プログラムをかじった人なら、次の文が何を意味するかは、殆どの人が分かるでしょう。

/* comment */

これは、良く見かける文です。コンパイラーは、これを無視して、又は読み飛ばすとされています。確かにプリプロセスの段階では、この部分は出て来ません。
しかしよく考えると、機械は、これを最初からコメントと判断は出来ない筈です。只人間の方が勝手にそう思い込んでいるとした方が、後々思考の面で有利に働きます。では、機械はどう読んでいるのかとすれば、このスラッシュ記号は、インターネットで良く使われ、http://www.xxx.oo.xx/oo/xxx/ と言う様な形で、出て来ます。それでは、上のスラッシュとこのスラッシュを機械が区別するのかと言うと、しない筈です。また、この記号は除算でも使われます。機械は、これも区別出来ない筈です。では、読み飛ばしている方法とは何かと言えば、次の * 記号です。試しに、この対の * を取ってコンパイルしてみましょう。何と吐き出したでしょうか。
Expected identifier or ‘(‘before’/‘token
赤字のエラーで、直訳すれば、予期された識別子か ’(‘’/’ の印の前 と言う訳になり、もっと砕いて言えば、識別出来ません、とでもなるのでしょうか。つまり、機械は通常の仕事をしようとしているところ値が無いので、できないと言っているように受け取れます。
では、// comment はどうなるでしょうか。どちらも値が無いので、仕事をする事無く、次のスラッシュを終了記号と捉え、キャリッジリターンを読み、一行を終え、次の行に移動することになります。とは言うものの読み込んではいるようです。
では、http:// の場合は、どう捉えたら良いでしょうか。同じように考えれば、ここで終わりなのですが、キャリッジリターンも無ければ、次の行が有りません。取り敢えず次の箇所を読み込んで行くのですが、@で始まるドメインが最優先に探され、目的地まで辿り着きます。この仕組みは、ディレクトリの概念でも述べましたが、混乱すると悪いので省略させてもらって、次の * の役割です。
アスタリスク * は、コンピュータ上でも色々な使い方が有るとされています。
乗算、ポインタ、ワイルドカード… といった言われ方をされますが、これは、最初に覚えた覚え方の問題、錯覚で、機械は別に区別はしていないとしか言いようが有りません。私もよくよく考えたのですが、前後のある型の種類によって、違ったように見えるとでも言いましょうか、前後が数字なら、掛け算をしているように思え、文字なら右側に対応する文字を探し当て、そのアドレスに辿り着く感じです。
それで、/* comment */ に当て嵌めると、割り算をしようと右には掛け算のマークで、その右側は、ストリングです。なので、comment文字を探そうとしますが、同じアスタリスクマークが有り、もう探さなくても良いよ〜と指示が有ります。それで次を読むと、最初のスラッシュの終わりのマークです。書類上は保存されますが、コンパイル時には何も出来なくなり、所謂コメントとなる、と考えると、後々躓くことが少なくなる筈です。

それを踏まえた上で、今度もまた、良く見かける簡単な文です。

#define _NSWINDOWS_DLL_GOOP __declspec(dllimport)
#define APPKIT_EXTERN extern "C" _NSWINDOWS_DLL_GOOP
#define APPKIT_EXTERN _NSWINDOWS_DLL_GOOP extern

# のマークは、色々な呼び方が有りますが、ここでは、パウンドと呼ばせてもらえば、#に続く文字は他にも if とか pragma とか色々ありますが、実際のところコメントと同じコンパイルされる訳ではないので、使う本人さえ混乱しなければ、何でもOKのようです。定義として使うのであれば、スタンダードに、define とすれば、誰にでも分かるというものです。
さて、問題は次の空白です。space は、文字を区分するためには必ず必要な空文字ですが、プログラム言語上では、もっと別で大事な意味が有りそうです。この使い方、空白概念さえ掴めれば、もう大した障害はない、とさえ言っても大げさでないといえるくらいです。と言っても、大げさですが、では説明です。
まずはコンパイラーは、この一行を、何と読み込むでしょうか。最初に#を読み、defineを読み込んで、空白にぶつかります。なのでここで、defineを認識して記憶します。しかし、まだ終わりの指示子は有りませんので、先を読み込みます。次は _ アンダースコアと呼ばれる接頭子で、unixでよく使われる、重複文字のマクロ定義を変更する、追加する場合、非常に便利な使われ方だと理解しています。で、_NSWINDOWS_DLL_GOOP という文字の入れ物を作るとしました。
最初の一行には、( )が使われていますが、対対称の完了型なので、カッコの中の要素を、declspecに引き継がせている、拡張させている、関数でもある、と取れます。日本語に合えて訳せば、dllインポートとしての宣言スペックと私は認識しています。通常であれば、関数として理解するかもしれませんが、しかし機械のプログラムの世界では、よく数学で教える関数とは所詮意味合いが違います。ここでは、これでしか説明はしませんので、コードの本文で出て来る様な( )を同じ意味になるように、自分で置き換えると自主学習になると思います。つまり、ここでもまた、機械は使われ方を区別しているわけではないと言いたいのです。
さて、この一行を最後まで読み込んで、キャリッジリターンまで行けば、次の行に進むわけですが、#の終了となるもう一つの#が有りません。文終了のセミコロンである;も有りません。つまり、この一行は、完結していないことになります。
コンパイラーを設計する場合、これをエラーとしても良い筈ですが、それを逆利用するのも手であることは、この構文がまだ使われていることでも明白です。又丸っきり使わない手も有り、JAVA言語では使われていません。
では、対称性を破ったこの一文を、コンパイラーはエラーをどう処理するのでしょうか。ここが私の独自の発想です。
コンパイラーは、これを無かったことにしたい分けです。又は、独自に対称性を作りたいわけです。なので読み込んだ最後の方から、一に帰そうと前の文字のアドレスに、放り込みます。所謂代入です。ところが、#define は、ワンセットですから、記号扱いとなり代入出来ません。つまり、別の値を持った _NSWINDOWS_DLL_GOOP がメモリ上を彷徨うことになります。文も完結していないので、いつでも呼び出しが出来るように、準備万端な状態にもなります。

次の行は、空白が4つも有り、使って良いのか分からない、” “が出て来ます。さて、これは文字、文字列を固定する指示子ですので、代入出来ません。なので、extern に代入され、最後にAPPKIT_EXTERNに代入されます。
3行目はこの逆のパターンで、APPKIT_EXTERNには、別の角度も代入されますから、アクセス段階でエラー回避が強化されます。

この定義された APPKIT_EXTERN は、マクロであり型にもなり、; もないので、汎用性のある入れ物になります。
これが、理解出来れば、コンパイラーは、最後まで同じことをしているだけです。
例えば、プロトタイプとか有りますが、文として文の代入する入れ物が無ければ、コンパイラーは、エラーとして吐き出します。
よく勘違いしそうなのが、[ ] の使われ方で、配列と記憶していると思いますが、Objective-Cでは、[ : ] といった使われ方で、やはり代入の一つの方法で使われ、コンパイラーが区別しているように見えますが、残念ながらコンパイラーは単純な言われたことしか出来ないので、同時に両方を区別できません。ファイルの拡張子.c, .m は、同時にコンパイル出来ますから、平等に読んでいるわけで、区別しようが無い筈です。つまり、Objective-Cでは、[ ]の中にある値だけ、値が有り、それを代入、又は値渡し出来ることになります。ただし、ユーザが迷う様なことは避けなければならないので、それぞれの言語の混合は避けているだけです。

こうなると、入れ物となる袋には色々な種類が有り、取り出す順番、方法が大事となり、中には袋の中に又別の袋が有ったり、同じ種類の袋出ないと取り出せなかったり、今は取り出したくないので、チャックしたりと色々な方法が自然と生まれて来ます。
只あんまり袋が多過ぎたり、変な入れ方をしたりすると、普通の買い物でも迷うように、迷ってしまいます。

プログラム言語は、主に英語圏の産物なので、どうしてもアジア圏の変換を求められる地域では敬遠されがちですが、丸っきりアルファベットを見るだけで、嫌悪感を感じる人は別とすれば、記号の集列ですので、ハンディの差はそんなに無いと言いたいところです。

私も、プログラムは誰かに教わったことも無く、組んだことも無いですけれども、素人考えになるかも知れませんが、日頃疑問に思うことを述べさせてもらいました。
何かの参考になれば、幸いです。

Xcode [コンピュータ言語]


最近Objective-Cを学習しているのですが、その中でC++の強化が有るようです。Xcode4 versionでのアップルのプロモーションビデオを見てもC++に触れていて、多くの操作が出来るようになった事を、促しています。

そこでにわかにどう強化されているのか、調べる事にしたのですが、ネット上にあるサンプルリストは、大概がウインドウズかUNIXなので、だめなのかなと思いきや、そうでもなさそうです。

私のOSのバージョンはMac OS X 10.6.8、Xcode3.2.6 64-bitです。前のバージョン迄動作しなかったと思ったのですが簡単なものであれば、普通に動作するようです。ただし、最初だけ気を付けなければならないようです。C言語での scanf() やC++の cin >> はアップルのデバッガコンソールからではちょっと工夫しなければなりません。

これはリンクフリーから抜粋したコードですが”きじねこ”というホームページからです。


#include <iostream>

#include <complex>

using namespace std;//ここで宣言しておけば下文はstd::は省略可能


int main()

{

std::complex<double> value;

std::cin >> value;

//実数を入力したら最後に&を付ける

std::cout << std::abs(value) << std::endl;

return 0;

}


これをデバッガコンソールから実行すると、待ち受け画面からDOSのように抜け出られません。又日本語も入力できません。でも諦めないで下さい。こうすればよいのです。最後に & をつけるとDOSのようになりました。又日本語を入力するときは、あらかじめコピーしておいて、ペーストすると入力できました。何故かは分からないのですが、&はANDのビットフラグでしたっけ?ただコンパイル済みのUNIX実行ファイルをターミナル上で実行するときは普通に実行できますので、初めからそちらで試した方が良いようです。


さあ、こうなるとXcodeでは出来ない操作を変換するだけで良さそうです。ある解説書には、仮想関数、コンストラクタやデストラクタは使えないそうです。ので、逃げ道がちゃんとあるようです。

これは私が買った本のサンプルコードからの抜粋ですが、作者の林 晃氏も著作権侵害と言えないくらいの抜粋です。ほんの名前は、「Objective-C 逆引きハンドブック」です。


class MyClass {

public:

    MyClass() {

        _str = nil;

    }

    

    virtual ~MyClass() {

        [_str release];

    }

    

    // Objective-CのクラスのインスタンスをC++のメソッドの引数として使える

    void DoSomething(NSString *newStr) {

        if (_str != newStr)

        {

            [_str release];

            _str = [newStr copy];

        }

        NSLog(@"%@", _str);

    }

    

private:

    // Objective-Cのクラスのインスタンスをメンバー変数として使用できる

    NSString *_str;

};

・・・

これは丸っきりC++の構文なのですが、違うのはrelease, copyでしょうか。C++であれば、newとdeleteを使う訳ですが、objective-C++では型をオペランドに取れないから駄目なそうです?

なのでメッセージ式で、[_str release], [newStr copy]とすれば問題解決と言う訳です。

試しに10年以上前のCodeWarriorのサンプルを試してみましょう。作者はデーブ・マークです。日本語が今は使えますから、出力文字を日本語に直しておきます。コードは、WhatAmI.cppです。ステーショナリーは、最初にC++stdc++ Command Line Toolです。WhatAmI.mmでも大丈夫のようです。


#include <iostream.h>


//---------------------------------------  Shape


class Shape

{

// Data members...

// Member functions...

public:

virtual void WhatAmI();

};


void Shape::WhatAmI()

{

cout << "私はどんな種類の形か知りません!\n";

}


//---------------------------------------  Shape:Rectangle


class Rectangle : public Shape

{

// Data members...


// Member functions...

public:

void WhatAmI();

};


void Rectangle::WhatAmI()

{

cout << "私は長方形です!\n";

}


//---------------------------------------  Shape:Triangle


class Triangle : public Shape

{

// Data members...


// Member functions...

public:

void WhatAmI();

};


void Triangle::WhatAmI()

{

cout << "私は三角形です!\n";

}


//---------------------------------------  main()


int main()

{

Shape *s1, *s2, *s3;

s1 = new Rectangle;

s2 = new Triangle;

s3 = new Shape;

s1->WhatAmI();

s2->WhatAmI();

s3->WhatAmI();


return 0;

}


さあ、どんなエラーが出て来るでしょうか。とりあえずやってみます。?

昔のコードですが警告一つで、問題なく完了しました。のメッセージです。今初めて試してみたのですが、以前は出来なかったと思いました。 結果は、

This GDB was configured as "x86_64-apple-darwin".tty /dev/ttys000

プログラムをデバッガに読み込み中...

プログラムは読み込まれました。

run

[Switching to process 2227]

実行中...

私は長方形です!

私は三角形です!

私はどんな種類の形か知りません!


Debugger stopped.

Program exited with status value:0.


警告は以下、

#ifdef __DEPRECATED

#warning This file includes at least one deprecated or antiquated header. \

読んで行くと、instead header<iostream.h>とありますので<iostream>変えてみます。が、今度は3つのエラーが出て来てだめです。この警告は問題の無い警告のようです。

取り合えず、全てのサンプルは動作しそうです。

今度はObjective-C++でコードを変換してやってみました。WhatAmI2.mmと言うファイルを作ります。ステーショナリには無いようなので、後でmをmmに名称変更すれば++を認識できるみたいです。中身はこう、


#import <Foundation/Foundation.h>


class Shape : public NSObject {

public:

Shape() {NSLog(@"私はどんな種類の形か知りません!\n");}

virtual ~Shape() {NSLog(@"オブジェクトは破棄されました\n");}

};


class Rectangle : public Shape {

public:

Rectangle() {NSLog(@"私は長方形です!\n");}

~Rectangle() {NSLog(@"オブジェクトは破棄されました\n");}

};


class Triangle : public Shape {

public:

Triangle() {NSLog(@"私は三角形です!\n");}

~Triangle() {NSLog(@"オブジェクトは破棄されました\n");}

};


@interface MyObject:NSObject {

Shape *_shape;

Rectangle *_rectangle;

Triangle *_triangle;

}


- (void)message;

@end


@implementation MyObject


- (void)message

{

_shape = new Shape();

delete _shape;

_rectangle = new Rectangle();

delete _rectangle;


_triangle = new Triangle();

delete _triangle;


Shape c1;

}


@end


int main(int argc, char **argv)

{

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

MyObject *myObject = [[MyObject alloc] init];

[myObject message];

[myObject release];

[pool drain];

return 0;

}


取りあえずコンパイルは出来ました。結果は以下、


run

[Switching to process 383]

実行中...

2011-07-17 07:26:50.636 WhatAmI2[383:a0f] 私はどんな種類の形か知りません!

2011-07-17 07:26:50.638 WhatAmI2[383:a0f] オブジェクトは破棄されました

2011-07-17 07:26:50.638 WhatAmI2[383:a0f] 私はどんな種類の形か知りません!

2011-07-17 07:26:50.638 WhatAmI2[383:a0f] 私は長方形です!

2011-07-17 07:26:50.639 WhatAmI2[383:a0f] オブジェクトは破棄されました

2011-07-17 07:26:50.639 WhatAmI2[383:a0f] オブジェクトは破棄されました

2011-07-17 07:26:50.639 WhatAmI2[383:a0f] 私はどんな種類の形か知りません!

2011-07-17 07:26:50.639 WhatAmI2[383:a0f] 私は三角形です!

2011-07-17 07:26:50.640 WhatAmI2[383:a0f] オブジェクトは破棄されました

2011-07-17 07:26:50.640 WhatAmI2[383:a0f] オブジェクトは破棄されました

2011-07-17 07:26:50.640 WhatAmI2[383:a0f] 私はどんな種類の形か知りません!

2011-07-17 07:26:50.641 WhatAmI2[383:a0f] オブジェクトは破棄されました


Debugger stopped.

Program exited with status value:0.

これを見ればコンパイラーがどう読んでいるかよく分かります。又これは参考であり、私自身は置き換えただけなので、もっと良い方法が有るのかも知れません。

只、C++には膨大な遺産が埋もれています。アップル首脳陣もここは迷うところではないでしょうか。特に科学計算などはそうです。またこれにアップルの得意なGUIが加味されれば、未来の科学技術、シュミレーション技術に貢献する事請け合いです。私自身勉強中であり、これに関する資料は皆無です。でもこれが将来的に有望だと確信したいと思います。

最近は、これに専念したいので、So-netの中の別のブログに変えたいと思いますので、その時は連絡しますので興味が有る方は、そちらで合いましょう。


コンピュータ言語の勧め [コンピュータ言語]

これからの子供達が学ぶべき事にコンピュータ言語を上げたいのですが、皆さんどうでしょうか。勿論プログラマーを育てるためだけではありません。特に福島の子供達には、ぜひお勧めなのですが、可笑しいでしょうか。今の教育では、子供達の埋もれた才能を引き出す事は出来ません。スポーツを否定する者ではありませんが、国内でスポーツを維持するにはお金が掛り過ぎるし、今の現状にはふさわしくありません。

では何故プログラム言語なのかと言うと、コンピュータの世界では、間違いに気づかないで何かをやったとしても、それ也にしか動きません。又は結果が返って来ません。デバッガーはそれどころか、警告やエラーを報告してくれます。つまり、対話をしてくれるのです。
今の教師、先生と言えども人の子です。文科省認可の教科書も全て正しいとは限りません。この間の国会中継を見る限り、私より偏見のある内容の教科書を献金ぐるみで採用し、生徒を翻弄させているような質疑でしたが、多分そうなのでしょう。

第一、今の国会討論を聞いていると、この人達、本当に学校出てんのかなあ?と疑問符が付きっ放しです。教育自体もこの人達が牛耳っていると考えれば、今の教育はそんな程度の物なのでしょう。本当から言うと、この位の教育なら親が教えた方がましだと思うのですが、無理があるのでしょうか。
私は、学校で学んだ事など社会に出てから何の役にも立ってません。お陰もありません。全ては独学です。
学校の勉強は、それを只邪魔していただけでした。
現にアメリカでは、学校に登校するのは子供の義務ではなく選択なのです。義務教育と言っていますが、今の世の学校に行かなくても、中学、高校、大学と卒業する手段は他にもあります。放送大学による通信教育もその一つだろうし、ネットを介した方法もこれから考えられます。これなら学校が敷くレールに乗らなくて済みます。これには、親としての親権が大事です。又親としての責務でもあります。今男親の存在が薄く感じられますが、これは、社会に預ければ大丈夫だとする安易な発想があるからではないでしょうか。社会と言えども自然と流転する物なのではないでしょうか。常の道は常に非ずです。

今民主党政府は、子供手当を上げるとか、高校授業料無料化とか言ってますが、今の現状を見れば無理なのは明らかなのに言葉だけが踊っています。私はもう政府なんか信じていません。元々信じてもいなかったのですが、やっと表立って言う事が出来ます。今の政治家は、私が揶揄(やゆ)するアイドル(象徴)歌手以下だと。

もちろん、プログラムは退屈な作業ですが、それは先が見えない時につきまとうジレンマです。
また学問の全てでもありません。しかし、将来的にも外せない分野でもあります。こうプログラムを組めば、必ずこうなるという、現実的な側面は学ぶ者にとっていかにも有効です。コンピュータ社会は始まったばかりであり、これからは欠かせません。これからの教育にぜひコンピュータ言語を取り上げる事を勧めます。

ディレクトリの概念 [コンピュータ言語]

コンピュータ言語の中で理解しづらいのにポインタというのがありました。
しかし、UNIXに変わりディレクトリが導入されてから、見方が変わりました。
UNIXのファイルシステムにはiノードというものがあり、そのテーブルの中のファイルにはみんな番号が振られています。ちなみに前に上げた、TextInputViewで説明すると、ターミナルで次のコマンドを打ちます。移動コマンドのcdで前のディレクトリに移動します。$ ls -iaR TextInputViewを打ちます。ターミナルはbashです。すると、

TextInputView/build:
3069456 . 3069470 Debug
3069428 .. 3069457 TextInputView.build

TextInputView/build/Debug:
3069470 . 3069471 TextInputView.app
3069456 ..

TextInputView/build/Debug/TextInputView.app:
3069471 . 3069470 .. 3069472 Contents

TextInputView/build/Debug/TextInputView.app/Contents:
3069472 . 3069473 Info.plist 3069474 PkgInfo
3069471 .. 3069510 MacOS 3069475 Resources

TextInputView/build/Debug/TextInputView.app/Contents/MacOS:
3069510 . 3069472 .. 3069515 TextInputView

TextInputView/build/Debug/TextInputView.app/Contents/Resources:
3069475 . 3069476 English.lproj
3069472 .. 3069477 README.rtf

TextInputView/build/Debug/TextInputView.app/Contents/Resources/English.lproj:
3069476 . 3069479 Localizable.strings
3069475 .. 3069504 MainMenu.nib
3069480 InfoPlist.strings

TextInputView/build/TextInputView.build:
3069457 . 3069458 Debug
3069456 .. 3069519 TextInputView.pbxindex

TextInputView/build/TextInputView.build/Debug:
3069458 . 3069459 TextInputView.build
3069457 ..

TextInputView/build/TextInputView.build/Debug/TextInputView.build:
3069459 .
3069458 ..
3069461 Objects-normal
3069466 TextInputView-all-target-headers.hmap
3069467 TextInputView-generated-files.hmap
3069468 TextInputView-own-target-headers.hmap
3069460 TextInputView-project-headers.hmap
3126726 TextInputView.dep
3069469 TextInputView.hmap
3069517 TextInputView~.dep
3126725 build-state.dat
3069516 build-state~.dat

TextInputView/build/TextInputView.build/Debug/TextInputView.build/Objects-normal:
3069461 . 3069459 .. 3069462 i386

TextInputView/build/TextInputView.build/Debug/TextInputView.build/Objects-normal/i386:
3069462 . 3069509 FadingTextView.o
3069461 .. 3069463 TextInputView.LinkFileList
3069508 Controller.o 3069507 main.o
3126724 FadingTextView.mi

TextInputView/build/TextInputView.build/TextInputView.pbxindex:
3069519 . 3130355 pbxindex.header
3069457 .. 3130354 protocols.pbxbtree
3130352 categories.pbxbtree 3130351 refs.pbxbtree
3130350 cdecls.pbxbtree 3069520 strings.pbxstrings
3130349 decls.pbxbtree 3130353 subclasses.pbxbtree
3130347 files.pbxbtree 3130346 symbols0.pbxsymbols
3130348 imports.pbxbtree

TextInputView/build/TextInputView.build/TextInputView.pbxindex/strings.pbxstrings:
3069520 . 3069519 .. 3130344 control 3130345 strings

一部抜粋ですが、こう出て来ます。これはターミナルからしか見る事が出来ません。
このコマンドは、Bruce Molay氏の著書であるUnix/Linuxプログラミング理論と実践の中から参照しています。

. はそのディレクトリ(フォルダー)の番号で、.. はその上のディレクトリの番号でありリンクしています。
Finderでは、. は、そのものフォルダーとして見えます。
.. はその四角のエリアであり見えますが、通常意識する事はありませんし、その上のフォルダーでもあります。
システムから見ると、この番号が無ければファイルの階層が分からなくなるという訳です。.. はHTMLでも使われています。

Objective-Cに、よく使われる表現に、
NSString *XXX , NSArray *XXXとかあります。ポインタと呼ばれる* はコンパイラーが割り振るアドレスであり、XXXの部分の内容は後で変更可能な中身と言えそうです。私も大した自信があって言っているのではありませんから、参考程度にです。
NSで始まるクラスはクラスタクラスと呼ばれ、インスタンスを作成でき、それを変数として持つ事ができ、サブクラスとして振る舞う事が出来る、とあります。
Objective-Cには、デリゲートという親クラスがサブクラスに振る舞いを任せてしまう方法があります。そうすれば、親クラスは支障無くもっと多くのサブクラスを持つ事が出来ます。

こういった概念は、やはりUNIXならではのディレクトリの概念から来てるのだと思います。

Objective-Cって何 [コンピュータ言語]

暗い話ばかりでは、身にこたえますので、少し話題を変えてアップルのコンピュータ言語についてに変えました。
Macを買えばもれなく付いて来るXcode,Interface Builder。これを生業にしている人もいるでしょうけれども、私の場合、Objective-Cの解説という訳でもなく、単なる思い付きで、だらだらと述べるだけですので、興味の無い方は見ない方が良い程度のものです。
解説書ならいっぱい有りますし、ネットで探してもたくさん有ります。

調べていたらXcodeは、バージョンが4にアップされていて最新のサンプルコードはコンパイルできない事を知りました。このバージョンは有料で、600円(会員だけ?)。安いとは言え、売り物を作る気はなく、突っ込んで行くと悩まされそうなので、止めました。
アップルのやり方はいつでもそうです。そうゆう意味ではウインドウズの方が優しいのかも知れません。
だいいちObjective-Cはマックでなければ使い道はなく、そうゆう意味ではマイナーな言語です。
JAVAやC/C++とは、一線を越えます。
今携帯はiPhoneが発売されて以来スマートフォンに変わって来ました。アプリソフトで言えば、iPhone,iPadが群を抜いています。
今回のバーションアップは、このアプリケーション開発のためのものと判断しましたが、私には大分敷居が高い事が分かりました。実に圧巻です。

しばらく使ってなかったので、使用が様変わりしてしまったようです。無償版バージョンは、Xcode3.2.6でSDKがiOS SDKになっていました。一応会員なのでダウンロードしました。今インストール中ですがMacProなのに、時間がかかります。何がどう変わったのか早く見たい。

見たら殆ど変わりませんが、サンプルコードの中には、SDKがiOS SDKでないとやはり不具合がでるみたいです。

さてObjective-Cの構文ですが、C言語の拡張または延長線上にあるので、C言語の理解は必要です。
また土台(Foundation)が、unixのDarwinなので、ディレクトリの概念も理解しておかなければなりません。ダーウィンは殆どがC言語でできていて、ターミナルコマンドもC言語で出来ています。ではC言語との違いはと言えば、何と言ってもコンパイラ指示子@interface,@implement,@endではないでしょうか。
@で始まるものには他に
@public,
@protected,
@private,
@package,
@class,
@selector
@"…"等などC言語ではありません。つまり使える記号をふんだんに使った言語なのです。
次に [レシーバ(obj) メソッド:argument(論拠?)] という通信手段です。
C言語では[ ]は、配列にしか使いませんが、空白を使う事に依ってコンパイラーは区別できます。
しかし、この空白はCでも使っています。例として#define DELAY 2とすれば、DELAYに2が代入されます。だったら最初から2を使えば良いかと言うと使い物になるソフトとなるとコードが長くなりますし、どこかでもう一つ2がでてくれば、どっちの2か後で迷ってしまいます。

対で使う記号には他に、
< > は、主にインポートするヘッダーファイルを括る。
例:#import HTMLやXMLでも使われますが、意味合いが少し違って来ます。例えば、<head>…</head>のように、< >で内容を指定して更に細かく内容を指定して、最後に</>で終了した合図を送りますが、Objective-Cの場合読み込んだファイルを保持するだけです。共通して言える事は、< >の中の文字は表示されないとも言えます。 { } は、大構文で使われます。例として @interface MyObject : NSObject { } ちなみにHTMLの場合、使われる事はありません。</>があるからです。 ( )は、使われ方が色々です。 まずはメイン関数。例として、 int main(int argc, char *argv[]) { return NSApplicationMain(argc, (const char **) argv); } 次は型を指定する時。例として、 - (id)initWithFrame:(NSRect)frame {…} 後は、予約語と呼ばれる関数として、例としては、 if (…),for (…),while (…)… 最後に、C言語では自分が作った関数にも( )を使いますが、Objective-Cでは、NSであらかじめ用意した関数でしか使いません。例としては、 NSMakeRange(0,0) 特殊と言えば、関数の前に使われる-,+の記号があります。 +は、動的バインディング時にクラスのインスタンスを作成することらしいのですが、抽象的で分かりにくい概念です。-は他の関数と言う事でしょうか。System/Library/Frameworks/...framework/Headers/のヘッダーファイルを眺めていれば区別がはっきりするかも知れません。 後は何もしなくてもビルドすればwindowだけは立ち上がるということです。前のMac OS9迄はCode Warriarと言うコンパイラーソフトを買い、ウィンドウを立ち上げるだけでも大変でしたが、オブジェクト指向と叫ばれてどんなOSが出来るのかなあと思っていたら、こういう事だったのですね。 これだけ分かってプログラムが組めるかと言うと、ドレミファソラシドが引ける程度でしょうか。 もう一つ理解しなければならないものに、インターフェイスビルダーがありますが、これがなかなか参考書も無くビジュアルで分かり易いのかと思いきや、いざビルドすると失敗し場合、何処が悪いのか探すのが難しくなります。 ここでアップルが用意している簡単なサンプルコードで、説明したいと思います。 TextInputView.png ここでは作られたコードは、ControllerとFadingTextViewしかありません。 MainMenu.xibはこんな感じです。 MainMenu1.png MainMenu2.pngCConnection1.png TextInputView2.png WConnection.png こんな感じでしょうか、早速ビルドしてどうなるのか試してみます。 Apple1.png screen1.png ここでは、最初のMainMenuに無かったSpecial Characters…が追加されています。これを選択してみると文字ビューアが出て来て2200番台からの数学演算子がでて来ます。それを入力すると 結果.png こうなりました。 でも可笑しいですねえ。Special Charactersは、何処から出て来たのでしょうか。いくらコードを追っても無いし、inspectorで探してみてもありません。これは成功した例なので、どこかに表示する仕組みがある訳ですが、このように参考書もないので隠れたところの動きは理解できないし、間違いも探しづらいのです。 誰か分かる人が居れば教えてほしいのですが、このサンプルは単純な方ですがここ迄です。

MacでLaTeX [コンピュータ言語]

MacでLaTeXと思い、フリーソフトがないものかと探したら結構あるんですね。マックの場合、MacPortという方法もあるのですが、以前、MySQLで失敗して以来、億劫になり使わないようになりました。
EmacsでLaTexという手段がいいのかなと思ったのですが、windows版の解説が多く、
マック用の解説がないものかと探すと、やはりあるんですね!そこで、AUCTeXなるものが。それをダウンロードし、ターミナルから./configure --optionでインストールを試みましたが、このオプションの設定が英語のマニュアルしかなく、勘違いしているのか、'No such file or directory'のエラーではじかれ、makefileができず、とりあえず諦め、次の手段を考えました。

最初、UTeXなるアプリケーションをダウンロードしたのですが、これは未完のソフトらしく、単体では使い物になりませんでした。

そこでMacTeX.mpkg.zipをダウンロードし、使ってみましたが、日本語がいまいち使えません。そこでもう一度、'MacでLaTeX'で検索し、'TexShop-Mac OS X 10.6 Snow LeopardにTeX/LaTeXを導入' というブログを見つけ、日本語を表示する方法を見てやってみましたが、最初うまくいきませんでした。

ここで気づいたのですが、MacTeXは、UTexのコマンドラインの一部を使うのでした。そのパスの指定が、間違っていたためNot Fonudになってしまってました。ほかにも間違いがあったのですが、ちょこっとした事なので省きます。
しかし、これらのソフトは圧巻です。450MBと1.5GM超のハードメモリを必要とし、推奨として、64bitのCPUとしています。確かに、MacBookでは、使いずらいし、あれこれ迷っていると今自分が何をしようとしているのかもさえ、分からなくなりそうです。そこで、使ってなかったMac Proを引っ張り出し、大きめのディスプレーに変えました。何とかいら立ちは解消しました。

これでやっと、そのサイトからダウンロードしたtest.texが、ちゃんと日本語表示となりました。しかし、マックでShift-JISを使うはめになるとは、思いませんでした。UTF-8は、まだ開発されていないようですが、とにかく日本語が使えないのであれば、意味がありません。ほかにもいろいろな方法があるかもしれませんが、よろしかったら参考にしてみてはいかがでしょうか。

後は、LaTeXのコマンドに慣れるだけです。それとMacTeXには、多くのアプリケーションが付属しています。ABC順で、BibDesk, Excalibur, LaTeXiT, TeX Live Utility, 主役のTeXShop, TeXworksと何に使うのか、まだ使い切れていません。

LaTeXは、特別な人しか使わないかもしれませんが、PDFで書類を作りたいのであれば、覚えていて損はないはずです。HTMLも覚える事も多いですし、使い方によっては、かえって楽かもしれません。
タグ:PDF MacでLaTeX
コンピュータ言語 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。