はてなキーワード: ImageMagickとは
Twitterとの大きな違い、それは誰しもがActivityPubプロトコル互換の分散SNSサーバーを立ち上げられるという技術的な面以外にも文化的な大きな違いがあって、Twitterでは誰しもが受信者であり発信者であることが工程されるけれども、ActivityPubプロトコルネットワーク、通称Fediverseでは発信者の中でも特に面白いことを作り出す創造者が特に高く評価される傾向にある。
ActivityPubプロトコル互換分散SNSサーバーであるMastodonやMisskeyにはユーザー自身(正確にはサーバー管理者)が自由に投稿文中へ埋め込めるカスタム絵文字を設定できるし、更にMisskeyではカスタム絵文字によるSlackやDiscodeのようなリアクションへ対応し、MFM(Markup language For Misskey)と呼ばれる文字装飾に関するマークアップ環境が整えられておりユーザーはより自由度の高い自己表現投稿をすることが可能だ。
そんなFediverseに居る創造者たちはGIMPやInkscape、FFmpeg、Imagemagickなどを使いこなし、日々面白いカスタム絵文字やアニメーションGIFを生み出してはタイムライン上で笑いを誘い、そしてTwitterでは知られることのないネットミームを生み出しては、いつの間にかTwitterでも使われるようになるのは珍しくなくなっている。
そのノリはまるで世間を全く知らない男子中学生のようで、バイトを始める人が多くなる高校生にすら至らない子供じみた文化だと言える。
ここまで書いて思うのはActivityPub、プロトコル、分散SNS、サーバー、Fediverse、GIMP、Inkscape、FFmpeg、Imagemagick、etc...様々な単語を持ち出したが、これら単語へ即座に反応できる人こそが色々と問題や騒動が巻き起こっている現在のTwitterから別のマイクロブログ型SNSへ移住することができる素質を持つ人々だということだ。ポイントは「移住することができる」である。つまりTwitterには「できない」人が居るのだ。
男子中学生のような子供じみた文化についていけない以前に、明らかにFediverseでは実際に手を動かして五感を刺激する創造へ対する評価が妙に高い。例えば社会問題へ鋭い意見を単なる文字で"ツイート"するだけじゃFediverseでは評価されにくいのではないか?という疑念がある。
Twitterでもイラストやショート動画、面白いGIFは評価される。しかしユーザーの割合で言うと、そのような実際に手を動かして五感を刺激する創造を行える者は少ない。Fediverseではそれが当たり前だとでも言うかのように割合として創造者が多すぎる。
無産オタクなどという言葉が稀に見られるけれどもFediverseでは無産オタクであっても少なくともカスタム絵文字やマークアップで面白おかしく装飾できるようでないと居心地が悪く感じてしまうのだ。Fediverseで無産オタクは価値がないと誰も言わないが、創造者への評価が異常に高いので相対的に無産オタクの価値は低いという現状がある。
誰かが砂場で山を作る、そしてそれを面白がった誰かがトンネルを掘る、水を使えば更に面白い造形が出来て流れる水はスゴイのでは?と誰かが提案し実行する。
Fediverseでは砂場の周りで評論しても砂場の中で遊んでいる子供は決して砂場の外へ目を向けない。眼の前の砂の山をどうするかで頭が一杯なのだ。
選民意識に使うリソースなどFediverseの創造者たちは持っておらず砂の山しか見ておらず、砂場の周りで評論する自分たちのことなんか全く気にしていないからだ。
昔、画像をImageMagickでいじって返すだけのサイトをやってたときは日本企業はもうだめだと思った
なおいわゆるバズった(当時はそんな言葉もなかったが)あとに一番多かった問い合わせは「画像を返してください」だったので覚悟するとよいよ
~/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
サンプルデータの元は下記を使用
コーデックは下記を使用
はてな以前に2chで盛り上がってまとめで取り上げる、ってところまでで終わってるんだから。
はてブなんてまとめサイトの内容がなんであれ簡単に人気エントリ化する馬鹿システムなんだから。
でも、見てりゃ初心者だろ?
初心者を装った中級者と自称してる馬鹿が実はホントに初心者レベルの馬鹿だったってとこじゃないか?
Bash関係ないし。でも多分本人はこれでImageMagick知ってる自分すげー、を少しアピールしたいんじゃ?
えっ非同期処理?書き方すらというかどういうシーンで活躍するかもわかんない!
非同期、って言葉を知ってる自分アピールしたいのかなんなのか知らんが、Bashでもあるんだけどな。。。
と、この辺いくつか見てると、vimshellで見せてる辺りも使えてる自分すげーなんだろうし、