読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

コードに嘘を書かない

久しぶりにブログを書く。リハビリがてら最近思ってることとか。 最近は、コードレビューのときの「承認」ボタンを押す自分の中のハードルが、とても下がったように感じる。 少し前までは、 インデントが揃ってない コードが稚拙だ コードが過剰に複雑だ N+1…

はてブ毎時ランキングを作った

リハビリがてら作ってみた。hateb-rank.herokuapp.com

週刊少年サンデーを自炊して約6年経った

websunday.net 10年以上サンデーを読んでいる。 読んだら捨ててたけど、ちょうど自炊の環境を整えたのもあって、2010年くらいから電子化して捨てるようにした。(さすがに現物をとっておくには場所をとりすぎる……) なんとなく、やってること書いてみる。ち…

Scalaでクラスを継承したときのコンストラクタのパラメータ

newするときに渡す引数は、子クラス定義時も親クラス名といっしょに指定しないといけない。 class Hoge(a: Int) class Fuga extends Hoge // error: not enough arguments for constructor Hoge: (a: Int)Hoge. class Fuga(a: Int) extends Hoge(a) // ok //…

Scalaのクラスのコンストラクタの引数の可視性

valをつけるとattr_reader、varをつけるとattr_accessorになる。(Perl日記だけどRubyで例える) 何もつけないと、privateになる。 // aは何もつけない、bはval、cはvar class Hoge(a: Int, val b: Int, var c: Int) { def getA = a } val hoge = new Hoge(1…

ScalaでCharをtoIntすると文字コードになる

はまったのでメモ。 "1234567890" という文字列を List(1,2,3,4,5,6,7,8,9,0) という形にしたい。 やってみた。 "1234567890".toList //=> List[Char] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 0) "1234567890".toList.map(_.toInt) //=> List[Int] = List(49, 50…

Scalaのcollectionのviewを覚えた

RubyのEnumerable#lazyみたいなやつ。実際の中間処理をその場で実行せずに、forceメソッドが呼ばれたときとか、ループするときに、一気に実行する。 // 中間データができてしまうパターン (1 to 10).map(_ + 1).map(_ + 2) // scala.collection.immutable.In…

Scalaのコレクション系列多くてどれを使っていいのか悩む

PHPだとarray()で済んでたからな…。 とりあえず配列は、線形処理ならList、ランダムアクセスならVectorで、 辞書ならMapを使っておけばいいのでしょうか。。。 scala.collections.immutable Traversable └Iterable ├Set │├HashSet │├SortedSet ││└TreeSet │├…

初めて無職になった。まだニートではない

12月。 1日に突然会社がなくなるというアナウンスがある。 メインタイトルのアプリが違う会社に買い取られることになったので、アプリと一緒にその会社に転籍するかここで辞めるか10日で決めろと言われる。 10日。転籍条件があれだったので、辞めることにす…

Scalaの変位指定アノテーションと上限・下限境界がわからない

LL脳には辛い。 説明を読んでるときには、「なるほどなー」、と思うんだけど、いざ出てくると「どういう意味だっけ…」ってなるし、「いつ使えばいいんだ…」ってなってる。classだけではなくて、defにも使えるので、混乱する。。。 とりあえずこれは理解した…

Scalaにおける表明

assert() def add100(x: Int): Int = { val z = x + 100 assert(z >= 0) // 必ず0以上という表明 z } ensuring() def add100(x: Int): Int = { val z = x + 100 z ensuring(_ >= 0) } // ↑こう書けるので、↓こうも書ける def add100(x: Int): Int = x + 100 …

Scalaで空のListにはreduceLeft()ではなくreduceLeftOption()を使用する

要素が存在するListにはreduceLeft()で問題ない。 List(123, 234, 345).reduceLeft{ (a, b) => a + b } //=> 702 でも要素が空っぽだと、エラーになる。 List[Int]().reduceLeft{ (a, b) => a + b } // java.lang.UnsupportedOperationException: empty.redu…

Scalaで標準入力を受け取る

text1.txt 123 234 345 456 5 6 7 8 9 10上のデータが標準入力でわたってくるので、受け取りたい。Main.scala object Main extends App { import scala.io.StdIn.readLine // 1行目 val firstArg = readLine().toInt // 2行目をスペースで区切りながらInt…

Scalaでは本物の矢印記号が使える

以下のコードは等価である。 for (x <- 1 to 10) println(x) for (x ← 1 to 10) println(x) 「 2016-01-11 追記「=>」の代わりに「⇒」も使えるようだ。ひぇぇ。 val f = (s: String) ⇒ println(s) // f: String => Unit = <function1></function1>

PHPですべてをFにしたかった

PHP

すべてをFにしたかった結果

PHPで関数を返す関数を呼んで関数を呼びたかった(即時実行)

PHP

関数を返す関数を変数に入れて、直接呼びたい。 357 PHP7 問題なし。 PHP5.6 syntax error, unexpected '('怒られた。 他の動かない例 括弧したり変数に入れたり。

Scalaでスクレイピング

Scalaでスクレイピングしてみた。 ライブラリ jsoup やってみた はてなホッテントリのタイトルとリンクを抽出。 build.sbt name := "scalascraping1" version := "0.0.1" libraryDependencies += "org.jsoup" % "jsoup" % "1.7.3" main.scala import org.jso…

PHP7のThrowableを利用したキャッチ

PHP

PHP7からErrorクラスが新設されて、文法エラーのような例外も捕捉できるようになった。Errorクラスも既存のExceptionクラスも、Throwableインターフェースを実装しているので、完全なキャッチは以下のようになる、と思う。 357 //try { // echo add('hoge',…

PHPでArrayOptionクラスを作った

PHP

PHPのArrayは存在しないキーにアクセスすると、Noticeのエラーが発生する。 なので、isset()やら、array_key_exists()をしてから取りに行くのだけど、どうにも面倒だった。最近覚えたScalaのgetOrElse()みたいなことができればいいなと思って、作ってみた。 …

PHPでreset()を使って先頭の要素を取り出しているコードを見た

PHP

int(101) なんとreset()は引数の配列の先頭の要素を返却する。 それを利用して、配列の先頭の要素を取得するために、reset()を使っているコードがあって、 「素直にarray_shift()使えばいいのに…」と、ひどく陰鬱な気分になった。ちなみに内部ポインタは何…

foreachの要素の変数はループを抜けても保持されるのでunset()した

PHP

はまったのでメモ。foreachで配列の中身を直接いじっているコードがあって、その後、同じ変数名を使っていたら中身が壊れてえらい目にあった。先に結論を書くと、foreachのリファレンス変数はforeachを抜けても残っていて、変な動きをしていた。 そしてそれ…

PHPでTraitのメソッド名をasで変更してuseして、うまいことする

PHP

PHPのTraitはuseしたクラスでTraitと同じメソッド名のメソッドを定義すると、それで上書きしてしまう。 foo(); //=> Hoge::foo()====== Traitは継承関係に組み込まれるわけではないので、par…

Laravel5.1入門その11 カスタムバリデーション

PHP

Controllerのアクションの最初にリクエストパラメータをずらずら書くとノイズになりがちだ。 validate($request, [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', // たくさんの // パラメータ //…

筋トレを続けて1年経った

以前からソーシャルゲームをいくつか遊んでいたんだけど、効率よくプレイするために、寝る前にスタミナ全部使って終わるようにしていた。 そんなことを続けていると、自分の現実世界の体力も、余っている状態で寝るのが、なんだかもったいなく感じるようにな…

ネストは悪ではない話

PHP

言語 PHPの話。 発端 リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典出版社/メーカー: オライリージャパン発売日: 2012/06/23メディア: 単行本(ソフ…

PHPの名前空間をuseするときはクラス名まで書く

PHP

ちゃんと理解していなかったので読んだ。PHP: 名前空間 - Manual useするときには名前空間+クラス名で、そのクラス名を修飾せずとも使えるようになる。a.php class Foo\Bar#1 (0) {} PHP5.6以上ならば、同様に、名前空間+関数名とか、名前空間+定数名で…

Laravel5.1入門 その10 はじめてのFacade

PHP

Laravelにおけるファサードとは、デザインパターンのファサードとは全く別物なので注意。 単にAPIを使うための機能と捉えておけばいいみたい。 目的 こんな感じでアプリ内からどこでも動くようにする。 true 本当に動くクラス 巡り巡って本当に動くis_piyo(…

Laravel5.1入門その9 はじめてのサービスプロバイダ

PHP

サービスプロバイダのスケルトンをartisan経由で作る。 $ php artisan make:provider FugaServiceProvider Provider created successfully.app/Providers/FugaServiceProvider.php

Laravel5.1入門その7 はじめてのIoCコンテナ

PHP

Laravelプロジェクト直下に素のPHPを書いてみる。 hoge.php bind('foo', function(){ return ['hoge' => 'fuga']; }); // fooの名前で取り出す $foo = $app->make('foo'); var_dump($foo); //=> array(1) { //=> 'hoge' => //=> str…

Laravel5.1入門その7 MongoDBにつないでみる

PHP

MongoDBをインストール。 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 $ echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb…

Laravel5.1入門その6 collectヘルパを使う

PHP

Collections - Laravel - The PHP Framework For Web Artisanslaravel.com collect([])を使うと、Illuminate\Support\Collectionインスタンスが返ってきて、PHPの貧弱なArrayを便利にしてくれる。Eloquentを使うときも、これらの便利メソッドが使える。 firs…

Laravel5.1入門その5

PHP

ミドルウェアの使い方のもっと良い方法がちゃんと書いてあった。 HTTP Middleware - Laravel - The PHP Framework For Web Artisans というかもうRailsぽい。やりたいのは /api以下のリクエストは、API用のミドルウェアを通ってほしい /api以下のレスポンス…

Laravel5.1入門その4

PHP

Laravelは5になってからPSR-4に沿うようになったので、appディレクトリの下を自由に使うのが良いらしい。APIとデバッグ用のページと管理者用のページを作る時にどうするかなと思って、まずやってみた。Controllerの下にApi、Debug、Adminの名前空間を掘って…

Laravel5.1入門その3

PHP

ミドルウェアを触ってみる。 artisanでミドルウェアのスケルトンを作る。 $ php artisan make:middleware AuthenticateUserAgent Middleware created successfully.できた。app/Http/Middleware/AuthenticateUserAgent.php

Laravel5.1入門その2

PHP

app/Http/routes.phpを触る。 text/plain

Laravel5.1入門

PHP

メモ。 Ubuntu14。 PHP5.6入れる。 $ sudo add-apt-repository ppa:ondrej/php5-5.6 $ sudo apt-get update $ sudo apt-get install python-software-properties $ sudo apt-get update $ sudo apt-get install php5 $ php5 -v PHP 5.6.9-1+deb.sury.org~tru…

二重引用符中の認識されないエスケープシーケンス

二重引用符(ダブルクオート)の中にバックスラッシュを置くとき、 「\n」とか「\t」とかのエスケープシーケンスは展開されるけれど、 「\j」のような言語が認識できないようなものがどうなるか、言語間で差が出たのでメモ。 Perl print "$]\n"; print "\j\n…

PerlでPDFに他のPDFのページを差し込む

http://r9.hateblo.jp/entry/20120513/p1ScanSnapでスキャンしたPDFをページごとに回転する - Perl日記r9.hateblo.jpの続き。(もう3年も前だ) 本体PDFに表紙PDFのページを差し込む 漫画の単行本をスキャンして自炊するときには、白黒の本体部分と、カラー…

PHPのジェネレータについてLTしませんでした

PHP

社内勉強会で、時間の関係でできませんでしたが、作った資料がもったいなかったのと、Speaker Deck使ってみたかったので試しに貼ってみます。

PHPでUnix時間からDateTimeオブジェクトを作るときのタイムゾーン設定

PHP

はまったのでメモ。 UnixタイムからDateTimeオブジェクトを作るときに、他のやり方と同じノリでタイムゾーンを第二引数に渡しても効いていなかった。一応、マニュアルにも書かれていた。 PHP: DateTime::__construct - Manual 注意: $time パラメータが UNIX…

PythonでMacの濁音・半濁音のファイルを扱う

MacはNFD形式で日本語のファイルとかディレクトリを作るので、スクリプト内の日本語でひっかけられない。 import os os.mkdir("はっぴー") os.path.exists("はっぴー") #=> True これは引っかかる for file in os.listdir("."): if file == "はっぴー": #=> …

PHPのジェネレータまとめ

PHP

PHP5.5から使えるようになったジェネレータについて、社内普及用にまとめる。 ジェネレータとは ジェネレータは、プログラムにおいて、数列の各要素の値などを次々と生成(ジェネレート)し他の手続きに渡す、という機能を持っている手続きである。値を渡す…

ReactでJSON整形ツール書いてみた

できたもの https://dl.dropboxusercontent.com/u/9152456/json_stringify/index.htmlいろいろやった後、削りまくったら結局stateしか使わなかった。 <html> <head> <meta charset="UTF-8"> <title>JSON整形ツール</title> style略 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.2/react.js"></script> </meta></head></html>

PHPの知見がたまったので共有します

PHP

順不同です。 インスタンスメソッド内でのクラス変数取得 from_static() ); //=> array(123, 234, 345) p…

PHPのつらいところまとめた

PHP

半年近くPHP5.3を仕事で使っててつらかったことをまとめた。 キーワードも関数名も大文字と小文字を区別しない h(); // hoge! 複数人で作ってるとほんとこういう些細なところで余計な手間がかかる。 チェックするのを自動化するのも手間。 あるいは、これく…

PHPの関数の引数メモ(デフォルト値の定数、タイプヒンティングのnull)

PHP

関数の引数の挙動メモ。 デフォルト値 デフォルト値は、定数式である必要があり、 (例えば) 変数やクラスのメンバーであってはなりません。 http://php.net/manual/ja/functions.arguments.php#functions.arguments.default定数ならばよいということで、定数…

PHP5.3での無名関数内でのselfや$thisは解決できないから気をつけろ

PHP

ハマったのでメモ。 PHP5.4以降なら問題ないっぽい。 無名関数内でselfや$thisを使うとエラーになる。

PHPのオブジェクトはnewできる

PHP

なんか動いたのでメモ。 str = $str; } } $hoge = new Hoge("hoge"); print_r($hoge); $fuga = new $hoge("fuga"); // ★オブジェクトにnewする print_r($fuga); __construct() is called. Hoge Object ( [str] => hoge ) __con…

PHPのarray_walkはforeachに置き換えよう

PHP

PHP: array_walk - Manual array_walkはforeachに置き換えた方が圧倒的に可読性が良いと思う。 特に引数でそのまま無名関数を渡してしまう場合。 array_walk版 15 // [1] => 25 // [2] => 35 // [3] => 45 // [4] => 55 //) foreach版

PHPのabstractクラスのstatic関数は呼べる

PHP

呼べたのでメモ。