はてなキーワード: DIffとは
https://anond.hatelabo.jp/20170706235735
勝手に具体的に考えてみる。
マウスで目的の部分をさっと選択できて、さっと切り貼りできる。EmacsやViは1ストローク余計にかかって使いづらい。他のエディタなら大抵OK。
WriteMonkyなど
この話の続き
systemd-nspawnに移行した
以下詳細とか雑記
docker commitもdocker diffも使わないし、要らない
要らないだけならまだしも、aufs、overlayfs周りでトラブル可能性がありむしろ邪魔
イメージの差分管理はファイルシステムの層でやるのが素直でコンテナ管理にくっついてるのに違和感がある
Docker特有の機能をフルに使ってる奴ならまだしもコンテナ動かすだけなら何使っても変わらねーよw
Docker Hub からイメージダウンロードしてtarで解凍すりゃ良いだけじゃねーか
composeだって容易にコンバート可能だし、composeで何が起きるかわからない状態で本番運用とか口にしないで欲しい
実際systemd-nspawnの今でもベースはDocker Hubから拾ってきてるし、Docker使ってる奴との受け渡しも問題ない
やりかたは runc.io のGetting startedでも見れば?
Docker hubでよくわかんねーイメージ落とすときに、出所がクリアになるってメリットだけだなこんなん
取り急ぎansibleでセットアップは済ませてる
コンテナにしたからプロセス管理は違う方法でやります→supervisorで云々→めんどくさいだろ!
じゃあ1プロセス1コンテナにしてマイクロサービスにします→本当に便利それ?管理できる?
ログの管理は?logrotateは誰がやる?データボリュームはどこにする?みたいなアホみたいな検討し始めたときに俺は会議室を出た
「いや今はこれが主流で流行ってるから便利です」みたいな事言ってるバカが居て殴りたくなった
「毎週、毎週swarmが壊れたバージョンアップで再起動だのと余計な仕事増やしやがって、いつまでDocker社のβテストに付き合うつもりだクズども」
とは言えないので
「今の状況は前よりも運用負荷が高い状況みたいなので、systemd-nspawn等のシンプルなものに代替できないか検討してほしい」
と言ってなんとか説得
(結局半分以上は俺が対応したが)社内のクリティカルな部分のDockerは全部廃棄した
普通に起動して、普通に終了できる。コンテナの中なのにそれを意識しないくらい普通に起動する。
aufs,overlayfs等の差分管理しなければそれに付きまとう問題もない(overlayfsとか使うこともできる)
自動起動も設定もコマンドもコンテナ内だから〇〇しなきゃダメみたいなやつが無くなって、ものすごく安定してる
Dockerも--privilegedつけてinitからrunすればいいって?糞不安定だし、権限多すぎだろ?capabilitiesを適切に設定しろだって?
一生やってろバーカ
結局のところ本当にこれ便利になったんだっけ?って聞かれて理由を言える奴じゃないと何をやってもダメってことが分かった
これはDockerに限らず全部そうだと思う
QiitaとかにあるDockerでこんな素晴らしくなったよって記事の大半は本質を見失った馬鹿記事
楽になるどころか厄介事を+1してるだけ
とりあえずこっちはDockerのゴタゴタに振り回されなくなって良かったよって話
かなり時代錯誤を感じる。ネタであって欲しい。もしかしてITリテラシー低すぎ?というか、好きなソフトウェアは何なんだよ。ノーカンプラ???
高い
"Excel" なら安い。アプリの数百円からデスクトップ版の1.5万程度。ていうか、¥14,526で売ってる。
https://www.amazon.co.jp/dp/B015SMNVAK/
重い
Excelが重いとかどれだけ糞スペ。
よくバグる
それはExcelに限った話ではない。ソフトウェアである以上多少のバグはしゃーない。つかリソースが糞なせいじゃねーの?滅多に落ちないが。
検索性が悪い
ブラウザでOK。
タブ表示が面倒臭い
ショートカットご存知無い?馬鹿?ページスクロールも面倒臭そうだな。見なくていいよ。
バージョン管理システムで管理した場合Diffが見にくい
それはそのバージョン管理システムが糞なんだろ。Diffを見るだけならWinMerge+xdocdiffで普通に見やすいが。馬鹿なの?
嫌ならマクロで一括解除&復元でもしろ。マクロからでも普通に扱えるし、イミフ。罫線も死んじゃうの?
知らんがな。使い方の問題だろ。ExcelじゃなくてWordならいいのか?馬鹿?
お節介な補完がうざい
Excel方眼より良いものがあれば使わないだろ。普及度、使い勝手、トータルでExcel方眼より良いものがあればぜひ教えろ。
むしろ、今の大学でOffice使わないところあるの?マジ?普通の総合大学ならITの授業あるだろ??レポートもOffice使うだろ???
それとも持ってるけど使えない脳足りん系?F欄なのかな。
つか、Excelの話じゃないのか?
どのように調べたのか。デバッガが使えない環境だとしても、標準出力、ファイル出力、ウィンドウ表示など、いくらでも方法はあるだろう。他トラバでも指摘されているように、コードそのものに不備がないのなら依存関係を含めて環境を疑うのが定石。
何と、何を、どのように見比べたのか。コード?ドキュメント?目視?diffコマンド?これもまた、他トラバでも指摘されているが、ドキュメントは英文でも読むのは基本。それと、パンチャーなんていう時代ではないのだから、現代のプログラマーであれば、人間の力など信じてはいけない。
HEAD ~1
HEADの親
HEAD ~2
HEADの親の親
HEAD ^1
HEADの1番目の親
HEAD ^2
HEADの2番目の親
HEAD
ORIG_HEAD
git merge や git reset でHEADが移動してしまう.
ORIG_HEADを使うことで移動前のHEADを指定できる.
FETCH_HEAD
git fetch によってリモートリポジトリから取得した最新のコミットを指定できる.
git log --oneline
logを一行で表示する.
git log --decorate
git log --follow FILENAME
FILENAMEのファイルの変更履歴を,たとえ途中でリネームされたとしてもそれも見る.
git log --author <name>
git log --graph
git log -p
git diff <base commit>...<opposit commit>
git log -S "string"
git bisect start <bug commit> <correct commit>
二分探索の開始
git bisect good
git bisect bad
git bisect reset
二分探索の終了
git checkout <branch name, needs to be rebased> git rebase <base of rebase>
rebase
git pull --rebase
git pull は git fetch + git merge
merge ではなく rebase したい場合に利用するのがよい.
git log --merge
git stash
内容の退避
git stash pop
退避した内容の復活
git stash list
退避した内容の一覧
git worktree
git submodule
git rebase -i HEAD~N
Nは自然数.
編集時にエディタが開くが,編集を終えてエディタを閉じてもrebaseが機能しないことがある.
その場合は次のように, .gitconfig へエディタのパスを書けばよい.
[core] editor = /usr/bin/vim
Références
Cour de cassation
chambre sociale
Audience publique du jeudi 12 février 2015
N° de pourvoi: 13-21975
Non publié au bulletin Cassation
Mme Goasguen (conseiller le plus ancien faisant fonction de président), président
SCP Gatineau et Fattaccini, SCP Masse-Dessen, Thouvenin et Coudray, avocat(s)
--------------------------------------------------------------------------------
Texte intégral
LA COUR DE CASSATION, CHAMBRE SOCIALE, a rendu l'arrêt suivant :
Vu l'article 4 du code de procédure civile ;
Attendu, selon le jugement attaqué rendu en dernier ressort, que Mme X... a été engagée par l'oeuvre de perfectionnement de la Loire en qualité de psychomotricienne ; que le contrat ayant été transféré à l'association PEP de la Loire, la salariée était, en dernier lieu, affectée sur deux établissements distincts, l'un situé à Firminy et l'autre à Grand-Croix ; qu'elle a saisi la juridiction prud'homale d'une demande en paiement de frais exposés pour effectuer le trajet entre ces deux établissements ainsi qu'en paiement de dommages-intérêts ;
Attendu que pour débouter la salariée de ses demandes, le jugement retient que les dispositions contractuelles ne prévoient pas la prise en charge par l'association des frais de carburant engagés pour les déplacements entre la résidence habituelle de la salariée et ses différents lieux de travail, et que l'intéressée n'apporte pas la preuve d'un engagement de cette dernière de rembourser ses frais de déplacement pour se rendre à Grand-Croix ;
Qu'en statuant ainsi, alors que la salariée demandait le remboursement de frais exposés pour le trajet entre les deux établissements auxquels elle était affectée, le conseil de prud'hommes a méconnu l'objet du litige dont il était saisi ;
CASSE ET ANNULE, dans toutes ses dispositions, le jugement rendu le 27 mai 2013, entre les parties, par le conseil de prud'hommes de Saint-Etienne ; remet, en conséquence, la cause et les parties dans l'état où elles se trouvaient avant ledit jugement et, pour être fait droit, les renvoie devant le conseil de prud'hommes de Lyon ;
Condamne l'association PEP 42 aux dépens ;
Vu l'article 700 du code de procédure civile, la condamne à payer à Mme X... la somme de 3 000 euros ;
Dit que sur les diligences du procureur général près la Cour de cassation, le présent arrêt sera transmis pour être transcrit en marge ou à la suite du jugement cassé ;
Ainsi fait et jugé par la Cour de cassation, chambre sociale, et prononcé par le président en son audience publique du douze février deux mille quinze.
Moyen produit par la SCP Masse-Dessen, Thouvenin et Coudray, avocat aux Conseils, pour Mme X...
Le moyen fait grief au jugement attaqué d'AVOIR débouté Madame Véronique X... de ses demandes tendant au remboursement des frais exposés pour ses déplacements et au paiement de dommages-intérêts.
AUX MOTIFS QUE selon les dispositions de l'article L.3261-3 du Code du travail, « l'employeur peut prendre en charge, dans les conditions prévues à l'article L.3261-4 du Code du travail tout ou partie des frais de carburant engagés pour leurs déplacements entre leur résidence habituelle et leur lieu de travail par ceux de ses salariés : 1° Dont la résidence habituelle ou le lieu de travail est situé en dehors de la région d'Ile de France et d'un périmètre de transports urbains défini par l'article 27 de la loi n° 82-1153 du 30 décembre 1982 d'orientation des transports intérieurs ; 2° Ou pour lesquels l'utilisation d'un véhicule personnel est rendue indispensable par des conditions d'horaires de travail particuliers ne permettant pas d'emprunter un mode collectif de transport ; que dans les mêmes conditions, l'employeur peut prendre en charge les frais exposés pour l'alimentation de véhicules électriques ou hybrides rechargeables et permettre la recharge desdits véhicules sur le lieu de travail. Le bénéfice de cette prise en charge ne peut être cumulé avec celle prévue à l'article L.3261-2 du Code du travail» ; que l'article L.3261-47 dudit Code précise : « La prise en charge des frais de carburant mentionnée à l'article L.3261-3 du même Code est mise en oeuvre : 1° Pour les entreprises entrant dans le champ d'application de l'article L.2242-1 du Code du travail par accord entre l'employeur et les représentants d'organisations syndicales représentatives dans l'entreprise ; 2° Pour les autres entreprises, par décision unilatérale de l'employeur après consultation du comité d'entreprise ou, à défaut, des délégués du personnel s'il en existe » ; que les dispositions contractuelles entre Madame X... et l'APEP 42 ne prévoient pas la prise en charge par l'employeur des frais de carburant engagés pour les déplacements entre la résidence habituelle de Madame X... et ses différents lieux de travail ; que Madame X... n'apporte pas la preuve d'un engagement de son employeur de rembourser les frais de déplacement pour se rendre à Grand Crois ; que lors de la réorganisation de l'entreprise signifié à Madame X... par courrier du 21 juin 2010, par lequel il était bien précisé deux lieux de travail différents, Madame X... aurait pu demander à son employeur l'application des dispositions de l'article R.3261-15 du Code du travail : « Le salarié qui exerce son activité sur plusieurs ces différents lieux et entre ces lieux et la résidence habituelle du salarié peut prétendre à la prise en charge des frais de carburant ou d'alimentation électrique d'un véhicules engagés lui permettant de réaliser l'ensemble des déplacements qui lui sont imposés entre sa résidence habituelle et ses différents lieux de travail, ainsi qu'entre ces lieux de travail » ; que cette demande n'a été faite qu'en novembre 2010 ; qu'en tout état de cause, la prise en charge des frais relève d'une disposition unilatérale de l'employeur ; qu'en l'espèce, pour la prise en charge des frais de déplacement domicile/lieu de travail l'APEP 42 a confirmé à Madame X... que la faculté ouverte à l'employeur de prendre en charge une partie des frais engagés par le salarié, ne présente aucun caractère obligatoire pour l'entreprise ; qu'en conséquence, la demande de Madame X... de paiement de ses frais de déplacement n'est pas fondée.
ALORS QUE Madame Véronique X... poursuivait le remboursement des frais exposés au titre des trajets effectués entre les deux établissements auxquels elle était affectée ; qu'en statuant sur les frais exposés pour les trajets entre la résidence habituelle de la salariée et ses différents lieux de travail, le Conseil de prud'hommes a méconnu l'objet du litige en violation des articles 4 et 5 du Code de procédure civile.
ET ALORS QUE Madame Véronique X... soutenait que le contrat de travail transféré à la PEP 42 prévoyait le remboursement des frais de déplacement et que le contrat régularisé avec la PEP 42 à l'occasion de ce transfert constituait un simple avenant n'emportant pas novation du contrat initial en ce qu'il prévoyait le remboursement des frais exposés pour les trajets ; qu'en omettant de répondre à ce moyen déterminant des écritures d'appel de la salariée, le Conseil de prud'hommes a entaché sa décision d'un défaut de réponse à conclusions en violation de l'article 455 du Code de procédure civile.
ALORS encore QU'en application de l'article R.3261-15 du Code du travail, le salarié qui exerce son activité sur plusieurs lieux de travail au sein d'une même entreprise qui n'assure pas le transport entre ces différents lieux et entre ces lieux et la résidence habituelle du salarié peut prétendre à la prise en charge des frais de carburant ou d'alimentation électrique d'un véhicule engagés lui permettant de réaliser l'ensemble des déplacements qui lui sont imposés entre ces lieux de travail ; qu'en se fondant sur les dispositions des articles L.3261-3 et L.3261-4 du Code du travail, relatifs aux seuls déplacements entre la résidence habituelle et le lieu de travail, pour rejeter la demande de la salariée, le Conseil de prud'hommes a violé lesdits articles L.3261-3 et L.3261-4 du Code du travail par fausse application.
ALORS de plus QU'en application de l'article R.3261-15 du Code du travail, le salarié qui exerce son activité sur plusieurs lieux de travail au sein d'une même entreprise qui n'assure pas le transport entre ces différents lieux et entre ces lieux et la résidence habituelle du salarié peut prétendre à la prise en charge des frais de carburant ou d'alimentation électrique d'un véhicule engagés lui permettant de réaliser l'ensemble des déplacements qui lui sont imposés entre ces lieux de travail ; qu'en reprochant à la salariée de n'avoir pas demandé l'application des dispositions de cet article dès qu'elle avait été informée de son affectation sur deux établissements différents, le Conseil de prud'hommes a violé l'article R.3261-15 du Code du travail en y ajoutant une condition qu'il ne prévoit pas.
ALORS QUE la renonciation à un droit ne se présume pas ; qu'en reprochant à la salariée de n'avoir pas demandé l'application des dispositions de l'article R.3261-15 du Code du travail dès qu'elle avait été informée de son affectation sur deux établissements différents, quand cette circonstance, fût-elle établie, ne pouvait caractériser la renonciation de la salariée à se prévaloir du droit au remboursement des frais de trajet exposés, le Conseil de prud'hommes a violé l'article 1134 du Code civil.
--------------------------------------------------------------------------------
(増田アドベントカレンダー2014の9日目の記事です)
最初作曲の勉強して増田のテーマ曲作ってメロディ記法?(というのがあるらしい?)で書いて載せること考えたけど、勉強間に合わなかった。
うんこ漏らせないし、小ネタとして、MS-IMEのユーザー辞書でこういうことしてる的な話でも書こうと思います。
定型句は見つけたら登録してる感じ。この辺はありがち。
例えばこのようなものを登録する。
おせます | お世話になっております。 |
おせした | お世話になりました。 |
かきけ | 下記の件、 |
よろます | 宜しくお願いします。 |
あざます | ありがとうございます。 |
あざした | ありがとうございました。 |
いじょ | 以上となります。 |
メールとか書くの速くなる…
同音異義語多い単語とか打ってると変換候補が多くて困惑するし、誤変換で確定して「あーっ!」とかなること多いけど、それぞれにオレオレ読みをでっち上げてユーザー辞書に載せとくと少しだけ楽。辞書は別に切っておく。
http://anond.hatelabo.jp/20140313130607
↑この辺みて割と最近思いついて使ってる話だけど、既にどこかで同じようなことやってる人もいるかも。
(例)
「へんこう」
へんむく | 偏向 |
へんさら | 変更 |
へんぴか | 偏光 |
「げんこう」
はらこう | 原稿 |
あらこう | 現行 |
もとこう | 元寇 |
などなど。「いじょう」「こうせい」とかいろいろあるので仕事が暇な時とかに登録していくといい感じ。
「たいしょう」
しんめと | 対称 |
ぺあぞう | 対象 |
…
忘れやすいルールで略すとあまり意味がないので何かしら読み替えルールを作っとく良いのではないかと…。
キータイプの超人クラスになると、こんなことしなくてもIMEの学習機能を切って変換順序を丸暗記してるらしい。怖い。
以前やったお仕事でIT部門の規制がガチガチで、WindowsとOfficeしか使えないVBAの仕事があって全然捗らなかったけど、今思うとIMEで対応できたはず。
いf | If - Then End If |
ふぉr | Dim i As Integer: For i = 0 To max Next i |
試しに上のようなローマ字交じりの単語で登録して変換してみたけど、一応使えてる。
あとgrepとdiffなくて苦労していたけどfindstrとfcで代用できます。
最近は普通に多機能なエディターを使えるのでこういう悩みはない…。
あとMS-IME以外もOKな環境なら普通に予測変換やAZIKが使えるものを使うと楽。
~/hatena/q1408437001% sh batch.sh cat.jpg glenn.jpg london.jpg virgo.jpg
jpeg run with "cjpeg -quality 30 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 cat1.diff.png: mean 658.499
#1000 cat1000.diff.png: mean 0
im run with "convert w.pnm -quality 15 t.jpg" & "convert t.jpg w.pnm"
#1 cat1.diff.png: mean 1012.47
#1000 cat1000.diff.png: mean 0
j2k run with "opj_compress -r 400 -i w.pnm -o t.jpg.j2k > /dev/null 2>&1" & "opj_decompress -i t.jpg.j2k -o w.pnm > /dev/null 2>&1 ; mv t.jpg.j2k t.jpg"
#1 cat1.diff.png: mean 852.046
#10 cat10.diff.png: mean 153.899
#1000 cat1000.diff.png: mean 0
jpeg run with "cjpeg -quality 30 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 glenn1.diff.png: mean 3399.9
#10 glenn10.diff.png: mean 13.1817
#100 glenn100.diff.png: mean 0
#1000 glenn1000.diff.png: mean 0
im run with "convert w.pnm -quality 15 t.jpg" & "convert t.jpg w.pnm"
#1 glenn1.diff.png: mean 3774.37
#10 glenn10.diff.png: mean 2.9123
#100 glenn100.diff.png: mean 0
#1000 glenn1000.diff.png: mean 0
j2k run with "opj_compress -r 400 -i w.pnm -o t.jpg.j2k > /dev/null 2>&1" & "opj_decompress -i t.jpg.j2k -o w.pnm > /dev/null 2>&1 ; mv t.jpg.j2k t.jpg"
#1 glenn1.diff.png: mean 5124.25
#10 glenn10.diff.png: mean 34.9354
#100 glenn100.diff.png: mean 0.54037
#1000 glenn1000.diff.png: mean 0
jpeg run with "cjpeg -quality 30 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 london1.diff.png: mean 1145.86
#10 london10.diff.png: mean 2.94233
#100 london100.diff.png: mean 0
#1000 london1000.diff.png: mean 0
im run with "convert w.pnm -quality 15 t.jpg" & "convert t.jpg w.pnm"
#1 london1.diff.png: mean 1589.42
#10 london10.diff.png: mean 0.262741
#100 london100.diff.png: mean 0
#1000 london1000.diff.png: mean 0
j2k run with "opj_compress -r 400 -i w.pnm -o t.jpg.j2k > /dev/null 2>&1" & "opj_decompress -i t.jpg.j2k -o w.pnm > /dev/null 2>&1 ; mv t.jpg.j2k t.jpg"
#1 london1.diff.png: mean 1874.1
#10 london10.diff.png: mean 34.7301
#100 london100.diff.png: mean 0
#1000 london1000.diff.png: mean 0
jpeg run with "cjpeg -quality 30 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 virgo1.diff.png: mean 655.998
#10 virgo10.diff.png: mean 0.593173
#100 virgo100.diff.png: mean 0
#1000 virgo1000.diff.png: mean 0
im run with "convert w.pnm -quality 15 t.jpg" & "convert t.jpg w.pnm"
#1 virgo1.diff.png: mean 967.051
#10 virgo10.diff.png: mean 0.276289
#100 virgo100.diff.png: mean 0
#1000 virgo1000.diff.png: mean 0
j2k run with "opj_compress -r 400 -i w.pnm -o t.jpg.j2k > /dev/null 2>&1" & "opj_decompress -i t.jpg.j2k -o w.pnm > /dev/null 2>&1 ; mv t.jpg.j2k t.jpg"
#1 virgo1.diff.png: mean 689.347
#10 virgo10.diff.png: mean 72.9174
追記:quality 95でも行った。収束は遅くなるが100回までで収束した。
jpeg95 run with "cjpeg -quality 95 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 cat1.diff.png: mean 59.3537
#10 cat10.diff.png: mean 9.35999
#1000 cat1000.diff.png: mean 0
jpeg95 run with "cjpeg -quality 95 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 glenn1.diff.png: mean 2104.51
#10 glenn10.diff.png: mean 69.472
#100 glenn100.diff.png: mean 10.8727
#1000 glenn1000.diff.png: mean 0
jpeg95 run with "cjpeg -quality 95 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 london1.diff.png: mean 79.604
#10 london10.diff.png: mean 80.2684
#100 london100.diff.png: mean 8.79387
#1000 london1000.diff.png: mean 0
jpeg95 run with "cjpeg -quality 95 w.pnm > t.jpg" & "djpeg t.jpg > w.pnm"
#1 virgo1.diff.png: mean 213.594
#10 virgo10.diff.png: mean 11.7891
~/hatena/q1408437001% cat batch.sh
#/bin/sh work=w.pnm temp=t.jpg list="jpeg im j2k" enc_jpeg="cjpeg -quality 30 $work > $temp" dec_jpeg="djpeg $temp > $work" enc_im="convert $work -quality 15 $temp" dec_im="convert $temp $work" enc_j2k="opj_compress -r 400 -i $work -o $temp.j2k > /dev/null 2>&1" dec_j2k="opj_decompress -i $temp.j2k -o $work > /dev/null 2>&1 ; mv $temp.j2k $temp" for orig in "$@" ; do for name in $list ; do eval enc=\$enc_$name eval dec=\$dec_$name if [ "x$enc" == x -o "x$dec" == x ] ; then continue ; fi echo $name run with \"$enc\" "&" \"$dec\" || continue mkdir $name > /dev/null 2>&1 chdir $name || contimue convert ../$orig $work || return 1 i=0 before=../$orig for c in 1 10 100 1000 ; do while [ $i -lt $c ] ; do eval $enc && \ eval $dec && \ i=$((i+1)) || break done base=${orig%.*}${i} cp $temp ${base}.jpg convert $work ${base}.png composite $before ${base}.png -compose difference ${base}.diff.png echo -n "#$i " identify -format '%f: mean %[mean]\n' ${base}.diff.png before=${base}.png done chdir .. || return 1 done done
サンプルデータの元は下記を使用
コーデックは下記を使用
あの なんというか。
if( bool ){ function(); }
ってね。
if( bool ) function();
ってかけるんだけど
第3者がデバッグしている時に
function();にブレークポイントを当てたい時に、わざわざコードをチェックアウトして改変しろというのか?
第3者が
if( bool ){ function(); function2(); }
と したい時に、 {}つけるのか?という話題。
変なふうに コード管理に diffが 残るんですけど・・・という。
function();変えてないのに 変えたことになっちゃうんだよね。
それが 私が{}をつけろと思う理由。
if (bool ) funtion が 他の第3者に対して 常に1行であると保証できないでしょ。
というはなし。
その時だけ良ければ、それでいいんだけど、長く他人のコードを面倒見てると
if(bool) function()
if(bool) { function() }
としておいてくれると助かると。
次々とやってくるさまざまな環境で色々がんばる人のためのノウハウを集めてみよう。
必ずしも綺麗な環境で開発できる人ばかりじゃない。スパゲッティを手渡されラーメンを作れといわれる。
所詮下請けなので、そもそもこうした方がいいよとか軌道修正すらできない環境で足掻くために何ができるのか。
朝はCakePHP、昼はsymfony、右向きゃ独自FW、左向きゃ素php。
こんなこと、よくありますよね!
いろんなFWを使ってるとFW固有の機能とかもう何がなんだかわけがわからなくなります。
FWの機能を使ってデバッグなんてやってられません。一番信頼できるデバッグ方法とはなんでしょう。
・・・そうprintデバッグです!!!printデバッグこそ神!PHPならprint_rを使おう。
ただし出力バッファを捕獲したりするFWもあったりするのでprintだけだとどこの処理通ってるかわけわからんときがあります。
そんなときはこれ!
exit!
exitだけは何者にも犯せない最強の関数(言語構造)なので確実に処理がとまってくれます。なのでわけわからんことになったら真っ先にexitしましょう。
世の中には開発者のPCに環境(ローカル環境)を作るのが困難な場合があります。例えば設置できたはいいが、ローカルでこの関数が動かないor動いたらまずいだとか
こんなこと、よくありますよね!
そんなとき僕達がよくやる対策としてはソースコードを直接書き換えることですね!呼ばれたくない関数は中身をコメントアウトしたり、定数はローカル用の値に書き換えたりするわけです。
しかしこのやり方は少し問題があるのです。
例えばSVN等を使っている場合、常にこれらのファイルが変更状態のままになってしまいます。間違えてコミットしちゃった!なんてこともあります。
そして更にそのファイルに何か変更があった場合とても面倒です。関数のコメントアウトを外し、定数は本番環境用に戻してからコミットする、なんてことになります。まぁ確実にいつか人的ミスが入るでしょう。
そこで僕が推奨するのはファイルを直接書き換えずに書き換えろ。ということです。
つまりrunkitを利用するのです。
通常PHPは関数や定数などを動的に上書きすることはできませんが、runkitを使えばそれができてしまうのです。このようなローカル環境を無理やり構築したい場合にはとても使える機能です。
もちろん本番環境においてrunkitを使うのはご法度だと思います。伝家の宝刀、馬鹿と鋏は使いよう、です。
こんな経験はありませんか?
「ここを改修して欲しい」
「わかりました、じゃあSVNをUPDATEしてから改修しますね。」
「いや、今はステージング環境にあるファイルが最新なのでそこからダウンロードしてから作業してほしい」
「あ、そうなんですか、じゃあステージングから持ってきて対応します」
「改修完了しました。コミットしてステージングにアップします」
「あれ、なんか本番の動作がおかしい!デグレードしてます!デグレードしてます!」
「コミットもされてねぇ!」
「競合!競合!」
「うわああああああ、今何が最新なの?ねぇねぇ?もう僕わかんない。」
こんなこと、よくありますよね!
この後の担当者の作業はこうです。
ローカル環境のファイルとSVNでdiff。ステージング環境とdiff。本番環境とdiff。
改修対象のファイルが複数ある場合のdiff作業の大変さと言ったらもう筆舌に尽くし難いものとなります。
僕は思いました。ローカル環境のファイルと、SVNとステージング環境と、本番環境のdiffをワンコマンドでさっとできたらどれだけ楽か・・・。
もちろん探せばそういったツールを見つけることは可能だとはおもいますが、探すのが面倒だったので自作しました。
そのツールをここに晒す事もできなくはないですが、この余白はそれを書くには狭すぎるので今回はそういうアプローチがあるということだけを書いて終了します。
とりあえず僕が自作したのはローカル(windows)とhttp(SVN)とftpとsshに対応した相互diffツールです。全ての環境の組み合わせでdiffをして差分を表示したり、特定の環境だけをdiffしたりできるので開発効率アップです。
タイトルで言ってしまった感がありますが、下請けで改修作業をしていると既知バグを発見してしまうことがあります。
これは非常に難しい問題です。もう完全にクライアント次第としかいいようがないんですが、クライアントに報告すべきかしないべきかは慎重に考える必要があります。
バグを報告するとちょちょっと直してよ、とかいうクライアントもいますし、何よりクリティカルなバグの場合、見積もりしてくれと言われたとしてもとてもじゃないけど責任を請け負いたくない場合もあります。
なので見なかったことにする。
む、ちょっと眩暈が。最近寝てなかったし。とか言いながら缶コーヒーでも飲んで一服しましょう。
するとどうでしょう、さっきまでバグを見過ごさないのはプログラマの矜持だとかなんとか言ってたのにあら不思議、とりあえず今改修対象のところだけ直そう。となります。
20個くらい書くつもりで見切り発車してみたものの、もうない。泥臭い作業にノウハウなんてないのだ。
所詮泥は泥。ドロドロ。細かいコードの書き方まで言い出せばいくらでもあるけど「些末なコードレビュー」の話したところで泥で足掻いてる人にとってはなんら救済にならないし別に必要ないよね。
さてここからは他にも泥臭い作業をしている人たちでノウハウを構築しようではないか。6番目以降を書く同志達を僕は待ち望んでいるッ!