初級者から中級者にあがるための英語を勉強するのに engVid シリーズが良い感じ

初級者から中級者にあがるための英語を学習するのに engVid というシリーズが良い感じです。英語の文法、熟語の意味や使い分け等を全て初級英語で解説してくれる動画です。全て初級英語で解説されているってところが重要で、初級すぎず、上級すぎない絶妙な位置にいる人の英語力を高めるのに丁度良いと思いました。

特徴

  • 無料
  • 解説は全て初級英語
  • 解説者が日本人ではない
  • シリーズ化しておりカバー範囲が広い
  • 解説内容を理解しているか試すミニテスト付き

qrank でユーザーのフォロー数、フォロワー数、投稿数のランキングを見られるようにした

3分に1ユーザーという遅さでデータを更新していますが、そのうち大体のユーザーのデータが取得されます。このランキングはユーザーの情報を直接 API で取得しているので、集計の数値はストック数ランキングに比べて正確です。

フォロー数
http://qrank.wbsrv.net/users/?orderby=following_users

フォロワー数
http://qrank.wbsrv.net/users/?orderby=followers

投稿数
http://qrank.wbsrv.net/users/?orderby=items

ストック数ランキングについても、記事のデータを収集する方法を改善してよりリアルタイム性を高める予定です。

qrank をマイナーアップデートした

Qiita の人気記事をランキング形式でチェックできる qrank をマイナーアップデートしました。

変更したところ

  • 更新頻度の高くないユーザーランキングをトップページから削除した。代わりにリンクをサイドバーへ移動させた。
  • 記事ランキングの「昨日」が当日の 0 時からのランキングになってしまっていたのを修正した。
  • 記事ランキングの「昨日」「7日間」「30日間」でもはてブによるソートができるようにした。
  • ユーザーランキングではてブ数を集計するようにした。

今後

ストック数とはてブ数を WordPress のカスタムフィールドに保存してるのですが、集計時の負荷が高いので困っています。(JOIN する SQL を発行すると処理時間がかかりすぎてタイムアウトする)共有サーバーなので仕方ないのですが、データを外部の VPS に保存して API 経由で持ってくるなどしようと思います。それか、WordPress の wp_posts に独自のフィールドを追加すると SQL で JOIN しなくて良くなるのでたぶんパフォーマンスがあがりますが、CMSスキーマに手を入れるのは抵抗を感じています。

GitHub の issue や pullrequest でのやり取りを翻訳する (1)

恐らく単語や文法だけを覚えても実際にコミュニケーションに応用することは難しいかと思います。なので生きたやり取りを理解するように努めることで実用的な知見を取り入れることを目指します。赤字の部分は自信無し。

翻訳対象の issue
https://github.com/cakephp/cakephp/issues/3656

https://github.com/cakephp/cakephp/issues/3656#issue-35125642

メールアドレスがHTMLタグに挟まれているとき、TextHelper::autoLinkEmails()が正しく動作しません。例えばこのようなものです。lorem <p>mail@example.org</p> ipsum

https://github.com/cakephp/cakephp/issues/3656#issuecomment-45329672

<p>のあとにスペースいれたらどうなりますか?

https://github.com/cakephp/cakephp/issues/3656#issuecomment-45333289

スペースが入ると正常に動きますね。でもハードスペース &nbsp; のときは動かないです。 メールアドレスの前には常にスペースが必要みたいですね。たぶんHTMLタグは(リプレイスの対象から)除外されてるんですかね?

https://github.com/cakephp/cakephp/issues/3656#issuecomment-45340877

そうだと思います。正規表現(?<=\s|^|\() は確かにHTMLを除外して(リプレイスして)ます。

https://github.com/cakephp/cakephp/issues/3656#issuecomment-46308801

プルリクエストを作ったので閉じます。

Springpad から来たメールを訳す

Githubでの開発が主流となった今、英語ができないと取り残される感があるので英語の読み書きもトレーニングしていこうと思います。たまたま Springpad からサービス終了のお知らせが来たので今日はそれを翻訳することにしました。

We are very sorry to announce that Springpad will be shutting down on June 25th.
とても残念ですが、スプリングパッドは6月25日で終了することになりました。

At that point, Springpad.com will no longer be available and all online and sync features of the mobile apps will stop working.
その時点で、springpad.com は利用不可となり、モバイル向けアプリケーションの全てのオンライン、同期機能が停止します。

Read more about this announcement.
このアナウンスについて詳細はこちら。

It's our top priority to help you during this transition.
この移行期間に最優先でユーザーのサポートに取り組んでいます。

We have created multiple ways for you to take next steps with your Springpad data including a full Evernote migration option, a viewable html data backup and an importable file for other services to use.
サービスの移行ができるようにEvernote移行オプション、閲覧可能なHTML形式や他のサービスでインポートできる形式のファイルバックアップを含むいくつかの方法を用意しました。

Please visit https://springpad.com/savemystuff before June 25th to export your data.
データのエクスポートは6月25日よりも前に https://springpad.com/savemystuff から行ってください。

Thank you to our loyal users - We hope that you have enjoyed using Springpad as much as we enjoyed building it for you!
ロイヤルユーザーの皆さんありがとうございました。私達がSpringpadを開発しているのと同じくらいに楽しんで使ってもらえていたのなら幸いです。

We understand that this transition may be difficult for many of you and we will try to help as much as possible. If you have questions or need help, please visit the Springpad Shutdown FAQ
移行が難しいものであることは分かっているので可能な限りサポートしていきます。もし質問やサポートが必要なら Springpad Shutdown FAQ までどうぞ。

qrank for Android をリネームした

https://play.google.com/store/apps/details?id=com.qrankforAndroid&hl=ja

アプリケーション名が被ってしまっていたので Heard という名前に変えました。なんか新しい名前も被りそうな気もしますが、とりあえずこれで進めます。

Android アプリケーションを JUnit でテストするための Hello World

JUnit を使ったことないので非常に苦戦していますがとりあえずテストを動かせたのでメモしておきます。Eclipse を使っています。

テスト対象の MainActivity

package com.japan;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    public int addNumber(){
      return 1 + 2;
    }

}
  • onCreate メソッドonCreateOptionsMenu メソッドは Andorid プロジェクトを作ったのときに自動生成されたもので、今回は触っていない。追加したのは 3 を返すだけの addNumber メソッド

MainActivity をテストするためのテストコード

package com.japan.test;

import com.japan.*;
import android.test.ActivityInstrumentationTestCase2;

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity>{
  private MainActivity mActivity;

  public MainActivityTest(){
    super("com.japan", MainActivity.class);
  }
  public void testTokyo(){
    MainActivity mActivity = getActivity();
    assertEquals(3, mActivity.addNumber());
  }
}
  • 適当に android.test.ActivityInstrumentationTestCase2 というものを使っているけど、テストの用途によって使い分ける必要がある。
  • getActivity メソッドでテスト対象の MainActivity を取得しているようだ。
  • 「Run as」-> 「Android JUnit Test」でテストを実行する。「JUnit Test」を選択してもエラーが出て動かない。