サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
lethevert.hatenadiary.org
たとえば、 public class Comp { public static void main(String[] args) { int[] a = new int[] { 1, 3, 8, }; int[] b = new int[] { 1, 3, 8, }; System.out.println(a == b); System.out.println(a.equals(b)); System.out.println(java.util.Arrays.equals(a, b)); } }なら、結果は false false trueこうすると public class Comp { public static void main(String[] args) { Object[] a = new Object[] { new int[] {1,2}, new int[] {3,4}
僕が愛用しているEOFile作者さんのところに、こんな記事があるのですが、 http://hp.vector.co.jp/authors/VA028375/delphi/delphipascal_xx_lambda.html ここまで手の込んだことをしなくても、単純な関数ポインタとして関数内関数を渡すことは実はそんなに難しいことではなかったのですね。つまり、Pointer型に代入してやって、使うときに関数型にキャストしてやればいいのです。気をつけることは、親関数の変数やSelfオブジェクトに触らないようにすることです。これは結構便利です。 procedure SomeFunction(x: Integer; y: [0,1]) type TFunc = function (z: Integer): Integer; function RunSubFunction(pfunc: Pointe
Haskellのseqって、Haskellの意味論の中で適切に定義できるものなのだろうか?
昨日の続きです。 UCVが取り扱えるアプリケーションを探してみたところ、ほとんど見つからなくて、見つけたと思ったら20万円もするしで、どうしようもない。何とか見つけたのが下のものだけど、これが本当に使えるのかどうかカタログからだけではよくわからない。 パソコン決裁 UCV Viewer http://www.shachihata.co.jp/interweb/product/product031.php いずれにしても、これだけあってもだめで、UCV形式の画像ファイルをダウンロードする方法とOCRでデータを読み取るところの作り込みが必要で、めんどくさい。データは手書きだったりするので、OCRの精度も落ちるのだろうし。 なんで人力で解析したデータを公開してくれないかな。 - 電子データが手に入ったとして、どういうプログラムを作ればいいかというと・・・ 政治団体間の資金の流れ 政治団体間で寄付
個人的に、企業・団体献金自体に問題があるとは(法律上の形式的な問題はともあれ、一般論としては)思っていないのだけれど、もしマスメディアがそれに問題があるという立場をとるのなら、政治資金収支報告書は公開されているのだから、政治家一人一人についてどのお金がどこから来たものかを、全部調べて発表すればいいのではないか?そのくらいのこと、大して難しいことでもないと思うのだけれど。 検察の話を垂れ流すだけが、マスメディアの仕事でもないだろうに。 - http://www.seijishikin.soumu.go.jp/ ここにデータがあるみたいだから、ちょっとプログラムを書いたら、集計できるんじゃないか? 時間があったらやってみるかな。 - と思ったら、データのみのダウンロードの仕方がわからない。何この妨害工作? - http://www.seijishikin.soumu.go.jp/S0530.h
http://uk.finance.yahoo.com/q/bc?s=VOW.DE&t=5d&l=on&z=m&q=l&c= 実に1日で80%以上の急騰だそうです。 主にテクニカルな理由で売り方がいなくなってしまったからだそうで、一気に世界一の時価総額に躍り出たそうな。
昨日、新しいブログを作っていろいろ試しているという話を書いたのだけれど、今まで試したことをまとめておこうと思います。 ブログ ブログはBloggerを利用しています。これは、まあ、なりゆきですが、あえて理由を挙げると、 すでにアカウントを持っていた 複数人で管理するブログを簡単につくれた(家族で更新するため) レイアウトの自由度が高かった 写真のアップロードが簡単だった 独自ホスト名が割り当てられる というあたりがメリットだったかと思います。 デメリットは、 トラックバックがない 更新Pingが送信できない Bloggerにトップページにあたるページがない 絵文字やアイコンがない アクセス分析のツールがない というあたりで、特にアクセスを呼び込む仕掛けが弱いのが大きいです。 広告 広告は、もっとも興味のあるパーツでした。というのは、ウェブサービスの世界では、広告は、ほとんど唯一十分な規模で
私が学生の頃は、Sonyは日本を代表する企業で、就職活動ではあこがれの企業というのが一般的な認識だったのだけれど、今や面影もないというか・・・。学生の頃、ソニー株に手を出して、痛い目を見たことを覚えています。思えばあれが凋落の始まりでした。 過去30年の就職人気企業ランキング Sony凋落と時を同じくして、Appleは急成長しました。Sonyが持っていた大衆的なイメージと、Appleの戦略が重なったためか、「iPodはSonyが作るべきだったはずの商品だ」的な議論をよく見かけたような気がします。 でも、実際、SonyとAppleってどのくらい似ている企業なの? - Appleは、前にも一度書いたように「一般消費者のエンターテインメントに関する情報の流通から消費までをワンストップで提供する」企業だと考えてよいと思う。それに対して、Sonyは? 年次報告から基礎データを拾って比較してみようと思
GCはBoehm GCというライブラリがあるのと同じように、型システムもライブラリとして利用できればよいのにね。 そうすれば、シンタックスと処理系だけ実装して、型システムはライブラリに任せて、型付きの自作プログラミング言語を作ることができるじゃない。ついでに、型推論もライブラリで提供してくれたら、自作プログラミング言語に型推論まで付けられる。 Haskell Hackathonとかでも大活躍。
「休みたいならやめればいいらしい」の話は関連するのですが、 ベンチャーを起業して成功する人って、ちょっとバカなひとでなければなれないと思うのですよね。いや、失礼な物言いなのは分かっているのですが。 普通に考えて、起業なんて、背負わなくてもいい苦労を背負うし、信じられないほどリスクが高いし、周りは反対ばかりだし、成功報酬が大きいといってもそんな大金を手にしたところで普通に幸せな人生には多すぎる額ですよ。 ということは、そういうところに手を出して、かつ成功する人って、ハードワークやリスクを非常に好むし、自分の能力や判断に強い自信を持っているし、一度決めたら他人の意見はほとんど聞かないというタイプの人に限られてしまいますよね。ね? でも、一人の人間の持っている能力って、どんなに才能があったって、どんなに頑張ったって、限られた範囲しかカバーできないわけですし、人生の目標や価値観にはいろいろなものが
http://www.asahi.com/business/update/0423/OSK200804230044.html ほぇー、すごいな。 こういうのを見ると、どういう会社か知りたくなって、有価証券報告書とか意味もなく読みあさってしまうのです。 10年間で売上高が6倍超という成長の原動力が社員の「ハードワーク」にあることを強調した。 とりあえず、売上高が6倍超ってところを確認してみようかなと。有価証券報告書は、IR情報からでも見られるし、EDINETからでも見られるので、その辺から。 年 連結売上高(百万円) 連結従業員数(人) 連結1人当たり売上高(百万円/人) 単体売上高(百万円) 単体従業員数(人) 単体1人当たり売上高(百万円/人) H12 138,504 13,337 10.4 98,117 909 107.9 H15 298,641 40,932 7.3 129,164
継続Festに刺激されて、Javaで継続を書いてみようという遊び。 題材は、times関数。とりあえず、リストを定義しておきます。 static IntList il (Integer... ls){ IntList res = null; for (int i=ls.length-1; i>=0; --i){ res = new IntList(ls[i], res); } return res; } static class IntList { int n; IntList tl; IntList(int n, IntList tl) { this.n = n; this.tl = tl;} } さて、まずは普通にtimes関数を作ります。 static void show (Object s) { System.out.println("end"); System.out.print
就職活動とか転職活動をするときの基本的なテクニックの1つに、会社の給与水準を推測するというのがあります。 これは、「会社名 給与」で検索したり、2chを見たりするのではなくって、財務諸表から計算するのです。 というわけで、最近有名なあそこを計算してみましょうか。 http://investor.google.com/order.html ここに、財務諸表が公開されています。 http://investor.google.com/documents/2007_Google_AnnualReport.html これが、2007年の年次報告書です。「research and development」で検索すると、従業員数とコストの記述が見つかります。 At December 31, 2007, we had 16,805 employees, consisting of 5,788 in res
[id:soutaro:20050903] - http://www.jac-net.com/~tarzan/smalltalkers/mvc/mvc.html このURLは、最近見つけたのです。Smalltalkは詳しくないので、ソースコードまで確認していないですが、 モデルは、画面に表示したいオブジェクトそのものです。ところが、自分は「いつ、どこに、どの位の大きさで、どのように表示されるのか」という情報は持っていません。つまり、データ管理だけを専門に行うのがモデルの仕事です。 ビューは、モデルを「いつ、どこに、どの位の大きさで、どのように表示されるのか」を知っています。つまり、表示(出力)まわりを一手に引き受けるオブジェクトです。 コントローラは、モデルやビューを操作するためのユーザからの要求を受け付けます。そして、モデルやビューにメッセージを送り、全体の動きを制御します。指示(入力)
sqlite3とかの場合、 class obj(dict): __getattr__ = dict.__getitem__ __setattr__ = dict.__setitem__ __delattr__ = dict.__delitem__ def dict_factory(cursor, row): d = {} for idx, col in enumerate(cursor.description): k = col[0] s = row[idx] d[idx] = s d[k.upper()] = s d[k.lower()] = s return obj(d) という感じの関数を用意しておいて、 import sqlite3 con = sqlite3.connect(dbfile) con.row_factory = dict_factory a = con.execut
ちょっと経ってしまいましたが、先週の土曜にサイボウズ・ラボにお邪魔して、Haskell Hackathonという集まりに参加してきました。 12時間でHaskellの処理系を作る!というのが趣旨の会だったのですが、関係ありそうでなさそうな、CleanJの開発を進めていました。(一応、Hacleというのがあるので、Haskellの処理系を作っていたと言えなくもないのですが) 参加前の状況として、去年の秋頃にCleanJのバージョン2を作るという計画を立てて、開発をはじめていたのですが、諸事情で年末からまったく放置してしまっていた状況でした。でもまあ、成り行きでいろんなところで宣伝してしまったので、再開させないとなーとか思っていたので、参加してもいいかな?とひとりごちていたら、id:yukobaさんがいいよとぶくましてくれたので、参加してきました。 サイボウズ・ラボというのは、今回はじめて行っ
Reddit経由でhttp://d.hatena.ne.jp/kazuhooku/20080210/1202624721を見かけて思ったことなのだけれど、元記事の主張とは微妙にテーマがずれている内容だと思うので、独立した記事として考えてもらえればと。 ここ2ヶ月位、しつこくデータベースアクセスの高速化に取り組んで分かったのは、データベースのレコードサイズはアクセス速度にかなり決定的な影響を与えるらしいということ。 レコードサイズがアクセス速度に影響を与えるメカニズムは、こういうことだと推測している。データベースは、ディスク上に格納されたレコードをメモリに読み込む際に、効率のために、いくつかのレコードをまとめて固定長のブロック単位で読み込む。その際、レコードサイズが小さければ、1ブロックに格納できるレコード数が増加するため、少ない数のブロックをフェッチするだけで必要なレコードを読み込むことが
モナド (Monad) 前回は、関数的に入出力を表現しながら、制御構造を表現する方法を検討しました。今回は、このアプローチを進めて、組み立て可能なソフトウェア部品として利用可能な構成について検討します。 前回の処理がソースコードにハードコードされていました。しかし、各アクションはそれぞれ別々の関数として独立しているため、これらのアクションを別々に定義して必要に応じて組み合わせて利用できるよう部品化することができます。また、部品化のついでに、トップレベル以外でアクションを実行することができないように、アクションをカプセル化することを同時に行います。 ここでは、部品化の仕掛けとして、モナドを利用します。まず、次のようなコンテナを用意します。カプセル化によって、プログラム中でコンテナから値を取り出すことは、できないと仮定します。 class IO: def __init__ (self, *v)
http://forums.egullet.org/index.php?showtopic=119809 http://www.wikihow.com/Eat-Pizza イタリア料理を食べるのに、手を汚さないなんて不可能ですよねぇ。あと、服も・・・
モンテカルロ法の命令的プログラム まずは簡単な例を考えてみることにします。 プログラミング言語は当面pythonを使います。命令型も関数型も同じ言語を使います。これは、馴染のない純粋関数型言語を使わないで説明するということの他に、関数プログラミングのアプローチとプログラミング言語の依存関係がそれほどないということを示す意図もあります。 最初の例は、SICPで出てきたモンテカルロ法のサンプルです。 任意の2つの数が互いに素である確率がとなるところから、乱数を2つとってそれが互いに素であるかというテストを何度も行ってその確率を求めてそこからπの値を推定するという問題です。 def cesaro_test (): return 1 == gcd(rand(), rand()) def gcd(a, b): while b > 0: a, b = b, a % b return a テストは上に示
某所の議論を見て思ったのだけれど、 普通のオブジェクト指向言語でプログラミングする時は、対象を内在化してプログラムを書くという手法が比較的多く採用されているような気がする。特に複雑な問題を定式化するときは、対象をオブジェクトの形で表現するというところから設計が開始する。UMLなんかはその線で進めることが前提になっている気がする。 対象を内在化してオブジェクトの関係を固定化すると、対象に対する操作は自然に副作用を伴う操作になる。そのため、そのようなアプローチで進めた設計は、純粋関数型言語とは相容れないものになってしまう。おそらく、普通のオブジェクト指向言語で育ったプログラマは、この壁にぶつかってなかなか乗り越えられないのではないかと思う。 純粋関数型言語を相手にするときは、対象を内在化してプログラムを書くという手法は全面的に捨てる必要がある。代わりに、対象を外在化するというアプローチが必要に
http://yamarou.at.infoseek.co.jp/javanawake/022.html java.ioとjava.nioのファイル読み込み速度を比較しているのだけれど、ちょっとプログラムがアレだなと思ったので、書き直してみた。 主要な部分だけを比較すると、元の記事のプログラムは、 /** * filePathのファイルを読み込んでbyte配列に格納して返す。java.ioを使う。 * @param filePath * @return ファイルの中身 */ public static byte[] readUsingIO(String filePath) throws IOException { BufferedInputStream in = new BufferedInputStream( new FileInputStream(filePath)); byte[]
スクリプト言語の方面からは不評なJavaですが、その1つにはリフレクションが使いにくいとかいうのがあるそうです。 そういうことは、ダイナミックプロキシのことを知ってから言うのも悪くないと思うので、簡単な紹介を。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/reflection/proxy.html この機能を使えば、smalltalkの#doesNotUnderstandやrubyのmethod_missingのような機能が(インターフェースを宣言しなければならないという制限はあるものの)実現できます。 たとえば、次のようにすることで、インターフェースを引数に渡すと、呼び出されたメソッドのメソッド名を標準出力に出力するだけのオブジェクトを生成して返します。この例では、java.sql.Connectionのオブジェクトを作って、適当にメソ
cons 連結 n番目の 要素 最初の 要素 残りの リスト n番目の要素 の更新 スライス Clean list [a:aa] aa ++ bb aa !! n hd aa tl aa updateAt n elm aa aa % (i,j) Clean array - aa +++ bb (文字列のみ) aa.[n] aa.[0] - aa := (n,elm) (文字列のみ) aa % (i,j) (文字列のみ) Haskell list a:aa aa ++ bb aa !! n head aa tail aa - - OCaml list a::aa aa @ bb nth aa n hd aa tl aa - - OCaml array - append aa bb aa.(n) aa.(0) - aa.(n) <- elm sub aa i len 平文に半角の[]を書くには
Haskellはデフォルトで遅延評価ですから、実装に関することは全部後で書くことになっているのですよ。 - 普通(って何が普通か知りませんが、私が普通だと思っている普通)は、末尾再帰の最適化というのは、次のような疑似アセンブリが FUNC_A: いろいろ処理 CALL FUNC_B RETというところを、CALLのあとすぐにRETだからこれってJMPで置き換えられるよね、ということで FUNC_A: いろいろ処理 JMP FUNC_Bとなることや、CPS(ちゃんと勉強してないので気分だけですが)で書いたときに (define (func-a cont) いろいろ処理 (func-b (lambda () (cont)))) というところを、func-bの引数のlambdaって要らないよね、ということで、 (define (func-a cont) いろいろ処理 (func-b cont))
Finger TreesをJavaで実装してみた。 まあ、ネタなのでpushしかないけど、どういうデータ構造かを知るにはよいかも。 import java.util.ArrayList; import java.io.PrintStream; public abstract class FingerTree<A> { public static <A> FingerTree<A> create () { return new Empty<A>();} public abstract FingerTree<A> pushL (A a); public abstract FingerTree<A> pushR (A a); public abstract void print (PrintStream out); } class Empty<A> extends FingerTree<A>{
http://www.aya.or.jp/~takuo/arrow_for_2ch/arrow_for_2ch.pdf これは分かりやすいかもな。
さっきのを、もうちょっと汎用化させて、コルーチンを作ってみた。コルーチンにすると、スレッドが競合することがなくなるので、排他制御やらなんやら考えるのはずいぶん楽になる。 これがサンプルコード。sleepしている最中に他のスレッドが割り込んでいないことに注目。 public class CoMain{ static Coroutine c; public static void main (String[] args){ init(); while (c.yield()); System.out.println("main finished"); } static class Test implements Runnable{ int p; Test (int p) { this.p = p;} public void run (){ for (int i=0; i<5; ++i){ c.y
PythonのGeneratorみたいなものをJavaで作ってみようと思った。Javaには本物のマルチスレッドがあるのだから、Generatorくらいは当然作れるのだけれど、いざちゃんと協調動作させようとすると上手く書けなくてあきらめる人とか多いのじゃないかとか思ったので。 実装上は2つのスレッドを協調動作させているのだけれど、使っている側からは1つのスレッドが交互に制御を移しているような感覚で使えます。 これがサンプルコード。 public class GenMain{ public static void main (String[] args) { Generator<String> g = new Generator<String>(new Call()); String s = "開始"; i = 0; do{ System.err.println(i); System.err.
次のページ
このページを最初にブックマークしてみませんか?
『lethevert is a programmer』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く