torikori | カオスの坩堝 https://anqou.net/poc Chaos is not kaos. Tue, 31 Mar 2020 12:54:42 +0000 ja hourly 1 https://wordpress.org/?v=6.1.1 https://anqou.net/poc/wp-content/uploads/2018/02/9dc10fe231765649c0d3216056190a75-100x100.png torikori | カオスの坩堝 https://anqou.net/poc 32 32 330Kbps でも京大の Zoom講義を受けたかった https://anqou.net/poc/2020/03/31/post-3249/ https://anqou.net/poc/2020/03/31/post-3249/#respond Tue, 31 Mar 2020 12:54:40 +0000 https://anqou.net/poc/?p=3249

低速回線でオンライン講義の試験に参加し、Zoom は利用不可能で講義動画は閲覧可能だと判明しました。
今後教員や学生がオンライン講義への移行を進める際の参考事例になればと思い、その詳細を記します。

きっかけ

新型コロナウイルスの流行に伴い、京都大学でも講義のオンライン化が進んでいます。しかし、筆者は転居 (例えば工学部における吉田キャンパスから桂キャンパスへの移動など、頻繁に見られる状況だと思います) に伴い固定回線が開通しておらず、当分の間携帯電話しか利用できない状況です。

今後に不安を抱いていたところに、このツイートが目に留まりました。

情報学研究科の下平先生により Zoom を用いたオンライン説明会とそのテストが行なわれるようです。
そこで参加希望を出し、当日開始20分前ごろから PandA (京大のMoodle) の Zoom ミーティングのリンクをクリックし参加した次第です。

試験環境

  • スマホ: Android 5.0 上の Zoom および Chrome
  • 回線環境: Sony Prepaid LTE SIM (Docomo の回線) による4G LTE回線
  • 回線速度: 270Kbpsから400Kbps程度で推移 (Netflix の https://fast.com/ja/ にて測定)
  • Zoom の設定: 自分のビデオを常にオフ、安全運転モード

Zoom の接続状況の確認とスライドをもとに説明を加える形で進行しました。適宜挙手などのテストもありました。

結果

Zoom

  • チャット: リアルタイムに閲覧可能。こちらからの投稿テストは未実施
  • 説明会映像: 0.5秒程度の遅延は見られるものの、スライド方式では問題なし。スライドの文字は確認可能
  • ビデオを共有した参加者の映像: 黒画面であり確認不可能
  • 音声: 全員の音声が一音一音途切れて聞こえる。会話の意味を把握することは不可能

以上の通り、内容を把握したり参加することは出来ませんでした。

講義動画の閲覧

PandA にアップロードされた Zoom の説明会動画は途切れることなく閲覧可能であり、またスライドの文字は確認可能でした。

感想

以上より、リアルタイムでの参加は難しいものの、後からの動画閲覧は可能という結果がえられました。

個人的な希望としては以下の2点が挙げられます。まず、リアルタイム配信よりも講義動画のほうが閲覧しやすいため、教員の方に講義動画をアップロードしていただけると好ましいと思います。また、学生側は不必要にビデオを配信しないことでZoom の使用量を低減できるのではと考えられます。

今回 Zoom については残念な結果に終わりましたが、何とかオンライン講義に参加できるように今後も原因調査や設定の調整などを続けていき、進展があればこの記事に追記できればと考えています。
また、スライド講義だけでなく数学のセミナーを何とかオンラインで実施したいと感じており、そのようなテストの機会があればぜひ参加できたらと思います。

最後に、このような機会を提供して下さった下平先生はじめ関係者の方々に御礼申し上げます。

]]>
https://anqou.net/poc/2020/03/31/post-3249/feed/ 0
#自我と魂についての30問30答 https://anqou.net/poc/2019/05/25/post-2917/ https://anqou.net/poc/2019/05/25/post-2917/#respond Sat, 25 May 2019 14:22:14 +0000 https://anqou.net/poc/?p=2917 株式会社 Xemono 代表のとりいめぐみさんによる「#自我と魂についての30問30答」に回答してみます. このあたりの知識素養を所持していませんが…

以下は 自我と魂についての30問30答v1 に基づきます.

質問者:とりい@kinakobooster

回答者:torikori

タグはこちら #自我と魂についての30問30答

  1. 自我ある? 自我とは何なのか、調べてみたものの分からずじまい.
  2. 生まれた時から自我あった? 分からずじまいとはいえ、生まれた時のことを何も思いだせず、おそらく自我などなかったかと.
  3. 今までした中で一番悪いことは何? 自殺未遂でしょうか.
  4. 今までしたことで一番良いことは? 自らの振舞いを良いと思うのは恥.
  5. 魂が病んでいると感じたことはある? どこからどう見ても病んでいないが…
  6. 完全に自分の手柄で獲物が3つ手に入ったら、4人の仲間にどう分配する? 自分で全部消費する. 分配するという発想はなかった.
  7. 人は善悪を判断できる? 判断できない、なのに日々判断するふりをさせられる. とてもつらい.
  8. どんなことを美しいと感じる? 滅び. 爆発して消えるのでなく、ひっそりと隠れたり、いつのまにかいなくなること.
  9. 魂売ったことある? 感じることはあるけれど、実際に売ったことはないはず.
  10. 美しいもののためなら魂売れる? 売れるべきだと思いますが、魂売って自殺せずに生きている現状があるので、おそらく将来も売れない.
  11. なぜ美しいものは美しい? はかないこと、他人に見向きされないこと. 流行りが美しいことなどないのでは.
  12. もしもっとも美しいものが手に入ってしまったらどうする? ひっそりと誰も知らない所にしまっておく. 毎日おがむ.
  13. 犯した罪が償われるとしたらそれはどんな方法によるもの? 命をもって償うこと以外にあるのだろうか. 教えてほしい.
  14. 何歳まで生きる予定? 刹那
  15. やっとかないと死ねないことはある? 叶わないとは分かっているが、誰もいない部屋で1日中ピアノを演奏していたい.
  16. もし15が今叶ったらどうする? 消えるのだろうか. 別人のようになるのだろうか.
  17. 救いがもしあるとしたら、それはどんなものだと思う? 完璧な判断のもとで生存すること.
  18. 絶対にやりたくないことある? やりたくないことだと気づかずに倒れてしまう.
  19. 自由意志のことを信じる? 信じていない.
  20. やりたくないけどできちゃうことはある? 中身のない世間話をする.
  21. 今までで一番自由意志を感じたときの話をしてください. 大学入学時でしょうか. 詳しく書けないのが残念.
  22. そもそも魂は存在する? 今ここでキーボードをタイプして、書こうとしている自分がいる.
  23. 生まれる前の自分に一言助言できるならなんて言う? 素直になれ.
  24. 10年前の自分に会えたらなんて言う? 23 と同様. 素直になれ.
  25. 10年前の自分と仲良くできる? (10年前の自分を)気持ち悪い人間だと罵倒しそう.
  26. 未来から自分と名乗る年長の存在がやってきて、もしそいつの言うことが明らかにメチャクチャだったらどうする? 彼と一緒にメチャクチャになる.
  27. 今ほしいものある? ほしいという概念を持つことは禁止されているはずでは?
  28. 世界に正しさはありますか? あることを願っている、なさそうだけど.
  29. 正しさが存在するとしたらその正しさは欲しい? ほしい. 正しさだと気づかないまま自分の中に染み込んでいて.
  30. もし君が人を救ってしまったとして、救われてしまった人のことをどう思う? 救われたことを忘れていてほしい気持ち半分、忘れないでほしい気持ち半分. 見返りを求めるかどうかで心が揺れる.

2019.5.25 Revision 1

何かあればコメント欄まで.

]]>
https://anqou.net/poc/2019/05/25/post-2917/feed/ 0
aqcc のソースコードを読みたい: リンカ編 https://anqou.net/poc/2018/12/21/post-2448/ https://anqou.net/poc/2018/12/21/post-2448/#respond Thu, 20 Dec 2018 15:26:49 +0000 https://anqou.net/poc/?p=2448

aqcc のリンカ部分を読もうと試みつつ苦しんでいます. その途中過程を書き残します.[1]

開発の際、 リンカ・ローダ実践開発テクニック という書籍を参考にされたようですので、そちらが手元にあると便利です. あと man elf や、 X86 psABI から x86-64-psABI-property.pdf として入手できる AMD64 のABI仕様、特にTable 4.9 のRelocation Types などは参考になるかと思います.

以下説明の際は、2018/11/10 コミット分である
2861f51735e0db9e5e7f988a2e51862dca14537a をもとにしています.

概要

このリンカは、リンカローダ本にあるような、簡易的なリンカとして作成されており、いくつか機能が限られています.

リンカの機能制限
  1. 動的リンクはできない

  2. GNU ld で生成したELF ファイルを読込めない

  3. 生成されたファイルを objdump にてうまく参照できない

  4. 再配置作業は最低限のみ行なわれる

  5. 普通のELF ファイルとは異なり、ファイルの先端末尾のみならず、中間部にもヘッダ分散[2]

gcc などと同様に、 ./aqcc そのものではコンパイルを行わず、その下にある cc as ld などに処理を渡し、
実際の処理は ld/main.c からはじまります.

    Vector *objs = new_vector();
    for (int i = 1; i < argc - 1; i++) vector_push_back(objs, argv[i]);

    ExeImage *exe = link_objs(objs);

    FILE *fh = fopen(argv[argc - 1], "wb");
    dump_exe_image(exe, fh);
    fclose(fh);

argv には system.o main.o などとリンク対象のファイル名が指定されるので、それから link_objs() 関数を呼び、リンクされた内容を表す ExeImage へのポインタが生成されます. この構造体も動的に確保されたものですが、malloc() は link_objs() 内部で呼び出され、最後までfree() は呼び出しません. [3]
そうして、 dump_exe_image() 関数を呼び出して、書き込んでやっています.

リンク処理の概要

ソースコードを読むと、数値定数が多く埋め込まれていることに気づきます.

一般に、多くのELF を扱うソフトウエアでは、 /usr/include/elf.h に、ELF フォーマットを 構造体を用い表したものがあるのを利用し、それに読込ませ、読み書きが分かりやすくできるようです.
一方、aqcc においては、C言語の全ての機能が実装されているわけではありません.[4]
直接 /usr/include/elf.h を解析するわけにいかず、現状では読み込もうとしても失敗します. そこで、直接ELF ファイルをバイナリとして扱っているようです.

まずは読込みから.
ld/link.c: L55 in new_object_data() などにて、
read_entire_binary() にてchar型の配列として読込まれたデータから、それぞれのセクションごとに切り出しています.

ただ、この部分において定数が頻出します. man elf や実際のバイナリを眺めがなら行うのがよいかと思います.

例えば ld/link.c: L60 in new_object_data() 以降のセクションヘッダを読込む部分など.

    for (int i = 1; i < obj->nshdr; i++) {
        char *entry = obj->shdr + 0x40 * i;
        char *offset = data + read_dword(entry + 24);
        int size = read_dword(entry + 32);

まず、EFI のセクションヘッダが0x40 の大きさをもつことより、セクションヘッダ開始位置を entry に代入しています.
そこから、 man elf にあるように、uint32_t の個数を数えて、offset の位置を同定します. 今回は4 * 6 = 24 となるので、24先から 32bit分を読み込んでいます. [5]

メモリ再配置部分を見てみます.
ld/link.c: L130 in link_objs_detail() のあたりでしょうか. 読み込んだそれぞれのELF ファイルの再配置テーブルから、再配置すべきものを抜き出し、検索し書き換えを行なっています.

そののち、再配置情報が特定なものになっている場合 (aqcc のアセンブラではこれしか出てきません) AMD64 の仕様にある R_X86_64_PC32 の再配置方式に従い、オフセットの差を検索して代入しています. しかしながら、筆者の能力ではいまいち、理解できずじまいです.
仕様読めない.

ここにある & 0xff の意味については後述します.

次に、書き込みを見てみます.
ld/link.c: L207 in dump_exe_image() などにて、 emit_byte() なり emit_dword() 関数なりで、奇妙な数値を書き込んでいます.

これらの関数は ld/object.c にて定義されるように、 set_buffer_to_emit() によって定義された Vector に、順番に値を流し込んでいます.

    // ELF magic number
    emit_dword(0x7f, 0x45, 0x4c, 0x46);
    // 64bit
    emit_byte(0x02);
    // little endian
    emit_byte(0x01);
    // original version of ELF
    emit_byte(0x01);
    // System V
    emit_byte(0x00);  // 0x03 GNU
    // padding
    emit_qword(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);

    // (中略)
    for (int i = 0; i < vector_size(exeimg->objs); i++) {
        ObjectData *obj = (ObjectData *)vector_get(exeimg->objs, i);
        for (int j = 0; j < obj->data_size; j++) emit_byte(obj->data[j]);
        for (int j = 0; j < obj->entire_size - obj->data_size; j++)
            emit_byte(0);
    }

例えばこの部分. man elf のELF ヘッダー、最初の部分 e_ident を表しています.

また、中略以降、body の部分では、生成した本体部分の内容をバイトごとに書き込み、このようなフォーマットで時たま見かける、中途半端なバイトを0 で埋める作業も、うまく行われています.
ld/link.c: L51 in new_object_data() にて、16 の倍数になるようにして、そこからの不足分を0 にて埋めています.

    obj->entire_size = roundup(data_size, 16);

ここからは、いくつか読解に苦労している点を順不同にならべていきます.

Vector なり Map なり

眺めていると、Vector やMap などといったデータ構造が存在しますが、これは ld/vector.c などを参照すればよいかと思いますが、鮟鱇さんにより実装されたものです.
細かな点は ld/ 以下に記されていますが、関数名などから自然と内容は把握できるかと思います.

シンボルの探索

ld/link.c にあるsearch_symbol_maybe() にて、それぞれのELF オブジェクトごとに線型探索が行なわれています.

従って、時間がとてもかかり、一般的なライブラリ ( 例えば /usr/lib/libc.a の内容など) を読込めるようにするためには、ここの計算量を下げる必要があります. [6]

& 0xff

例えば link.c: L297 など、至るところに & 0xff と記されています.

わざわざこのような処理が加えられたのは、aqcc に unsigned char が実装されておらず、char と記すと signed char を意味するためのようです.
[7]

aqlibc

aqlibc というのは勝手に名付けました. 前述の通り、一般的なC言語標準ライブラリのサブセットが ld/stdlib.c にて実装されています.

malloc() 関数の実装などは、次のように、ただ広い領域を確保してやるのみです. 形式的に free() 関数は実装されていますが、一切処理が行なわれず、確保したメモリが尽きることは想定しないものとなっています. [8]

void *malloc(int size)
{
    static char *malloc_pointer_head = 0;
    static int malloc_remaining_size = 0;

    if (malloc_pointer_head == 0) {
        char *p = brk(0);
        int size = 0x32000000;
        char *q = brk(p + size);
        // printf("init %d\n", p);
        // printf("init %d\n", q);
        malloc_pointer_head = p;
        malloc_remaining_size = size;
    }

    // 中略: バグの検出

    char *ret = malloc_pointer_head + 4;
    malloc_pointer_head += size + 4;
    malloc_remaining_size -= size + 4;

    // 中略: デバッグ用コメント
    return ret;
}

また、現状 printf() 関数が標準エラー出力に出されず、標準出力に出されるという制限があります.

以上、aqcc リンカ部分のソースコードについて述べてきました.
aqcc の特にリンカ部分は、350行程度しかなく、付加的な機能が少ないために、リンカの概要を掴むのによいと感じさせられました. 筆者は理解できていませんが、プログラミングにある程度慣れている方なら読み易いのではと思いますし、そこまではしなくとも、実際に試したり、fork してみるなどはいかがでしょうか.

以上、 カオスの坩堝 Advent Calendar 21日目の記事でした[9].


1. 人のソースコードでPVを稼ぐ悪い戦略です.
2. それでも生成した実行ファイルが動くのは、ひとえにELF というフォーマットの柔軟さゆえでしょうか.
3. malloc() にて確保したものをあえて free() しないという考え、筆者には常識外れに感じて受け入れられずにいるが、話を簡単にできるので賢い.
4. unsigned char や (細かな) #if などが実装されていません.
5. このようなソースコードをよく混乱せずに書かれたな、という気持ちになります. すごい.
6. しかしながら、静的リンクであっても実装するのは困難だと思われます. /usr/lib/libc.so はリンカスクリプトを用いた他のファイルへの参照に過ぎず、ELF 形式ではありません.
7. 短期間で自己完結 (self-hosting)を実現するためにはやむをえない回避方法だと思います.
8. この制約も、いきなり難しいものを実装しようとせず、簡単なところから始めるという良い習慣の結果だと感じます.
9. 鮟鱇さんすごいな、と改めて感じさせられました.
]]>
https://anqou.net/poc/2018/12/21/post-2448/feed/ 0
いまなんしとーと? – 京大クラウドストレージ と Campus ICT Labs https://anqou.net/poc/2018/12/07/post-2231/ https://anqou.net/poc/2018/12/07/post-2231/#respond Thu, 06 Dec 2018 16:13:27 +0000 https://anqou.net/poc/?p=2231 別の記事を書くつもりが挫折したので、軽い記事でも.

大学の課題は、高校までの課題と違い、WordファイルやPowerPoint ファイルなど、電子的に提出することが多くあります. その際、うまくファイルを整理できなかったり、データを失くしてしまう方を見かけます.

そこで、インターネット上に自分のファイルを秘密な形で保存して、どこからでも触れるようにしよう、という「ファイルストレージサービス」があります. このようなサービスは別に新しいものではなく、Google Drive やDropbox が利用されることが多いようですが、今回は京都大学の情報環境機構が公式で提供しているクラウドストレージを紹介します.

京都大学の学生全員に交付されるECS-ID を所持していれば、初めてでも手軽に利用できるというのはメリットです. また、Google Account が突然凍結されるなどといった心配をせずにデータを保全でき、Google などの他業者に自分の名前や学生番号が入った情報を渡さずに済むという利点も大きいです.

まずはともあれ、クラウドストレージ https://storage.ecs.kyoto-u.ac.jp/ にアクセスして、いつものECS-ID でログインしてみましょう. すると、下のような画面が表示され、(恐らく) いくつかの試験用ファイルが入っているはずです. このファイルは必要という訳ではありませんので、後述の方法などで削除してしまってもかまいません.

まずは、手元にある課題のうち、直近提出なものをアップロードしてみるなどすればよいでしょう. ファイルをアップロードする際には、右上の「+」にあるアップロードボタンからアップロードするなり、マウスでこの枠内にドラッグしたりするだけです. 削除するときは、右側の「…」というボタンを押して、削除ボタンを押します. これだけです. あとは、画面左下にある容量制限に気を使いつつ (公式サイトにはどのくらいなら使ってよいか明示されておらず、日々アップロードして参照して、必要が無くなれば削除して、と日々利用できるかと思います.

右側にある「…」のボタンを押すことで、ファイルの削除などができる

 

さて、複数人でプレゼンテーションを行なうときなど、事前に資料を共有したり、共同で編集してブラッシュアップを図ることがあります. それにもクラウドストレージは最適です.

共有ボタンを押してみると、

クラウドストレージにおける共有機能の設定

そこの入力欄にチームメンバーのメールアドレスを指定してみると、次のようなメールが送られてきます. そして、指定した方とだけ、そのファイルを共有して、設定によっては相手にも編集してもらうことができます.

あなたにファイル共有が行われました。

»5.png«を開く: https://storage.ecs.kyoto-u.ac.jp/s/(複雑なURL)


Kyoto University Storage Service for BYOD –

ダウンロード画面. 共有された相手からはこのように見える

なお、赤の他人に見られる可能性は0 とはいえませんので、有効期限を設定したり、パスワード保護を掛けてみたりするのも良いかと思います.

また、Google Drive などを使い慣れているとは、自分のPC やスマートフォンとの同期をしたいと思われるかもしれません. それも、公式クライアントを利用すれば簡単です.

Arch Linux ではpacman -S nextcloud-client とするだけで簡単に導入でき、それ以外の環境でも、クラウドストレージのシステム本体である、のNextcloud の公式サイトから入手できます. 手元のフォルダと手動自動問わず同期できるので便利です.

クラウドストレージとの同期

ちなみに、この同期技術の応用として、京都大学内のOSL では、クラウドストレージが最初から設定されています. Word やExcel の保存先として、クラウドストレージを普通のファイルを保存するのと同様に利用できます.

ここでは紹介しませんでしたが、クラウドストレージのいわば「ベータ版」とでもいうべき 京大Nextcloud が別に公開されています. こちらでは、クラウドストレージの元になっているNextcloud の新しい機能が試しに動かされています. 例えば、Web上で直接WordやExcel、PowerPointのファイルが編集できるよう改良されています. クラウドストレージにも導入される可能性があり、期待が持てます. など、バックアップは取らないなどと明示されており、利用の際にはクラウドストレージも併用するのが望ましいかと思います.

京大Nextcloud でのスプレッドシート編集

なお、この京大Nextcloud を紹介している、 情報環境機構のCampus ICT Labs というサイトでは、「京都大学のためのICTシステム」の実験場として、新しいWebサービスの実験が多数行なわれています. 学生の発案により採用されたサービス (記事タイトルの元になった、PENGUIN という11月祭の管理サイトなど) もあるので、興味のある方はコンタクトを取ってみるのもいかがでしょうか.

以上、京大クラウドストレージを概観してきました. Google Drive やDropbox より有益な、この京大クラウドストレージが普及することを願っています.  Advent Calendar 2018 6日目の記事でした.

]]>
https://anqou.net/poc/2018/12/07/post-2231/feed/ 0
すきあらば自分語り: プログラミングとの出会い ~torikoriの場合~ https://anqou.net/poc/2018/12/02/post-2004/ https://anqou.net/poc/2018/12/02/post-2004/#comments Sat, 01 Dec 2018 15:49:17 +0000 https://anqou.net/poc/?p=2004 この記事は2018年カオスの坩堝アドベントカレンダー の一環として書かれたものです. 0日目になるのでしょうか.

昔プログラミングに触れたきっかけから、どんな技術言語に触れてきたのかを記してみた. すきあらば自分語り 〜鮟鱇の場合〜 の真似であろうか.

ことはじめ

最初にプログラミングらしきものに触れたのは、コマンドプロンプトであった.

当時からPC を触るのは好きで、窓の杜やVector を眺めて暇潰しをしていた. 新しいフリーソフトを入れるべく、親にねだっては断わられていた. ならせめてと、PC に搭載されているアプリケーションを触りたかった. Office など、いろんなアプリケーションの機能を調べては遊んでいた.

スタートメニューに映える怪しいアイコン. 家庭内皆が使っていたパソコンであったが、あるとき押してみた. 真っ黒な画面によく分からない英語、やって操作するのか分からない. 叱られる. 後悔した.

案の定家族に叱られ、「X」ボタンによって長いこと封印していた.

が、あるとき、とあるきっかけで、コマンドプロンプトを知る機会、家族に理解させるものが現れた. そのころだったか、Windowsコマンドプロンプト スパテク242 Vista/XP/2000対応 という書籍を入手した.

黒画面がこれほど楽しいものとは、と. これに掲載されているものを適当に使いながら、アプリランチャーやタイマーや占いなど、無意味なソフトウエアを量産していた. 思えばこれが最初のプログラミング経験であった. @rem off という決まり文句は今でも覚えている.

そうこうしているうちに飽きが来たので、猫でもわかるWindowsプログラミング と 猫でもわかるC言語プログラミングなる書籍を購入した. そこでC言語とWindows APIの基礎を学び、掲載されているサンプルを動かしてはすごーいと言っていた.

そこで何か作るべく、MSDN を日々眺めるようになったが、英語が壁になった. Windows API の解説は、大半が英語のみであった. 拡張に拡張を重ねられたAPIは、どれが正しいのかもよく分からなくなっていた. リンク切れにも苦しんだ. Google 翻訳で頑張ってみたが、挫折.

それでも収穫がない訳ではなかった. Microsoft が推していた .NET Framework の存在を知れた. Visual C# 2008 Express Edition などを入れては、Visual Basic 中学校++C++; // 未確認飛行 C あたりを眺め、C#やVisual Basic といった.NET Framework まわりを触っていた. 当時流行りのリボンUI (Microsoft Office 2007から導入された、様々なボタンをタブ状に並べたもの)  を実現しようと四苦八苦するなど、奇っ怪なデザインを作って妄想するなどしていた.

そこまでして私は何を書こうとしていたのか、当時全く分からなかった. 一般にプログラミングに触れる動機として、「○○を作りたい」があるだろうが、私には全くなかった. ただPCを触っていたかった.

ゲームは禁止されていたし興味もなかった. 何を作るべきか. 管理者鮟鱇さんのようにコンパイラを書く、などということは当時の私には想像さえつかなかったし、いざ例えば Visual Basic とC# の簡易コンバータを作ろうとしても、規模が大きすぎ、途中まで作って途方に暮れやめてを繰り返していた.  Silverlight やWebアプリケーションでも遊ぼうとしたものの、家族を説得できず挫折.

Unixとの出会い

.NET Framework で何も作れず心が重い中、私を魅了していたのはAppleのウエブサイトであった. Windows とは違う新たな世界. 魅了させるに十分であった.

貯金のほとんどをはたき周囲を説得し、Mac mini の一番安いモデルを購入した.

が、実際に触るようになると、UIやアプリケーションではなく、Unix としての側面ばかりが気になる. OS X ハッキング! という連載にもろに影響されていた. NeXTSTEP なるOS があるらしい. その名残り、Unix としての姿、あるいはObjective-C にCocoa API にXcodeなどといった先進的な開発環境.

まずXcode を入れてみたが、ここでも英語に阻まれた. man を打っても分からない. --help と叩いても英語ばかり. Apple の開発者ドキュメントはMSDN 以上に英語ばかりであった. 手動メモリ管理がよく分からなかった. 幾度もSegmentation Fault で悩んだ. 挫折. そもそもそこまでして何を作りたかったのか.

FSFとOSASKそしてVimに誘惑され、SmalltalkやLispを渡り歩きつつ、Vim script をひたすら書き、VimやOS自作のコミュニティ、それと自由ソフトウエアの沼に溺れた青春時代を過ごしたが、続きはまた今度.

]]>
https://anqou.net/poc/2018/12/02/post-2004/feed/ 1
drawgraph.tcl をWindows 環境で利用 https://anqou.net/poc/2018/10/20/i_am_sorry/ https://anqou.net/poc/2018/10/20/i_am_sorry/#respond Sat, 20 Oct 2018 08:25:15 +0000 https://anqou.net/poc/?p=1961 torikori です. 風邪により寝込みながらこの記事を書いています. どうかみなさまお気をつけて.

さて、表題の通り、Windows 上にてTcl/Tk を動作させる方法について、drawgraph.tcl をもとにして説明します.

Tcl/Tk とは、Tcl スクリプト言語とTk というGUI を利用するためのツールキット、そしてさまざまな拡張の連合体です. 今回インストールして利用するのは、その中でもTcl/Tk のインタプリタである「wish」です. ここからでも様々に出てきますが、どうやらインストール方法によって「wish86s」「wish」「wish8.6s」など、さまざまなファイル名があるようです. 手元でそれらをうまく網羅できなかったので、読み替えてくださればと.

Tcl/Tk の公式サイト「Tcl Developer Site」 http://tcl.tk/ におけるダウンロードページ http://tcl.tk/software/tcltk/を読むと、Windows 上においては、さまざまなインストール方法が記されていることがわかります. これは、Tcl/Tk は本来Unix系オペレーティングシステム上にて開発されたものであり、Windows 向けにはさまざまな移植の取り組みが行われているからです.

以下のように、いくつか手段がある (これら以外にもあるかと思います) ので、わかりやすいと思われるものを試してみるとよいかと思います.

以下では、Cygwin/MinGW 環境中での作業と、Windows 上でブラウザー等を用い行う作業が混在します.
[ActiveTclがあるディレクトリ] などと示したりしますが、Cygwin/MinGW とWindows 上のエクスプローラーやブラウザではディレクトリの表記が異なりますので、注意が必要です.

Windows 上での「ダウンロード」ディレクトリを例にして説明します。

Cygwin上では /cygdrive/c/Users/(Windows のユーザー名)/Downloads に 対応します. MinGW 上では /c/Users/(Windows のユーザー名)/Downloads となります.

さらに、「C:\Program Files」をさすときなど、空白が含まれたディレクトリ名を扱うときには、Cygwin では  /cygdrive/c/Program\ Files/、MinGW では  /c/Program\ Files/ と入力してください. 空白文字の手前に’\’ (バックスラッシュ、あるいは円記号) を入力する必要があるので注意が必要です.

Cygwin/MinGW 環境にてソースコードをビルド

ここでは、Cygwin/MinGW 環境にて、Tcl/Tk をソースコードをビルドし導入する方法を説明します.

まず Cygwin や MinGW 上にて、GNU C Compiler や autoconf, automake,  make, tar, grep, gettext, xproto (X11 の基礎的ヘッダファイル群.) という必要なパッケージを導入してください. ただし、一般的なインストール状況ならば、導入はすでになされているかと思います.

そして、Tcl/Tk の公式ウエブサイトから、「Source Distributions」 (ソースコードの配布ページ) に行き、Tcl 8.6.8 (バージョンが変わっているかもしれません. その時点での最新版を利用すればよいかと思います.) および Tk 8.6.8 の 「Gzip format」をダウンロードします. (「Gzip 形式はZIP 形式などに代表される圧縮形式の一つです. Cygwin 上などでは、ZIP形式よりも扱いやすいので、ここではそちらを利用しました.)

以下では MinGW をもとにして説明を行いますが、Cygwin でも同様にできるかと思います. また、Tcl/Tk を [MinGWやCygwin のホームディレクトリ]/tcltk に導入することにします. (別のディレクトリに導入しても問題なく動作するかと思いますが、日本語や空白が含まれるディレクトリは避けておくのもよいかもしれません. 日本語回りのトラブルを避けるために.)

$ cd [Tcl/Tk をダウンロードしたディレクトリ]

$ tar xjf  tcl8.6.8-src.tar.gz (説明: 注意: バージョン番号が異なるかもしれません)

$ tar xjr tk8.6.8-src.tar.gz (注意: バージョン番号が異なるかもしれません)

$ cd tcl8.6.8/win/ (説明: まずTcl スクリプト言語を導入します. windows 向けの設定が含まれているディレクトリに移動します)

$ ./configure –enable-shared=no –prefix=$HOME/tcltk (説明: Tcl をビルドするために、インストール先を設定し、このPC の環境を調査してもらう. 数分ほどかかる. –enable-shared=no というのは、共有ライブラリまわりにて無用なトラブルを防ぐため.)

configure: creating ./config.status
config.status: creating Makefile
config.status: creating tclConfig.sh
config.status: creating tcl.hpj
config.status: creating tclsh.exe.manifest

などと表示されればうまくいっています.

$ make (説明: ビルドします. ここで「エラー」などと表示されなければ成功です. 手元では数十分ほどかかりました.)

$ make install (説明: 先ほどのディレクトリにTcl をインストールします.)

$ cd ../../tk8.6.8/win/ (説明: 次にTk スクリプト言語を導入します. windows 向けの設定やソースコードが含まれているディレクトリに移動します. )

$ ./configure –enable-shared=no –prefix=$HOME/tcltk –with-tcl=$HOME/tcltk (説明: Tcl をビルドするために、インストール先を設定し、このPC の環境を調査してもらう. –enable-shared=no というのは、共有ライブラリまわりにて無用なトラブルを防ぐため. –with-tcl= として先ほど導入したTcl のありかを設定.)

$ make (説明: ビルドします. ここで「エラー」などと表示されなければ成功です. 手元では数十分ほどかかりました.)

$ make install  (説明: 先ほどのディレクトリにTk をインストールします.)

$ ls $HOME/tcltk/bin/ (説明: Tcl/Tk のインストールができたことを確認.

ここに 「wish86s(.exe)」のような「wish」という名前の実行ファイルがあればインストール成功です.

これで導入できました.

そして、次のようにすれば動作するかと思います.

$ $HOME/tcltk/bin/wish86s /drawgraph.tcl [引数をつけても大丈夫]

筆者としては、この方針が最も簡単であろう、と思います.

なお、Tcl/Tk が不要になれば、インストールしたディレクトリを

$ rm -rf [インストールしたディレクトリ]

にて削除すればよいかと思います.

ActiveTcl

https://www.activestate.com/activetcl としてActiveState 社がWindows など様々なOS向けにTcl/Tk やその拡張をひとまとめにして配布しています. 公式サイトにあるように、Business Editon などは有料ですが、Community Edition は無料で利用できます. この Community Edition を導入するのもよいかと思います.

その際英文のライセンスを (好きに利用してよいわけではありません) 注意深く読む必要があります.

ダウンロードしてライセンス条項に同意し、インストールしたのちには、wishなるTk のインタプリタが導入されているはずです. なおここで、バージョン番号が別途付けくわえられ、wish83 などとなっているかもしれません。

まずやるべきは、Cygwin/MinGW 上にて

Cygwin/MinGW の端末上にて、以下のようにすると動作するかと思います.

$ cd [drawgraph.tcl のあるディレクトリ]

$ [ActiveTclのディレクトリ]/wish ./drawgraph.tcl (注意: バージョン番号が異なるかもしれません)

TclKit/KitCreator

TclKit はhttp://tclkits.rkeene.org/fossil にある、Tcl/Tk を単一実行ファイルとして利用できるようにするプロジェクトです.  また、KitCreator はhttp://kitcreator.rkeene.org/fossil/index にあるように、TclKit を簡単にビルドし導入するためのビルドシステムを運用するプロジェクトのようです.

TclKit のダウンロードページ http://tclkits.rkeene.org/fossil/wiki/Downloads から、「Tk が含まれている」Windows 向けのファイルをダウンロードして、以下のようにすると実行できます. ここで、wish という名称にはなっていませんが、tclkit-[バージョン番号].exe そのものがwish に該当するようです.

$ cd (drawgraph.tcl のあるディレクトリ)

$ (先ほどTclKit をダウンロードしたディレクトリ)/tclkit-8.6.3-win32-x86_64.exe ./drawgraph.tcl

なお、このプロジェクトにおいては、Tcl/Tk の公式サイト「Binary Distributions」の欄にリンクは張られているものの 、ActiveState のような商用ベンダーがサポートしているわけではなく、かつあまり利用されていないようです. といいつつ筆者も(大変申し訳ないのですが) ソースコードを読み解かずじまいですので、セキュリティ上安全である、と自信をもっておすすめすることができずじまいでいます.

Tcl/Tk on Cygwin

この方法については、様々なところに記載されていますので省きます.

Xサーバーを「事前に」起動させ、それを確かめた上で wish を動かすように気を付ける必要があります.

./drawgraph.tcl として起動させる方法

以上の説明で drawgraph.tcl 自身を問題なく利用できるかと思います. しかしながら、wish などを毎度毎度入力するのは煩雑かと思います. そこで、Tcl/Tk のスクリプトファイルの1行目を次のように書き換えて、実行権限を付与うようにすると、./drawgraph.tcl とだけしても、動作するようになるかと思います. まず、次のようにして、インストール先がどこにあるのか、その正確なパスを把握します.

$ echo $HOME/tcltk/bin/wish86s.exe (説明: まず wish86s.exe がある場所を把握)

/home/torikori/tcltk/bin/wish86s.exe (例です)

その結果を把握したうえで、drawgraph.tcl の一行目をそのように書き換えます. 最初に「#!」をつけることに注意が必要です.

#!/home/torikori/tcltk/bin/wish86s.exe

そして、以下のように実行権限を付与してやると、./drawgraph.tcl とするだけで実行できるかと思います.

$ chmod +x drawgraph.tcl (説明: 実行権限を付与)

$ ./drawgraph.tcl [引数をつけても大丈夫]

うまく動作しないなどあれば、ここのコメント欄あるいは(筆者の連絡先を知っている方は) LINE などにでもコメントをいただければと思います.

]]>
https://anqou.net/poc/2018/10/20/i_am_sorry/feed/ 0
2年前期の感想 https://anqou.net/poc/2018/08/25/post-1884/ https://anqou.net/poc/2018/08/25/post-1884/#comments Sat, 25 Aug 2018 13:47:30 +0000 https://anqou.net/poc/?p=1884 torikori です. 今期の感想を述べます. なお全部の科目については書かないので悪しからず.

月1情報符号理論

修正シャノンモデルに基づいた情報符号の取り扱いを学ぶ、というよりはある種雑多な授業.

正直全然関心が持てずにいる. ちょこちょこ符号化の考えが必要になるので、理解しないといけないのだが.

スライドをもとに授業が進み、煩雑な計算も多く、授業に能動的に参加しにくかった. まともに復習しない性格がなので、まともに理解できずじまいだった.

試験はできなかったのに、単位修得はできた. なぜ.

月2線形代数学続論

Jordan 標準形をはじめとしたさまざまな話題を雑多に扱う授業.
努力も才能もありそうな先生が線形写像をはじめとして、あらゆる概念や証明を理解させようとする努力を感じた.
毎週細かく書かれた資料が配布され、証明には毎度毎度形式的処理といわゆる「お気持ち」などなど盛りだくさんであった.
質問をして数十分議論をしてしまったときは申し訳なくなった.

とはいいつつ、試験二週間前に復習してから、ほとんど勉強せず、成績はボロボロ.

月3,4プログラミング演習

C言語とその数値計算への応用についての授業であるが、
ほとんど講義はなく、実質ひたすら出された問題を解くだけであった.

ひたすらにつらかった.
教科書を読んでも何も分からない.
ひたすらに間違えてバグらせて早期退出できない. 毎度毎度点数が悪い.

期末試験代わりとしての期末レポート課題なるものを17ページも書いてしまい、後悔している. 無駄な努力だった.

火2数理論理学I

命題論理と一階述語論理、また計算理論への応用を学ぶ.
論理学自体の分かりにくさなのか、テキストの分かりにくさなのか、私の理解力のなさなのか、どれなのかよく分からなかった.
練習問題を解いているうちに、理解できるようになるはずなのだろうが、解けない問題が多かった.

ただ、Prolog 言語の話が興味深かった.

火3,4基礎数理演習

一回生のうちに学習した内容について、それらについての問題を毎度解き、理解を深める授業.

つらかった. いかに授業内容を忘れたのか. まジャイロ現象をまともに説明できなくなっていたところはとても厳しい気持ち.
計算を毎度毎度間違える. 毎度毎度間違えては×がつく.
Teaching Assistant には質問でき、疑問点を解決できるはずが、まともに質問できなかった. 何を尋ねるべきか全くわからない.

結局93,4点しかなかったのでは.

水1電気電子回路入門

アナログ回路とディジタル回路の基礎を学ぶ.
毎度毎度授業中に練習問題を解きその解説が行われる. 何かしら高等学校における授業形態に近いのではないか.
また、突如として「オンライン講義」なるインターネット上での授業が行われていた. 個人的にはそこまで好きにはなれなかったが.

ちょこちょこ体調を崩して休み、まともに授業内容を理解できなかった. 高校までの学習分野と被っていたことで何とか単位を修得できたが、非線形素子の特性グラフをまともに覚えていない.

水2システム解析入門

後述する非線形動力学の基礎編のような何か. モデルをもって、線形化したりしてそれの解析を行う、またその解析の道具としてのラプラス変換などを学ぶ.

どうもスライドを教員が説明してゆく形式の授業が本当に苦手. スライドだけ見て納得したつもりになっても、いざ問題をとこうとすると解けない. なにも頭に入っていない.
そのような意味で、授業期間中に何度か演習問題の解説をすることがあったのは、良かったのでは.
試験、計算間違いをたくさんしていた.

水3論理システム

雑多な授業. 一応論理回路設計に向けての理論が主だったようだが、知識としてしか頭の中にない. 今後利用することは果たしてあるのだろうか、という気持ち. 単位習得は何故か容易だった.

水4熱力学

おそらく理学部向けの授業であろう、ただ公式を教えるのではなく、背景を「実験的手続き」をもとに考えてゆくので、
分かりやすかった. 学生が抱いていた質問に対し別紙を作成して対応するほどの熱い思いがこもった授業.
また、毎度出されるレポート課題を解いてやり、概念をしっかりと理解できるようになっていた.
さらには、試験前には、過去問題を解くことを教員側から勧められ、それを解くことで理解を深め単位を修得できるようになっていた.
多少はエントロピーの気持ちを納得できたかもしれない. おそらく今後もよく使うことになるので、授業ノートなどは整理して残しておきたい.

なお、「第二種永久機関に見えるもの」を考えよ、などという問題など、考えてもわからないレポート問題があまりにも多かった.

試験問題、過去問題と比べて穏やかだった気がしているのに、まともにできなかった.

木1確率論基礎

今期勉強しなかった科目の代表例.
確率の取り扱いについて、その基礎を学ぶ. 基礎なので、確率測度の概念や、測度の概念はさらさらと流れていった.

それぞれの証明が行間なくすらすら読み解けたので、これは何とかなるのでは、などと思い込んでしまい、レポート課題もまともに解かなかった.

試験前に配布された練習問題は解いたものの、それしかしていないので、なぜ単位修得できたのかよくわからない.

レポート課題最後の問題は興味深かった.

木2グラフ理論

グラフ理論そのものと、さまざまな応用について述べる授業.

毎度毎度授業中に「ミニ演習」と題し証明を考えたり、ひとまずアルゴリズムを手作業で実行してみるうちに、自然と身につく、わかりやすい授業であった.
今まで幾度か Dijkstra 法の解説を耳にしてきたが、今までで最も明快であったと思う.

試験については、出題範囲が極端な印象.
あと、様々な噂が飛び交っているようですが、某研究室は悪いところばかり、とは言えないとも感じている.

木3微分積分学続論I

テーマはベクトル解析であったはずだが、1回生の微分積分学の復習が長く続き、結局焦点がよくわからない雑多な授業だった.
高次元における外積の扱いについて触れずじまいだったのが残念.

毎度のレポート課題を復習すれば問題なく試験も解けるはず、なのにまともに解けなかった. つらい.

金2量子物理学I

今期の上回履修その1

よい. 大変よい.

量子物理学に必要な線形代数の復習から始め、一粒子系の基本、井戸型ポテンシャル、不確定性原理の証明などを通り、散乱理論の概要にまでゆく授業.

量子物理学に対して取っ付きにくい印象を抱いていたが、毎度毎度ゆったり授業で進み、取っ付きにくさが解消された.
Hilbert 空間の定義を自明としないなど、あまりに丁寧で、授業を受けているこちらが申し訳ない気持ちになった.

試験直前に多量の練習問題が配布され、それを解くのに追われていた. 試験は拍子抜けするほど簡単だったのにまともに復習してないせいでほとんどできなかった. なぜ単位があったのか. 余計に申し訳なくなった.

金3非線形動力学

今期の上回履修その2

よい. 大変よい. よい. 大変よい.
最高です.

さまざまな現実世界の問題に、モデル化がどのように役立つか、またそれに必要な数学の話.
全般的に面白かったが、特に数理生態モデルやカオスの話など、なぜそうなるのか想像もつかないことが、どんどん説明ついてゆく過程が特に楽しい.

また、板書がカラフルでどれが重要でどれが補足なのかわかりやすかった.

地震の影響により、ネットワークに対する考察の話が飛ばされてしまったのは残念だったが、仕方ない.

ちなみにここまで言っておきながらA+ じゃないです.

成績について

今期の学期GPAは四捨五入して 3.8 でした.

そもそも試験問題が解けないと何かを学んだことにはならないし、
与えられたものを学んで試験で解くだけ、ただそれだけ、なのに、それさえまともに出来ていないのがよくわかる.

授業内容さえ理解できないということは、そもそも何かしらの物事を修得する能力がない、意志薄弱 だと改めて思い知らされました.
授業とそれ以外は別物だ、という主張をする人も見かけますが. それはおかしい.

18コマ34単位分しかなかったのに、その授業内容さえ理解できなかった. それだと、今後論文を頻繁に読むような状況ではどうするのか. まともに文章読み理解できないのに、研究なんてとても遂行できないのは当然. 大学院行く資格がないのが再度痛感させられた. つらい.

試験で問題が解ける人は偉いです. 本人は意識していなくとも. そう強く思います.

といいつつも、こう愚痴をいっていても全く建設的ではなく、今後もやっていくしかないのですが……

]]>
https://anqou.net/poc/2018/08/25/post-1884/feed/ 1
8月10日 https://anqou.net/poc/2018/08/10/post-1807/ https://anqou.net/poc/2018/08/10/post-1807/#comments Fri, 10 Aug 2018 14:50:43 +0000 https://anqou.net/poc/?p=1807 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│自│分│読│な│た│ど│え│か│な│に│き│ │8│
│分│か│ん│ん│べ│う│も│れ│や│し│ょ│ │月│
│が│ら│で│ど│る│や│の│が│ま│き│う│ │1│
│い│な│も│ │か│っ│を│ │さ│へ│は│ │0│
│や│い│ │ │が│て│ │ │れ│び│ │ │日│
│だ│ │ │ │ │ │ │ │た│に│ │ │◎│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

]]>
https://anqou.net/poc/2018/08/10/post-1807/feed/ 1
8月9日 https://anqou.net/poc/2018/08/10/august_9_2018/ https://anqou.net/poc/2018/08/10/august_9_2018/#comments Fri, 10 Aug 2018 02:50:58 +0000 https://anqou.net/poc/?p=1804 申し訳ありません. 遅刻しました…

さて、ミッフィーに腹パンされたいさん、という方がいらっしゃいます。
その方の発言をお借りして、今日の日記を書き残してみることにします.

昨日は、人生終了しました.
平凡に過ごしているだけで、何もやりませんでした.

(「人生終了」という筆者にぴったりな言葉を一度使ってみたかった….)

]]>
https://anqou.net/poc/2018/08/10/august_9_2018/feed/ 1
8月6日 https://anqou.net/poc/2018/08/06/post-1772/ https://anqou.net/poc/2018/08/06/post-1772/#comments Mon, 06 Aug 2018 14:47:31 +0000 https://anqou.net/poc/?p=1772 うっすらとした記憶であるが.
小学生の頃、この今日という日は夏休みではなかった. 「中間登校日」などと呼ばれていたであろうか、児童皆集まり、授業が行なわれた.
いわゆる「平和学習」に時間が割かれていただろうか、そんな登校日であった.
なぜか. 8月6日というのは、広島に原子爆弾が投下された日付として、歴史に刻まれているから、忘れ去られつつあるが. いわゆる「中だるみ」を防ぐから、宿題の積み残しを確認したいから、などであろう.
今はそんな「登校日」などもなくなっていて、夏休みというのは最初から終わりまで連続したものとなっている. それが良いことなのかは分からない.
そもそも、私にとって、数年後には、夏休みなどなくなる. そんな過去と未来に思いを馳せつつ.

]]>
https://anqou.net/poc/2018/08/06/post-1772/feed/ 1