昔のコンピュータ部では…
私が福井高専の学生だった頃、 入学したてだとコンピュータ部(Computer and Programming同好会)の活動といっても、 パソコンとかはまだ普及していない。
学園祭の出し物といっても、コンピュータ部では、 ラインプリンタに 文字で絵などを描いて配っていたりした。 色の明るさを、手作業で数値化し、印刷する。 色の濃い部分は、複数文字の重ね打ちで濃淡を強調するなどの処理をしている。
その雰囲気を分かってもらうために、簡単なプログラムを作ってみた。
自分の興味のある絵で試したい人は、
- 入力フォームに変換したい画像のURLを入れてください。
http://tsaitoh.net/~t-saitoh/ascii/ - PHPのソースコード
局所変数の配列初期化…
3年のプログラミング応用の採点中。 データのヒストグラムのプログラムで、カウンタ配列の初期化で、 以下の様な書き方があったけど、これじゃデータの0番目だけの初期化…と 減点をしていた。でも何人か同じ間違いしているし、改めて局所変数配列初期化を実験。
int main() { int count[ 4 ] = { 0 } ; // count[0]=0,count[1]=?... : }
ということで、テストプログラム。
int main() { int a[ 4 ] ; printf( "%d %d %d %d¥n" , a[0] , a[1] , a[2] , a[3] ) ; } // 968937824 32767 0 0 との結果。 // しっかりゴミが入ってる。 int main() { int a[ 4 ] = { 0 } ; printf( "%d %d %d %d¥n" , a[0] , a[1] , a[2] , a[3] ) ; } // 0 0 0 0 おぅ、綺麗に0初期化されてら。
定数領域にa[4]全体の初期化データが作られていて、 静的データ領域は0で初期化されていて、 関数に入ってa[]の初期化時に、a[]の4件分の初期化データを memcpy しているんだろうな。
であれば、こんな書き方は?
int main() { int a[ 4 ] = {} ; // 0件分の初期化だぞ... printf( "%d %d %d %d¥n" , a[0] , a[1] , a[2] , a[3] ) ; } // 0 0 0 0 おぅ、綺麗に0初期化されてら...
ふん、K&Rは、動的配列の初期化なんて文法エラーだったんだぞ…
目が疲れてショボショボ…(08/01)
- 07/31 目が疲れてショボショボで、今日は採点途中で打ち止め。どちらにしろ、情構論は出題にヒネリが足りなかったようだ。 #fnct
- 07/30 およっ、OSX Mountain Lion で tgif 動かんじゃん。macports 入れなおしかよ。テスト問題作ってんのによぅ… #fnct
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。
学習障害などの基礎知識と支援
本日、メンタルヘルス講習会ということで、学習障害などを 専門としている富山大学の先生を招いての講習会ということで、
『障害に対する基礎知識と基礎知識と障害学生に対する教育支援の実践例』
個別支援を大切にしながらも、すべての学生に平等であるためには、 支援の組織化が重要。
- 学習障害(Learning Disabilities) / ノートが取れない。論述問題が苦手。
- 注意欠如多動性障害(Attention Deficit Hyperactivity Disorder) / じっとしていられない。考えなしに直ちに行動。
- 自閉症スペクトラム障害(Autism Spectrum Disorders),(自閉症障害,アスペルガー症候群) / コミュニケーション問題,常識的なことを知らない。
関わり方の基本姿勢(SPELL)
- Structure/構造化(環境生活の枠組み作り)
- Positive/肯定的な姿勢
- Empathy/共感(パーソナリティを受け止める)
- Low arousal/低刺激(ストレス刺激を減らす)
- Links/連携(人・組織的な支援)
効果的な対応で基本的な例: スケジュール帳を付けさせる。優先順位をつけ、何をいつまで…
職場支援のノウハウを修学支援に活かす…
- 曖昧な指示や目的不明確な指示を避ける。
- 直接・具体的な手順を示す。
- 口頭指示も文書で補足。
- 相手の感情に過剰に反応するので、落ち着いた表現で伝える。
目付きの悪いライオンさ…(07/26)
- 07/26 目付きの悪いライオンさんが取れるまで、テスト問題作りをがんばろう。 #fnct
- 07/26 [ぼそっ] マルチセット簡略化 #fnct
- 07/23 gccとかは自分でinstallすんのか… "複数のgccを切り替えて使う update-alternatives" http://akihiro-i.net/~akihiro-i/wiki/ind… #fnct
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。
network-managerの罠…
ちょっと前からmulti-coreなサーバの活用として、 仮想化の実験を始めている。試しに debian の Xen パッケージを入れている。 んで、自室のlinuxでも同じ事をしたら、ネットワークが変。 /etc/network/interfaces に記載してもいない、ネットワークが有効になったり、 変なルーティングが出てきたり、分けわからない状態。
よくよく確認したら、xen管理用のvncviewer入れる歳に、gnome,KDEの更新を かけて、network-manager + network-manager-gnome あたりがインストールされ、 GUI環境のネットワーク初期化ツールが原因みたい。
# 絶対、また同じようなことすると思うので、BLOGに書いておく。
サーバ用途なのでチョイチョイネットワーク設定を変更することはないので、 早々に"network-manager" をアンインストール。 代わりに、"resolvconf"を入れる。
# aptitude remove network-manager # aptitude install resolvconf
リストの利点/欠点と双方向リスト
前回のリストを使った集合演算のように、データを連ねたリストは、 単純リストとか線形リストと呼ばれる。 特徴はデータ数に応じてメモリを確保する点や、途中へのデータの挿入削除が得意な点 があげられる。 一方で、配列は想定最大データ件数で宣言してしまうと、 実際のデータ数が少ない場合、メモリの無駄も発生する。 しかし、想定件数と実データ件数が一致していれば、無駄も必要最小限となる。 リスト構造では、次のデータへのポインタを必要とすることから、 常にポインタ分のメモリは、データにのみ注目すれば無駄となる。
もう1つの欠点がシーケンシャルアクセスとなる。 テープ上に記録された情報を読む場合、後ろのデータを読むには途中データを読み飛ばす 必要があり、データ件数に比例したアクセス時間を要する。 一方配列は、どの場所であれ、一定時間でデータの参照が可能であり、これは ランダムアクセスと呼ばれる。O(1)のアクセス時間。 線形リストは、シーケンシャルアクセスを行うため、データ件数が増えれば N番目 データの参照には、O(N)の時間を要する。
このため、エディタの文字データの管理などに単純リストを用いた場合、 1つ前の行に移動するには、先頭から編集行までの移動で O(N) の時間がかかり、 大量の行数の編集では、使いものにならない。
これらの問題に対応するために、1つ前のデータへのポインタを保存する、 双方向リストが利用される。
struct BDList { struct BDList* prev ; int data ; struct BDList* next ; } ;
このデータ構造の特徴を理解してもらうための簡単なプログラムとして、 双方向リストの指定ポインタの前に1件データ挿入を紹介。
void insert( struct BDList* p , int x ) { struct BDList* n ; n = (struct BDList*)malloc( sizeof( struct BDList ) ) ; if ( n != NULL ) { n->data = x ; n->prev = p->prev ; n->next = p ; p->prev->next = n ; p->next = n ; } }