Home > Web
Web Archive
第3回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!!
百式さんの運営するIDEA*IDEAの「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」を実際にやってみる第3回目!
今回の問題はこちら!
- 複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す(例:同僚の体重を入力して計算)。
今回は体重のソート(順番に並べる)ってことなので、第1関門はフォームから値を入力してもらう事、第2関門にソートする事。
最初はあまり考えずに「体重だけじゃアレだなー」と思って「名前も一緒に入れよう!」と思ったのが運のツキ…めんどくさくなってしまった…
最初にHTMLのフォームからPOSTでデータを受け取る!
これは$_POST["name1"] この1行で終わるので楽勝ですな。(name1はフォームのname属性の値)
次にソートなんだけど、名前を取得せずに体重だけを取得する場合はsort関数を使えばそんなに悩まずにすぐ出来ると思います。
が、しかし!自分は$personという配列の中に3人のデータをさらに配列で作ってしまったのでめんどくさくなりました(´・ω・`)
でも色々調べてみるとarray_multisortという関数があったので、$person配列からweightの値を$weightという新しい配列に移し、この$weight配列の数字の大きい順に$personも並び替えできました。
実際に動いているのはこちら
第3回目「新しくプログラミング言語を覚えたいときに行うべき10の練習問題 〜PHP編〜」
書いたコードはこちら
<?php
//POSTで受け取ったデータを2次元配列に格納
$person = array(
array('name' => $_POST["name1"], 'weight' => $_POST["weight1"]),
array('name' => $_POST["name2"], 'weight' => $_POST["weight2"]),
array('name' => $_POST["name3"], 'weight' => $_POST["weight3"])
);
※問題があったので下に修正したものを書きましたのでそちらを参考にしてください。
//2次元配列の中の連想配列weightの値を配列$weightの中に代入
foreach ($person as $key => $row) {
$weight[$key] = $row['weight'];
}
//$weightの数値の大きい順に$personも並び替えする。
array_multisort($weight, SORT_DESC, $person);
//配列の中を順番に表示
for($i=0; $i<3; $i++){
echo '<p>名前:'.$person[$i]['name'].' 体重:'.$person[$i]['weight'].'</p>';
}
?>
コメント欄にてyusuke0927さんに下記のようなご指摘を受けました。ありがとうございます!
$_POST["name1"] とやっている箇所は htmlspecialchars() を入れておかないと、<script>タグを埋め込めてJavaScript等を実行できてしまいます。(いわゆるクロスサイトスクリプティングというやつですね)
ということだったので、POSTで受け取ったデータを配列に代入するときに htmlspecialchars()を使ってJavaScript等を実行できないように修正しました。
これで入力されてもそのまま出力されるはずっ!
こういうご指摘は正直ありがたいです。どんどんお願いしますー!
$person = array(
array('name' => htmlspecialchars($_POST["name1"]), 'weight' => htmlspecialchars($_POST["weight1"])),
array('name' => htmlspecialchars($_POST["name2"]), 'weight' => htmlspecialchars($_POST["weight2"])),
array('name' => htmlspecialchars($_POST["name3"]), 'weight' => htmlspecialchars($_POST["weight3"]))
);
次回は「簡易電卓。0で割ったときの処理を自分なりに作りこむ。」だそうだ。がんばるぞ〜!(n’ ∀ ‘)η
第2回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!
百式さんの運営するIDEA*IDEAの「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」を実際にやってみる第2回目!
今回の問題はこちら!
- 現在時刻にあわせてやる気のでるメッセージを出力(例:もうすぐランチ!がんばれ!)。
今回は時間の取得さえできれば問題なっしん。
PHPで日付の取得はdate関数を使えば楽チンなのですぐできました。
配列にメッセージを予め入力しておいて、対応した時間によってそのメッセージを選んで出力するだけ!
後は指定した時刻以外のときのメッセージを入力しておけばOK。
今回作ったプログラムだと1分単位のメッセージなので指定した時間を逃すと見れなくなる…
分単位じゃなくて時間単位にすればよかったかなー。でも「はなまるマーケット」は8時半だし仕方ないw
個別に「このメッセージは分刻みだけどそれ以外は時間刻みで!」という場合はswitchで分岐しないでifで分岐すればいいよー!(n’ ∀ ‘)η
実際に動いているのはこちら
第2回目「新しくプログラミング言語を覚えたいときに行うべき10の練習問題 〜PHP編〜」
書いたコードはこちら
<?php
$message = array('(n' ∀ ')η<起きろ〜!', //7時
'(n' ∀ ')η<はなまるマーケット始まったよ!そろそろ家出ないと遅刻!', //8時半
'(n' ∀ ')η<出社!今日も1日がんばろ〜!',//10時
'(n' ∀ ')η<お昼だ〜!今日は何食べる?',//13時
'(n' ∀ ')η<眠くなる時間だが耐えるのだっ!',//15時
'(n' ∀ ')η<定時まで後1時間!もう少しだよ!',//17時半
'(n' ∀ ')η<定時になった!残業なければ帰れるよ!',//18時半
'(n' ∀ ')η<そろそろ夕食だよー!',//20時
'(n' ∀ ')η<今日もお疲れさまでしたっ!');//1時
switch(date("H:i")){
case '07:00':
$str = $message[0];
break;
case '08:30':
$str = $message[1];
break;
case '10:00':
$str = $message[2];
break;
case '13:00':
$str = $message[3];
break;
case '15:00':
$str = $message[4];
break;
case '17:30':
$str = $message[5];
break;
case '18:30':
$str = $message[6];
break;
case '20:00':
$str = $message[7];
break;
case '01:00':
$str = $message[8];
break;
default:
$str = '( ̄- ̄)シーン';
}
echo $str;
?>
次回は「複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す(例:同僚の体重を入力して計算)。」だそうだ。がんばるぞ〜!(n’ ∀ ‘)η
第1回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみた!
百式さんの運営するIDEA*IDEAの「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」を実際にやってみる第1回目!
今回の問題はこちら!
- 「なんらかのカウントアップメッセージを1から100まで出すけど、3のときだけアホになる!(例:1万円!2万円!しゃ~ん万円!とか)」。
まぁ要するに世界のナベアツですなw
今回の問題は簡単なようで実は結構難しかった(めんどくさかった)です。
というのも、3で割り切れる数字のときだけアホになれば楽なのですが、3で割り切れない場合でかつ数値に3が入っていた場合もアホになるのです。31とかね。
この割り切れないけど、数値に3が入っていた場合の処理がめんどくさかったです。
実際に出来上がったコードを書くので参考にしてみてください。
解りやすいようにコメント多めにしてみましたがどうでしょう?
自分で読み返してみても無駄な処理が多いので、もっとスリムアップできると思います。
やっぱりこの場合正規表現かすら?(n’ω’ `)
実際に動いているのはこちら
第1回目「新しくプログラミング言語を覚えたいときに行うべき10の練習問題 〜PHP編〜」
書いたコードはこちら
<?php
//アホになる場合の文字$str1は一桁、$str2は二桁
$str1 = array('', 'いち', 'にっ', 'さん', 'しっ', 'ご', 'ろく', 'なな', 'はち', 'きゅう', 'じゅう');
$str2 = array('', 'じゅ〜う', 'にじゅ', 'さ〜んじゅ', 'よ〜んじゅ', 'ご〜じゅ', 'ろくじゅ〜', 'ななじゅ〜', 'はちじゅ〜', 'きゅうじゅ');
//1から100までループ
for($i=1; $i<=100; $i++){
//1桁の場合
if($i<10){
//3の倍数の場合
if(!($i%3)){
$sum = $str1[$i];
}
//普通の数字の場合
else{
$sum = $i;
}
}
//2桁、3桁の場合
else{
//2桁の場合、10の位と1の位を抜き出し
$num1 = mb_substr($i,0,1);
$num2 = mb_substr($i,1,2);
//10の位と1の位が3の場合か、3の倍数の場合
if($num1 ==3 || $num2 ==3 || !($i%3)){
$sum = $str2[$num1];
$sum .= $str1[$num2];
}
//普通の数字の場合
else{
$sum = $i;
}
}
//出力
echo $sum.'万円!<br>';
}
?>
次回は「現在時刻にあわせてやる気のでるメッセージを出力」だそうだ。がんばるぞ〜!(n’ ∀ ‘)η
第0回「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」をPHPでやってみよう!
ちょっと前になるけど、百式さんの運営するIDEA*IDEAで「新しくプログラミング言語を覚えたいときに行なうべき10の練習問題」というエントリーがあったので、時間があるときに少しずつ作ってみようと思います。
Rubyがオススメとか良く聞くけれど、使う言語はPHP。PHPを使う理由はやっぱり業務に直結しやすいから。
さて、実際にエントリーの中で書かれていた練習問題は下記の通り。
- 「なんらかのカウントアップメッセージを1から100まで出すけど、3のときだけアホになる!(例:1万円!2万円!しゃ~ん万円!とか)」。
- 現在時刻にあわせてやる気のでるメッセージを出力(例:もうすぐランチ!がんばれ!)。
- 複数の数値を入力させ、昇順に並び替え、最大値と最小値を出す(例:同僚の体重を入力して計算)。
- 簡易電卓。0で割ったときの処理を自分なりに作りこむ。
- キーワードを入れてYahoo!の検索結果を出力。
- テキストを入れると語尾が赤ちゃん言葉に(例:ですよ→でちゅよ)。
- メールアドレスを入れるとあらかじめ用意されたテンプレートファイルにそのメアドを埋め込んだ上でメール送信(スパムはダメだよ!)。
- 「(名前)が、(場所)で、(アクション)した」がランダムに組み合わされて出てくるプログラム。
- URLを入れるとそのページのはてなブックマーク数が出てくるプログラム。
- ある名前とある名前を入れると相性診断を10段階で出してくれるプログラム。診断結果は適当でもいいけど、同じ組み合わせだったら同じ数値が必ずでないといけないように。
一見、簡単な順に並んでるのかと思ったけどそんなことないような気が…
簡単かなー?と思う練習問題は、1、2、3、5、8、9。
ちょっと難しいかも?と思う練習問題は4、6、7、10。
5、9はYahoo!、はてなブックマークのAPIを使うので若干難しそうに思ったけど、PHPのSimpleAPI(だよね?)を使うと割と簡単にできそう。
意外と難しいと思われるのが4。0で割ったときの処理をどうするかかな?強制的にエラー出してしまえばいいのかすら?
後は7のメール送信の処理かな?メール送信の部分はサーバーによっても違うかもしれないし調べつつやってみようー!
最後の10は普通に難しい…まずどうやって判定させたものか困る…
そんなわけで、コードを公開してやっていくので変な処理してたり困ってたら教えてください><
Nike: Take It To the NEXT LEVELが熱い!
Jリーグのハーフタイムで放送されていた新しいNikeのCMがめっちゃかっこいい!
まずはともあれ見てもらう方がいいかな。
大きな解像度で見たい方はNIKEFOOTBALL.comでどうぞー!
有望な若い選手が名門アーセナルの監督ベンゲルに見いだされ、プレミアでプレーすることに…
というサクセスストーリーをあたかも体験したかのような動画になっています。
サッカー好きにはたまらんシチュエーションですなっ!!
特に若手の発掘で有名なベンゲル監督を用いるとかありそうで良いんですよねw
途中、マテラッツィに歯を折られるとか笑ったww わかっていらっしゃる!w
誰がこのCM作ったのか気になって調べてみたら、なんと!マドンナの旦那のガイ・リッチーだった!
な、なんだってー!
しかし、NikeのCMはいつもカッコいいよなぁ。
俺が今まで一番好きなのはNikeのCMはFreeStyle。
名言集.comの名言を一日一回POSTするtwitterBOTを作った。
まめことネコゼのどたばた会議で宣言した「名言BOTを作る!」を完成させました。
http://twitter.com/dictumer
今回はPHPとpearを使って、CORESERVERで動かしています。
CORESERVERでpearを動かすにあたってはこちらのエントリーが非常に参考になりました。あざっす!(n’ ∀ ‘)η
共有サーバ(CORESERVER.JP)で自由にPEARのインストールをする
twitterへのPOST自体はpearを使えばすごく簡単に出来るのですが、HTMLを取得して特定のタグから必要なデータのみ抜き出す(スクレイピング)作業と、その抜き取ったデータの処理(無駄なデータを削除するなど)、エラー処理に苦労しました。
pearを使ったのが初めてだった事もあるのですが、スクレイピングのやり方が分からずPHPで昔ながらの手法で作業しました。これは何か方法があるに違いない!pear&PHPの詳しい人教えて!><
まぁそんなつたないコードですが、公開しますので赤字つけてくれる人大募集!
コメントでもtwitterでも何でも良いのでお願いします><
<?php
require_once 'HTTP/Request.php';//名言集.comの最大数
$max = 2019;//乱数を生成
$random = rand(0,$max);//twitterAPIのURL
$url ="http://twitter.com/statuses/update.xml";// URL をオープン
$fp = @fopen('http://www.meigensyu.com/word/index'.$random.'.html', 'r');//データが無い場合は再度乱数を生成してURLを変更する
while (!$fp) {
//乱数を再度生成
$random = rand(0,$max);
echo '乱数;'.$random.'<br />';
$fp = @fopen('http://www.meigensyu.com/word/index'.$random.'.html', 'r');
if($fp) break; // ループ脱出
}// HTML を読み出す
while (! feof($fp)) {
$buffer = fgets($fp, 4096);
if(strpos($buffer, '"text"')){
while(!strpos($buffer, '</div>')){
$meigen .= $buffer;
$buffer = fgets($fp, 4096);
}
$meigen .= $buffer;
}
else if(strpos($buffer, '"author"')){
while(!strpos($buffer, '</div>')){
$author .= $buffer;
$buffer = fgets($fp, 4096);
}
$author .= $buffer;
}
}
//タグ除去
$meigen = strip_tags($meigen);
$author = strip_tags($author);//正規表現でテキストから不要な部分を除去
//特定のカテゴリに入ってる名言は
if( ereg("\[映画の名言\]|\[漫画・アニメの名言\]|\[ドラマの名言\]|\[ことわざ\]“, $author) ){
$meigen = ereg_replace(”[\r\n\]| | ”, “”, $meigen);
$author = ereg_replace(”[\r\n\]| | | |^ |\[.+\]| 出典.|^出典.”, “”, $author);
$author = ereg_replace(” ”, “ ”, $author);
}
else{
//全角スペース、半角スペース除去
$meigen = ereg_replace(”[\r\n\]| | ”, “”, $meigen);
$author = ereg_replace(”[\r\n\]| | |^ | |^出典.| 出典.|\(.+\)|\[.+\]|(.+)”, “”, $author);
$author = ereg_replace(”/出典+/”, “”, $author);
}
// HTML のクローズ
fclose($fp) or die(”CLOSE”);//出典が空の場合があるので「不明」と入力
if($author==”) $author=’不明’;// ソケットを開き、送信形式を指定し、データを送信する
$req = new HTTP_Request();
$req->setBasicAuth(”twitterID”, “twitterPASSWORD”);
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData(’status’, $meigen.’ 出典:「’.$author.’」’);
$req->setURL($url);if (!PEAR::isError($req->sendRequest())) {
$response = $req->getResponseBody();
}
?>
Google検索したら「このサイトはコンピュータに損害を与える可能性があります。」と言われた
- 2008-04-21 (月)
- Web
先ほど、白石鉱山について調べていたら(!?)Googleの検索結果画面に見慣れない1文を発見しました。
「このサイトはコンピュータに損害を与える可能性があります。」とな!?
該当するページを開こうとすると、下記のような画面が出ました。
というわけでGoogleの検索結果画面からはリンクされず、URL直打ちでしか見れないようになっていまいた。
説明を読むとStopBadware.org というサイトのデータベースに登録されているスパイウェアが発見されると上記のようなエラーが出るようです。
ちなみにYahoo!では下記のように普通のサイトとして認識されているようですね。
- Comments: 0
- TrackBack (Close): 0
ペパボから新しい写真共有サービス「30days Album」
ペパボことレンタルサーバー「ロリポップ」でおなじみ株式会社paperboy&co.が新しい写真共有サービスをリリースしました!
いよっ!待ってましたっ!
先日、「まめことネコゼのどたばた会議」でペパボさんのインタビューを行なったのですがそのときに「無理ッカー」という名前でお話してくださったサービスがこの「30days Album」です!
「30days Album」とは、
友達や家族、恋人、会社の人など大切な人と過ごした時間を切り取った写真や好きな景色、物などなどの写真を簡単に共有できるサービスです。しかも無料で!
だそうです。無料とはまた太っ腹ですね!
しかし、なんでまた4月10日にリリースしたのかと思っていたら…
4/10はフォトの日なんですよ。誰が何と言おうとフォトの日なんだ。
とgionのシィンさんが仰っていました。な、なんだってー!
さて、実際に触ってみて一番いいなと思ったのはやっぱり共有の部分。
flickrにせよ、Zorgにせよ写真共有サービスって便利なんだけど、共有の部分でカスタムが効かなくて結構困ってました。
flickrはOnlyOne,Friends,Family,Publicの4カテゴリしか無いので、「友達のA君には見せたいけど、B君には見せたくない」とかそういう細かい調整ができません。
まず何より全員がflickrのアカウントを持っていないと始まらないので、アカウント取得からお願いするとか非常に面倒なことになってました。
あとは旅行に行った時の写真集め!これがまた面倒だった!
誰かが全員の写真をメッセンジャーでZipでもらったり、CD-Rに焼いてもらって全員からかき集めて、それをオンラインで見られるようにする手間!手間!手間!
Zip受信中にメッセが落ちたらそこでもうやる気ゼロですよ。えぇ、もうやる気でません。
でもこの「30days Album」を使えば、旅行から帰って来てその日にオンラインアルバムを作成して、全員にパスワードを送っておけば各自でアップできるじゃないですか!
しかもアップロードが速いんよー、これがまた!写真を一括選択して放置しとけば終わったときには音でお知らせしてくれるから便利!
かなりのスピードだったのでgloverさんに速い言ったら、「むしろビューワーを。写真ビューワーを見てみてください。」と言われたので中を見に行ったら…やゔぁい!
まず、写真のExifに記述してある撮影時間別に並んでる!これはめちゃくちゃ便利なんだよ!(力説)
複数の人の写真を集めるとファイル名がバラバラだから時系列に並ばないので、わざわざExif情報を確認できるフリーソフトで時系列にファイル名もソートしたりしてたの!それが何もやらなくてもサーバーでやってくれるこの便利さ!わっかるかなー?わかんねーだろうなー(わかるって)
次に超高速ビューワー!
これめちゃ速いぜ!しかも、矢印キーやクリックでサクサク見れるのが良い!マウスを使う場合はコマンド+クリックで戻れるよ!Windowsの場合はCtrlかしら?(未確認)
最後にあったら便利だなという機能!
まず俺が欲しいなと思うのはコメント付きで写真集とかにできるサービスが欲しい。
30日間ネット上だけで遊べるのは嬉しいけれど、せっかく盛り上がったコンテンツをそのままダウンロードしておしまい。っていうのは少し寂しいかな。コメントとかのデータはもちろん欲しいので嬉しいけど、最後は紙にしたい。アルバムにして全員に渡したい。
後は有料でもいいので写真の無制限化。ウチの会社は20人ぐらいで社員旅行に行くので写真の枚数もハンパねっす!4日で5000枚とかあるある。
30日間でワンコイン(500円)とかどうでしょう?ww 値段はともかく本気でお願いしたかったり。
もうこれは俺が長らく困ってた部分を解決してくれるサービスですよ!マジで!
久しぶりに熱くなったので気合入れて書きすぎちゃったよ。
ブログの裸祭り CSS Naked Day
What happened to the design?
To know more about why styles are disabled on this website visit the Annual CSS Naked Day website for more information.
このイベントは去年?一昨年?ぐらいから知ってるのですが、実は初参加。
たまには裸になってマークアップを見直そうぜ?的な企画であってるかしら?
とは言え、3pingさんのVicunaテンプレートを使わせていただいてるのでマークアップは素敵です。
こういうイベントがあると、デザインやマークアップを見直す良い機会になるのでリニューアルしなきゃなーとか思ってしまいます><
今回、CSS Naked DayというWordPress用のプラグインを使用してCSSを脱ぎ脱ぎしております。
このプラグインを入れておくだけで、CSS Naked Dayになったら勝手に脱いでくれるのラクチン。
ただし、毎年CSS Naked Dayの日付が違うようなのでどこまで対応してるの不明。来年も使えるのかな?(n’ω’ `)
- Comments: 0
- TrackBack (Close): 0
Twitterを始めて1年経っていました
2007年4月6日に軽い気持ちで登録したTwitter。いつのまにやら遊び始めて1年経過していました。
blog.grayash.com - Twitterハジメマシタ
Twitter経由でどれほどの物を得たか。思い返すと自分でもビックリします。
最初に行ったのTwitterのオフ会のメンバーの中には今でも遊んでもらってる人達が多いです。
@pruto、@ukstudio、@retlet、@HolyGrail、@hamashun、@forestk・・・そして、場を提供してくれた@miniturbo みんなありがとう。
また@3pingさん、@amachang、@kyosukeさんと有名な方々にもお会いできたのは嬉しかったです。
blog.grayash.com - CSS Nite LP3レポート
@amachang主催の大規模オフ。
このときは色んな人と知り合いになれましたが、特に@woopsdez、@natura、@komakuにはお世話になっております><
blog.grayash.com - Twitter Offline Party レポート!
blog.grayash.com - モバイル勉強会レポート
その後もTwitter経由でメガネオフに行きました。
主催された@cremaさんと@necoze、@k_taro、@todomaru、@2baihanにはその後も仲良くさせてもらってます。
blog.grayash.com - Twitter メガネオフレポート!
blog.grayash.com - 第1回スタジオ撮影勉強会に参加してきました
Twitterで知り合ったGo my wayの@rea君がやってるポッドキャストにもその縁で出演させてもらいました。
blog.grayash.com - realog Podcastで3人対談してきましたっ!
またTwitterから始まった企画「ついったーカレンダー」の写真版にも参加しました。
blog.grayash.com - 2008年版ついったーカレンダー写真版に参加しました
結構長く書きましたが、実はTwitterの人達と会ったイベントやオフはこれだけじゃなくて、
ブログに書いてないものもざっと思い出せるだけでも結構あります。
- ビリヤードオフ
- プルコギオフ
- お散歩写真オフ
- 関西組上京盆フェス
- Summer Sonic 2007
- アサラトオフ
- ワールドアトリエオフ
- HolyGrail誕生会
- ダーツオフ
- retlet誕生会
そして今は、Twitterで知り合った@woopsdezと@necozeがメインでやってる「まめことネコゼのどたばた会議 」にスタッフとして参加させてもらってます。
すでに2年目に入ってますが、まだ当分はTwitterで遊んでると思います。
以前お目にかかった方々、ありがとうございました。これからもよろしくお願いします。
今後お目にかかる方々、お会いした暁にはやさしく接してください><
- Comments: 0
- TrackBack (Close): 0
Home > Web





