「DIff」を含む日記 RSS

はてなキーワード: DIffとは

2017-07-10

事務処理向けに高機能テキストエディタとはどんなものだろうか

https://anond.hatelabo.jp/20170706235735

勝手に具体的に考えてみる。

Excelなどの表計算に流し込むデータを加工する、表計算データメール文向けに加工する

CSV編集モードを持つエディタ

EmEditorなど最近は多いらしい。

grepsed、find、diff、uniq、count、sort相当の機能GUIから簡単に利用できるエディタ

マウス操作に優れたエディタ

マウス目的の部分をさっと選択できて、さっと切り貼りできる。EmacsViは1ストローク余計にかかって使いづらい。他のエディタなら大抵OK

定型作成支援

直子の代筆」みたいなもの

アウトラインプロセッサー、アイデアプロセッサー

長文執筆用。アイデア出し用。

執筆に集中するため全画面表示で余計なものを見えなくするエディタ

WriteMonkyなど

2017-04-22

dockerやめてどうしたか

この話の続き

systemd-nspawnに移行した

以下詳細とか雑記

ファイル差分管理がそもそも不要

docker commitもdocker diffも使わないし、要らない

要らないだけならまだしも、aufs、overlayfs周りでトラブル可能性がありむしろ邪魔

イメージ差分管理ファイルシステムの層でやるのが素直でコンテナ管理にくっついてるのに違和感がある

Dockerじゃないと今までのエコシステムが云々言ってるやつ

こういう事言うやつは本質をまるで理解してないやつ

Docker特有機能をフルに使ってる奴ならまだしもコンテナ動かすだけなら何使っても変わらねーよw

Docker Hub からイメージダウンロードしてtar解凍すりゃ良いだけじゃねーか

composeだって容易にコンバート可能だし、composeで何が起きるかわからない状態で本番運用とか口にしないで欲しい

実際systemd-nspawnの今でもベースDocker Hubから拾ってきてるし、Docker使ってる奴との受け渡しも問題ない

所詮ファイルを一つにまとめたものから

やりかたは runc.io のGetting startedでも見れば?

Dockerfile いけてない

あんなんメンテしたくねーよ

Docker hubでよくわかんねーイメージ落とすときに、出所クリアになるってメリットだけだなこんなん

文法覚えるのもメンテするのも労力に見合わない

取り急ぎansibleでセットアップは済ませてる

initの管理とか考えたくねー

コンテナにしたかプロセス管理は違う方法でやりますsupervisorで云々→めんどくさいだろ!

じゃあ1プロセス1コンテナにしてマイクロサービスします→本当に便利それ?管理できる?

ログ管理は?logrotateは誰がやる?データボリュームはどこにする?みたいなアホみたいな検討し始めたときに俺は会議室を出た

「いや今はこれが主流で流行ってるから便利です」みたいな事言ってるバカが居て殴りたくなった

社内への説得

「毎週、毎週swarmが壊れたバージョンアップ再起動だのと余計な仕事増やしやがって、いつまでDocker社のβテストに付き合うつもりだクズども」

とは言えないので

「今の状況は前よりも運用負荷が高い状況みたいなので、systemd-nspawn等のシンプルもの代替できないか検討してほしい」

と言ってなんとか説得

(結局半分以上は俺が対応したが)社内のクリティカルな部分のDockerは全部廃棄した

systemd-nspawnにしたら全部が普通になる

普通に起動して、普通に終了できる。コンテナの中なのにそれを意識しないくら普通に起動する。

aufs,overlayfs等の差分管理しなければそれに付きまとう問題もない(overlayfsとか使うこともできる)

自動起動も設定もコマンドコンテナ内だから〇〇しなきゃダメみたいなやつが無くなって、ものすごく安定してる

Dockerも--privilegedつけてinitからrunすればいいって?糞不安定だし、権限多すぎだろ?capabilitiesを適切に設定しろだって

一生やってろバーカ

まとめ

結局のところ本当にこれ便利になったんだっけ?って聞かれて理由を言える奴じゃないと何をやってもダメってことが分かった

これはDockerに限らず全部そうだと思う

QiitaとかにあるDockerでこんな素晴らしくなったよって記事の大半は本質を見失った馬鹿記事

楽になるどころか厄介事を+1してるだけ

とりあえずこっちはDockerのゴタゴタに振り回されなくなって良かったよって話

2017-04-16

増田のバズをdiffする

増田のバズを科学する 20170416041346版と

増田のバズを科学する 20170416052620版の違いは

短文ではなく、一定以上の文字数のある「きちんとした文章」を書く

土日の早朝に投稿する

意味のある情報提示する

リストになっているか、なっていないか

増田のバズ」の解明という情報特殊性、ある程度キャッチータイトル、そして日曜4時台という投稿時間

増田のバズ」の解明という情報特殊性、ある程度キャッチータイトル、そして日曜5時台という投稿時間

ここの時間だけだった。

別人のわかりづらいパロディのような気もするが、本人によるわかりづらいギャグ可能性もある。

http://anond.hatelabo.jp/20170416041346

http://anond.hatelabo.jp/20170416052620

2016-11-06

http://anond.hatelabo.jp/20161105032504

かなり時代錯誤を感じる。ネタであって欲しい。もしかしてITリテラシー低すぎ?というか、好きなソフトウェアは何なんだよ。ノーカンプラ???

高い

"Excel" なら安い。アプリの数百円からデスクトップ版の1.5万程度。ていうか、¥14,526で売ってる。

https://www.amazon.co.jp/dp/B015SMNVAK/

重い

Excelが重いとかどれだけ糞スペ。

Windowsしか動かない

Mac, iOS, Android, ブラウザでOK。

よくバグる

それはExcelに限った話ではない。ソフトウェアである以上多少のバグはしゃーない。つかリソースが糞なせいじゃねーの?滅多に落ちないが。

検索性が悪い

イミフ普通に検索出来るだろ。

共有PCとかだと高確率で使えない(Excelが導入されてないから)

ブラウザでOK。

Markdown表現できるレベル資料とかもはや何のためにExcel使ってるのかわからない

それはExcelのせいじゃなくて使う人間馬鹿なんだろ。

タブ表示が面倒臭い

ショートカットご存知無い?馬鹿?ページスクロールも面倒臭そうだな。見なくていいよ。

バージョン管理システム管理した場合Diffが見にくい

それはそのバージョン管理システムが糞なんだろ。Diffを見るだけならWinMerge+xdocdiff普通にやすいが。馬鹿なの?

セル結合死ね

嫌ならマクロで一括解除&復元でもしろマクロからでも普通に扱えるし、イミフ。罫線も死んじゃうの?

Excel製ワイヤフレームとか手書きの方が多分まだ保守やす

知らんがな。使い方の問題だろ。ExcelじゃなくてWordならいいのか?馬鹿

お節介な補完がうざい

嫌ならOFFにしろよ。馬鹿

方眼紙死ね

Excel方眼より良いものがあれば使わないだろ。普及度、使い勝手トータルでExcel方眼より良いものがあればぜひ教えろ。

学生相手Office持ってる前提でいろいろ求める風潮

しろ、今の大学Office使わないところあるの?マジ?普通総合大学ならITの授業あるだろ??レポートOffice使うだろ???

それとも持ってるけど使えない脳足りん系?F欄なのかな。

つか、Excelの話じゃないのか?

AシートとBシートで別々の人が全く関係ない作業しててもマージするとコンフリクト起こる

形式(.xlsx)はXMLZIPで固めただけだから分解して好きにしろ

2016-11-05

http://anond.hatelabo.jp/20161105032504

Excelが嫌いな理由

多分あと2,3倍くらいある

2016-08-02

http://anond.hatelabo.jp/20160727175016

どのように調べたのか。デバッガが使えない環境だとしても、標準出力ファイル出力、ウィンドウ表示など、いくらでも方法はあるだろう。他トラバでも指摘されているように、コードのものに不備がないのなら依存関係を含めて環境を疑うのが定石。

  • 見比べても違いがわからない

何と、何を、どのように見比べたのか。コードドキュメント目視diffコマンド?これもまた、他トラバでも指摘されているが、ドキュメント英文でも読むのは基本。それと、パンチャーなんていう時代ではないのだから現代プログラマーであれば、人間の力など信じてはいけない。

汎用的な解決方法試行錯誤できなくなったのであれば、

この 何か とは 解決力 だから、Fatal

2016-05-12

memo

Web + DBより

Git

コミットを遡る指定
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

tag名前ブランチマージ履歴を表示する.

git log --follow FILENAME

FILENAMEファイルの変更履歴を,たとえ途中でリネームされたとしてもそれも見る.

git log --author <name>

nameログ検索できる.

git log --graph

ブランチコミットグラフを表示する.

git log -p

コミット差分を表示する.

差分を見る
git diff <base commit>...<opposit commit>

コミット差分を表示する.

トリプルドット指定する必要がある点に注意しましょう.

問題のあるコミットを探す
git log -S "string"

履歴string検索する.

git bisect start <bug commit> <correct commit>

二分探索の開始

git bisect good

提示されたコミットが正しい挙動を示すとき

git bisect bad

提示されたコミットが正しくない挙動を示すとき

git bisect reset

二分探索の終了

rebase
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は自然数

過去コミットを消したり編集したりする.

最新からN個まえのコミットまでを対象編集できる.

編集時にエディタが開くが,編集を終えてエディタを閉じてもrebase機能しないことがある.

その場合は次のように, .gitconfig へエディタパスを書けばよい.

   [core]
     editor = /usr/bin/vim
フック

2016-01-22

Wikipedia安めぐみ出身中学校が間違っている

小学校の頃、同級生からわかるんだけど、三中じゃなくて四中だよ。

Wikipedia編集の仕方がわからないから修正したくてもできない。

https://ja.wikipedia.org/wiki/府中市府中第三中学校

追記:

この記事を見てからどこかの誰かさん在校生から卒業生に書き換えてるし。

彼女卒業したのは四中なので、この編集した奴はIPブロックされても知らないぞ。

https://ja.wikipedia.org/w/index.php?title=%E5%BA%9C%E4%B8%AD%E5%B8%82%E7%AB%8B%E5%BA%9C%E4%B8%AD%E7%AC%AC%E4%B8%89%E4%B8%AD%E5%AD%A6%E6%A0%A1&type=revision&diff=58337499&oldid=58335229

2015-02-23

最新のフランス破棄院判決について

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

REPUBLIQUE FRANCAISE

AU NOM DU PEUPLE FRANCAIS

LA COUR DE CASSATION, CHAMBRE SOCIALE, a rendu l'arrêt suivant :

Sur le moyen unique :

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 ;

PAR CES MOTIFS :

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 ANNEXE au présent arrêt

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'unrimè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-12-09

IMEユーザー辞書でどこでも捗らせる話

増田アドベントカレンダー2014の9日目の記事です)

最初作曲勉強して増田テーマ曲作ってメロディ記法?(というのがあるらしい?)で書いて載せること考えたけど、勉強間に合わなかった。

うんこ漏らせないし、小ネタとして、MS-IMEユーザー辞書でこういうことしてる的な話でも書こうと思います

内容

IME変換辞書定型句を入れとく

定型句は見つけたら登録してる感じ。この辺はありがち。

例えばこのようなものを登録する。

おせます お世話になっております
おせした お世話になりました。
かきけ 下記の件、
よろます 宜しくお願いします。
あざますありがとうございます
あざした ありがとうございました。
いじょ 以上となります

メールとか書くの速くなる…

同音異義語の変換時間を短縮する

同音異義語多い単語とか打ってると変換候補が多くて困惑するし、誤変換で確定して「あーっ!」とかなること多いけど、それぞれにオレオレ読みをでっち上げユーザー辞書に載せとくと少しだけ楽。辞書別に切っておく。

http://anond.hatelabo.jp/20140313130607

↑この辺みて割と最近思いついて使ってる話だけど、既にどこかで同じようなことやってる人もいるかも。

(例)

「へんこう」

へんむく 偏向
へんさら 変更
へんぴか 偏光

「げんこう」

はらこう 原稿
あらこう 現行
もとこう 元寇

などなど。「いじょう」「こうせい」とかいろいろあるので仕事が暇な時とかに登録していくといい感じ。

「たいしょう」

しんめと 対称
ぺあぞう 対象

忘れやすルールで略すとあまり意味がないので何かしら読み替えルールを作っとく良いのではないかと…。

キータイプ超人クラスになると、こんなことしなくてもIME学習機能を切って変換順序を丸暗記してるらしい。怖い。

IMEコードスニペット

以前やったお仕事IT部門規制ガチガチで、WindowsOfficeしか使えないVBA仕事があって全然捗らなかったけど、今思うとIME対応できたはず。

これもユーザー辞書単語登録しておく:

いf If - Then End If
ふぉr Dim i As Integer: For i = 0 To max Next i

試しに上のようなローマ字交じりの単語で登録して変換してみたけど、一応使えてる。

あとgrepdiffなくて苦労していたけどfindstrとfc代用できます

最近普通に機能エディターを使えるのでこういう悩みはない…。

あとMS-IME以外もOKな環境なら普通に予測変換やAZIKが使えるものを使うと楽。

…って感じですかね?

自分の書いたものとか生涯最高でも10ブクマぐらいなのでつまらなかったらごめんなさい。

あとメルリクリス増田

2014-09-26

http://anond.hatelabo.jp/20140926204743

コーディング規約を守ることでどれだけの品質が上がるかはわかりません。

しかし、Javaコードを書いたらEclipseフォーマットをかけるようにしているので、

スペース系のルールは守ってもらわないと gitdiffに出てくるので困ります

そこだけはご理解ください。

2014-08-24

http://q.hatena.ne.jp/1408437001

~/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

#10 cat10.diff.png: mean 0

#100 cat100.diff.png: mean 0

#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

#10 cat10.diff.png: mean 0

#100 cat100.diff.png: mean 0

#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

#100 cat100.diff.png: mean 0

#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

#100 virgo100.diff.png: mean 55.549

#1000 virgo1000.diff.png: mean 145.837

追記: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

#100 cat100.diff.png: mean 0

#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

#100 virgo100.diff.png: mean 0.00817928

#1000 virgo1000.diff.png: mean 0

~/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

サンプルデータの元は下記を使用

cat.jpg
http://f.hatena.ne.jp/SQB/20140823171814
glenn.jpg
https://www.flickr.com/photos/nasacommons/9417092314/?rb=1
london.jpg
http://f.hatena.ne.jp/SQB/20140823144943
virgo.jpg
https://www.flickr.com/photos/stuutje/14970601715/?rb=1

コーデックは下記を使用

jpeg
cjpeg & djpeg, The Independent JPEG Group's, var.8d, http://www.ijg.org/
im
convert, ImageMagick, ver.6.8.9-4, http://www.imagemagick.org/
j2k
opj_compress & opj_decompress, The OpenJPEG library, var.2.1.0, https://code.google.com/p/openjpeg/

2014-08-12

http://anond.hatelabo.jp/20140812112643

あの なんというか。

 

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() 
}

としておいてくれると助かると。

宗教論争だからどっちでもいいけどね。

2014-03-28

下請け底辺泥臭Webアプリデバッグ手法

次々とやってくるさまざまな環境で色々がんばる人のためのノウハウを集めてみよう。

必ずしも綺麗な環境で開発できる人ばかりじゃない。スパゲッティを手渡されラーメンを作れといわれる。

所詮下請けなので、そもそもこうした方がいいよとか軌道修正すらできない環境で足掻くために何ができるのか。

今回はみんな大好きPHPを使った場合の話をしましょう。

1. なんだよこれどこの処理通ってんだよわけわかんねぇよ。

朝はCakePHP、昼はsymfony、右向きゃ独自FW、左向きゃ素php

こんなこと、よくありますよね!

いろんなFWを使ってるとFW固有の機能とかもう何がなんだかわけがからなくなります

FW機能を使ってデバッグなんてやってられません。一番信頼できるデバッグ方法とはなんでしょう。

・・・うprintデバッグです!!!printデバッグこそ神!PHPならprint_rを使おう。

ただし出力バッファ捕獲したりするFWもあったりするのでprintだけだとどこの処理通ってるかわけわからんときがあります

そんなときはこれ!

exit

exitだけは何者にも犯せない最強の関数言語構造)なので確実に処理がとまってくれます。なのでわけわからんことになったら真っ先にexitしましょう。

2. ローカル環境作りたい?むぐぐこの定数とか関数とかローカルじゃうごかねぇよ

世の中には開発者PC環境ローカル環境)を作るのが困難な場合があります。例えば設置できたはいいが、ローカルでこの関数が動かないor動いたらまずいだとか

この定数はローカルだと微妙、書き換えたいとか。

こんなこと、よくありますよね!

そんなとき僕達がよくやる対策としてはソースコードを直接書き換えることですね!呼ばれたくない関数は中身をコメントアウトしたり、定数はローカル用の値に書き換えたりするわけです。

しかしこのやり方は少し問題があるのです。

例えばSVN等を使っている場合、常にこれらのファイルが変更状態のままになってしまます。間違えてコミットしちゃった!なんてこともあります

そして更にそのファイルに何か変更があった場合とても面倒です。関数コメントアウトを外し、定数は本番環境用に戻してからコミットする、なんてことになります。まぁ確実にいつか人的ミスが入るでしょう。

そこで僕が推奨するのはファイルを直接書き換えずに書き換えろ。ということです。

まりrunkitを利用するのです。

通常PHP関数や定数などを動的に上書きすることはできませんが、runkitを使えばそれができてしまうのです。このようなローカル環境を無理やり構築したい場合にはとても使える機能です。

もちろん本番環境においてrunkitを使うのはご法度だと思います伝家の宝刀馬鹿と鋏は使いよう、です。

3. 今何が最新なの?ねぇねぇ?もう僕わかんない

こんな経験はありませんか?

「ここを改修して欲しい」

「わかりました、じゃあSVNをUPDATEしてから改修しますね。」

「いや、今はステージング環境にあるファイルが最新なのでそこからダウンロードしてから作業してほしい」

「あ、そうなんですか、じゃあステージングから持ってきて対応します」

「改修完了しました。コミットしてステージングにアップします」

「動作問題無いので次は本番環境にアップしますね」

「あれ、なんか本番の動作がおかしい!デグレードしてますデグレードしてます!」

「どうやら本番環境のみに誰かがファイル書き換えていた模様」

「誰だrsync使わずアップしたやつわッ」

コミットもされてねぇ!」

「競合!競合!」

「うわああああああ、今何が最新なの?ねぇねぇ?もう僕わかんない。」

増税前にdiffすれば良かった」

こんなこと、よくありますよね!

この後の担当者の作業はこうです。

ローカル環境ファイルSVNdiffステージング環境diff。本番環境diff

改修対象ファイルが複数ある場合diff作業の大変さと言ったらもう筆舌に尽くし難いものとなります

僕は思いました。ローカル環境ファイルと、SVNステージング環境と、本番環境diffワンコマンドでさっとできたらどれだけ楽か・・・

そして作りました。それができるdiffコマンドを。

もちろん探せばそういったツールを見つけることは可能だとはおもいますが、探すのが面倒だったので自作しました。

そのツールをここに晒す事もできなくはないですが、この余白はそれを書くには狭すぎるので今回はそういうアプローチがあるということだけを書いて終了します。

とりあえず僕が自作したのはローカル(windows)とhttp(SVN)とftpssh対応した相互diffツールです。全ての環境の組み合わせでdiffをして差分を表示したり、特定環境だけをdiffしたりできるので開発効率アップです。

何より気軽にdiffしようという気が起きます

4. 見なかったことにしよう

タイトルで言ってしまった感がありますが、下請けで改修作業をしていると既知バグ発見してしまうことがあります

これは非常に難しい問題です。もう完全にクライアント次第としかいいようがないんですが、クライアントに報告すべきかしないべきかは慎重に考える必要があります

バグを報告するとちょちょっと直してよ、とかいクライアントもいますし、何よりクリティカルバグ場合見積もりしてくれと言われたとしてもとてもじゃないけど責任を請け負いたくない場合もあります

なので見なかったことにする。

む、ちょっと眩暈が。最近寝てなかったし。とか言いながら缶コーヒーでも飲んで一服しましょう。

するとどうでしょう、さっきまでバグを見過ごさないのはプログラマ矜持だとかなんとか言ってたのにあら不思議、とりあえず今改修対象のところだけ直そう。となります

・・・こんなこと、よくあります、よね?とほほ。

5. うん。もうない。

20個くらい書くつもりで見切り発車してみたものの、もうない。泥臭い作業にノウハウなんてないのだ。

所詮泥は泥。ドロドロ。細かいコードの書き方まで言い出せばいくらでもあるけど「些末なコードレビュー」の話したところで泥で足掻いてる人にとってはなんら救済にならないし別に必要ないよね。

さてここからは他にも泥臭い作業をしている人たちでノウハウを構築しようではないか。6番目以降を書く同志達を僕は待ち望んでいるッ!

2014-03-26

http://anond.hatelabo.jp/20140326141929

bashzshが使えるということは、Linuxや*nixのコマンドを一通り知ってることを意味してるからなあ。

あとプログラム書くよりはエディタ検索・置換機能Excelに貼り付けて式を追加したり、場合によっては目grepや目diffすら使って仕事をする方が楽な場合ほとんどだしね。プログラミング重要だけど、道具の一つにすぎない。

2013-12-18

http://anond.hatelabo.jp/20131218132641

先輩だけど「バージョン管理システムの使い方わかってます?」って言うべきかどうか。

それだと直接的過ぎて軋轢産みそうだから

すみません、このファイルコミットするとき競合発生しませんでした?

 私のコードが消えてしまったので、今度から競合が発生したらdiff見てマージお願いしますね。」

で行こう!

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