5/30/2014

org-refresh-category-properties: Invalid function: org-with が出たら

デフォの org が古かったから ELPA から入れたら何か上手く動かなかった時の話です.Emacs は 24.3 です.僕は org ファイルを .tex とかに変換するときに出ました.対処法は,/usr/share/emacs/24.3/lisp/org をふっ飛ばした状態で,package-install で ELPA から org を再インストールすると治ります.最近の org では org-latex じゃなくて ox-latex を require しなきゃいけないので,設定ファイルにそのような記述が残っていたら直しておきましょう.

参考:Re: [O] Bug: org-refresh-category-properties: Invalid function: org-with

5/22/2014

MacBook ProにUbuntu 12.04を入れるとディスプレイとキーボードバックライトの輝度が最大になる問題

まあ実際に入れてるのは Elementary OS (Luna) なんですけどね.

MBP のプログラミング環境をいじりすぎてぶっ壊れてきた感じがある(具体的に言うと D 言語が上手く動かなくなった)ので最近はデュアルブートの Linux の方を主に使ってるんですが,Linux 側を起動する度に表題の問題に悩まされていました.が,解決した(けど日本語情報が無かった)ので一応備忘録に.

まあ要はここに載っているんですが.

これの 14-15 行目の部分を書き足せばいいみたいです.14 行目のスクリーンのバックライトは 1 から 15 の 15 段階,15 行目のキーボードのバックライトは 1 の 255 の 255 段階(1 でオフになる)で調整できます.

上記のページには「lightum を入れると自動で調整できるよ!」とかいうことが書いてありますが,バッテリーを無駄に消費しそう・挙動がウザそうなので僕は入れてません.という事でご参考までに.

12/03/2013

Codeforces #215 B in D

クイズの問題作ってたら飽きたので問題解いてた。一大学クイ研の会長として色々とダメな気がする。アレです。気分転換です。気分転換のほうが時間かかったけど。

問題はここ。まずある大きさの int 配列を受け取って、後で指定されたインデックスから終端までのスライスの unique を取った時のサイズを返す。

自分の正解答案は以下。

注目すべきは 8 行目以降。ていうかぶっちゃけこの部分は他の人の答案パクりました。最後の言い逃れとして一応 D 言語以外の答案を見るようにしました。というかフィルタかけたら僕以外に D 言語の答案無かったし。だいたいみんな C++ で解いてた。でも僕の上のプログラムでも 78ms だし十分匹敵する速度は出せてた。

閑話休題。ソートされてない配列のユニークを取りたければ連想配列を作る。で何も考えずに端っこから順番に連想配列に突っ込んでいく。んで ans[i] には後ろから i 個分のスライスをユニークにした配列のサイズを入れておく。これで、この問題で求められうる全ての場合の解答が O(n) で用意できる。よく分かんないから値はブーリアンにしました。でもメモリはめっちゃ(7300KB)使ってた。まあ範囲内だし気にしない。

最初 std.algorithm.uniq を使ったら全然意図しない配列が返ってきた(Ruby 脳なので Array#uniq 的な動作を期待してた)。よく考えてみたらどうも隣り合う要素が一致してるかどうかしか判定してないみたいで、こういう実装の仕方は C++ でも同じらしい。何でこういう風にするかというと O(n) で終わるので速いから。で、これを使うとき配列はソートされてなければいけないので、arr.sort.uniq みたいにして使いなさいよと。std.algorithm.sort は O(nlog(n)) で終わるので、Ruby Array#uniq みたいに O(n^2) かかるよりはさっきみたいにしたほうが速いということか。でも知らないと分からないよね……情弱辛い。

ちなみに僕は最初はインデックスを求められる度に後ろから l 個のスライスのユニークを求めてたので、大きさ 10^5 の配列のユニークを 10^5 回調べたら 10^10 だからそりゃあ TLE で死ぬのも当然だわなあと。また 1 個勉強になりました。

L5-6 で front と back を使ってるけどこれは L4 の最後に array を付けてなかった時の名残です。どうせ UFCS で繋げないなら先行評価しちゃった方がいいよなと思って array を外しました。適宜使い分けていこう。

明日は 1 限なのでもう寝ます(寝ない)。

11/30/2013

Codeforces #215 A in D

プログラミングがしたくなったけど特にすることがなかったので適当に競プロの問題を解いていた。ら、めっちゃ時間かかった。でも最終的にはかなり可読性の高い感じのするプログラムに。UFCS っょぃ。アルゴリズム自体は何でもないただの貪欲法(だよね……?)だけど D 言語的に得るところが結構多かったのでメモしておく。

解いていたのはこちらの問題

自分の解答はこちら。

L4:配列の宣言。大きさの決まっていない配列は宣言することが出来ない。Ruby 脳なのでハマってしまった。要素数の分からないデータを配列に取り込む時ってどうすればいいんだろう。1 個ずつ length を広げながら代入するとか、予め十分大きな配列を用意しといて init なままの要素を消すとか?

L5:foreach で配列の中身を初期化する。1 個目の elem は配列の中の要素の代表を表す。配列の中身を変更するような操作をする時は、ref を付けて参照にしないといけない。

L6:std.array.map の返り値は MapResult とかいう謎の型で、これは map を評価する前の中間物みたいなもの。つまりこの時点で map はまだ評価されてない。ということなのだと思う。この型に直接 sort とかするためには std.array.array を送る。そうすると map を評価させて int[] とかが得られる。

L10:これも上のと同じ。ちなみに std.array.sort は SortedRange を返す。困ったら typeid(var).writeln; すれば型名が分かる。

L16, 18:std.array.reduce は先行評価らしい。ちゃんと最終的な結果をすぐに返す。

ところで UFCS の関数呼出し演算子の省略っていつから出来るようになったんですかね? もしかして最初から? 実行したら普通に動いて後から括弧忘れてたのに気付いた。Ruby は基本的にメソッドチェーンで書くことが多いけど writeln とかにも UFCS が使えるのはいいですよね。括弧よりもピリオドのほうが断然打ちやすいし。ジェネリック引数の括弧も省略できるみたいだけどそこまでするとかなり見づらい感じがしそうなのでしない。ていうかラムダ式みたいなのを文字列で送るって一体どうなってるんだろう……。

まとめ:D言語基礎文法最速マスターが最強。あと TDPL(ただ誤植が自分でも気付くレベルで多い…… 2 刷に期待)

11/08/2013

Mavericksでローカル開発環境を立ち上げてSinatraを動かすまで

所用でWebアプリケーションを作る必要があって、「You、Sinatraで作っちゃいなYO」みたいなことを言われてたので、じゃあSitesの中に勉強用のアプリ作るかーと思ってホームの中を見たら、Sitesが無い。とりあえずシステム設定からWeb共有の確認をしようと思ったら、その項目が無い。僕のMBPはLionからMavericksに飛び級させたんだけど、どうもMountain Lionの時点でこの項目は消えていたらしい。ただApacheはデフォルトでインストールされてるので、それを立ち上げればオッケーという話。
sudo apachectl start
で、パスワードを入力するとサーバが立ち上がります。また、$HOME直下にSitesディレクトリを作ると、今までどおりコンパス付きのフォルダアイコンでディレクトリが作られます。このディレクトリには ~/Sites/~username でアクセスできます。
設定が終わったので意気揚々とお試しのプログラムを書いて実行させてみた。
require 'sinatra'

get '/' do
  "Hello, World!"
end
main.rb:1:in `require': cannot load such file -- sinatra (LoadError)
 from main.rb:1:in `<main>'
いやいやそんな馬鹿な、ちゃんとsinatraはインストールしたぞ、と思って色々調べてたんですが、require 'sinatra'する時はちゃんと同じディレクトリの中にGemfileを作ってbundle installしなきゃいけないらしい。ということで、
source 'https://rubygems.org'

gem 'sinatra'
としたら、
$ bundle install

Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rack (1.5.2)
Using rack-protection (1.5.1)
Using tilt (1.4.1)
Using sinatra (1.4.4)
Using bundler (1.3.5)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
で、この後もう一度ruby main.rbしたら、めでたくエラーは消えました。

5/03/2013

F#でARC#001_B

というわけで解いてみました.とりあえず F# で.Scala で書いても Ruby とほとんど同じになりそう(ひどい).

どうでもいいけど,いつも通り SyntaxHighlighter でハイライトしようとしたら案の定 F# が対応してませんでした.ということで苦肉の策で gist.ちゃんと埋め込み用の js 用意されてたよ.神か.

1 行目.いきなり標準入力で躓く.標準出力は printfn があるけど標準入力は F# のライブラリには無い? 調査不足ではありますが.まあでも副作用(最近覚えた)だししかたないね.ということで .NET です.

2 行目.タプルを使った束縛は Ruby の多重代入に似てる.めちゃ便利.F# で型キャストはどうやるのかな,と思って調べてみたら,変換したい変数に変換先の方の修飾子をつけるだけでいいっぽい.これは int.Parse より楽.あと地味にインデックスの指定でつまづきました.括弧の前にドットが要るのはどうなんだろう.外せなかったんだろうか.fsi にダメ出しされまくりました.

3 行目.ごく普通の条件分岐です.これぐらいの短さだったら三項演算子使いたいんだけど実装されてないっぽい.ここは C# に軍配.

5-10 行目.関数型っぽく再帰を使って書いてみました.ちなみにここはコンパイラの警告で網羅されてないパターンに (1, 5) が挙げられてたんだけど,5 で割った剰余って 0-4 しかないからありえないよね,と思うんですがどうなんだろう.僕の気付いてない落とし穴があるんだろうか.

12 行目.F# の出力はどうも整形形式しかないっぽい.print x とかやりたいよなあ.まあ引数に直接関数の返り値を渡せるのは便利かな(関数型はみんなそうだが)(ていうかオブジェクト指向もだけど)(もしかしたら C でも出来る?)(コンパイル型もちゃんと勉強しましょう).

一番の大きな壁は入出力だけど,これ 1 回の実行で多ケース実行されるパターンの問題だったらどうするんだろう? いちおう立場上はマルチパラダイムだから再代入可能な変数を使えばいいんだろうけど,何か負けた気がする.Scala なら var を使えばいいけど Haskell とかだとどうするんだろう.

まとめ:全体的に勉強不足でした.

4/23/2013

2年生になりました

まあ学年は自動で上がるんですが.ということで近況報告です.2 ヶ月も間を空けて何が近況なのか.

タイトルの通り,年度が変わって学年が 1 つ上がりました.1 年次の修得単位数は 36.5 単位です.はい.6 単位落としました.落ち込んだりもしたけれど,私は元気です.必修の英語は 3 年次で 2 つとも回収する予定だから大丈夫なのです.

プログラミングですが,最近は Ruby は全然書いてません.むしろオブジェクト指向の言語自体全然書いてません.その代わりに関数型プログラミング寄りの言語を少しかじっています.家の MBP で Erlang,家の Win8 でF#,学校の計算機で Scala というぐちゃぐちゃな生活を送ってますが,とりあえず Erlang は構文が謎(甘え)なのと,この言語自体がもともと並列処理だとか分散処理だとかサーバ向けの言語で,自分が書きたいのはそっちじゃないよな,ということで一旦やめになりそうです.進めたら進めたで新しい見地が広がりそうなのですが.やはりまだオブジェクト指向が残ってないと分かりづらい,ということでマルチパラダイムの Scala と F# を続けてみたいと思います.大学図書館の蔵書で,Scala は『Scalaスケーラブルプログラミング第2版』があるのでいいんですが F# はオライリーの『プログラミングF#』ぐらいしかないので困ったなあと.ブログとか見てるといわゆる『実践F#』が有名らしいんですが.置いてくれないかなあ.

音ゲーについて.弐寺は☆ 12 がポチポチとつき始めました.が,まあまだ☆ 11 を進めるしかないかなと.十段を受けたらクッキーの前半癖地帯を抜けたのでびっくりしております.九段は強欲で 20% 残るようになったのでそれなりに成長したかなと.ポップンはコンチェ EX は初見でクリア出来ました.ワラベステップまだ出してません.弐寺のやりすぎです.ドラムは最高が 7.15 とかになりました.目標の 8.00 までもう少し.ギターは依然判定が合わない.ボルテは neu リミ EXH を初見でクリアできた,とはいえラストノートでボーダーに乗ったぐらいなので修業がやはり必要.ダンエボ最近やってません.ルカルカ難しい.恋愛サーキュレーション覚えるかどうか迷いどころ.

クイズ研究会は新入生が5人ぐらい入りそうです.4 人が経験者です.神かよ.これでこの先しばらくは安泰であります.ちなみに QMA は Season2 になって安定のガーミノです.まさかこんな世界になるなんて.ミノが旧ドラ並ってどういうことなんだ.

去年 1 年は大学の講義もあって Ruby がそこそこ書けるようになった(はず)(と思いたい)ので,今年は何か他の言語,特に上に挙げた F# とか Scala とかをそこそこ書けるようになりたいなと.関数型プログラミングのアプローチの仕方はまだ勉強して日が浅いものの結構気に入ってて,それはやっぱり C# とか Java のクラスの書き方が煩雑なのに対して関数型とのマルチパラダイムの方がスリムで分かりやすのが大きいからかなあと.『独習C#』でもクラスの章に入ったところで「何でこんな同じようなことにこんなに行数割かなきゃいけないんだ!! うわああああああ!!」と思ってたので.あと getter と setter とか.最終的には F# で GUI アプリケーションを書けるようになりたいです.となると今度は .NET の勉強もいるんですが…….

あと秋に FE 取ります.過去問解きまくろう.

今年度も広く浅く頑張ります.