英語で気になっていた、ジャロン・ラニアーによる人間中心主義の提言書「人間はガジェットではない」が、ついに邦訳された.こういうところを突いてくる辺り、ハヤカワ新書の一歩先に行っている姿勢を出す頑張りに、好感が持てる.
ざっくり内容、合わせて読みたいリンク、注目したい点についてまとめておく.
[reading log] ジャロン・ラニアー: 人間はガジェットではない
[mindhack] 想像で食欲を抑制する
newscientistは、科学,テクノロジー,環境問題、社会科学と、結構な量の良質記事を日々提供しているサイトで、毎日に近いペースで見ている.
そんなnewscientistにて、日々の生活のTipsとして、すぐ役に立ちそうな心理学実験が紹介されていた.
常々、私たちは自分にとって好ましくない、できれば避けたい欲求と戦っている.
食べ過ぎ、飲み過ぎ、寝過ぎ、喫煙 ... これからの正月季節には増々抵抗しがたいものとなる..
そんな欲求への対処として、あれやこれや仕組みの力を用いてコントロールしようとするが、どれもうまく行かず,しばしば結局は忍耐に頼りがちだ.
そしてそれはどうやらそれはかなり間違っているアプローチようである.
インナースピーチ素材を活用した語学学習方法
インナースピーチ、インナーカンバセーション、モノローグ
これら心内言語とか内言語の範疇にあるものを、語学学習に活かせないか興味を持っている.
ただ、研究に基づいているようなインナースピーチの学習方法の話をすることは難しいので、
インナースピーチのような文章が使われているものを伝統的学習の素材としよう という、近似的なテーマを置いた.
そのインナースピーチを思しき素材案を、いくつかピックアップしてみたので紹介したい.
読み/書き/そろばん/Computatinal thinkig
どういう経路で知ったか何故か思い出せないのだが、computatinal thinkig
というコンセプトに少し前から注目している.
経路について思い出す限り、
コンピュータ画家:アーロンや、アルゴリズミック・トレーディング、アルゴリズミック・アーキテクチャ等に関連し、
algorithumic thinking とかで検索した結果引っ掛かったのかも知れない。
それとも問題解決に対するcomputational aproachなどで漁っていて掛かったのだろうか.
そんなcomputational Thinkingとはそもそも何なのか. いかにも曖昧なひびきだ.
これらから嗅ぎ分けてたどりついたように、computaional thinkingとは、問題に対する考え方のことのようだ.
つい最近、Googleブログでも紹介されている.
Exploring Computational Thinking
(紹介日本語)
ここでもcomputational Thinkingとは一体何なのか? → それは解釈者の参照資料や思想に依っているよ
ということで独自の "computational thinking" に対する解釈を与えている.
それに触発されてか、自分でも資料を漁ってみたのでまとめておきたい.
[python] PyLitの使い方少し
前回の記事で比較・紹介した、文芸的プログラミング用ツール:PyLitの使い方を少し書いておく.
始めよう
この手のツールは解説を読む前に、とにかく始めてしまうのが効率良い方法だ.また幸い、単にファイルを置くだけなので,インストールでつまずく要素もないと思う.
インストール方法
Downloadリンク先のファイルを、pathの通ったデリレクトリに置くだけ.[python] 一度に複数のパターンを置換する関数(正規表現を置換前文字列とできる版)
一度に複数のパターンを置換したい場合がある。
その場合、pythonクックブックの同名レシピが参考になる.
そのレシピでは、以下のように、1パスで対応できることに意義を置き、問題が定義されている.
単一の文字列の中の複数の文字列パターンを、同時に(1パス)で置換したい
それに対する解法・考察として、以下3パターンが書かれている.
- シンプルな例
- クロージャーを用いた例
- オブジェクトを用いた例
よくある同問題について、問題と対策について分かりやすく記述されており、このレシピは大いに参考になると思う.
[python] 文芸的プログラミングツール:PweaveとPyLitの比較
前回の記事で、python用文芸的プログラミングツールをピックアップし、そして、PweaveとPyLitの2点を候補とした.
ここでは、その2つのツールの主な特徴・prosconsを取り上げ全体的な使用感を比較してみたい.
自分の事情では、PyLitの方が使いやすい という結論が出た.
理由は以下に記すが、簡単に言うと、使用環境/言語を選ばない という至ってシンプルな理由だ.
[python] 文芸的プログラミングのためのツール?
コードとコード解説(解説といっても大したものではない.)文書の管理方法を模索している.
対象言語はpythonであり、特にpython用として, コードと文書管理のためのツールで何かいいものはないかというところだ.
そんな中探していると,「文芸的プログラミング」をコンセプトにしたプロジェクトをいくつか発見した.
それらツールをピックアップしてみる.
先に書いておくと、詳細を比較検討した訳ではないが、
ざっと見てみた中で、特に使いたいと思ったのは「Pweave」,「PyLit」の2つだ.
Interlinguaを学ぶことが,スペイン語を最も早く習得する方法?
「ある自然言語を習得するために、まず人口言語を学ぶ」
というアプローチは人口言語の紹介と共に、よく提言されている.
その例のひとつとして、
ロマンス諸語を学ぶ場合にinterlingaをまず学ぶ
というアプローチがある.
このアプローチをざっくり言うと、「ロマンス諸語によく似ていてより簡素なinterlinguaをまず学んでおけば、コア感覚が養われて他のロマンス諸語を学ぶときはすぐ学べる!」というものだ.
しかし、このアプローチの紹介日本人にとってはメリットが薄いと考えられる.
ここでは、概要の紹介と、メリットが薄そうと考える理由を記載してみる.
※そもそもinterlinguaとは という所は、
wikipedia(english), そして以下の本によくまとまっている.
EngLits.com: Short Versions of Long Books シェイクスピア、オースチン、ディケンズ 等,名作をお気軽に
語学学習を兼ねて、あるいは学習の目的自体でもあり、
古今東西の名作古典を原書で熟読できるようなりたいと思っている.
さらに、これら作品を、音声・電子テキストで得られると尚良い.
そんな折、”名作古典をショートバージョンで”というコンセプトを元に制作されている、
以下のコンテンツを見つけた.
いかにも現代風のつまみ食いコンセプトである
Englits.com
+ ポッドキャスト紹介
[python] python2.6で使用可能なpathモジュール
気軽にstat情報を走査したり、ディレクトリを走査する乗り物スクリプトのような、
findコマンドライクに扱えるものが欲しいと思い、osモジュールやwalkモジュール関連の情報を漁っていたところ、pathモジュールなるものがあるということを以下から知った.
まさに目的として、上記記事で書かれている通りなので喜んで使おうとしたがリンク切れだった..
少し探してみたが、作者による最終更新は結構前であり、オリジナルは2.4までしか対応してないようだ.( The "path" module )
めげずに探したところ、やはり別の方が2.6対応版をGitに上げていた.
古典を読むことは、語学学習に特別な効果をもたらすのか
多言語話者には、古典愛好家/古典語学習者の割合が非常に多い気がしている。
たまたま私が目にした人間・話がそうだった というように、
サンプルに偏りがあるのは重々考えられる。
ただ、その関連性を目にする頻度から、以下の点、
- 古典を読む事が語学力を養うために有効な手段なんだろうか
- 有効だとしたらどういった性質がそうさせるの
という点が気になっていたので、例を上げつつ少し考えてみたい.
あるいは、古典を読む事というより、”古典語の学習は語学力アップに効果的なのか”
という事が実質の疑問と言えるかもしれない.
ラテン語は、ロマンス諸語の元である言語なため、
他ロマンス諸語を学ぶのに有効というのはよく言われていることだが..
ひとまず以下に古典愛好家である多言語話者の例をあげる.
[python] lxmlをインストール: ソースから/Macportから.
lxmlライブラリを,[RedHatにソースからインストール ,Mac10.5にMacportでインストール]した際のメモ.
そこそこ大きなXMLファイルをパースしたり編集したりしたかったので、
柔軟性と高速なパフォーマンスを備えるlxmlを使用することにした.
基本、以下を参考にさせていただき、はまることなくインストールできた.
自分の場合は、予想に反して特にエラーもなくできたが、
何らかエラーが発生する場合、(そしてエラーは頻発する模様だ)上記記事のコメント欄等含めて参考になるかもしれない.
以下手順でインストール.
[python] (比較的)安全にファイル内の文字列を(その場で)置換する
ファイル内の文字列を(その場で)置換したいことは良くある.
単純にファイルを読み込み置換するだけですむなら良いが、やはりできるだけ安全に行いたい.
perlではよく適当に -i オプションを付けて済ませてしまっていたが、
それはどうやら常軌を逸した行いのようだ.
なので少しは誠意ある振る舞いが出来るよう、
(比較的)安全にファイル内の文字列を置換する方法を考え、コードを残しておく.
ほんとに最低限の事だと思うが、安全さを以下のポイントを抑える事で担保する.
ポイント:
- 一時ファイルに書きだし、それをコピーすることで(その場での)書き込みを行う
- try ~ finally で元ファイルのcloseは確実に行う
これらをまとめ、以下のコード のように置換を行う関数化しておく.
# -*- coding: utf-8 -*- import os,re,sys import tempfile import shutil def pat_replace(stext,rtext,file): """ porpose : ファイル内の文字列を(その場で)置換する usage : pat_replace("置換前パターン","置換後文字列",'target-file') --> replaced file * stext は reパターンで渡す必要がある. """ tmpfd,tmpname = tempfile.mkstemp(dir='.') try: output_file = os.fdopen(tmpfd, 'w') input_file = open(file) except IOError: print '"%s" cannot be opened.' % file else: for line in input_file: a = stext.sub(rtext, line) output_file.write(a) finally: output_file.close() input_file.close() shutil.copyfile(tmpname,file) os.remove(tmpname)
[python]「各条件を満たす最初の要素」★以外★を抽出する方法
とあるものを書いていて、
という要件が出てきた.
分解し、各動作の組み合わせで、すぐ解決できそうなものではある.
が、その過程でけっこう頭を悩ましてしまったので、解決方針の考えをまとめておく.
思ったより悩んだ要因として、以下の事がある.
- 条件は複数ある
- 最初の要素★以外★を抽出したい の以外の部分
これらの解決法としてどう表現するか?を試行錯誤したログのような記事だと思っていただきたい.
やはり例がないと何がしたいのかも分からないので、簡単な例を用意する.
前段階として考えていくに辺り、★以外★の部分もひとまず邪魔だ、
その部分をまず除き、単純化した要件で考えてみる.
こちらの動作で考えてみたい.この動作であれば至ってシンプルかと.
例題を用意する.
例題: リスト:[6,1,5,3,8,10,11]から、 5より小さい要素・8より大きい要素の、それぞれ条件を満たす最初の要素を取り出せ
つまり期待する動作としては、以下の動作だ.
f [6,1,5,3,8,10,11] -> [1,10] (3,11は対象にならない)
まずすぐに思いつく方法として、以下のfilterなどでもよくあるやり方がある.
- 条件を満たす最初の要素をリストから抽出する関数、find()関数を用意する
- 各条件のリスト([p1,p2,...])を用意する
- 探索対象のリスト(L)を引数としたfind関数へ、各条件を順次適用する
[python] リストから条件を満たす最初の要素を抽出する関数
pythonを書いていたら、おもむろに、以下の動作をする関数が欲しくなった.
" リストから、条件を満たす最初の要素を抽出する "
haskellでいうところの,find()にあたる関数というとイメージしやすいだろうか.
単に、" 一致する最初の要素を抽出する " という要件であれば、.index()メソッドがある.
しかし、求めているものは、完全一致する要素の抽出ではなく、
条件を与え、それを満たす最初の要素を抽出する関数だ.
条件を与えるという点で、" filter的な振る舞いをしつつ、それの真になる最初の要素 "
というイメージになるかな.
buludinメソッドの中に特になさそうだったので、高階関数関連のモジュール,itertoolsを調べてみた.
というhaskellおなじみの関数はあったが、find()に対応する関数はないようだ.
# 調べ不足でどこかにあるのかもしれない..ただ、それはそれで、後に見つけたときに、
自分のアプローチのダメな点が分かりやすくなるだろうから良しとしたい..
ということで、haskellでいうfind()にあたる関数をpythonで書いてみる.
まず参考に、動かしながら挙動を確認してみようと思い、
takewhileをそのままコピペしたら、
AttributeError: 'list' object has no attribute 'next'
というエラーが出てしまった..そもそも for の中でnext()は呼ばれているはずなので、
ここで,.next()を呼んでいる理由が分からない.
ひとまず流して、、dropwhileの方を参考にする.
[python] テーブルデータを扱う方法を考える
unixやlinuxで作業していると、あるコマンドで得た、テーブルデータ式の出力結果を、
管理する良い方法がないか考えるシーンがたまにだが、ある.
e.g) df や mount の出力結果を管理したい時 etc..
pythonの学習を兼ねて、テーブルデータ形式の出力結果を扱う方法を考えてみる.
簡単な例を元に考える.
ファイルや、標準出力で何らか以下のようなデーブルデータ形式のデータを得たとする.
X Y Z a 1 2 b 3 4 c 5 6
多次元リストにして扱う という方法が通常の?やり方だと思う.
その場合、リストに対して該当列を行番号で指定する方法か、awkのように行ごと処理する
というように、欲しいデータが得られるがやり方がやや気に入らない.
やはりここは、行×列 という形式で各項目を指定することで値を得るようにしたい.
そこで,このテーブル形式のデータについて、
hogehogeのfuga
というより自然な形でアクセスできるようにしたい.
そのためには、 多次元連想配列にしておくと良さそう.
# pythonでは連想配列はディクショナリという.(ハッシュの方が呼びやすいな..辞書と呼ぶものなんだか..)
Casey ReasとBen Fry の 新しいprocessing本
Getting Started with Processing
Aruduinoを始めよう と同じくMake の出版だ.
内容はごく基本的な内容のよう.
それよりも、9月に出る予定の本に、期待が持てる.
Form+Code in Design, Art, and Architecture
http://formandcode.com/
コンピューテーショナル・アートの,コード付きサンプル集というコンセプトの本?
言語は特にprocessingという訳でなく、様々な言語によるサンプル集みたい.
上記、Form+Codeのコンピューテーショナルアプローチから連想され、
関連しそうなprocessing本という事で思い出したのが、以下の本.
Algorithms for Visual Design Using the Processing Language
純粋な建築家による,processingを使ったビジュアルデザイン解説本といった内容.
本自体の評判はあまりよろしくない様子.
titleから期待されるほどvisualdesignのアルゴリズムが多く載っている訳でく、
ごく基本的なグラフィッックサンプルが例にあるのみ という事が理由である.
ビジュアルデザインのアルゴリズム知りたい人 → ただのprocessing基本解説
purocessingを学びたい人 → 別に基本を学ぶなら他にいい入門書がある
という状況になっており、中途半端とは言える..
でもこの著者が、
アルゴリズミック・アーキテクチュア
の書き手であるということで印象が変わった.
最近になって著者が建築の人間だと知った...
pythonによる関数型プログラミング:参考情報
解説系
Functional Programming HOWTO
魅力的なPython: Pythonでの関数プログラミング
2回,3回まである.
Functional programming with Python
map,filter,reduce,等基本的なfunctionalスタイル関数の解説.
Higher Order Perl (Python Style) TOC
あのperlの評価の高いHOPをpythonで。awesome!。。
perl版については、見た目は荘厳なものの、以外と、
・問題が身近・実用的で読みやすい
・sample codeが段階的に肉付けしていっているため,読みやすいいじりやすい
という点がある。
ろくに書けない状態で読みはじめた私でも、読み進めることができた.
(もちろん、全て読んだわけでなく,章によっては現状理解できない。
内容を消化出来てる訳では全くない・・)
でも楽しんで読めるだけでも嬉しい。
それのpython版!!
module系
itertools — 効率的なループ実行のためのイテレータ生成関数
functools — 高階関数と呼び出し可能オブジェクトの操作
標準module.
functional
functional : foldl, foldr, flipなど関数型プログラミングで主要な関数を集めたモジュール
haskell でいうprereudにあたる関数群のモジュールのよう.
C + python で書かれているものと pure python で書かれているものがある.
module:functool, にない関数がカバーされている?
このpureの方をreadingすれば、関数型pythonの基本が身につくかも.
読み物系
Lisp プログラマのための Python 入門
LispとPythonのビミョーな関係
Paul Graham氏が絡んでいるpython関連のエッセイがまとめられている.
Pythonの"関数型"の機能の起源
[reading log] Corders at work
Coders at Workを読んだ.
著名なプログラマーによる著名なプログラマーへの,
プログラミングに関するインタビュー集といった内容.
実録!天才プログラマー が面白かったので、同系統で期待できると思い、購入。
インタビューアーは実 践Common Lispの著者,
答え手は,
Guy Steele(Schemeの共同開発者),
の主要設計者),
Peter Norvig(実 用 Common Lispの著者で現在G
Simon Peyton Jones(haskellの共同開発者,GHCoogleの研究者),
Dan Ingalls(smalltalkの設計者),
Donald Knuth,
他多数..
と誉れ高い方ばかりのようで名前だけでテンションが上がる.
インタビュー形式で、以下のような質問中心に話が進む.
- 何からプログラミングを始めた?
- どうやってプログラミングを学んだ?
- 公式な教育を受けることは重要?
- いいプログラマーの条件とは?
- どの言語は優れていて、どの言語がひどいもの?
- プログラミングスキルを延ばすために、他に必要なスキルは何?
- コーディングするときのアプローチはトップダウン or ボトムアップ?
- 他のプログラマーを協業するときの良い方法は?
etc... ここに挙げたのはあくまで一例で、他にも多種多様なプログラミングに関する質問.
勿論、あらかじめ用意している同じ質問を全ての人物にしている訳ではない.
それぞれの答え手に沿って会話が進むよう,準備に大きな労力を払っていると思われる濃さだ.
哲学的な事からツールの使い方まで、
多くのプログラマーが気になるであろう質問を次々と繰り出している.
同時にインタビューアーが優れたプログラマーであるためか、
答え手も能弁、本音が素直に出ているようで、非常に刺激的な会話が続いている.
一人分が、約40ページある.結構な量だと思う.
答えてのターンが、2ページ弱に渡っていることなどもある、
なかなか見られない量であり、ただのインタビュー/回答とは違う.
どんなレベルの方が読んでも参考になるような、考え方・方法論・哲学が詰まっていると思う.
pythonによるシステム管理:参考情報
perlを置き換えたい ≒ pythonでシステム管理 / 書き捨てプログラム
という状況に近い. なので、システム管理周りの情報をひとまず収集.
本当はミニマルPythonがあるといいんだけどな・・(Perl版)
という程度がひとまずの自分のニーズ.ごく小さなスクリプトを書く目的.
何事も小さな事からということで、以下を参考にしつつ書き出していきたい.
Python for Bash scripters
これは shellscript or perl scrip
t を置き変えたい人に取っては直球ど真ん中!?
Pythonメモ
scripting時に必要になりそうな最低限の情報がシンプルにまとまってる.
書き始め時に参考にしたい.
システム管理者のための Python
こういう情報が英語圏ではかなり充実しているのか
python in system administration
スライド資料.なぜにchinaの表紙絵??w
情報量は少ない.
vs C, vs bash, vs python のメリットデメリットがあって少しおもしろい.
Python One-Liner of the Month
one liner については不安がある.
perlの一行野郎に比べると、どうしても記述の容易さの面で劣るという先入観がある.
実際どうなんでしょう. 例集が多いと今後
助かるんですが..
ruby,pythonの一行野郎の情報をあまり見たことないな・・・
PerlユーザのためのPython移行ガイド
まさにPerlを置き換えるという内容.どんぴしゃの内容なのか?パラパラ読んでみたい.
python触り始め
pythonを始めることにした.
使用目的は、日常業務scriptingがメインで,他いろいろ.
直近で言えば,perlの置き換えが目的.
なぜperlを置き換えるかと言うと、以下のような雑多な理由である.
- 違う言語を触りたい
- perlでダラダラ書いていて,堅牢性(ロバストネス?)の点から不安を覚えた
- docment, あるいはcode と document を同時に作成するツール・文化が充実している; perlよりもrubyよりも.
正直言って、ちょっとしたスクリプティングの他候補になる言語、
perl,ruby,gauche と比較した時、pythonについてはコンセプト的に最も惹かれない.
gaucheとの比較について
でもスキル不足やメンテナンス性のことを考えると現実的に厳しい...
という風説に影響され、pythonをとった.
pythonを始めるにあたってのサイト集
つい情報収集にはまってしまう癖があるので、
始め段階ではまっておく.
主に、python初級~中級くらいに参考にしたいサイトのまとめ.
入門の入門
Pythonを始めよう。
python入門まとめサイト
この辺りを参考にさせてもらえば大体、事足りそう。。
python早めぐり
あの、もうひとつのscheme入門を書いている方のpython記事.
schemeが非常に分かりやすかったので!,こちらも期待です.
インスタントPython
おもむろに始めようと思ったとき、これらの情報はとても有難いです。
pythonを始めるにあたってのインストールメモ
pythonを始めるにあたってのインストールメモと問題をログ.
とりあえずpython-modeがあれば満足する.
emacserとしては、
・emacs + バッファ読み込み・実行
という基本所作ができれば、最低限気持ちよくコーディングできる.
python/python-mode は、Mac (corbon emacs)だとdefaultだった.
ということで、少し進めて、IDE的な環境の実現を目指す.
ここらあたりの記事を、横断的に参考にさせていただいてなんとかsetup開始
Setup Perfect Python Environment In Emacs
python in Emacs環境
pymacs
Tool として英語を使う
国際言語に王手?をかけている英語.
といっても思われてるほど習得が簡単だったり、論理的な言語でも何でもないらしい
相変わらず日本人にとっては,近いようで遠かったりする.
そんな英語を日常的に書いたりしゃべったりするわけではない人でも、
その英語の特性から、”ツールとして”使用する価値はあると思う.
あるいはそこから始めるのが実は近道だったりとか..
その事について以下に記してみる.
使う価値をもたらす英語の特性とは何だろう.
それは、「ゴール志向性の強い言語」という特性だ.
この説は以下の本で展開されており、それを鵜呑みにした結果、
このエントリを書いている.