今、Pythonがアツい。
俺の中で。
そんなこんなで,Python はじめました。
CGI 的な Hello World を書いて MySQL への接続を試みた今日
Python は複素数が型として定義されているとの噂を聞き Python は出来る子だと確信した。
虚数単位が j ってところにコンピュータらしさを感じた。(´∀` )
ソースを眺めていると何となく関数型言語っぽいと思い twitter でぼやいていたら・・・
関数を引数に関数を定義できるというお話を聞いた。
関数を引数にする関数 (@Python)
関数を引数にする関数の定番といえば・・・Σ (シグマ)
私が高校のときにはシグマを関数なんて思ってなかったけどね。
1 #!/usr/bin/python 2 def sum(f, k, n): 3 sum = 0 4 for i in xrange(k, n+1): 5 sum += f(i) 6 return sum 7 8 def func(x): 9 return 2*x-1 10 11 print sum(func, 1, 8) # return 64 12 print sum(func, 1, 11) # return 121
Σ(2k-1) の計算ですね。
k=1 から n までの計算で n^2 になる奴ですね。
知らない人は覚えてね。センター試験終わったけど。
network/interfaces, resolv.conf, Ubuntu にて。
一応,2009年の初日記なので,明けましておめでとうございます。
新年の抱負とか日々頑張ってる (たぶん) ので正直でどうでもよいですが,去年を振り返ることは大事。
要約するとあと5倍くらい頑張れ,俺。
さて,新年一発目のトラブルについて。
@ Ubuntu Server 8.04
IP アドレスが固定にできないという事態
固定 IP の設定 @ Ubuntu 8.**
IP アドレスなんて,干支せネットワークインターフェースで
iface eth0 inet stat(ry
と書けば良いだけ・・・
GUI で設定? vi だろ? (vi 使う俺ってギーク)
そう思っていた時期が僕にもありました。
原因は,Network Manager のバグらしい・・・。
Network Manager の説明は割愛。(だって僕,知らないもん。)
俺の検索能力が低いせいなのか・・・あんまり情報が見つからなかった。
見つけた解決策
$ sudo update-rc.d -f NetworkManager remove
と呪文を唱えてから,/etc/network/interfaces と /etc/resolv.conf を適切に設定すればいいらしいぞ。
なんで? resolv.conf を・・・。
言われた通りに設定しようと思ったら,前に自分で変更した内容が上書きされて消えてる。
いつの間にかプロバイダの DNS だけになってた。(初期状態)
ファイルの所有グループが "dhcp" になってるのが気になる。
$ sudo chgrp root /etc/resolv.conf
良いのか?
参考:
Ubuntu 8.10 で固定IPを設定する(再挑戦)CommentsAdd Star | 山河に在りて
http://d.hatena.ne.jp/m_yanagisawa/20081113/p1
そんなものはありません。
最近のLinuxにはGCCとか開発環境的なものがデフォルトで入ってないのでしょうか?
おじさんカスタマイズとか面倒だからデフォルトで適当に入れておいて欲しい。
(Firefox ですら,ほとんど素の状態で使ってる。)
chkconfig が Linux 共通コマンドじゃない事に衝撃を受けた。
Red Hat 系列のコマンドだそうで・・・
はじめて触った Vine Linux が個人的な基準になってる。
おかげさまで,CentOSとかFedoraの方が使いやすい気がする。
でも,デザイン的にUbuntuが好き。
でもでも,CUIで使うのであんまり意味がないw
何だかんだで,オレンジが好きなだけかもしれない。
プログラミング
初心者向けの本はいっぱいあるけど,肝心な説明がない。
知り合いの人が最近PHPプログラミングを始めたようで,PHPプログラム暦2ヶ月の自分が何故かレクチャー。
PHPに限らずプログラミング言語の入門書はたくさんあるが,言語の説明がメインの本が多い。
(そんなにたくさん見てないので実際は違うのかも・・・)
プログラムを作ったり読んだりするために必要なお話がほとんど書かれてない。
一般に「論理的思考」とかいわれる奴について書いてない。
アルゴリズムを考えるのはとても難しいので,それに関しての本もたくさんあるが,「論理的思考」についてはまったく触れられていない。
こちらも同じく,サンプルソースに重点を置かれている。
プログラムを書くコツについて重点を置いた入門書がもっとあってもいい気がする。
ちなみに「論理的思考」に括弧がついているのは協調しているわけではなく,2種類の論理的思考があるから括弧をつけているのです。
アルゴリズム
アルゴリズムを考える上で一番重要なのは,手順の細分化。
- 如何に物事の流れを細かく分けられるか?
- 細分化した手順をグループ分け出来るか?
この辺が重要。
そんな訳で,よくある自動販売機のシステムを考える問題をアルゴリズムで悩んでいる彼に出題しました。
ただ一つ問題なのは,自分自身がこれの模範解答を持ってないこと。
- ジュースを選ぶ
- お金を入れる
- ボタンを押す
大雑把に分ければこんなもんだが,再分化したら軽く20くらいのステップが出るはず。
そして,これの上位版が SWC システム。
(上位版と言うか自分の中で最高レベルの問題)
何かと言うと,Secure Water Closet を略して SWC
つまり,トイレのアルゴリズムです。
何でコレがいいのかと言うと,条件分岐がたくさん出てくるから・・・
これも模範解答を用意してないので,今度考えておこう。
100ステップくらい出したいなぁ。。。
実生活で用を足すだけで,100も考えてたら鬱になるから程ほどに・・・w