2011-03-31

今後の英語学習について

新iKnow!は継続する方向で

来月からの新iKnow!に備え、ファミリーマートでオンラインマネーを4200円購入しました。ファミリーマートの端末からだと1円単位で購入できるので、端数が発生しなくて便利です。クレジットカード払いでもよかったのですが、あまりカード番号をさらしたくなかったので、後腐れのないプリペイドカード決済を選択しました(とりあえず今回はウェブマネーで)。現時点では決済方法がよく分からないのでちょっと不安ですが(「手数料として105円必要なので4200円きっちりでは足りません」みたいなことを言われたら泣きます)。

とまあ、一応私は新iKnow!を継続することにしたのですが、正直なところ現時点での新iKnow!のアプリに満足しているわけではありませんし、今後のサービスの改善についても特に期待しているわけではありません。ただ、現在まがりなりにも毎日smart.fmで勉強することが習慣になっているので、定着した習慣を途切れさせたくないために「現状維持」を目的として新サービスに加入することにしました。

そういう心境なので、新iKnow!に移行したところで、今までどおり淡々と細々と学習を続けることになりそうです。「せっかくお金を払っているんだから、しっかり活用しないともったいない」みたいな気分にでもなれば、日々の学習時間も多少増えるかもしれませんが、個人的には高々4200円程度の金額ではそんな気にはなりそうにありません(仮に「12000円」であったとしても同じでしょうね)。

今後の英語学習について

とはいえ、今後の英語学習のことを考えたとき、iKnow!を続けるだけで本当にいいのか、という気持ちもあります。例えば先日の英検準1級受験では、一次試験はそれなりの点で通過できたものの英作文の評価はいまいちで、二次試験ではさっぱり話せずに撃沈したわけで、アウトプット能力を向上させる必要があるというのは明白です。当然ですが、iKnow!ではアウトプット能力の強化は見込めません。まあ、一次試験をパスできたのはiKnow!の学習による効果もあったと思うので(特に語彙)、iKnow!はこれはこれで続けるとしても、他の学習方法も考えないといけません。

アウトプットにはライティングとスピーキングがありますが、ライティングについてはやはり「Lang-8」でしょうかね。Lang-8については以前から気になっていたのですが、定期的に更新できそうな日記のネタがないのがネックで二の足を踏んでいました。ですが、細かいことをあれこれ考えずに、まずは始めてみましょうかね。そういえば今になって思うと、以前smart.fmのサイトで書いていた「どうぶつの森日記」はLang-8向けだったかも。あのゲームは海外のプレイヤーとの交流もできましたし。

スピーキングについては、現状では自分の言いたいことを英語にするのに時間がかかってスムーズに文章が出てこないという状態で、これについては「瞬間英作文」のトレーニングが効果的そうだと思っています。しかし、テキストは用意したものの、時折思い立ったときに取り組んでいる程度で、とても定期的に続いているとは言えない状態です。私は本当に書籍ベースの勉強が苦手なんですよね……。

studylog(スタログ)に登録するも……

書籍ベースの勉強を継続するため「スタログ」というウェブサービスにも登録してみました。これは、毎日の勉強時間を記録するようにして達成感を得られるようにしてモチベーションアップを図り、勉強を継続できる正のフィードバックを形成する、という趣旨で、まだ3月に始まったばかりのサービスです。私の勉強記録はこちらになります。<http://studylog.jp/en45masao/>

いまどきのウェブサービスにはソーシャルな要素は欠かせませんが、このスタログにも、Twitter等の外部サービスとの連動の他、「サポーター」というシステムがあります。サポーターは、ユーザー(学習者)の勉強記録を見たり、コメントを残したりすることができるとのことで、ユーザーを励まして、学習継続の支えにする役割のようです。

このシステムを知ったときは、今のsmart.fmのSNSみたいな学習者同士のコミュニティができるかも……と思ったのですが、あまりそういう感じではないようです。どうもこのサポーターというのは家族や友人などの身近な人を想定しているようで、サポーターになってもらうにはメールベースでの承認という(けっこう敷居の高い)プロセスが必要とのことです。ユーザー(学習者)同士が知り合うコミュニティも用意されていないので、知らない人同士が(「フレンド」や「フォロー/フォロワー」みたいな感じで)「サポーター」になるというのもあまりなさそうです。

それはさておき、studylogへの登録完了後、「瞬間英作文」のトレーニングとstudylogでの記録を開始したのですが、その直後に震災のゴタゴタなどがあり、学習時間の記録も「瞬間英作文」の学習継続も途切れたままになってしまっています(震災は本当は関係ありませんが……)。これも4月から再開したいところです。

最後に

smart.fm卒業の方も、iKnow!継続予定の方も、今後も継続して語学をがんばりましょう。

2011-03-30

Smart.fm Study Log Saver ~ 学習時間記録取得ツール

Smart.fm Study Log Saver

smart.fm終了まであと2日しかないタイミングなのに、この期に及んで何をやっているんだという感じですが、これまでのsmart.fmでの学習時間の生データをCSVファイルで取得する「Smart.fm Study Log Saver」というアプリをでっち上げました。Excelなどに取り込んで、好きに料理してください。

今までやってきたiKnow!アプリケーションの日々の学習時間については、新サイトのiKnow!にて学習履歴を見ることができます。しかし、新サイトのiKnow!ではDictationとBrainspeedがなくなってしまうため、これらの学習記録も見ることができなくなってしまいます。そういうわけで、睡眠時間を数時間ほど削って作ってみました。Dictationのスキルレベルの変動をExcelでグラフにプロットして見たりすると、けっこう面白いかもしれません。

ただし、smart.fmのサーバに残っている学習記録は2009年11月までのようで、そこより前のデータは取得できません。その点ご注意ください。

また、2月半ば頃から動かなくなってしまっていた「Smart.fm List Converter」ですが、先日raffaelさんにソースコードを修正していただいて、こっそり動くようになっています。一応お知らせまで。

2011-03-26

Windowsの「圧縮フォルダ」ではまる

先日公開した「Smart.fm Memento Maker」では、日記や画像のファイルをzipファイルにまとめて圧縮しているのですが、ユーザーの方から「ダウンロードしたzipファイルに何も入っていない」という報告がいくつか挙がってきました。自分の環境では(生成された)zipファイルを何事もなく展開できているので不思議に思っていたところ、どうもWindows標準の「圧縮フォルダ」でうまく扱えないということが判明しました。確かに、zipファイルをオープンしても、ファイルリストに何も表示されません。

ここで直感的に「パス区切り文字が原因に違いない」と考えました。というのも、zipファイル内の個々のファイルのパス文字列を設定する際に、ディレクトリの区切り文字として「スラッシュ(/)」を使っていたからです。コードとしては以下のような感じです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import zipfile

content = 'The quick brown fox jumps over the lazy dog.\n'
zipobj = zipfile.ZipFile('foo.zip', 'w', zipfile.ZIP_DEFLATED)
zipobj.writestr('/test.txt'.encode('utf-8'), content)
zipobj.close()

そこで、「Windowsだし、スラッシュではなくてバックスラッシュでないとだめなのでは?」と安直に考えて、パス区切り文字をバックスラッシュ('\')に変更してみました。が、やはり現象は変わらず。うーむ。

しかしその後の調査の結果、やはりパス区切り文字が原因だと判明しました。zipファイル内の個々のファイルにて、パス文字列の先頭にパス区切り文字(スラッシュ)を付けていたのですが、これを削るとWindowsの圧縮フォルダでも正常に扱えることが分かりました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import zipfile

content = 'The quick brown fox jumps over the lazy dog.\n'
zipobj = zipfile.ZipFile('foo.zip', 'w', zipfile.ZIP_DEFLATED)
zipobj.writestr('test.txt'.encode('utf-8'), content) # 先頭のスラッシュを削ればOK
zipobj.close()

ファイルパスの先頭にスラッシュがある場合、内部では「名前が空文字列('')のディレクトリ」として扱われているのかもしれません。今になって考えると、なんで私はファイルパスの先頭にスラッシュをつけようとしたのか、ちょっと疑問に思います。

一応これで期待通りに動作できるようになったのですが、本件、ファイルパスの先頭にスラッシュを付けようとした私が悪いのか、あるいは先頭のスラッシュを扱えないWindowsの圧縮フォルダが悪いのか、どちらなのでしょうか? というわけで、ちょっとzipファイルの規格を調べたところ、以下のような記述が見つかりました。「MUST NOT」ではなくて「SHOULD NOT」ではありますが、いずれにせよ先頭のスラッシュは含まないのが無難ということでしょうかね。

file name: (Variable)
The name of the file, with optional relative path. The path stored should not contain a drive or device letter, or a leading slash. All slashes should be forward slashes '/' as opposed to backwards slashes '\' for compatibility with Amiga and UNIX file systems etc. (snip...)
http://www.pkware.com/documents/casestudies/APPNOTE.TXT
ファイル名: (可変長)
ファイルの名前(と任意の相対パス)。パス領域には、ドライブ文字・デバイス文字・先頭のスラッシュを含むべきではない。すべてのスラッシュは、AmigaやUNIX等のファイルシステムとの互換性のために、バックスラッシュ('\')ではなく、フォワードスラッシュ('/')とするべきである。(中略)

以上、備忘のため残しておきます。

2011-03-20

Smart.fm Memento Maker ~ 日記一括ダウンロードツール

Smart.fm Memento Maker

smart.fmの日記(と画像)を一括ダウンロードするアプリ「Smart.fm Memento Maker」を作成しました。ようやく正式公開できるレベルになりました。

Smart.fm Memento Maker

使い方は簡単で、smart.fmのIDを入力して「Save」ボタンを押して、あとは(気長に)待つだけです。処理の完了後「Download」ボタンを押せば、日記と画像の入ったzipファイルをダウンロードできます(もしボタンを押してもダウンロードできない場合、ボタンの左側のリンクを右クリックして「名前を付けて保存」を選んでください)。

Smart.fm Memento Maker

日記はHTMLファイルで保存されますが、このHTMLファイルをそのまま開いても、レイアウトなどは崩れてしまうのでご了承ください。あくまで保存できるのは中身(文章)だけです。日記についたコメントもそのままでは見ることはできませんが、別ファイル(「(最大6桁の数字)_comment.html」みたいな名前のファイル)に保存されているので、そちらのファイルを見てください。ちなみに、取得できるのは公開設定にしてある日記だけです。

また、ダウンロードしたzipファイルの中には「mt_log.txt」というすべての日記とコメントの文面が収められたテキストファイルも入っています。このファイルは「Movable Type形式 (MT形式)」というもので、これを使ってsmart.fmの日記を他のブログにインポート(引越し)することができます。世の中にはブログサービスがたくさんありますが、いくつかのブログサービスでは「MT形式でのインポート」というのをサポートしています。試しに、私の日記Seesarブログ にインポートしてみましたので、どんな感じか参考にしてください(後ほど削除します)。

ただし、画像についてはおそらくは自動で移行できないと思いますので、ダウンロードしたzipファイルの中の画像ファイルを移行先のブログサービスにアップロードして、個々の日記の画像のURLを差し替える作業が必要になるかと思います。上の例ではブログ中の画像も正常に表示されているように見えますが、これは画像ファイルの場所として直接smart.fmのサーバ内の画像を指定しているためで、後日smart.fmのサーバが停止した後はブログ中の画像が見えなくなってしまいます(本来はSeesarブログのサーバに画像をアップロードし直す必要があります)。

smart.fm終了まで時間がありませんが、ご活用ください。

2011-03-10

ブックマークレット中に「% (剰余)」を使ってはまる

先日作成したブックマークレットの動作確認中に、一点だけ意味不明な動作に悩まされました。

すでにタイトルでネタバレしていますが、ブックマークレット中に「% (剰余)」の記号を使った際に、その箇所が「URLエンコードされた文字」と解釈されてしまい、Google Chromeからさんざん「Uncaught SyntaxError: Unexpected token ILLEGAL」と怒られてしまいました。時間の計算をする際に「60で割った余り」が必要になったため「min % 60」という計算をしている箇所があったのですが、ブックマークレットにした際にコード全体の空白を除去したため、「%60」という「URLエンコードされた“`”(アクセント記号)」という意味になってしまったという次第です。

二度と同じ罠にはまらないように、備忘のため記しておきます。皆さんもお気をつけください。

2011-03-09

studylog(スタログ)でiKnow!の学習時間を入力するためのブックマークレット

studylog(スタログ)」というウェブサービスに登録してみました。毎日の勉強時間を記録するようにして達成感を得られるようにしてモチベーションアップを図り、勉強を継続できる正のフィードバックを形成する、という趣旨のサービスです。いまどきのウェブサービスらしく、ソーシャルな要素もあるようです。私の勉強記録はこちらになります。<http://studylog.jp/en45masao/>

私の場合、iKnow!smart.fmといったウェブサイトでの英語学習や、Nintendo DSソフトでの英語学習はそれなりに継続できているのですが、書籍での勉強がどうも苦手で、なかなか継続できません。英検準1級二次試験に向けて「瞬間英作文」の本を買ったのですが、時折思い立ったときに取り組んでみたりはしているものの、定期的に続いているとはとても言えない状態です。そういう中、Twitterのタイムラインでこのサイトの情報を得て、渡りに船とばかりに登録した次第です。

まだ登録したばかりでろくに触ってもいないので感想も何もないのですが、早くも「毎日勉強時間を記録するのはけっこう面倒かも」と思い始めています。これはブラウザから入力するUI部分が問題というわけではなく、学習する際に勉強時間を把握する――勉強の前後でいちいち開始時刻と終了時刻を記録して勉強時間を計算する――のが(個人的には)面倒に感じるということです。まあ、それはそれで計画的に勉強をするためのいい仕組みになるかもしれません。そもそも5分刻みでの入力になるので適当な入力でも構わないと思いますし。

とはいえ、私はこのstudylogでiKnow!(smart.fm)での学習時間も管理しようとしているのですが、このサイトでの学習時間はAPIを使って簡単に取得できるため、ここくらいは自動化したいところです。というわけで、studylogの勉強ログ入力画面にて、iKnow!(smart.fm)での学習時間を簡単に入力するためのブックマークレットを作ってみました。

studylog(スタログ)でiKnow!の学習時間を入力するためのブックマークレット

注意点

  • studylogでは「参考書」としてiKnow!(smart.fm)の学習時間を管理することになりますが、参考書のテキスト名には「iKnow」または「smart.fm」の文字列を入れておいてください。
    • これを元に、自動入力するフォーム部品を探します。
  • studylogでは勉強時間を「5分単位」で入力するようになっているため、iKnow!(smart.fm)での学習時間は5分単位で切り捨てした時間が設定されます。
    • ただし、「0分より上、かつ、5分未満」の場合のみ「5分」として扱います。
  • このブックマークレットでは、studylogの画面上のフォームに学習時間を設定することしか行いません。学習時間の送信は行いません(自分でボタンを押して送信してください)。
  • ブックマークレットの冒頭に「javascript:(function(){var uid=''||~」という感じで「uid」という変数を定義していますが、ここに自分のiKnow!(smart.fm)のIDを入れてください(「var uid='en45'」のように)。
    • そうしないと、ブックマークレット実行時に毎回自分のIDを入力しないといけなくなります。
  • 学習時間取得のためにsmart.fm APIを使っているのですが、smart.fmは3月いっぱいでサービス終了となるため、その後は使えなくなります(何か別の手を考えないと……)。
  • studylogの勉強ログ入力画面に変更があったりすると、動かなくなる可能性大です。
    • 始まったばかりのサービスですし、ユーザー側の要求に合わせてどんどん変わっていくということは大いに考えられます。

2011-03-05

Python・AppEngine初学者の雑感

ここ最近、PythonでGoogle AppEngineを使ってプログラムを書いているのですが、どちらも始めたばかりなのでいろいろと新鮮な驚きや疑問に思うことなどがあります。新しいことを始めたときに学習記録を残しておくと後で見たときに面白いので、とりとめのない話ですがここに書いておきます。

Pythonについて

  • lenとdelがコレクションのメソッドになっていないのにはびっくりしました。
    • 「len」という名前の変数を使ったりしたらどうなるんでしょう。
  • 「Pythonのfor文は、いわゆるforeachのみで、C言語風のfor文は存在しない」「一般的な回数ループ処理をやりたいときは、等差数列のリストを作るrange関数を使って for i in range(10) のようにする」というのを知って、一貫性があるなーと思ったのですが、xrangeという関数があることを知ってちょっと微妙な気分に。
    • 「xrangeだとリストを生成しないので、ループ回数が大きいときはxrangeの方が速い」との話ですが……for文でrangeを使っている場合には内部で勝手に最適化(実際にリストを生成しないようにする)をしているのかと思っていました。
    • あと、この両者を使い分ける基準はどのあたりにあるんでしょうか。少なくとも一般的な回数ループ処理では、常にxrangeを使っていればいいようにも思いますが。

AppEngineについて

  • 無料枠では「1日あたり10万タスクまで」となっているようですが、意外にきつい制限かも。
    • 普通にテストしていても1000タスクくらい軽く消費してしまいます。
  • ローカル環境におけるタスクキューの動作がいまいち信用できない感じです。
    • たまにキューに積まれたタスクの消化が止まってしまうことがあります。
      • ですがそんな場合でも、管理画面(http://localhost:8080/_ah/admin)をブラウザで開いて再読み込みすればタスクの実行が再開されたりします。理由は不明。
    • そういえば、管理画面のタスクキューの「Purge」ボタンは「たまっているタスクをすべて実行する」みたいな挙動かと思っていました。実際には、タスクは実行されずにキューからクリアされるようです。
      • そういう挙動であれば「Flush」と表記するんですかね。CPUキャッシュの操作でもこれらの用語を使いますが、いつもどっちがどっちだかわからなくなります。

2011-03-04

2010年度第3回 英検準1級 二次試験 結果

英検準1級二次試験の結果が届きました。すでにネットで結果を見て不合格であることは分かっているのですが、ネット上の速報サービスでは合否と合計点しか分かりません。結果の詳細は以下のとおりです。

STEP EIKEN Grade Pre-1 Second Stage (2010-3)

ナレーション 7/15
Q & A 9/20
アティチュード 3/ 3
合計 19/38 (不合格A)

……正直これだけ見たところで、詳しいことは何も分かりませんね。「ナレーションもQ&Aもひどい」ということくらいしか言えません。せめてQ&Aの4つの質問それぞれの配点結果が知りたいところです。会場で渡された面接カード右側の評価シートのマーク内容をそのまま出してくれればいいのですが。

あとは、アティチュードが「3点(満点)」というのはなんだか納得がいきません。というのも、冒頭にフリートークらしい会話もほとんどなく、挨拶程度しかなかった(しかもその短い会話でも相手の言っていることを取り違えてしまった)のと、ナレーションやQ&Aの最中もほとんどずっと問題カードの方を見ていて、アイコンタクトができていなかったからです。Q&Aの1問目は「もしあなたが○コマ目の登場人物だとしたら……」という質問なので、そこで問題カードに視線を移さざるをえないのですが、その後話すときに面接官の方に視線を向けるのを忘れたままになっていました(3問目が終わったあたりで気づきました)。なんで3点もついているんでしょうか。

さて、次回英検の二次試験は2011年7月10日です。今後に向けて、直接的な二次試験対策もやりますが、前回の日記にも書いたように、一般的なスピーキング能力を上げることに取り組んでいきたいと思います。まずは「瞬間英作文」のトレーニングから始めます。しかし、二次試験だけ受ける場合、10分足らずの面接だけであるにもかかわらず、受験料はフルプライス(6000円)なんですね……。