Nmap
ポトスキャンつうる
http://insecure.org/
どうでもいいけど、
http://www.bourne-ultimatum.jp/で登場したらしい。
Thinkpad x300 series
OSはVista Ultimate 32, Business 32, or XP Proから選択可能。
厚さ23.4mmってことで、モバイル寄り。
2.5ポンド = 1.13398093 キログラム
Ultralight Lenovo X300 Series Thinkpad Leaked
It appears that Lenovo have themselves a new ultralight X300 series Thinkpad—and outside of the price and release date, we have all of the specs that you need to know. At a glance, some of the major features include: a 13.3-inch LED backlit 1440X900 screen, an ultralight 2.5 pound form factor, and Intel Merom Santa Rosa Dual Core CPU (2.0 Ghz / 880 Mhz ), a 64 GB SSD, up to 4GB of DDR2 PC2-5300 memory, and 4 hours of battery life. Hit the gallery for the full details. [Thanks Tipster!]
js_tips & jsdeferred
天野仁史『Javascript Tips & Technique』(WEB+DB PRESS Tech Meeting #1)
「WEB+DB PRESS Tech Meeting」(主催:技術評論社、2007/12/20)での講演。資料やレポートは→http://gihyo.jp/event/2007/tech-meeting/。
URLを自動リンクする(PHP)
単純であれなんですが、よく使うのでメモしとく。
<?php $text = "aaaaaaaaabbbbbbbbhttp://d.hatena.ne.jp/ aaaaaaaaaaaa"; $text = ereg_replace("(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", "<a href=\"\\1\\2\">\\1\\2</a>" , $text); echo $text;
便利すぎて快感。
imagecreateでBMPファイルを扱う(PHP)
デフォルトではimagecreatefrombmp関数が存在しないので、自分で作っちゃおうというお話。
<?php function ImageCreateFromBMP($filename) { //Ouverture du fichier en mode binaire if (! $f1 = fopen($filename,"rb")) return FALSE; $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1,14)); if ($FILE['file_type'] != 19778) return FALSE; $BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'. '/Vcompression/Vsize_bitmap/Vhoriz_resolution'. '/Vvert_resolution/Vcolors_used/Vcolors_important', fread($f1,40)); $BMP['colors'] = pow(2,$BMP['bits_per_pixel']); if ($BMP['size_bitmap'] == 0) $BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset']; $BMP['bytes_per_pixel'] = $BMP['bits_per_pixel']/8; $BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']); $BMP['decal'] = ($BMP['width']*$BMP['bytes_per_pixel']/4); $BMP['decal'] -= floor($BMP['width']*$BMP['bytes_per_pixel']/4); $BMP['decal'] = 4-(4*$BMP['decal']); if ($BMP['decal'] == 4) $BMP['decal'] = 0; $PALETTE = array(); if ($BMP['colors'] < 16777216) { $PALETTE = unpack('V'.$BMP['colors'], fread($f1,$BMP['colors']*4)); } $IMG = fread($f1,$BMP['size_bitmap']); $VIDE = chr(0); $res = imagecreatetruecolor($BMP['width'],$BMP['height']); $P = 0; $Y = $BMP['height']-1; while ($Y >= 0) { $X=0; while ($X < $BMP['width']) { if ($BMP['bits_per_pixel'] == 24) $COLOR = unpack("V",substr($IMG,$P,3).$VIDE); elseif ($BMP['bits_per_pixel'] == 16) { $COLOR = unpack("n",substr($IMG,$P,2)); $COLOR[1] = $PALETTE[$COLOR[1]+1]; } elseif ($BMP['bits_per_pixel'] == 8) { $COLOR = unpack("n",$VIDE.substr($IMG,$P,1)); $COLOR[1] = $PALETTE[$COLOR[1]+1]; } elseif ($BMP['bits_per_pixel'] == 4) { $COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1)); if (($P*2)%2 == 0) $COLOR[1] = ($COLOR[1] >> 4) ; else $COLOR[1] = ($COLOR[1] & 0x0F); $COLOR[1] = $PALETTE[$COLOR[1]+1]; } elseif ($BMP['bits_per_pixel'] == 1) { $COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1)); if (($P*8)%8 == 0) $COLOR[1] = $COLOR[1] >>7; elseif (($P*8)%8 == 1) $COLOR[1] = ($COLOR[1] & 0x40)>>6; elseif (($P*8)%8 == 2) $COLOR[1] = ($COLOR[1] & 0x20)>>5; elseif (($P*8)%8 == 3) $COLOR[1] = ($COLOR[1] & 0x10)>>4; elseif (($P*8)%8 == 4) $COLOR[1] = ($COLOR[1] & 0x8)>>3; elseif (($P*8)%8 == 5) $COLOR[1] = ($COLOR[1] & 0x4)>>2; elseif (($P*8)%8 == 6) $COLOR[1] = ($COLOR[1] & 0x2)>>1; elseif (($P*8)%8 == 7) $COLOR[1] = ($COLOR[1] & 0x1); $COLOR[1] = $PALETTE[$COLOR[1]+1]; } else return FALSE; imagesetpixel($res,$X,$Y,$COLOR[1]); $X++; $P += $BMP['bytes_per_pixel']; } $Y--; $P+=$BMP['decal']; } fclose($f1); return $res; } ?>
このphpファイルをincludeして使う。
使い方はimagecreatefromjpeg等と同じ。
imagebmp関数も存在しないので、imagepng等で代用する。
bmpファイルを縮小する場合は
<?php // 画像の縮小 // $filenameのwidth,height値を取得 $img_size = getimagesize($filename); if ($img_size[0] <= 120 and $img_size[1] <= 120) { // width,height値ともに120以下なら何もしない。 } else { $img_in = ImageCreateFromBMP($filename); $length = 120; if ($img_size[0] <= $img_size[1]) { $width = $length; $height = $img_size[1] * $length / $img_size[0]; } else { $width = $img_size[0] * $length / $img_size[1]; $height = $length; } // echo $img_size[0]." x ".$img_size[1]." ".$img_size[2]; // 基盤となる画像作成 widhth,height値、truecolor設定 $img_out = imagecreatetruecolor($width, $height); // 基盤($img_our)に元画像($img_in)を縮小してコピー ImageCopyResampled($img_out, $img_in, 0, 0, 0, 0, $width, $height, $img_size[0], $img_size[1]); imagepng($img_out, $filename); imagedestroy($img_in); imagedestroy($img_out); } ?>
こんな感じで。
重複レコードをMySQLデータベースから一括削除
今後使うこともありそうなので備忘的に残しとく。
まず一時的にテーブル「temp_table」を作成。
テーブル「main_table」の中身をコピーするんですが、ポイントは重複に関係するカラムをグループ化すること。
CREATE TABLE temp_table as SELECT * FROM main_table GROUP BY column_1, column_2;
テーブル「temp_table」で重複レコードが除去されているのを確認して、下記SQL文を実行。
DROP TABLE main_table;
ALTER TABLE temp_table RENAME TO main_table;
main_tableをdropするんで、temp_tableの中身をよく確認すること。利用するときは自己責任で。
追記
ちなみにこの方法だとPRIMARY KEYやらAUTO_INCREMENTの設定が引き継がれない。
下記SQL文を実行すれば問題ない。コマンドの微調整は各自で。
alter table main_table modify user_id int primary key auto_increment