サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
rubyu.hatenablog.com
直近1年ほどで人生が大きく動いたので、忘れないうちに文章にしておこうと思います。 よくある転職の話です。 昔を振り返ってみると、僕はあまり学問に興味があるタイプの人間ではありませんでした。 ろくすっぽ勉強しないまま小中と進学し、高校受験に際しても無勉強で高専に挑んで当然のように落ちたりしてました。 中学の半ばあたりでCSに興味が芽生えたのですが、その興味を勉強という行動に結び付けることができず。単にコードを書いて遊んでただけ。 いい大学に行っていい会社に就職するんだというお話は、進路を決めるための折々の機会に、繰り返し学校の先生方から聞かされたのですが、そのお話の意図するところを掴めなかったのですね。 そうして僕は選択したわけです。いい会社に就職する…どころか、進学すらしないという選択を。 いい会社に就職できなかったケース 家業手伝い(農業) 僕は農家になりました。 農業は最高! 植物は勝
以前から、Ankiデッキを効率的に各種のデータから作成する方法を開拓してきたが、ここではEpwing辞書からAnkiデッキを生成する方法を紹介する。 まえがき Epwingとはかつて、一度データを購入すれば、自身が所有するあらゆる端末上で利用することができるようになるという、夢のような、自由で便利な辞書データの規格(JIS X 4081)であった。 しかし現在では、旧式化、クローズドな規格への切り替えなどにより、ほぼ絶滅しており、オリジナルのEpwing辞書の入手は困難になっている。 一方で、デファクト・スタンダードとして一度覇権を握った影響は大きく、現在でも各種プラットフォーム向けのEpwing辞書ビューアは生き長らえており、各種の辞書ソフトのデータをEpwing形式に変換するようなツールも有志により開発が続けられている。 中でもロゴヴィスタの電子辞書シリーズは、Epwingから派生した
自炊に至った理由 普段から語学やプログラミングに関するわりと分厚い本を読まねばならないことが多く、なんとかソファーや机で読んでいたんですが、どうもムリがあると感じていました。というのもアイツらは平気な顔して馬鹿でかい空間を専有するんですよね。 ブックスタンド ELECOM EDH-004 ブックスタンドposted with amazlet at 13.05.13エレコム 売り上げランキング: 81 Amazon.co.jpで詳細を見る を使っても数冊広げれば机の上はそれでもういっぱいなわけです。紙と鉛筆を広げるスペースと食い合うんですよ。ブックスタンドを使うと多少はマシですが、今度はディスプレイを見る邪魔をする。机の上に置いてあるディスプレイの下の方が見えなくて、椅子から腰をあげて紙の上にキーボードを置いて作業をするとか…。何かが根本的に間違っている気がしました。 また、ソファーでの読書
「動詞を使いこなすための英和活用辞典」 動詞を使いこなすための英和活用辞典posted with amazlet at 13.02.28ジャン・マケーレブ マケーレブ・恒子 朝日出版社 売り上げランキング: 187,138 Amazon.co.jpで詳細を見る の評判がよいらしく、ボキャビルに使ってみようかなぁと考えたが、紙の本をボキャビル教材にするのはすごく敷居が高い。自炊代行に頼んで、Acrobatからコピペして…とそれを数万回も繰り返す頃にはきっと世紀が変わっている気がする。よし、僕は何も見なかった。といったん忘れていたところにこんなものを発見した。 「E-DIC 英和|和英 (イーディック) 第2版」 E-DIC 英和|和英 (イーディック) 第2版 ((Win版))posted with amazlet at 13.02.28 朝日出版社 売り上げランキング: 96,494 Am
http://syslog-win32.sourceforge.net/ から syslog-win32-0.3.exe を取得してインストール とりあえずそれだけでサービスにsyslogが追加、開始されていて C:\Program Files\syslog\log にログが出力されるようになっている ただ、ログファイルを消すとサービスが停止するようになっているので、 自動的に再起動するように設定しておくことを勧める
Windows7 Professionalには搭載されているという噂の、ネットワークドライブにバックアップしちゃうという機能を、擬似的にWin7 Home Premiumでやっちゃおうという試みです。 やや煩雑ですが、わりとイケそうな感触なので記事にしておきます。 Windows7には、VHDをマウントできる機能がある。 はい、勘の良い人はここでもう僕の言いたいことが分かってしまいましたね。VHDファイルをネットワーク上に置いて、それをローカルにマウント、バックアップドライブに指定しましょうということです。 初回の手順 VHDを作成する ”コンピュータの管理”=> ”ディスクの管理”=> ”ディスクの操作”=>”その他”=>”VHDの作成” VHDをバックアップ先に選び、バックアップを実行する VHDを切断 ”コンピュータの管理”=> ”ディスクの管理”にて、対象のVHDを右クリック =>
軽量なWebフレームワークが使えたら便利な場面があったので、最近ちょこちょこ名前を聞くようになったFlaskをテスト。 軽くさわっただけですが、かなり好印象を受けました。使えそうな雰囲気です。 成果物 あまり良いサンプルではないですが、ゲームのスクリプトと音声ファイルから、あるキャラクターをずーっと喋らせるというもの。真紅ー サーバ側はこれだけです。 # -*- coding:utf-8 -*- __author__="rubyu" __date__ ="$2011/09/14 11:25:52$" import unittest import logging logging.basicConfig( level=logging.DEBUG, format="%(levelname)-8s %(module)-16s %(funcName)-16s@%(lineno)d - %(messa
去年の終わりから、バイナリハッシングを使った近似近傍検索をいろいろ調べていたのですが、ぼちぼち一段落したので、ひと通りまとめておきます。 バイナリハッシングとは。 個の 次元の点からなるデータセット で、元空間での近傍点を、類似したバイナリコードに関連づける技術。 要するに、実数ベクトルの検索をマトモにやるには、最近のデータは膨大すぎるのでお手上げ。なので、元空間での距離をなるべく保ったまま、バイナリコードに落としましょう。 そうすると、バイナリ一致か、1ビット違うか、2ビット違うか...と、捜索していくにしても、元空間のデータでやるより高速で、しかもストレージ容量を削減できるというわけです。 その ビットのバイナリコード を作るために、 個のハッシュ関数が使われる。 ハッシュ関数は と定義される。ここで、 はデータセット。 は射影ベクトル。 は閾値。 線形写像ベースのハッシングはシンプル
古いsambaの記事へまだそれなりのアクセスがあるので、ここ最近の僕的トレンドを反映したものを書いてみました。 なるべく新しいsambaにアップグレードしましょう 3.5.*を推奨。 今までのチューニングtipsは忘れましょう socket options など、デフォルトのconfに含まれていない、パフォーマンスのためのオプションは、一旦削除してみることをオススメします。 わざわざ指定せずとも、最新のsambaでは十分にパフォーマンスが出ます。 指定していることで、むしろパフォーマンスが悪化しているケースもあります。 ファイルシステムのマウントオプションを最適化しましょう http://www.kernel.org/doc/Documentation/filesystems/ext3.txt http://sourceforge.jp/projects/linuxjf/wiki/ext4
iPhone用に TK-FBP013EWH http://www2.elecom.co.jp/peripheral/full-keyboard/tk-fbp013e/ を買って、ついでにWindowsでも使っています。 ELECOM パンタグラフ式キーボード 82キー Bluetooth Sサイズ 英字配列 ホワイト TK-FBP013EWHposted with amazlet at 10.11.10エレコム (2010-08-26) 売り上げランキング: 2257 Amazon.co.jp で詳細を見る ただ、Windowsにペアリングしてそのままだとキーボードの配列はJISになってしまって、微妙に使い勝手が悪い。 販売元であるElecomは親切にも ≫USBキーボード 101->106 変更ユーティリティ2(Windows7/Vista用) http://www.elecom.co.
iPhoneのO'ReillyアプリはDRMフリーでepubが格納されていて、簡単に抽出できる…らしい。 404 Blog Not Found:perl - O'ReillyのiPhoneアプリ本からepubをぶっこぬく http://blog.livedoor.jp/dankogai/archives/51484907.html とりあえずいくつか買ってみてテスト The Ruby Programming Language Best of TOC Natural Language Processing with Python Beautiful Testing Hadoop: The Definitive Guide こんな感じに うまく見れるようだ 見出しもOK perlの抽出スクリプトは存在していたけど、環境を汚すのがイヤだったのでPythonで適当に。 #!-*- coding:u
自作ソフトにテキストの多クラス分類機能を組み込みたくて、調べてみたら Complement Naive Bayes(CNB、補集合ナイーブベイズ)というアルゴリズムが最近の流行のようで、これを検証してみることにしました。 元論文 を一通り読んでから検証を進めていきました。実装される際は目を通すことをオススメします。 使用したコーパスは以下のようなもの 想定する用途に合わせて、それなりにクラス間でデータの量にばらつきがあります。 クラス ファイル数 サイズ A 832 121MB B 491 182MB C 449 59MB D 312 111MB E 298 26MB F 245 67MB G 234 73MB H 210 33MB I 123 33MB J 63 3MB K 62 14MB L 47 6MB M 47 5MB ひとまず、シンプルなナイーブベイズを 集合知プログラミング を
firefoxからchromeに移行すると僕はscrapbookがなくて死んじゃうので、それっぽいアプリ作りにこの頃は時間を使っている。 vectorに登録されたみたいなので紹介がてら記事にしておこうと思う。 http://www.vector.co.jp/soft/win95/net/se482789.html できること サイトの収集 指定されたURLから指定された階層辿って、リンクと各種リソースを収集する。 見る 収集したサイトを見る。 全文検索 URL, (HTMLの)TITLE, FULLTEXTで検索可能。Luceneに依存。 よい点 軽い ブラウザの外のアプリなのでレスポンスは早い。ブラウザが遅くなったりしない。 全文検索早い scrapbookはある程度の量を超えると沈黙してた。 ダメな点 セッション認証とかしてない どのブラウザからでも見れて操作可能。 そのうちやること
私がふと思いついて何かを作るとき まずプロジェクトのディレクトリを作り、 右クリックして「新規テキスト ドキュメント.txt」を作り それにだらだらとアイディアを書き連ね、設計して コーディングする という順で進めます。 subversionではレポジトリ生成が手間(別の場所にレポジトリを生成し、管理しないといけないため) なので最初は全て同じレポジトリに放り込んでいました。coderepos状態です。 しかし、1〜3のドキュメントの類と、4のコードは分けておいた方が、純粋にコード変更だけを追えてスマートだということに気づき、それからはプロジェクトごとにmercurialレポジトリを作ってコードを管理をしています。 ついでにドキュメント管理もmercurialでやれれば、subversionのレポジトリ管理の手間も無くなり、サーバが死んでてもOK!マージも賢い!万々歳!で、話はそこで終わり
キャッシュしてもいいHTMLを返すCGIであれば、以下のようにすることでレスポンスがとても高速になる coreserverとかcoreserverとか、fastcgiが使えないので考えた苦し紛れではあるが用途によってはかなり効果がありそう mod_rewriteでキャッシュがあるかを判別し、あればキャッシュを返し、なければCGIに処理が渡る CGIはHTMLを生成し、キャッシュを出力してからHTMLを返す キャッシュはCronで定期的に削除される メリットは「キャッシュがあればCGIを立ち上げる必要がない」こと mod_rewriteはapacheでの処理なので、キャッシュのレスポンスは静的なHTMLと同じ また要求があった際にのみCGIでHTMLが生成されるので、ページ数が大量であっても全部を最初に生成したりする必要がない リクエストが 〜/hoge/[0-9a-z]/ の場合 /.ht
JS切ってブラウジングしてるととても邪魔。 meta refleshが実行されるタイミング的にどうかなーと思ったが、onload時にwindow.stop()でうまくいくっぽい。 // ==UserScript== // @name ninja barrier breaker // @namespace http://d.hatena.ne.jp/ruby-U/ // @include * // ==/UserScript== //ver.090508 function removeChilds(node){ var c; while(c = node.firstChild){ node.removeChild(c); } } function nMatch(node, tag, prop, pat){ var ns = node.getElementsByTagName(tag); fo
templates/404.html, 500.htmlを適当に書き換えておく これらはdjango.zip内のhtmlに依存していて、その先がmyappに依存しているのでmyappを外すと NoReverseMatch: Reverse for 'settings.myapp.views.list_people' with arguments '()' and keyword arguments '{}' not found.などとエラーが出る。 openidgaeで認証 #urls.py urlpatterns = patterns('', ('^openid/', include('openidgae.urls')), ) + auth_patterns + patterns('', ('^admin/(.*)', admin.site.root), 〜 #settings.py L
ウェブカメラでぴぴっとAmazon中古価格相場とか調べることができたら不要本の処分がはかどりそうだということで適当に実装してみた。 を読み取ると、 ↓ left side character(1) not found: 1111111 left side character(1) not found: 1111111 left side character(1) not found: 1111111 left side character(1) not found: 1111111 9784873113364 バーコード(JANコード)の規格は http://www.barcode.ne.jp/about_barcode/code/jan.html に詳しい。必要なことは全部書いてある。 ハマったところ VideoCaptureがNullを返す OR 真っ黒な画像を返すことがある cam
最新のものはこちら かんたんsambaパフォーマンスちゅーにんぐ 2010年版 http://d.hatena.ne.jp/ruby-U/20101213/1292229371 sambaには多彩なオプションがある。 デフォルトで(それなりに)問題なく動作するようになっているが、あれこれ設定すると様々な機能を追加することができる。 ここで注意するべきは、便利さとパフォーマンスはトレードオフだということ。 最小限の設定値を調節することに止めて、必要ではない機能は極力無効のままにしておくべきである。 socket options 最もパフォーマンスに影響する。 TCP_NODELAY サーバが遅延を少なくするために適宜パケットを送信するようにする。これはtelnet接続で応答時間の向上をもたらしたり、あまり直観的でないが、小さな要求パケットが送られたり(Microsoft TCP/IP で発生
さて、これがいろいろな意味で一番の大物。 とても強力なバックアップソフトで、いつのまにやら知名度もじりじり上がり、 Bacula.jp http://www.bacula.jp/ なんてのもできていた。 初心者も思わず手を伸ばしてしまいそうなデザインのサイトだが、断言する。きっとボッコボコにされる。 bacula(特にwindows版)はユーザーフレンドリーとは言えず、設定に多々ややこしいところがあり、これをこのままの状態で普及させようとするのは明らかにヤバい。 Bacula.jpはどういう意図で作られたのだろう、人柱募集だろうか?? だがしかし、一度動く環境が作れたら至極まっとうに動く。エンタープライズ用途なので当たり前だが。 家庭や小さなオフィスでも導入を考える価値は十分にあると思う。 baculaの仕組み baculaはsd、fd、dirの3つから構成される sdはストレージデーモン
まず一例 数値と生成時刻だけを持つモデルを例に取る。 def Item(db.Model): score = db.IntegerProperty(default=0) created = db.DateTimeProperty(auto_now_add=True) ぐきゅる #itemを取得する qs = Item.all() オフセット、リミットを指定して #10番目から5個取得する qs = Item.all().fetch(5, 10) できないことあれこれ 1000番目以降のデータをぐきゅることはできない #2000番目から5個取得する qs = Item.all().fetch(5, 2000) #動かない! 同様に、 1000個以上要素があるなら総数は調べられない print Item.all().count() #上限が1000 複数のプロパティを、それぞれイコール以外の条
scrapIndexerが吐いたhtmlがいまいち使いづらかったのでpythonで適当に書いた。 14MBのhtmlとか出力してくれてうわーってなった>scrapIndexer ディレクトリ構造は無視 scrapbook.rdfは見ない ので高速 指定の最大アイテム数ごとにページを分割して吐く ソースURLへのリンクも表示 ぐらいが差異だと思う。 タイトルやソースURLは、〜\data\〜\index.datにそれぞれのデータがあるのでそれを見ている。 破損とか、保存されてるデータの一部だけコピーしたとかそういう場合を想定するとscrapbook.rdfは使えない。 履歴 リリース faviconがあれば表示するように #!-*- coding:utf-8 -*- """ scrap_index_gen.py scrapbookのデータディレクトリのインデックスを生成します。 引数 1.
06年からこちらscrapbookはノーメンテナンスで頑張ってくれてたが、この頃はフォルダを移動させるだけで数時間とかどんなバッチ処理だよという感じになってきてた。 今日、scrapbookの公式ページを見てると http://amb.vis.ne.jp/mozilla/scrapbook/addons.php?lang=ja ScrapIndexer 1.0.0 エクスポートしたデータから index.html を生成する を見つけた。 http://mybyways.net/Documents/projects.htm 簡単なツールだが、これを使えばデータの移行が簡単。 要は、保存してるデータを別の場所に移動させて空にしてscrapbookを軽くさせて、古いデータはindex.htmlを参照して探しましょう、という話。 手順は、 firefoxのブックマークをjsonでエクスポートする
twitterのログを長期間残しておいて、いつでもアクセス可能にしたいな―と思ったので丁度GAEがcronに対応したことだし、とアプリにしてみた。 http://rubyu-twitterlog.appspot.com/ 実際に動いてるところ。 cronで10分ごとに http://twitter.com/statuses/user_timeline.xml から、最後に取得したIDより大きいstatusを取ってくる。 んでデータストアに入れといて、あとは適当なviewから参照するだけ。 特に難しいことはしてないが、 python2.6だとxmlパーサのあたりでエラーが出る cronが開始されるまでラグがある あたりでちょっと時間を食った。しかしこれでハードにtwitterを使える! 例によってソースをぺたり。 tw_archiver.py #!-*- coding:utf-8 -*- i
ATOKが半角カナの呪いでとても悲しいことになったので、ATOK2009を買った。 そしたらなんとPythonでプラグインを書けるとか。 http://www.atok.com/useful/developer/api/plugin.html どう見ても簡単そうだったので、同じくちょうど見つけたところの日本語 WordNetのシソーラスを使ってプラグインを書いてみた。 一回で二種類の勉強になる。いいことだ。 いつもそう思って適当な未知のものを数種類掛け合わせて微妙なものができるんだが、今回はどうやら成功。 画像は「赤」で候補を出している。「社会主義経済」とかまんまですな。なんか違うけど。 単語の関係性(同義語、上位語など)を問わず、繋がってるものを列挙して〜を数回繰り返して、順に並べてるだけ。 もうちっと洗練させれば物書きにはたまらないものになりそうだ。 語彙を増やすのにシソーラスは最強。
自分が使いそうな機能をあれこれプラグインにしてるが、あんまりニーズはなさそうだ。 これは色の名前で辞書を引き、 その色をプレビュー 〜色などで末尾の不足があるとそれを補える カラーコードに変換 みたいな機能を提供する。 #ここから上はcolors.pyの内容(大量なので省略) def getColorCode(name): #colors.pyの関数を上書き if not name: return "" for i in dics: dic = dics[i] cats = dic[1] for j in cats: #category cat = cats[j] for k in cat: #array each if k.has_key(name): n = k[name] return "#" + dic[0][n] return "" def atok_plugin_run_pro
外部レジストラからvalue-domainに移管ついでにapp engineの独自ドメイン設定もしてみることにした http://niiyan.s8.xrea.com/blosxom/dev/google/20080505-google-app-engine-on-my-domain.htm Google App Engine: 独自ドメインでの利用 が詳しい 要は先にappsを申し込んで、その中で自作のアプリをホスティングする、みたいな方法のよう appsに申し込み appsで申し込んだドメインの所有権を証明 appsにログインしてコントロールパネルを拡張版にする それから、 value-domainのDNS設定 app engineのドメイン設定 で終了 前者は http://googleapps.hakaede.com/2007/05/value-domain.html VALUE-
class OwnershipError(Exception): def __init__(self): self.value = "OwnershipError" class NotFoundError(Exception): def __init__(self): self.value = "NotFoundError" とかエラーを定義して def deleteItem(key, user): obj = db.get( db.Key.from_path( "Texts", key ) ) if obj: if user == obj.user: obj.delete() else: raise OwnershipError else: raise NotFoundError try: db.run_in_transaction(deleteItem, key, user) self
BorderLayout と FlowLayout の組み合わせで改行しても高さが増えない http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5940&forum=12 とかで情報があったので助かった public Dimension preferredLayoutSize(Container target) { synchronized (target.getTreeLock()) { Dimension dim = new Dimension(0, 0); int nmembers = target.getComponentCount(); boolean firstVisibleComponent = true; for (int i = 0 ; i < nmembers ; i++) { Component m = ta
次のページ
このページを最初にブックマークしてみませんか?
『rubyu's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く