Python 3の波がオライリー本にも・・・

TLで、オライリーのカレンダー(O'Reilly Japan - 2015年 ブックフェア開催中)をゲットしてるひとがいて、いいなーと思って、なにげなく目録をみたら、Python 3の文字を発見。

入門 Python 3

入門 Python 3

実践 Python 3

実践 Python 3


はじめてのPythonとかクックブックとか、2系の時代のものだったので、ついに、オライリー本にも3系の流れがきましたね。
カレンダー目当てで、一冊買おうかな。
あと2レベルぐらいPythonに強くなりたいので、このへんとか手をだしたい気もする。

Cython ―Cとの融合によるPythonの高速化

Cython ―Cとの融合によるPythonの高速化

Python文法詳解

Python文法詳解

ハイパフォーマンスPython

ハイパフォーマンスPython

最近気になってること(2015年11月アップデート版)

  • Webサーバ周り
    • Apache(特に認証とか関係。cgiとか)
    • サクラのVPS借りたい(Nginx)
  • Webフロント
    • HTML5 & CSS3(→モダンコーディング読んでる)
    • JavaScript()
  • 基礎体力
  • 急がないけどやっておきたい
    • OpenCV
    • SQL
    • 関数型言語なにかひとつ(「プログラミングの基礎 (Computer Science Library)」とか?)
  • 統計
    • 岩波データサイエンス vol.1


読み物関係(結構読んだ)

Javaで配列をソートする

Javaで配列をソートするときの備忘録。

まずは基本のき

int[] a = {5, 2, 4, 1, 3};                                                            
Arrays.sort(a);
//結果a = {1, 2, 3, 4, 5}となる

もちろん、順序が定義されているクラスは、intじゃなくてもArrays.sort()を使うことができる。

Date[] b = {new Date(100000000), new Date(50000000), new Date(0)};
Arrays.sort(b);

自分で作ったクラスでは、どうするか

1.自分で作ったクラスでComparableインターフェイスを実装しておく。intを返すようにちゃんとかく。

自ら比較する能力がある(-able)クラスを作っておく。

class MyClassComparable implements Comparable<MyClassComparable> {
  //フィールド変数に整数xとyをもつクラス
  int x;
  int y;
  public MyClassComparable (int x, int y) {
    this.x = x;
    this.y = y;
  }
  public int compareTo(MyClassComparable other) { //ここを実装する
    return this.x + this.y - (other.x + other.y); //2つの整数の合計が大きい方が、同じクラスを比較した時に大きいとした
  }
}

のようにしておけば、

MyClassComparable[] c = {new MyClassComparable(1, 5), new MyClassComparable(2,1) , new MyClassComparable(3,1)};
Arrays.sort(c);

のように、基本のきのように使うだけ。

2.コンパレーターインターフェイスを実装しておく。

インスタンスを比較するやつ(クラス)を作っておく。
こんな感じで、MyClassとMyComparatorをかいておく。

class MyClass {
  int x;
  int y;
  public MyClass (int x, int y) {
    this.x = x;
    this.y = y;
  }
}
class MyComparator implements Comparator<MyClass> {
  public int compare(MyClass m1, MyClass m2) {
    return m1.x + m1.y - (m2.x + m2.y);
  }
}

で、使うときは、Arrays.sort()にこんな感じで渡す。

MyClass[] d = {new MyClass(1, 5), new MyClass(2,1) , new MyClass(3,1)};
Arrays.sort(d, new MyComparator());
2'. 無名クラスでComparatorを作って渡す

MyClassで、implaments Comparableと加えるのも、新たにMyComparatorを追加するのも、あれだなーというときは、Comparatorを無名クラスで作って渡せばよい。

Arrays.sort(e, new Comparator<MyClass>(){
  public int compare(MyClass m1, MyClass m2){
  return m1.x + m1.y - (m2.x + m2.y);}});

多次元配列で2番目の要素で比較する

ベストプラクティスがよくわからなったけど、配列用のComparatorを作って渡せばよいので、こんな感じなるのかな?
何度も使うなら、Comparatorを作っておけばいいと思うし、今回だけ使うみたなときは無名クラスで渡してしまえばいいかなと。以下は、無名クラスで渡す場合。

double[][] f = {{1.0, 3.0},{2.0,2.0},{3.0,4.0},{4.0,1.0},{5.0,3.0}}; //2番目の要素で並べ替えたい
Arrays.sort(f, new Comparator<double[]>() { //double[]でコンパレーターを実装する
  public int compare(double[] a, double[] b) {
    if(a[1] > b[1]) {
      return 1;
    }else if (a[1] == b[1]) {
      return 0;
    }else {
      return -1;
  }}});

いじょ。

最近気になってること(2015年10月アップデート版)

最近の興味関心をリストアップしようかなと思ったら、たまたま偶然、ちょうど1年前に同じことをやっていた。fijixfiji.hatenablog.com
この中で、実際になにか手をつけたことは、「O'Reilly Japan - Pythonによるデータ分析入門」だけだった。ちょっと反省ですね。

  • Webサーバ周り(サクラのVPS借りたいとか、Nginxとか)
  • SQL入門
  • C言語(かFortran)を再入門・・・
  • 「入門UNIXシェルプログラミン​グ―シェルの基礎から学ぶUNI​Xの世界」と「ふつうのLinuxプログラミング」とか。
  • 関数型言語なにかひとつ(「プログラミングの基礎 (Computer Science Library)」とか?)

読み物系だと・・・

/etc/environment スクリプトじゃない

あらまし

環境 Ubuntu 14.04
ユーザーではPATHを通したが、sudoしたらPATHが通ってなくて、コマンドが見つからなかった。
/etc/environmentに記述すれば、sudoしたときにも使えるみたいなのを読んだ*1ので、迂闊に次のような行を追加した。

PATH=$PATH:/usr/lib/hoge

で、再起動後、ログイン画面は立ち上がったが、ログインできなくなった。

学習したこと

/etc/environmentはスクリプトじゃない

https://help.ubuntu.com/community/EnvironmentVariables#A.2Fetc.2Fenvironment
上のような書き方はできません。反省。

ログインできなくてもCUIの画面は出せる。

ログイン画面で、SHIFT+CTRL+F1をおすと、CUIの画面が開くことができる。
こっちからはログインできた。

全部にPATHが通ってなくても諦めない

sudoとかviとかもフルパスで指定して、/etc/environmentを編集して保存して、再起動で無事復旧。


危なかった。

*1:この問題は、下記で本質的にこれで解決しないのですが・・・

nginx いろいろ

参考になりそうなところwww.atmarkit.co.jp
postd.cc

さくらのナレッジ VPS 初心者向け記事のまとめ とその他

さくらのナレッジの初心者向けの記事のシリーズがおわったので、まとめておいておく。

内容は、VPSの契約やログインの方法といったところから、WordPressまでといったところ。Webサーバーには、Apacheだった。DNSの設定やらも書かれていた。

ちなみに、現時点で、料金・仕様一覧|VPS(仮想専用サーバ)はさくらインターネットによると、メモリ512MB、SSD20GBで、税込み685円/月だった。


あとは
Apacheじゃなくて、nginx*1http://nginx.org/ja/)。
ドキュメント生成系で、Sphinxhttp://sphinx-users.jp/

*1:「えんじんえっくす」と読むことをさっき知った