サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
lettas0726.hatenadiary.org
PHPのstrtotime関数で来月、再来月のmonthを取得してたらハマったのでメモ。実際ハマったのは+2 monthの時だけど、月によっては+1 monthでハマれると思う。 今日(2012/07/31)の時点で以下のコードを実行すると '2012-10' と表示されます。本当は '2012-09' であって欲しかった・・・。 <?php // 今日から2ヶ月後のtimestampが欲しいよー $timestamp = strtotime('+2 month', date()); $yyyymm = date('Y-m', $timestamp); var_dump($yyyymm); 解決策は以下。 '2012-07-01+2 month' になるようにすればいいらしい。 <?php $timestamp = strtotime(date('Y-m-01').'+2 month');
はぐれメタルのBOTとそのサイトをRuby on Railsに移植しました。2〜3年前に最初のはぐれメタルができてからほとんど手を加えずに動かしてきたのですが、TwitterのAPIがそろそろ使えなくなりそうなのと、当時の自分のコードなんてメンテナンスする気になれないので、1から作り直しています。 今回の移植で勉強になったことをつらつらと書き連ねます。 Haml http://haml.info/ もともとのはぐれメタルのサイトはベタ書きの静的なhtmlで構成されていました。それをマルッとHamlに書き直しています。これと言って特別なことはしていません。HamlかわいいよHamlペロペロ。 rails runner はぐれメタルBOTは定期的に動かすスクリプトなのでRailsには乗せられないかと思ってたんですが、そんなことはなかった。これを使えばRailsに乗ったRubyのコードを簡単に実
Assets on Cloudパターンとは 「Assets on Cloudパターン」*1はRailsデザインパターン*2の一つ。Railsアプリケーションの静的なコンテンツ(Assets)をクラウドに配置するパターンである。ファイルサイズの大きい画像などをクラウドに配置することでウェブサーバへのリクエストを減らし、ネットワークリソースを節約する。 Assetsの配置先はAmazon S3を推奨する。 asset_syncの使い方 「Assets on Cloudパターン」はasset_syncというgemを利用する。 Amazon S3の設定方法 asset_syncを設定する前にAmazon S3でバケットを作っておく。バケット名を自分が持ってるドメインのサブドメインと同じにしておくと少しだけ幸せになれる。ドメインを持っていない場合、適当なバケット名でもいいが、全世界で一意にする必要が
機械学習超入門III 〜機械学習の基礎、パーセプトロンを30分で作って学ぶ〜 を読んでRubyで書いてみました。 以下ソースコード module MachineLearning class Perceptron attr_reader :w def initialize w={} @w = w end def predict vector_x vector_x.reduce(0) do |y, v| k, x = v (w[k]) ? y + (w[k]*x) : y end end def train vector_x, t y = predict(vector_x) return unless (y*t) < 0 vector_x.each do |k, x| w[k] += t * x end end end end # 訓練データ # 暖色 => 1 # 寒色 => -1 trai
Javaで"2011-09-07T00:00:00Z"みたいな文字列を作りたかったのに、タイムゾーンの設定がうまく行かなくてハマってました。DateFormatにsetTimeZoneする必要があったようです。忘れた時のためにメモを残します。 Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); df.setTimeZone(cal.getTimeZone()); String timestamp = df.format(cal.getTime()); Javaの時間操作系ってわかりづらいですよね。
最近Rails3で遊んでて、ようやくルーティングが分かってきたのでまとめます。僕の知ってる範囲しかまとめないので、すべての機能を網羅するわけではありませんが、これだけ知ってれば不自由しない気がするのでそれで良いです。ウフフ、オッケー。 基本的なこと Railsの思想 Railsのルーティングを理解するのに、押さえておくべき思想は一つかなと思います。 「すべての操作はリソースに対するCRUD操作である」 これを念頭においておくと、ルーティングの理解がしやすくなると思います。 編集するファイル ルーティングは以下のファイルに記述します。基本的にこれだけを見れば全部のルーティングがわかるようになっています。 config/routes.rb ルーティングの確認方法 Railsアプリケーションのルートディレクトリで以下のコマンドを打てばいつでもルーティングを確認することができます。ルーティングをい
Linux(OpenSUSE 11.4 64bit)にOracleのJDKをインストールしたときのメモ。 インストール http://java.sun.com/javase/ja/6/download.html からJDKをダウンロードする。 $ chmod +x jdk-6u24-linux-x64-rpm.bin $ sudo ./jdk-6u24-linux-x64-rpm.bin $ # 途中エンターキーを押す必要がある update-alternativesの設定 $ sudo update-alternatives --install /usr/bin/java java /usr/java/latest/bin/java 30000 \ --slave /usr/bin/javac javac /usr/java/latest/bin/javac \ --slave /usr
JAWS SUMMIT 2012 2日目のクラウドデザインパターンに関する講演を聞いてきました。題目は「ベストプラクティス:RIA とスマホとクラウド」 メモした限りの内容を以下にまとめます。 ・AWSにはサービスを止めない運用のために必要な機能が揃っている ・EC2 ・ELB ・AutoScaling ・CloudWatch ・自動スナップショット ・RDS ・RIAに求められる良いレスポンスを実現するには ・リクエスト数を減らす ・ファイルをまとめる ・CSSのスライスとか使う ・適切に配置 ・htmlの上にcss,下にjs ・動的htmjでcss/jsを書かない ・RequireJs等を使ってjsを非同期で読み込む ・静的ファイルをS3,CloudFrontへ ・EC2、ELBの負荷が減る ・HTML等はgzip圧縮したものを置いておく ・S3 or CloudFront どっちを使
RubyでN-gramを計算するメソッドを作ったよーって言うメモです。 class String def ngram n characters = self.split(//u) return [self] if characters.size <= n return 0.upto(characters.size-n).collect do |i| characters[i, n].join end end end p "おぎやはぎですけど何か問題でも?".ngram(2) # => ["おぎ", "ぎや", "やは", "はぎ", "ぎで", "です", "すけ", "けど", "ど何", "何か", "か問", "問題", "題で", "でも", "も?"] ideoneで動かした結果 ※ 2012-02-11 12:14 追記 ちょっと改良しました - characters[i..(
先日発表されたAmazon DynamoDBをつかうアプリケーションを設計する時、モデリングをどうしようかと困っていたのですが、クラス図を使うといい感じに表現できそうです。 Developer GuideのUse Case 2を例に図を書いて見ました。 ER図を使って表現した場合 図はMySQL Workbenchを使って書きました。 この図には幾つか問題点があります。 HashKey, RangeKeyの表現ができていない ThreadテーブルのTagsのような複数の値をもつカラムの表現ができていない テーブル間の関係がよくわからない クラス図を使って表現した場合 図はastah* communityを使って書きました。 この図は、ER図で表現した場合の問題点をすべて解消しています。 各テーブルのHashKey, RangeKeyは何か ThreadテーブルのTagsがStringの配列
JavaにWeakHashMapというクラスがあって、僕はこれをvalueを弱参照で持てるHashMapだと思ってたんですけど、本当はkeyを弱参照で持つHashMapだったのでメモしておきます。 どういうことかって言うと、僕はこんなことを期待していたわけです。 Map<String, String> m = new WeakHashMap<String, String>(); String key = new String("hoge"); String value = new String("fuga"); m.put(key, value); System.out.println(m.containsKey("hoge")); // => true value = null; System.out.println(m.containsKey("hoge")); // => false
システムの時間を日本時間に変更します。 $ # デフォルトだと9時間の時差がある $ date 2011年 8月 1日 月曜日 14:53:09 UTC $ # /etc/localtimeを置き換える $ sudo cp /usr/share/zoneinfo/Japan /etc/localtime $ # 時差がなくなる $ date 2011年 8月 1日 月曜日 23:53:50 JST この変更をしておかないと、cronの設定をするときに困ったことになります。
Amazon Elastic MapReduceで日本語のwordcountを試したので、備忘録的な意味も込めてその時のメモをまとめます。pythonで書いてますが、形態素解析のライブラリがあればどの言語でも大丈夫だと思います。 目次 Amazon Elastic MapReduce Ruby Clientインストール hadoopの設定 形態素解析エンジンIgo用の辞書構築 bootstrap.sh作成 mapper.py作成 reducer.py作成 入力ファイル作成 jobflow作成 step追加 処理結果確認 jobflow停止 Amazon Elastic MapReduce Ruby Clientインストール http://aws.amazon.com/developertools/2264 からダウンロードしてきます。 $ wget http://elasticmapred
どのリージョンのどのインスタンスを1ヶ月使うといくらかかるのかなーとか、いちいち調べるのも計算するのも面倒なので表にまとめました。 http://aws.amazon.com/jp/ec2/pricing/ の情報を元に作成しています。 1時間あたりの料金(ドル) Linux/Unix us-east us-west eu-west ap-southeast ap-northeast t1.micro 0.020 0.025 0.025 0.025 0.027 m1.small 0.085 0.095 0.095 0.095 0.100 m1.large 0.340 0.380 0.380 0.380 0.400 m1.xlarge 0.680 0.760 0.760 0.760 0.800 m2.xlarge 0.500 0.570 0.570 0.570 0.600 m2.2xlarg
Elastic MapReduceを使ってると何でもかんでもS3にアップロードさせられるので、いちいちManagementConsoleからアップロードするのは結構面倒です。ローカルにHadoopをインストールして、$HADOOP_HOME/conf/core-site.xmlに以下の設定を追加すると、HDFSのバックエンドにS3を使うことができて便利ですよ。 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.s3n.awsAccessKeyId</name> <value>[AWS_ACCESSKEY_ID]</value> </property> <property> <name>fs.s3n.awsS
深さ優先探索と幅優先探索は、実は簡単に実装することができます。 次のインターフェースを実装したクラスで例を見ていきます。 interface Node { public String getName(); public List<Node> getChildren(); } 深さ優先探索 深さ優先探索は以下の手順で実装できます。 スタックを用意する スタックに最初の要素を入れる(push) スタックから要素を取り出す(pop) 要素に対して処理をする 要素の子供をスタックに入れる(push) スタックがカラになるまで3〜5を繰り返す rootNodeから深さ優先探索でnameを出力するプログラムは次のようになります。 Deque<Node> stack = ArrayDeque<Node>(); stack.push(rootNode); while(!stack.isEmpty()) {
Mechanizeを使ってスクレイプしてるとUTF-8以外のページでうまくいかないことがあるので、その対策です。 http://blog.cles.jp/item/3416 からほとんどまるまるコピペなんですけど、2.0.1だと引数が変わってるみたいだったので対応しました。 Mechanizeをnewしたあとにhookを追加します require 'rubygems' require 'mechanize' require 'nkf' agent = Mechanize.new agent.post_connect_hooks << Proc.new do |s, url, response, body| if %r|text| =~ response["Content-Type"] body.gsub!(/^.*$/mu, NKF.nkf("-wm0",body)) body.gsub(
さくらのVPSを使い始めたので、ログイン周りを整理しました。 sshでのrootログイン禁止 公開鍵認証の有効化 パスワード認証の無効化 パスワードなしでsudo 環境 プラン:さくらのVPS 512 OS:CentOS 5 x86_64 前準備 ローカルの環境で鍵を作っておきます。 user@local $ ssh-keygen ファイル名やパスフレーズを聞かれますが、何も考えずにエンターでOKです。 /etc/ssh/sshd_config編集 root@remote # vi /etc/ssh/sshd_config # sshでのrootログイン禁止 PermitRootLogin no # 公開鍵認証の有効化 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # パスワード認証の無効化 Passwor
Amazon EC2のmicroインスタンスでRedmineを動かすにはメモリが十分じゃない感じがしたので、できるだけスリムに頑張ってみた時のメモです。少人数でRedmineを使いたい時には十分じゃないかなと思ってます。 環境 Amazon EC2 microインスタンス上のAmazon Linux(AMI Id: ami-300ca731) Redmine 1.2.1 Ruby Enterprise Editionのインストール Ruby Enterprise Edition(RubyEE)はrailsアプリケーションに最適化されたRubyらしいです。 http://www.rubyenterpriseedition.com/ から最新版をダウンロードしてインストールします。 $ # 事前に必要なモジュールをインストールしておきます。 $ sudo yum install -y gcc
これからはSolrを使って全文検索サービスの時代だということで、Solrをダウンロードしてきてサンプルアプリケーションで日本語が扱えるようにしました。 調べつつやっているのでもしかしたら間違っていることを言ってるかもしれません。 Apache Solr 3.3.0のダウンロード〜解凍 http://lucene.apache.org/solr/ の左側のメニューから【Resources】->【Download】と辿り、最新版(3.3.0)をダウンロードします。 今回は apache-solr-3.3.0.tgz をダウンロードしました。 $ wget http://ftp.kddilabs.jp/infosystems/apache//lucene/solr/3.3.0/apache-solr-3.3.0.tgz $ tar xvf apache-solr-3.3.0.tgz $ # 適当
Rubyでいうgemみたいなやつですね。 node.js自体のインストールはこちら。 設定ファイルを作っておく 予めHOMEディレクトリに.npmrcという名前で設定ファイルを作っておきます。 # ~/.npmrc root = ~/.npm/libraries binroot = ~/.npm/bin manroot = ~/.npm/man インストール インストールは1行で済みます。お手軽。 $ curl http://npmjs.org/install.sh | sh 内容が知りたい人、直接インストールするのが怖い人は、一旦ファイルにリダイレクトするといいと思います。 $ curl http://npmjs.org/install.sh > install.sh $ vi install.sh PATHを通す ~/.bash_profileに以下の内容を追記してからsourceコマ
日光のペンション「はじめのいっぽ」で開発合宿をしてきたのでメモというか感想というか、です。 成果物 FINAL FANTASY XIV 探検手帳手帳(ネタバレ防止機能付き) FF14の探検手帳というコンテンツを攻略するのに便利そうなやつ http://lettas.github.io/xiv-tools/apkallu/ ソースコード: https://github.com/lettas/xiv-tools Vue.js + gulp + watchify で開発 この辺については後日まとめる(たぶん) 合宿を盛り上げるHubotスクリプトたち くだらないスクリプトから、凄くくだらないスクリプトまでみんなで育てた Herokuで動かしてSlackに常駐させた この辺もあとで軽くまとめる(たぶん) やってよかったこと 前日までに開発環境を準備した Javascript素人なのでイマドキの環境
AmazonSimpleDBを操作するfirefoxプラグインのsdbtoolを、Firefox4にインストールする方法です。公式にサポートされた方法じゃないから動かない機能とかあるかも。とりあえず、今使ってる分には動いてるので書いておきます。 以下の手順で操作します。 ソースコード取得 動作バージョン書き換え コンパイル インストール 1.ソースコード取得 githubからソースコードをダウンロードします。 https://github.com/floodfx/sdbtool ダウンロードボタンをクリックするか、gitがインストールされていれば以下のコマンドでソースコードをダウンロード出来ます。ダウンロードボタンをクリックした場合、適当なところに展開してください。 git clone https://github.com/floodfx/sdbtool.git 2.動作バージョン書き換え
AmazonEC2のAmazon Linuxにnode.jsをインストールしたときのメモです。 参考:http://www.embracingthecloud.com/2010/12/05/InstallingNodejsOnAmazonEC2.aspx 必要なモジュールをインストールする $ sudo yum install -y gcc-c++ $ sudo yum install -y make $ sudo yum install -y openssl-devel ソースを取得する $ wget http://nodejs.org/dist/node-v0.4.5.tar.gz 解凍する $ tar xvf node-v0.4.5.tar.gz $ cd node-v0.4.5 インストールする $ ./configure --prefix=/usr/local/node $ ma
Object#tapが便利すぎるのでメモ。 メソッドチェインの途中経過をprint Rubyで理解するMapReduceで書いたコードも、わざわざ分解することなく途中経過をprintすることができます。 p input_data.map{|d| d[/GET (.+?) /, 1]}.tap{|d| p d}. group_by{|d| d}.tap{|d| p d}. reduce({}){|r,kv| r.update({kv[0] => kv[1].size})} # => ["index.html", "index.html", "reduce.html", "reduce.html", "index.html", "map.html"] # => {"map.html"=>["map.html"], "index.html"=>["index.html", "index.html
MapReduceの勉強と練習をかねてRubyでそれらしいことを書いてみます。 間違ったことをしてるかもしれないので、詳しい人がツッコミを入れてくれると嬉しいです。 ruby 1.8.7で動作を確認しています。 テーマ Apacheのログっぽいデータを分析して、それぞれのファイルへのアクセス数を算出します。 入力データはこんな感じ。 # Apacheのログっぽいデータの集合 input_data = [ '[04/01 00:00:00] "GET index.html HTTP/1.1" 200', '[04/01 00:00:00] "GET index.html HTTP/1.1" 200', '[04/01 00:00:00] "GET reduce.html HTTP/1.1" 200', '[04/01 00:00:00] "GET reduce.html HTTP/1.1"
このページを最初にブックマークしてみませんか?
『働かないプログラマのメモ帳』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く