◯◯を含まないテキストファイルをリストアップしたい!
というわけで、例えば「info@example.com」というメールアドレスが記述されていないファイルを見つけたい…ってな場合に、どうすれば簡単にできるかーを調べて模索してみたら、findをgrepを使えば簡単にできることがわかった。
find . -name '*.html' | xargs grep -L 'info@example.com'
これで大丈夫。
grepのオプション「L」は、指定した文字列を含まないファイル名をリストアップしてくれる。findと組み合わせているのは、サブディスプレイ全てを検索対象にするため。findを使わないと、カレントディレクトリのファイルのみが対象になる。
11.05.2010
技術その他
ここ最近、覚えてよかったなーと思ったCSSテクニックをまとめてみる
CSSテクニックは時代とともに変わっていくけれど、ここ1年ほどスタメンレベルで使うCSSテクニックが絞られてきたので、ここらでちょっと個人的にもまとめておこうかと。 Continue Reading..
22.04.2010
デザイン_HTML_CSS
占いは色々とあるけれど…苗字でも占いたい!
そんなみなさん、お待たせしました。日本の数ある苗字で占いしてランキングをつける微妙な占いサービス作ったよ。メジャーな苗字はカバーしているけれど、珍しい苗字はないかも…。言ってもらえれば追加しますんで。

あぁ、またしても意味不明なものを作ってしまった…。
21.04.2010
Webサイト紹介
XMLじゃなくて、HTMLを解析したい…。しかもPHPで。
XMLだと、simplexml_load_file()っていう便利な関数がPHP5からあるけれど、HTMLはタグを取り除くぐらいしかない…というわけで、探してみたらHTMLをパースするライブラリがあった。
その名もまんまな、PHP Simple HTML DOM Parser。
使い方
include('simplehtmldom/simple_html_dom.php');
$html = <<<EOM
<ul>
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
</ul>
EOM;
$data = str_get_html($html);
foreach($data->find('li') as $element){
echo $element->plaintext;
}
#=>aaabbbccc
//URLやフィある名を指定して取得することも出来。
//その際は、 str_get_html() ではなく file_get_html() 。
$html = file_get_html('http://www.yahoo.co.jp/');
簡単な使い方は上記の通り。サイトにも書いてある通り、jQueryチックな使い方ができるので、以下のようなこともできる。
include('simplehtmldom/simple_html_dom.php');
$html = <<<EOM
<ul>
<li>aaa</li>
<li id="hoge">bbb</li>
<li>ccc<strong>ddd</strong></li>
</ul>
EOM;
$data = str_get_html($html);
foreach($data->find('#hoge') as $element){
echo $element->plaintext;
}
#=>bbb
foreach($data->find('li strong') as $element){
echo $element->plaintext;
}
#=>ddd
echo $data->find('li',1)->id;
#=>hoge
データを抜き出すだけではなく、HTMLを書き換えることもできる。
$html = <<<EOM
<ul>
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
</ul>
EOM;
$data = str_get_html($html);
$data->find('ul',0)->class = 'hoge';
$data->find('li',2)->innertext = 'piyo';
echo $data;
#=><ul class="hoge">
#=> <li>aaa</li>
#=> <li>bbb</li>
#=> <li>piyo</li>
#=></ul>
非常に便利なので、色々と使い道がありそう。
15.04.2010
プログラミング_PHP
PHPで複数の一括置換がしたい…
こんなお悩み、普通のPHPerなら悩む必要ないよね。あーあ、なんで今まで気がつかなかったんだろう。アホすぎる。普通にstr_replace() で実現可能じゃないか。置換対象に配列指定可能。
$str = 'iPad欲しい。Xperia欲しい。お金欲しい。';
$search = array('iPad','Xperia','お金');
echo str_replace($search,'彼女',$str);
#=> 彼女欲しい。彼女欲しい。彼女欲しい。
$str = 'iPad欲しい。Xperia欲しい。お金欲しい。';
$search = array('iPad','Xperia','お金');
$replace = array('あれも','これも','もっともっと');
echo str_replace($search,$replace,$str);
#=> あれも欲しい。これも欲しい。もっともっと欲しい。
置換する順序
配列で複数指定した場合の置換する順序は、配列の一番上から。つまり左から右へ。
$str = 'a';
$search = array('a','b','c');
$replace = array('b','c','d');
echo str_replace($search,$replace,$str);
#=> d
13.04.2010
プログラミング_PHP
今日は池袋のジュンク堂へ。
Webアプリケーション関連のテストについての本を買おうと思ったのだけど、なかなか良いのがなくて、結局別のものを買ってしまった。
数学ガール
高校生の数学レベルかな?たぶん。もう昔のこと過ぎて全然追いつけなくて笑える。いや、笑えないけど。数学をもう一度勉強してみようかなーって思っていたので、読みやすくて興味がでてきやすいので、良かった。
ハイパフォーマンス Webサイト
まだ、ぱらぱらっとしか目を通していないけど、サイトを表示する際のパフォーマンスをどのように上げるか、もしくは何がボトルネックになりやすいのかが分かりやすく書かれている。
よくはてブでホットエントリーになっていたりするネタが集まっている感じ。これ、調べてみたら続編も出ているらしい。そっちはジュンク堂のくせに置いていなかったので、中身は分からないけど、気になるなぁ。
03.04.2010
本
PHP5.3だとエラーが色々と…
PHP5.1からPHP5.3へアップデートをすると、CakePHP1.2においてエラーが出てしまったので、その場合の対処法。
Deprecatedエラーが出る
Deprecated: Assigning the return value of new by reference is deprecated in云々なエラー。
- cake/libs/configure.php (295行目付近)
if (isset($config['debug'])) {
if ($_this->debug) {
error_reporting(E_ALL);
//下記追加
if (error_reporting() > 6143) {
error_reporting(E_ALL & ~E_DEPRECATED);
}
//ここまで
strtotime()でタイムゾーンのエラーが出る
Warning: strtotime() [http://php.net/function.strtotime]: It is not safe to rely on the system’s timezone settings.というエラー。
[Date]
; Defines the default timezone used by the date functions
;date.timezone =
date.timezone =Asia/Tokyo
と、タイムゾーンを設定してやれば大丈夫。
10.03.2010
CakePHP, プログラミング_PHP
古いCentOSに新しいPHPをインストールするには…?
CentOS4.5という微妙に古いバージョンを使っているので、yumでアプリケーションを管理していると最新のものからは程遠いバージョンを使うことが多い。けど、PHPは5.3が使いたい!でもソースからインストールすると面倒くさい。というわけで、yumリポジトリを追加してインストールしよう。
EPEL : yumリポジトリ追加
EPELというRHEL, Centos 向けの拡張パッケージリポジトリがあるので、こいつを追加する。
wget http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-9.noarch.rpm
wget http://rpms.famillecollet.com/el4.i386/remi-release-4-5.el4.remi.noarch.rpm
rpm -Uvh remi-release-4*.rpm epel-release-4*.rpm
cd /etc/yum.repos.d
wget http://rpms.famillecollet.com/remi-enterprise.repo
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
PHPのバージョンをチェック
先ほど追加したリポジトリを有効にしてリストをチェックする
yum --enablerepo=remi list php
php.i386 5.3.2-1.el4.remi
というわけで、無事に5.3が見つかる。
yum --enablerepo=remi update php
これで無事完了。ただし、PHP5.3にアップデートすることで、既存のアプリケーションがエラーになって動かないことがあるので要注意。
10.03.2010
サーバ_Linux_Windows
WindowsのApache+OpenSSLで、CSRを作成しようの回
ちょっとした案件で、Windows2000Serverで稼働しているApache+OpenSSLなサーバでSSLの更新作業をする必要があり、まずはCSRを作らねば、ということでOpenSSLのある場所までコマンドプロンプトで移動。
C:¥>openssl.exe req -new > server.csr
とかやると、なぜか
Unable to load config info from /usr/local/ssl/openssl.cnf
とエラーで怒られる。Windowsなのに、そのパス指示はなんだよ!と思いつつ、仕方がないのでコマンドのヘルプを見たら、openssl.cnfのファイル場所を指定できるらししい。
C:¥>openssl.exe req -new -config openssl.cnf > server.csr
余談
んじゃ、openssl.cnfはどこにあるんだろう?と思って検索してみたら…あれ?なんか出てこない…。なんでなんで?と思って調べていたら、どうやらWindowsでは拡張子「cnf」は短縮ダイヤルのアイコンで表示されるらしい。な、なんだってー?!知らなかったよ。MySQLの設定ファイル「my.cnf」も同様に表示されるっぽい。
しかし、拡張子をすべて表示するっていう設定に指定たんだけどなぁ。エクスプローラ上では「openssl」ってファイル名になっているんだよね。秀丸で開くと「openssl.cnf」ってファイル名だけど。まぁ、いいや。
08.03.2010
サーバ_Linux_Windows
第3回目のRubyプログラミング練習問題。今回は素数かどうかを調べる。
プログラミング練習問題3「素数判定」
与えられた数が素数かどうか調べる
あるいは与えられた数までの素数を列挙する
処理にかかった時間を計測しておくと、自分の技術向上に伴って処理時間が短くなっていくのがよくわかる
素数とは
素数自体について調べる余地はないと思っていたけど、念のためWikipediaさまを参照してみると1とその数自身以外に正の約数がない(つまり1とその数以外のどんな自然数によっても割り切れない)、1 より大きな自然数のこと。
ということだそうで。
とりあえずの回答
じゃあ、指定した数字が素数かどうかを調べるのを書いてみることにする。ぱっと思いついたのはやはり、2から指定した数まで全て列挙して割り算をしていくという力業。というかこれしか思いつかない。ならば簡単…ということで。
#!/usr/bin/ruby
num = ARGV[0]
flag = 0
2.upto(num.to_i - 1) do |i|
over = num.to_i % i
puts num + ' / ' + i.to_s + 'の余りは' + over.to_s + "\n"
if over == 0
flag = 1
end
end
if flag == 0
puts num + 'は素数です'
else
puts num + 'は素数ではありません'
end
実行結果
$./3_1.rb 5
5 / 2の余りは1
5 / 3の余りは2
5 / 4の余りは1
5は素数です
そもそも素数の判定方法がきちんと考えられていない…気もする。うーん。
まとめサイトに掲載されていた解答例
#!/usr/bin/ruby
require 'mathn.rb'
class PrimePredicater
def initialize
@prime = Prime.new
@cache = []
end
def prime?(x)
extend_cache x if @cache.empty? || x > @cache.last
@cache.include? x
end
private
def extend_cache(lim)
@prime.each do |x|
break if x > lim
@cache.push x
end
end
end
#使用例
ppred = PrimePredicater.new
[1, 10, 2, 5, 7].each do |x|
p ppred.prime?(x)
end
う、うーん?
先生。まったく意味がわかりません。構文自体が謎…。ここら辺はちょっと構文調べてこよう。とりあえずまた次回。
16.02.2010
プログラミング_Ruby