「ネスト」を含む日記 RSS

はてなキーワード: ネストとは

2016-01-20

バグ修正しましたって言えない

原因らしき1行を削除してビルドしなおしたらバグが消えたっぽいんだけど、

ifやforがネストしている上に条件式に複数グローバル変数が出てきててこれで直ったと言える自信が無い。

この1行を削除した結果他の箇所が壊れたとしても驚かないぞ……。

2015-09-29

はてブBNF手法が上がっておりますがここでBNF記法手法をご覧下さ

  • 株の方のBNF

http://tradenote.info/blog-entry-3.html


一般に、バッカスナウア記法正規表現では処理できないネスト階層記憶できるなどの根本的な差があります

これは正規表現が有限決定性オートマトンDFA)ないしε遷移と不特定の同種記号の遷移を用いる非決定性オートマトン(NFA)に基づいているのに対し、BNF記法での解析は必然的スタックを内部状態に持つからです。


代表的ものに以下の種類の構文解析処理方法が挙げられます


https://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0%E4%B8%8B%E9%99%8D%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90

https://ja.wikipedia.org/wiki/LL%E6%B3%95

これは左からトークンを走査して、導出する非終端記号を左から決定していくアルゴリズムです。

例えばA→A Bという構文規則があった場合に、Aの還元内でAを還元できるかどうか判定し続けて無限ループに陥ってしまい、いつまで経ってもBの判定に辿り着けません。これを左再帰といい、LLでは左再帰を直接扱う事ができません。

非終端記号の間接的還元考慮したはじめに現れる終端記号の集合(FIRST集合)を構築して上手く左再帰回避しなければなりません。

マッチングに用いる規則ベタ関数内部に再帰させながら順番に書いていくだけなので実装は容易です。


  • LR法

https://ja.wikipedia.org/wiki/LR%E6%B3%95

  • LALR法

https://ja.wikipedia.org/wiki/LALR%E6%B3%95

こちらは左からトークンを走査して、導出する非終端記号を右から構築するアルゴリズムです。

BNF構文規則から走査に相応するDFAを構築し、DFAの遷移を記憶しながらスタック状態push/pop構文解析を行います

なのでLL法にあるような左再帰を直接扱えないという欠点がなく、むしろスタックが簡潔になるため積極的に左再帰BNF記述を行った方が効率よく処理を進められます

LR法はDFAの大きさが巨大になるため、実用的ではないようです。

LALR法はLR法を改良したアルゴリズムで、扱える構文クラス範囲はLRよりも少し小さくなります現実的計算資源構文解析を行う事ができます

2015-09-07

結構最先端めな東京Web業界から地方SIer業界転職して3年経ったの

結構最先端めな東京Web業界から地方SIer業界転職して3年経ったのでそろそろ感じたカルチャーギャップをつらつらと書くよ。

転職理由はまあ家庭の事情ってやつなので割愛給料もやや減ぐらいで特筆することはないから割愛するよ。

⚪︎⚪︎部長とか呼ばないと怒られる

上司を呼ぶときは正しい肩書きを後ろにつけないと嫌な顔をされるよ。

前の会社では社長までさん付け普通に会話していたのでなかなか衝撃だった。

半沢直樹とかで見た世界がここに!みたいな。

昇進や降格で肩書きが変わると呼び方も最新のものにちゃんと変えないといけないから大変。

昇進ならまだ訂正する方が嬉しそうに訂正してくれるからいいが、降格した人を前の役職で呼ぶと気まずさがハンパない

当然メールの宛先にも肩書きを付けるので最初の宛先の羅列にすげー時間がかかるよ。

ザ・上司のオッサンみたいな人がいる。

スーツで太っててやたら偉そうで、何の仕事をしてるのかよく分からないがゴルフ情報にはやたら詳しいみたいなのが割といるよ。

その人たちにとって下々の人間は石ころみたいな存在らしく、ほとんど注意は払われない。

これもテレビドラマで見た!って感じだよ。

なかなか新鮮だった。

書く書類がとにかく多い

見積もりの確認からプロジェクトリスクから反省からレビューからテストエビデンスから

とにかくプログラムコード以外に書かなければいけない書類が多いよ。

さらに一つ一つに上司さらに上の人たちの印鑑必要なので時間がかかる。

上の人たちは書類を見て印鑑を押す仕事だけで1日のほとんどを奪われているんじゃねーかとか思うよ。

テレビドラマ以下略

詳細設計書とかいう詳細すぎる謎の書類

実際にコーディングをする前に、そのままプログラムに変換できるんじゃねーかレベルの詳細設計書を作らないといけない。(当然作成ツールExcelだよ!)

最初からコードで書く時間の5,6倍ぐらいの時間を使って、結局そのままコード自動変換はできないロジック日本語で書く。

当然簡単なテストも出来ないのでここでロジックの不備が見つかることはほとんどない。

ちなみに、実際のプログラミングは詳細設計書を写経するみたいなものなので全く面白くないよ。

一度上司にこの設計書の存在意義を聞いてみたら「誰でも実装保守ができるように」などという答えが返ってきたけど、実装ならこの設計書を書いている間に終わるし、コードを読めない人が保守するようなプロダクトには、恐ろしくて関わりたくないと思ったよ。

バージョン管理されてない案件とか

割愛

コードの読みやすさとか

まりにも文化が違う。300行ぐらいあるifブロックネストとか余裕。

割愛

Webサービス保守運営なのにテスト環境がないとか

割愛

自動テストとか

3年間で関わった案件で1度も実現できなかった。

割愛

同僚とか

エース級以外の人たちは向上心も無ければ危機感も無い。

何か問題があったらエース級の人に聞けばいいと思っている。

からエース級の人たちの心は常に暗黒を漂っているよ。

メソッド名が連番ID

色々な切り口で問題点を伝えたが「規約ですから」で取り付く島もなかったよ。

結局、呼び出す度にどういう処理をするのか毎回コメントを書くことになっていたのには笑った。

うそろそろ限界なのでやっぱり東京に行った方がいいのかなとか考えている毎月曜日だよ。

2015-05-18

循環的複雑度ってさ

サイクロマチック複雑度とかいうやつ。

ソースコードの複雑さを表す指数で、これが高いソースコードバグが多いって言われてるの。

なにげにネットを見てたら、批判的な文章をみたわ。

サイクロマチックの発案者に直接、科学的根拠あるのかって聞いたら「実際に役にたってるから(根拠は)いいだろ」みたいな返事らしいのな。

しかソースが複雑だったらバグは増えるだろうけど、それならツールを使わないと算出できないような複雑な指数をつかわなくても「ネストは○段まで」「サブルーチンは短く」「サブルーチンローカル変数は○個まで」みたいな単純なやり方でもいいよな。

サイクロマチックでなくても、見た目が複雑なソースなら大きくなる指数適当でっち上げても「この指数バグの発生件数は相関関係がある」って言えそうだよな。

サイクロマチックを目にするとき普通に役に立つ指数だって紹介されてるから、ただのオカルトだって知ってショックだわ。

2015-02-23

「循環的複雑度」って

http://weekly.ascii.jp/elem/000/000/306/306175/

ニコニコ生放送」のコードに、循環的複雑度が600を超えるメソッドがたくさん入っていることが判明したことがあった。循環的複雑度が75を超えるとバグの混入確率は98%、「いかなる変更も誤修正を生む」状態になると言われていて、要はニコニコ生放送は動いてるのが不思議なくらいバグがめちゃくちゃ出やすい状態だった。

循環的複雑度って科学的なメトリックスだと思ってる人がいっぱいいるけど、あれ根拠ないからな。はっきり言ってオカルト

分岐とかループが多い処理はバグやすいってだけ。

サブルーチンのなかにif文は何個以下とかネストの深さは何個とか、もっと単純な基準で「循環的複雑度がxx以下」と同じ効果をだせるはず。

2014-12-01

http://anond.hatelabo.jp/20141201005802

バグ出すか出さないか、ってのはそんなに重要じゃない。

つか、誰でもバグは出すだろ。バグさなプログラマなんて見たことねー。

プログラマってのは読めないプログラムを書くやつだ。

具体的に言えば、変数名、関数名に気を使わないやつだ。

ループの中身が1000行あってネストが4つ5つになってるのに疑問をもたねーやつだ。

読めるプログラムバグがあっても直しゃいいんだ。

バグがあって読めねープログラムゴミだ。捨てるしかない。

2014-08-12

http://anond.hatelabo.jp/20140812112643

プログラミング作法読みなおしてみた。

K&Rと同じく、基本省略スタイル推奨。

ただ、ifがネストした場合には、elseのぶら下がりがわかりづらくなるから、必ず中括弧書け、とも言ってる。

?  if (a)
?    if (b)
?  else
?    ...;

あと、ブコメでも指摘してる人がいるけど、どのスタイルに従うかはどうでもいいけど、一貫して同じスタイルで書くことはとても重要だ、とも。

既存プログラムが省略スタイルなら、追加コードも合わせるべきってことだねー。

既存コードがぐちゃぐちゃだったら、、、スキルが低い集団ってことだから、カッコ付けるスタイル修正してくほうがいいんじゃないかなー。

保守性・管理性が上がるPHPスマートコードレビュー12

1. 括弧の省略

PHPにおいてはif文やwhile文において、1行であれば括弧を省略することができます

<?php
if (...) 
  hoge();
while(...)
  hoge();

これは、保守性・管理性を上げたいのであればやってはいけません。括弧がつくことで視認性が下がることなどありません。むしろインデントに騙されてしまい、ミスが増えます。例えば下の例です。

<?php
$a=0;
$b=0;
while ($a < 10)
  $a++;
  $b++;

さて、このとき $a はいくつですか? $b はいくつですか?

答えは $a が 10、 $b は 1 です。$b は while のスコープにはないので、ループしません。

括弧でくくられていればこのようなミスを防げます。括弧はきちんと書きましょう。

2. 三項演算子

ネストしすぎると可読性が損なわれるため注意が必要ですが、うまく使うとスマートに書けます。うまく活用しましょう。

3. switch

条件分岐が多い時にうまく使いましょう。

ただし if 文で素直に書いた方が速度は速いという噂もあります

実用上の違いはほとんどありませんので、チームの方針に従いましょう。

4. ループ

PHP にはループ制御構文が用意されています。主に下記の3つを用途にあわせてうまく使い分けましょう。他にもループに関する構文や関数はありますが、基本的には下記で事足りるでしょう。

  1. for

主に回数でループさせたい場合は for 文を利用するといいでしょう。

例えば、10回同じ処理をする場合は下記のように書きます

<?php
for ($i=0; $i<10; $i++) {
  // 


  

http://anond.hatelabo.jp/20140812145234

横だけど、

switch-caseもどきのif elseが多段でネストしているロジックの時にcaseの中身を

private voidにしないと1000行ぐらいあるケースの場合

private void __whatdo();

という使い方になるのでは? あまりあるケースではないけど、関数テーブル一発で飛べない場合には出てくるのでは?private void


if( a ){
    if(b) {
        __whatdo_A();
    }else if(c){
        __whatdo_B();
    }else{
        __whatdo_C();
    }
}else if(d){
    __whatdo_D();
}else{
    __whatdo_E();
}

このパターンの複雑なばあい

__whatdo_Eを直接呼ばれたくないけど、関数化しないと読めたもんじゃないという場合にはprivate void()になる。

http://anond.hatelabo.jp/20140812112643

中括弧は、プログラミングを覚えて1年くらいの段階で絶対に付けるようになって今に至ってる。

ブロック内がシングルステートメントなら無くてもいいんだが、後で処理を追加するのにいちいち中括弧を付け足すことが頻出して、だったら先に書いとけばいいや、と。

実際に中括弧を付け足すのを忘れたり、if行との間に一行空けてしまう(改行でステートメント区切り言語)という事故も起こしたし。

中が一行であるという保証はどこにもないのに、一行しか書けない記法を使うということにナンセンスさも感じる。

今どきの言語はそもそも中括弧をなくすという方法をとっているが、合理性を感じる。ただ抵抗感はある。

あと中括弧とネスト構造を一緒くたに考えるのは間違いだよ>別ツリー

http://anond.hatelabo.jp/20140812124757

その程度のことで、全体には影響しないって。

アルゴリズムのほうがよほど影響するってばよ。

 

コードネスト云々は、宗教論争だが

アルゴリズムの選択は下手すりゃデスマーチだ。

http://anond.hatelabo.jp/20140812123017

中括弧の省略とネストの深さは関係ねーだろって。

「中括弧は省略しない」「ネストは深くしない」全く別の話だし両立するだろ。

中括弧が無くたってネストが深いのは糞コードだろうが。

#include<stdio.h>

int main() {
    int a = 1;
    int b = 0;
    if (a)
        if (b)
            printf("Hello");
        else
            printf("Howdy");
}

http://anond.hatelabo.jp/20140812121901

全然意味わかんねー。

それがプログラマ論理的思考なの?

ANDが無くて無駄ネストしてんならAND教えりゃいいじゃん。中括弧の省略は関係ねーって。

http://anond.hatelabo.jp/20140812115420

なんで上だけネストさしてんだよ。

こうだろ?

if(A==条件 && B ==条件) {
    処理();
}

お前糞だな。

2014-08-05

モテキなる映画をいまさらながらに見たわけだが

昨年のテレビ録画を消化。

エロい映画なのかと思ったら、普通に面白い映画だった。

ただ世界観わからん

ライブとかフェスとか音楽関係サイト編集とか、ツイッターから出会いとかそれで連絡つけて会うとか、三十路過ぎてママチャリ通勤とか、部屋の壁一面に生活必要ないけどなんかないと死んでしまう気がするけど実際棄ててみるとなんともないCDとかマンガで埋め尽くされたネストとか、いい歳こいた年齢なのに仕事場の仲間とマンガにでてくる大学生コンパみたいに盛り上がれるとか、あれどこの世界日常なんだよマジでとか思いました。

背広組みがいないとよくわかんないよねー。

恋敵役がミュージシャンじゃなくて、エリート商社マンとか、最年少で一部上場果たしたとこの若手社長とか、もう少しわかりやすアイコンの方が肩入れできたかもしれんなー。

エミネム自伝映画とされる8Mileみたいに、なんかすごいしなんに感動してるのかわからないんだけど胸がいっぱいにはなるが、一息いれてから思い返すとやっぱりよくわからない感じで終わるのがツラい。

2014-07-24

ブックマーク コメントページの問題点

「ブックマークコメントページ」をベータリリースしました

告知されていたブックマークへの返信機能コメント一覧ページで検討中の新規機能について、ご意見を募集します - はてなブックマーク開発ブログ)が実装されたが、いくつか気付いた点を書いてみる。

引用スターしづらい、コメントURLが一旦ブックマークコメントページに切り替えないと踏めない、という2つの欠陥がある。これはコメント文章リンクにすることをやめて、従来の状態に戻せば解決できる。元に戻しても新設されたTwitterアイコンFacebookアイコンの隣にあるリンクアイコンからブックマーク コメントページに飛べるので問題ない。

raimon49 はてなスター引用箇所を選択しづらいのでコメント本文全体がクリッカブル仕様ダメ

(追記)

seiyuDB url貼っても1クリックで飛べなくなった。改悪しかない。無条件で鳩とかfとか出して鬱陶しいったらありゃしない。聞く耳持たないご意見募集とか。

従来はメタブタワーが一系統だったが、これからは各ブコメブックマークできるので、一つのブックマークページから系統ものタワーが伸びることになる。これを見やすくするには、ブコメの横に赤いブックマークアイコンが付けば多少見やすくなる。

kha パーマリンク(鎖マーク)の隣に[XXusers]とメタブ数が表示されれば、手斧を投げ合う様子が視覚化されて良いと思います


  • 枝分かれしたメタブを追うのが大変

つのブクマページから系統ものタワーが伸びると、それを追うのも大変。

似たような構造としては、スラッシュドットのようなネストできる掲示板がある。スラドのようにボタン一つでメタブを開けるようにすれば非常に見やすい。

ボタンはOff,5users,3users,1userとなっていて、1userにすると全メタブが開く。

メタブというのはブックマークページをブックマークすることだが、 ブックマーク コメントページをブックマークすること何と呼べばいいのか。誰か早めに決めたほうがいい。例えばブックマコメントで、マコメというのはどうだろうか。

取り急ぎ、改善できそうな点を書いてみた。

(追記)コメブという言葉があったので、そっちのほうがいいな。

2014-06-22

奇麗☆なコード

奇麗なコードって何だろう?

15年近くコードを書いてきて未だに思う。

自分が書いたコードなんて3ヶ月後には陳腐化する。なんでこんなコード書いたんだろう?ってなる。

それでも実践している最小限のことはある。

桁数は78まで

省略はしないけど長い名前はつけない

引数は3つまで、仕方ない時は4つまで許す

ネストレベルは3超えたら自分頭が悪いと疑う

関数の長さはそんなにはキニシナイ(100超えてたらマジキチだとは思うけど)

同じコードが散在していれば関数に切り出す(継承についても考える)

自分が書いた関数ドキュメントWikiに書きなぐって俺の関数を使えー!!って叫ぶ

標準関数、外部ライブラリラップして変更を容易にする

ディレクトリを切る時は依存関係を作っていないか何度も見直す

それでも3ヶ月もすればあれ?なんであの時?ってなる。

答えなんてない。だからメモする。Wikiを書く。

さて、IDEないとコード書けないレベルゴミしか釣れなかったぽくて残念

2014-04-24

増田はいい加減バージョンアップすべき

理由

そのままでも良いところ

判断保留

いや、不採算事業なのは分かってるよ?

ただ、どうせこのままならさー…。

だって、オレが似たようなの作っても醸成された文化ごとは持っていけないでしょ?

2014-04-14

[]4月14日

○朝食

水のみ

○昼食

近所の定食屋のぶたこま定食

○夕食

かきあげ丼(おごり)

夜食

油麺のちに吐く

ちょっと調子に乗りすぎた

反省しています、もうしません。

傷病手当金給付まで九千円で過ごさないと生けない件

まずい、色々とまずい。

何がまずいってまず、一万円もポケモンカードに使ったことがまずい。

だってダーテングしかったんだもん!(一枚しか出なかったけど)

これからシングル安定だなあ。

まず、食材は色々とあるから、この一週間はもつ。

次の一週間も自炊をすれば余裕。

次の一週間も自炊をすれば余裕。

というか、食費にしか使わなければ大丈夫

だって、残り月末まで16日だから、一日500円も使えるわけですよ、余裕ですよ余裕。

多分、月末には傷病手当金が振り込まれるから、何とかなるはず、はず。(もうこれが破綻すると、XboxOne貯金を崩さないといけなくなる)

最大の問題は、ポケカシングル買いして大会に出たい欲を抑えれるかと、

スターウォーズキネクトゲーをやるために、スターウォーズ全巻見る為にピザとらないとピザ」みたいな欲求をちゃんと抑えられるかだ。

くそ、完全にポケカを買ったのは失敗だった...

いや、ダーテングさまを拝めたのだからよしとしよう。

ポケモン

ランダムフリーの、ダブルトリプルダークライを使って無双するの楽しいです。

エーフィに間違えて打って二人とも寝てからのボロ負け以外は、基本勝ててます

ただ、フリーダブルトリプルは三値を理解していない人もいるからか、ほのおのからだファイアローなんてオドロキの型が来てビックリしました。

案外、フリー楽しいので、イベルタルも厳選して、フリーダブル悪統一でも真面目にやろうかなあ。

とりあえず、レポを残して晒す遊びでもしようかなあ。

(※レポってのは将棋でいう棋譜みたいな奴ね、僕は第四世代の頃社大スレってところでポケモンをやってたので、そういうのを残すのが好きなんです)


ハッピーウォーズ

魔法使いで協力を一セット。

やっぱ遠距離ファイヤーボールはいらないなあ、他のを模索しよう。

あと、エンジニア用の砲台命中3はあるんだけど、僧侶用のそれがないから、それも欲しいなあ。

課金したいなあ、でもお金ないなあ。

そうだクレジットカードなら(危ない思考)

マジック2013

デッキで数戦。

1マナソーサリーのお互いのクリーチャーを生け贄に捧げる奴が強いなあ。

僕はポケカでは悪タイプ専門、ポケモン本編でも悪統一なので、マジックでも黒なのです(実は今決めた)


Halo3

ステージ3「クロウズ ネスト」を攻略

アービターと協力かと思いきやそうでもない。

コルタナの記憶フラッシュバックするのはなんか怖いなあ。

早くコルタナと再開したいです。

2013-11-21

http://anond.hatelabo.jp/20131121151139

グローバルな関数足す

DLLやSO作るときに、シンプルグローバル関数で逃げられるなら、別にシンプルグローバル関数の追加は有り。

何でもかんでもIDLとかやってられない。

 

メソッドやす

1度しかよばれない、汎用性の低い処理をわざわざAPI切って公開するな。他人が使わないものを公共の場に置かれても迷惑

 

private

protected virtualも検討してくれ。他人が使うことがある。

 

その他よくある。goto 使うな

ネストの深い帯域脱出goto使わないとかありえないし、関数内の例外エラー処理にtry-catch使うほうがありえない。よってgotoの方が良いケースも有る。

 

基本的にコーディング規約初心者を縛るもので、上級者になったら、コーディング規約例外ケースを知らないとダメ

想定外がない事ががないように、コーディング規約例外想定外の条件にコーディング規約に従っても仕方がない。逆に、そういうことを知らずにコーディング規約を語っても仕方がない。

2013-06-26

エロ2ちゃんねるまとめサイトから画像を集約するサイト作成

作ったサイト概要

サイト名称
おなりん(正式名称おなぬらいんず)
サイト目的
おなぬをお手軽・お気軽にするためのサービスエロ2ちゃんねるまとめサイトから画像を収集して、お気に入り画像だけをスライドショーするだけのシンプルWEBサービスです。
サイトの特徴
1)準備をしなくてもすぐにはじめられる 2)毎日新鮮なおかずで 3)右手はいつもフリー、、、
サイトの説明
「おなりん」はおなぬが大好きだけど、おかずを準備するのが面倒というひとのために開発されました。本をおかずに使うと、利き手でページをめくる必要があるので、おなぬに大切なリズムが狂ってしまますインターネットエロサイトをおかずにすると、画像を切り替えるのにいちいちマウス操作せねばなりません。利き手マウス操作しないといけないので、これも大切なリズムを狂わせますもっと気軽におなぬが出来ないものか?そんなあなたの為に作られたWEBサービスです。厳選されたムフフサイト画像を表示し、気に入った画像お気に入り登録して、スライドショーで表示する。後は、右手の思うがままです。何にも集中を邪魔されることなくおなぬに集中することが可能です。

わたしの横顔

年齢
40代半ば
職業
システムエンジニア
プログラミング
25年以上
プログラミング実績
10数年前までフリーソフト作家的なことをしていました。窓の杜にも作成プログラムが掲載されていたことがあります
好きなプログラミング環境
PHPMySQL(だたし、「おなりん」はPython作成しています

作ったきっか

もともとは、2ちゃんねる系のまとめサイトを巡回して、Yahoo!ニュースのようなサイトを作っていました。(現在も鋭意開発中です。)

コンテンツの内容を解釈して自動的にジャンル分けをして・・・などと、出来るかわからない壮大なアイデアを実装しているので、いまだに完成時期が見えて来ません。

画像収集処理を作っている時に「これでエロ画像を集めたら面白そう」と思いついてしまいました。思い立ったら、すぐにやりたくなるのが人間の性というやつです。基本的な処理はほとんどできていたので、割に短期間で作成できました。エロ画像をどうせ集めるのなら、目的をもって役に立つサイトにしようと思い立ち、おなぬーをするためのWEBサービスにました。

作成したもう一つの目的として、月間10PV程度のサイト自分で運営したいという思いもありました。安直ですがエロ系のサイトであれば、それが可能なのではと考えた次第です。

なぜ匿名ダイアリーを書いているか

せっかくサイトを作ったのですが、エロ系のサイトは告知をするのが難しいとう事実を作り終わってから知りました。私自身もブログをやっているので、そこでお知らせをしても良いのですが、ブログ趣旨にあわないのと、PVがとてつもなく低いという理由で断念しました。

匿名ダイアリーは、かなりのPVがあるので、作ったサイトの告知ができるのではと思い匿名ダイアリーを書いています

せっかく作ったサイトですから、皆さんに利用してもらいたいし、役に立つサイトにしたいと思っています。ですので、サイトを見たらご意見をいただけたら嬉しいです。

おなりんの実行環境

「おなりん」は、Python/Djandoで作成しました。

もう、15年以上PHPPHP FIと言う名称の頃からユーザーです)でプログラムを作ってきました。PHPが持っている気軽さや気楽さは大好きなのですが、誰もが好き勝手コードが書けるというデメリットもありますプログラム言語にはある程度の厳しいルールがないと将来にわたってメンテナスしていけるプログラムを作るのは困難です。

せっかく新しプログラムを作るのだから、新しいプログラム言語で作ることにしました。

ある程度、厳しいルールがあって、誰もが同じようなプログラムが作れる言語はなんだろうと考えていくとPythonRubyが候補に上がりました。

Rubyはできるだけ手数を少なくプログラムを作ろうという基本思想があります。私の感覚では、熟練したプログラマが使う言語という印象が強いです。

Pythonは、プログラマレベルを問わず、熟練プログラマ新人プログラマも同じようなプログラムが書けるプログラム言語という印象でした。

私自身も将来誰かに教えられるようにと、今回はPythonを使用言語として選択しました。また、裸のPythonで書くのも面倒そうですので、フレームワークとしてDjangoを選択しています

「おなりん」は、そんな思いを乗せて以下の環境で構築しました。

サーバーさくらVPS(1G)
プログラミング言語Pytyhon 2.7.5 / Django 1.5.1
その他ツールBootstrap, jquery, wookmark, colorboxなど
WebサーバーApache 2.2
データベースMySQL 5.5

画像抽出について

「おなりん」は、登録されたまとめサイトを定期的に巡回して、各エントリーから記事内の画像URL抽出しています。取り出すのはURLだけで、画像の直接ダウンロードは行いません。ですので、リンク元画像がなくなれば、「おなりん」からの表示もなくなります

サイトエントリーRSSから取得しています。各記事のHTMLPythonライブラリurllib2を使って取り出し、HTMLから正規表現画像URL抽出しています

サイトによっては記事画像HTMLに決まった書き方がなされていないために、余計な画像抽出してしまうこともあります。おかず画像抽出精度は徐々に上げて行きたいと思ってます

さくらVPSについて

当初「おなりん」は、Amazon EC2(t1.micro)で構築する予定でした。構築までは完了したのですが、今ひとつ体感速度が上がらないのです。すでに利用しているさくらVPS比較したところ、3倍くらいの速度差(abコマンドの実行結果)があったので、Amazon EC2の利用を諦めました。

Amazon EC2は1年ほどの無料利用期間があります。これを過ぎると課金されていくのですが、Amazon EC2(t1.micro)を1ヶ月動かし続けると4000円近い料金が必要になりますさくらVPS(1G)は1年で1万円程度です。3倍早くて価格は4分の1なら、チープな私はさくらVPS以外選択余地がありません。

でも、拡張性を考えるとAmazon EC2も捨てがたいのです。

Python、初Django感想

Pythonはインデントプログラムブロックを表すます。他の言語のようにカッコを使いません。IFやFORを使ってインデントが深くなると、どんどん右寄りになってきて、全体的に斜めなプログラムが出来上がります最初は見慣れずに違和感を感じましたが、慣れればそうでもありません。

ただ、ネストしたIFでインデントが深くなりすぎると、インデントの位置で意図しない結果が出るので注意が必要です。慣れてしまえば、使いやす言語です。

Djangoは良いフレームワークだと思いますモデル定義してしまえば、モデルメンテナンスを行う、管理画面が一緒に生成されますテンプレートタグなどを自作すれば、かなり深いところまで手を加えることが可能です。慣れれば扱いも楽なので個人的には気に入っています

今後について

「おなりん」は、まだ作ったばっかりで、テストもまだ十分に行えていません。ですので皆様にも使っていただき、問題点があれば教えて頂きたいと思っています。開発しているマシンmacなのでIE系のテストは皆無です。IEの方、ぜひともレポートをください。

レポート感想などがありましたら、「おなりん」のサイトの下にある「お問い合わせ」リンクから送付をお願いします。また、巡回してほしいサイトも募集しています。ただし、日本国法律に準拠したサイトに限らさせて頂きます

機能的に今後は、画像の人気ランキング機能を組み込む予定です。また、サイト運営の足しにしたいのでひっそりと広告を入れます

また、リクエストがあれば、ソースコードGithubに公開したいと考えています

長文を読んでいただき、ありがとうございました。

2013-06-21

http://anond.hatelabo.jp/20130621085932

速度の問題じゃないと思う

ネストの問題は処理の見通しが悪いことでしょ

可読性の低さはソフトウェア開発にとって問題

だがHTMLデータであってプログラムではないので、多少ネストが深くても処理速度に問題ない限りは改良の優先度は低いってことでしょ

2013-06-20

http://anond.hatelabo.jp/20130620232733

if文for文のネストも処理は一瞬だろ、何言ってんだお前?

http://anond.hatelabo.jp/20130620224102

プログラマーだけどdivのネストの処理にかかる時間なんて一瞬だからデザイナーに気にして欲しいとは思わない。

そんな事より、画像を軽くしてくれ

2013-05-17

かつて、私の隣にSQL魔女がいた

今日プロジェクト打ち上げがあったのだが、とあるサプライズ……三ヶ月前に寿退社した先輩との再会に思わず涙ぐんでしまい、ひどくばつが悪い思いをしている。今も顔の火照りが抜けてくれない。アルコールは抜けたのに。彼女はかつてSQL魔女と呼ばれていた。

から遡ること一年前、私は辞令を貰い、二年目にして事業部ごと変わるという波乱をようやく乗り切って、業務系のSE仕事内容、特にWebアプリレイヤーについてOJT形式で学んでいた。そこで先生にあたる方として付いたのが、ちょうど手待ちだった先輩である。初めてお会いした時の先輩に対し、私は正直ちょっと物足りなく感じていた。

初日に行ったPCのセッティングでは、これやってと先輩から資料を渡されたのだが、外部にネットが繋がらない。先輩に相談して弄ってもらったのだけど繋がらず、今日は社内ネットで我慢して、と言われてから二日後、資料が古かったことが判明。

与えられた課題を終えるごとに、コードを提出するのだが、見たよ〜出来てると思う、頑張ったね〜と言われた後で、そのプロジェクトを下敷きに発展課題に足を進めたら、でっかいバグがあったり。

万事その調子で、今やってる課題放り出して、プロジェクトオイラーの問題でも解いてた方がよっぽど楽しいなぁと若干サボりたいと思い始めた頃、炎上プロジェクトへ先輩と二人テスターとして出向するよう、上司から命じられた。炎上プロジェクトリーダーから手待ち要員いない?と声がお上に届き、降りて来た結果先輩と自分がいたわけだ。

前の事業部ではずっと同じ客先にいたわけで、頭では分かっていても鼻先三寸で飛ばされることには不安がつきまとった。

「これから行く先はどうなんでしょうね?」

先輩へ問うと、

「基盤にいたんでしょ。メインフレームが扱えるなら大丈夫だよ〜」

豆腐すらぷるぷる震えそうな声が返ってきた。

この時の私は、まだ事業部を転属して間もなかったし、プライドばかり高くて奢ってたように思う。事業部を変える→入社して以来の経験値がまた0に、と失うことに対する不満ばかりで、それが拗れて数少ない基盤系経験アプリ開発者、そんな肩書きばかりを強調する変人に成り果てていた。自己紹介で、どうも、基盤から参りましたと、そこだけは大きい声が、今思い出したけどマジで恥ずかしい。

から、だろう。このゆるふわな先輩とドナドナされることに密かに感じていた屈辱には、出向いた先で押された駄目テスターという烙印によって罰があたることになった。

その理由は、私がSQLを全く使えなかったことにある。テスターとして行うことになったのは表示画面の統合テストで、UI検索結果とデータベースに直接SQLを打ち込んで得たレスポンスを目で確認していく作業だった。UIは、境界値さえ気をつけて、仕様通りに実施すれば何とかなる。しかし、SQLで再現が出来ない。この仕様はどうやったらコマンドに落とし込めるんだよ。頭を抱える中で思い出したことがあった。

教育過程Javaサーブレットを学んだが、その一つにJDBCも勿論習った。そこで私は何をしたかmysqlに繋げればそれでいいやと、エグゼキュートで実行する際に渡す魔法文字列……つまりSQLの中身は、すべてコピペで済ませていたのだ。社内教育資料を内部作成するにあたり参考にしたと思われるネットから……構文チェック効かないし、ここは手を抜いてもいいだろう、これが要領の良さというものさ……アホーアホー私のアホー。

三日目の午後二時、進捗を確認しに来たPMにすべてを告白すると、ちょっと来てとPMが連れ出したのがあの先輩の席だった。

「申し訳ないけど今やってるテストは止めて、これから定時いっぱい最低限テストが出来るように彼にSQLを教えてやってくれ。」

良いのですか?と顔をあげるとPMは何を勘違いしたのか、やにわに私の肩を叩くと、

彼女SQL魔女と呼ばれている。半日でお前も即戦力だよ。」

と去っていった。顔を先輩へ戻すと、あのPMさんは嘘つきだから信じないほうがいいよといつものふわふわした声でにっこり。

宜しくお願いします。ノートパソコンを横に私は型通りの挨拶。四時間後、私は傲慢さを、尻の毛まで抜かれることになる。

私はSQLの深さを知った。SQLのQとは何だ?Queryであります、サー!!今も時々夢問答を繰り返す。そう、全ては問い合わせ次第なのだ。今思えば、あの時やったことはT2テストを使ったSQL文の作成添削しかSELECTによる条件抽出のみだったが、そこに全てが詰まっていた。

DISTINCTとORDER BY共存で詰まってわけがからなくなったコードは、もっとシンプルにいけるよと副問い合わせに書き換えられて。ネストワイルドカードを多用してスパゲティになったコードを、先輩はLEFT JOINとWHEREとORで全てをすませた。

なんということでしょうマニキュアが塗ってある長い爪から想像もつかない早さで直されていく構文に脳内で途中から匠の曲が流れ始めたのを覚えている。本当に、なんということでしょう。先輩はSQL魔女だった。

翌日、先輩の教えはしっかり自分に身に付いていた。すらすら書けるSQLサクサク進むT2テスト。条件設定に悩んで、エクセルに吐き出してからリストコピペで逐一加工してた時間馬鹿みたいだった。先輩のところへ、帰りしなに昨日のお礼と作業進捗に激震が走ったことを伝えると別にお礼なんていいよーといつものふわふわした顔で微笑んでくれた。

それから先、配属先が決まるまでの条件付きでテスターとして入っていたはずだったが、T2試験が終わり、T3試験が始まってもなぜか私はそのプロジェクトにいたままだった。DB担当者として。もともと基盤だったわけだし、バッチファイル処理でスクリプトがそこそこ書けたというのもあるけど、SQLが書けたというのはすごく大きい。昼休み、いつのまにか私はプロジェクトオイラーの問題に代わって、名著「SQLパズル」を解くのを日課としていた。

先輩は仲良くなる暇もなく、その後すぐにプロジェクトを移り、メーリングリスト寿退社を知った。炎上したプロジェクトは、なぜか横展開を経て今に至り、私は相変わらずここにいる。だが、あの時SQL魔女がかけた呪いは今もしっかり私に根付いている。

ログイン ユーザー登録
ようこそ ゲスト さん