プログラミング

phpでの二分探索

AtCoderに登録してお勉強してみる

ビギナー問題のABC086A - Productをやってみた。 my $input = <STDIN>; chomp $input; my ($a, $b) = split / /, $input; $ret = $a * $b; $ret % 2 == 0 ? print 'Even' : print 'Odd'; 最初の提出では間違いとなったので、なんで?と思ったら出力のEvenとOddの先</stdin>…

foreachを後置きする

my @array = (1, 2, 3, 4, 5, 6, 7); foreach my $elm (@array) { print $elm; } こんな感じで、配列をforeachでループさせ、要素を表示させることができるわけだけど、 この$elmのような一時変数を使わない方法がある。 print $_ foreach @array; こんな感…

ハッシュのリファレンスの値を指す際の記法について

my %hash = ( a => 1, b => 2, c => 3 ); print Dumper $hash{b}; まず、ハッシュの値を扱うときは、{キー名}で値をさすことができる。 しかしリファレンスになると、すこしちがう書き方ができる。 my $ref = { a => 1, b => 2, c => 3 }; print Dumper $$re…

結局、デリファレンスとはなんなのか

my $hoge = "A"; my $ref_hoge = \$hoge; print $hoge . "\n"; print $ref_hoge . "\n"; print ${$ref_hoge} . "\n"; print $$ref_hoge . "\n"; この出力をみて考えてみよう。 A SCALAR(0x269eff8) A A $hogeはAが入っている。$ref_hogeには$hogeのリファレ…

ハッシュのデリファレンス

配列だけでなくハッシュでも同様のことがいえるようだ。 my %hash = (id => 'test', name => 'test2'); my $ref_hash = \%hash; use Data::Dumper; print Dumper $ref_hash; print Dumper %$ref_hash; %$とすることで、%{$hogehoge}という記法を略記して元の…

デリファレンス

Perlを読んでいると、しばしばこういう記述がでてくる。 @$hogehoge @は配列、$は変数を表していたはずである。 @$というのは、どういうことなのだろうか。上は実は、 @{$hogehoge} を省略した書き方なのらしい。配列のリファレンスが入った$hogehogeから、…

foreachの制御変数は一時変数ではない

my @array = (1, 2, 3, 4, 5); foreach my $elm (@array) { $elm++; } use Data::Dumper; print Dumper @array; 出力結果は何だろうか? $elmをPHPのforeachにおけるasの後の変数と同様、一時変数だと思い込んでしまうと、 $elmをインクリメントしても@array…

詳しく説明できるほどではない

詳しく説明できない。なぜこうなるのか なぜその記述が正しいのか。文法から解き明かしていく ような深い理解はできてない。 しかし説明はできなくても確かに自分のコードは 動くのである。理解しないまま、良く似た設計の 別のものを参考に、パターンを真似…

ハッシュの配列をあるカラムをキーにしてマージしたい〜その2

先ほどの処理をJavascript側でやってみる場合のロジック(超雑な) var hash1 = [{user_id:1, name:'test'},{user_id:2, name:'test2'},{user_id:3, name:'test3'}]; var hash2 = [{id:2, note:'aabbcc'},{id:3, note:'ccddee'}]; var map = {}; hash2.forEa…

ハッシュの配列をあるカラムをキーにしてマージしたい

my %person1 = ( user_id => 1234, name => 'test' ); my %person2 = ( user_id => 5678, name => 'hoge' ); my %person3 = ( user_id => 9101, name => 'fuga' ); my %person4 = ( user_id => 2345, name => 'aaaa' ); my @person_list = (); push(@person_…

Perlのソートサブルーチンを使ったカスタムソート

PerlのSort関数はかなり拡張性が高い仕様になっているようだ。 任意の関数を渡して、並び順を好きなように改造できる。ソートサブルーチンが-1を返すものを先に、1を返すものを後に来るように並べ替えてくれるので そのような結果を返すようにソートサブルー…

二つのハッシュの配列を突合して一致したものを順番の前半に持ってきたい

さきほど、「連想配列が入った二つの配列をある値によって突合したい」の作業で、 仮にusersとpersonsと呼んでいる二つのデータ構造を突合することができるようになった。 ここから、両方に存在するデータを順序的に前にもってきて、そうでないものを後に置…

連想配列が入った二つの配列をある値によって突合したい

続・初めてのPerl 改訂第2版作者: Randal L. Schwartz,brian d foy,Tom Phoenix,伊藤直也,長尾高弘出版社/メーカー: オライリージャパン発売日: 2013/08/21メディア: 大型本この商品を含むブログ (3件) を見る連想配列が入った二つの配列がある。 たとえば、…

Perlという魔法のレガシー言語

# 以下のリストを定義 @list = qw( fred betty barney dino wilma pebbles bamm-bamm ); # この記述は驚くけれど、@listの中身がこれだけで順番にprintされる for(@list) { print $_ . "\n"; } # listの参照を得ておく $ref_list = \@list; for($i = 0; $i <…

クロージャについて

クロージャはグローバル変数を削減するために使いどころがあると、昔雑誌で読んだ気がする(日経ソフトウェアかなにか)。 ただ実際にはあまり使う機会がなく、分かりづらい。 ちょっと試しに下のように書いてみた。 <html> <script> function test2() { button = document</html>…

HTML5のカスタムデータ属性とは何ぞ

<html> <script> function test(){ button = document.getElementById('button1'); alert(button.dataset.x); } </script> <body> <input id="button1" type="button" onClick="test()" data-x="testtest"> </body> </html> カスタムデータ属性。よくわからなかったのだが、イマドキはこういうものを使って、CSSやJQueryなどに値を渡す必要がでてくる。 上の例でいうと、inputタ…

Cookieの使い方

セッションはサーバ側に一時的にデータを持つが、ブラウザ側に持たせたほうが都合がよいことがある。 そういう場合にCookieが使われる。 setcookie("クッキーの名前", 値, 有効期限); でクッキーに値をセットできる。 値には下の記述でアクセスしたり操作し…

半角・全角・大文字小文字を無視して文字列の比較

FIND_IN_SET()を使ってカンマ区切りのキーでテーブルをJOINする

例えばここに、書籍のテーブルbooksと、カテゴリのテーブルマスタcategoriesがあったとする。 で、booksはcategory_idを外部キーにして、書籍のカテゴリを持つわけである。 問題は、booksのレコードが複数のカテゴリに多重に属せるような要件の場合だ。 cate…

PostgreSQLのReturning句

PostgreSQLでは、Returning句というのが使える。 これは、更新系のクエリで更新後の値を返せるということなのだが、かなり有用だと思う。 データの整合性のためにトランザクションでロックをかけなければいけないような要件で、普通にロックをかけてしまうと…

名前の重複

array('name' => "taro"), 2 => array('name' => "jiro"), 3 => array('name' => "saburo"), ); foreach($users as $key => $arr) { foreach($arr as $user) { } } echo $user; こういうコードがあったとすると、最後のechoは何を出力するだろうか? $user…

リファクタリングについて

たまにコードレビューなどをしてもらうと、自分ではこれでいいや、これが綺麗な書き方だなんて思っていたものが 全然コーディング規約に反していることが分かったりして”え、そういえば俺はなんでこれでいいと思っていたんだろ”と疑問に思ったりできるものだ…

HTMLエラーチェッカーとHtml Validator

表題の、Chromeアドオン HTMLエラーチェッカーとFirefoxプラグインHtml Validatorをインストールして KDPランキングを分析してみたところ とてつもない量のHTML文法エラーが検出された。 と主なものは fontタグが非推奨になったことや、tableタグの各種設定…

CakePHPのCake/UtilityHash

唐突だがここに以下のような形態のArrayがあったとする。 $array = array( 'testA' => array( 'test1' => 1, 'test2' => 2, 'test3' => array( 'testa' => 'a', ), ), 'testB' => array( 'test4' => 3, 'test5' => 4, 'test6' => array( 'testb' => 'b', 'te…

Ajaxで画面遷移なしで取得したDBレコードをhtmlに反映させる

<input type='button' onclick="a()"> <div id="a"></div> 仮に上のような記述をしておいて、ボタンが押されたタイミングでid="a"のdivの中に、DBから抽出したレコードがポンポン挿入されるように したいとする。 例えばこんなJavascriptでいけるようだ。 <script> function a() { $.ajax({ type: 'GET', url: 'http://loca…

繰り返し要素が二重になっている画面のデータ構造

ボタンのonclick()でAjaxを呼ぶなどして動的に増減するブロックがあったとする。 そのブロックの中にさらに別のAjax処理によって動的に増減する要素を組み込んでいる場合、 データ構造はどのようにしたらよいだろうか。 これは繰り返し要素の中にある繰り返…

Ajaxとか非同期通信など。JQueryやJavascriptの話

今更感があるけれど、最近ようやくAjaxを覚えた。 Ajax無しのウェブは、画面をリロードするなりリンクを遷移しないと表示が更新されない。画面遷移のタイミングで表示を更新するサイトになる。 例えば、昔のチャットや掲示板は、リロードで内容を更新してい…

プログラマという職業とその最低要件とは何かという事を勝手に考えてみた

昔、インターネットもグーグルもない時代からプログラマをやっていた人達というのを自分は尊敬している。 そういう人達は、書籍やマニュアルを頼りにプログラムを組んでいたのだと思う。書籍やマニュアルは紙だから 調べるのも大変で、効率的に仕事をするに…

Cake3でTCPDFを使い、表形式のPDFを生成する

TCPDFをCakePHP3に導入し、HTML形式ではなくPDFを動的に生成して表示することができるわけだが、 そのPDFにデータを表形式で表示するには、下のサイトが参考になった。 https://www.ibm.com/developerworks/jp/opensource/library/os-tcpdf/ foreach( $this-…