「link」を含む日記 RSS

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

2017-08-20

最近無線LANルーター性能良すぎワロタ

2011年に3000円で買ったlogitec無線LANルーターをまだ使ってる

今型番調べたら売り文句は「11n/g/b 100BASE-TXイーサネット対応 300Mbpsデータ転送速度対応」って書いてる

壊れてないから買い換える理由もないと思ってたんだけどさすがに通信ボトルネックになってるんじゃないかと思うことが多い

で、価格comでlogitec製品で評判良いの探したら1つしか登録されてなくて調べたらエレコムブランド統合されてるらしい

俺の中の2010年頃のデバイス知識ではバッファロー=粗悪品、エレコム=バッファローに次に粗悪品、って認識だった

気持ちとしては6年も壊れないルーター作ってるlogitec製品が欲しいのだがどうすればいいのか


それでそれなりに調べたら今のルーターすげーな

ac11で1G出るとかビームフォーミングで戸建で別の階にもwifi届くとかUSBポートが2つ付いててNAS可能とか

それが8000前後で買えるのはやばい

でもさすがにマンションで1Gは出ないか

でも今速度測定したら8.15Mbpsとかだったし50Mくらいまで速度出て欲しい

ルーターなのにデュアルコアCPU載せて1万とかで売ってるのは笑った


たぶんTP-LinkのC7の2017モデル買うけど今のルーターめちゃくちゃ性能いいわ

なんか時代を感じる

6年でこれだけLAN通信技術って成長するんだな

2017-07-06

無知無理解プロジェクトが殺されそうだ

当方フリーIT 技術者。ある Web ベースシステムを開発しているのだが、プロジェクトマネージャーリーダーをはじめとするメンバー無知無理解のおかげで作業が進まずに困っています

ブラウザーキャッシュの仕組みを少しでも知っている人なら、非 IT 系の方でも読めるように書きました。ぜひ助言をお願いします。

登場人物

私は発注元(A 社)に客先常駐している。私が契約しているのは A 社のグループ会社である B 社だ。

A 社内のチームメンバーは以下のとおり。

さて、今開発しているシステム(以下システム P)はもともとスタンドアローン運用する形態だったが、最近クラウドバージョン提供も始まり現在スタンドアローンバージョンクラウドバージョンの並行開発となっている。X さん、Y さん、Z さんは主にクラウドサーバー管理や、私や W さんが作った部分のテスト担当している。

問題発覚

クラウドバージョンの初めてのアップデートを控えた 6 月に問題が発覚した。コードアップデートすると、ブラウザーキャッシュが効いていて表示がおかしくなるというのだ。

プログラマー以外の 4 人は実は Web システム案件は初めてで、ブラウザーキャッシュの仕組みすら理解していない。X さんから相談を受け、「Web アプリケーションからブラウザーキャッシュクリアーすることはできない。代わりに、HTML から読み込まれる外部リソースの後ろに『?v=3.14』のようなダミークエリ文字列をつければよい。アップデートのたびに数字を変える。これは一般的採用されている手法で、これ以外の解決策はない」ということを伝えた。具体的にコードエディター上で修正イメージを見せて、すべてに対応するのに 1 日あればできる、とも。

これで「そうですか、ではお願いします」となれば、テストを含めて 2、3 日で終わった話なのだが、ここから長い混乱が始まる。

前回リリースから変更のあったファイルの洗い出しを命じられる

X さんから、「変更箇所をなるべく少なくしたいので、前回リリース分と今回リリース分で変更のあったファイルリストを出してほしい」と言われる。変更のないリソースにはクエリ文字列をつけたくないらしい。

内心呆れつつ、Git (ソースコード管理システム)でファイルの変更履歴を調べ、一覧表を提出した。X さんに「それぞれのページでソースコード確認し、この一覧表に載っているファイルにはクエリ文字列がついていることをひとつひとつ確認するのですよね。却って手間が掛かりますよ。それよりも、すべてのファイル対象にしたほうが作るほうもテストするほうも楽です」と伝えた。

問題発生箇所の調査を命じられる

6 月も残り 1 週間を切ったある日、Z さんから、「実際に問題になっているのはどのファイルのどの部分か、スタイルシートのどのクラスID 指定が効いていないのか、V さんが知りたがっている。原因解明に必要なので調べるように」と指示が出る。

私は「ブラウザーキャッシュが効いているためで、キャッシュを消すか無効にすれば直る。今までも修正のたびにテストではキャッシュを消してもらっていたでしょう」と説明するが、調べろ調べろと繰り返すばかり。「そんなことを調べて何になるんですか。キャッシュ問題ですよ?」と言うと、Z さんは手をわなわな震わせて、「お客さまが知りたいと言っているのに、『そんなことを調べて何になるんですか』とはどういうことですか!」と声を荒らげる。しまいには「お客さまのご要望にお応えして私たちお金をもらっている。お客さまからの依頼なら応えるのが当たり前」と言い出す。技術的に意味がないことをいくら説明するも理解されない。

ブラウザーキャッシュの仕組みを基本から説明する

プログラマー 4 氏の知識底上げをしないといつまで経っても平行線だと思い、Redmine (課題管理システム)にブラウザーキャッシュの仕組みを解説する文書投稿した。ほぼ同じものを以下に掲載する。非技術者にも分かりやすく書いたつもりだ。あまりかいことを説明しても混乱させるだけだと思い、リクエストヘッダーの Cache-Control や Expires などは説明を省いた。

キャッシュとは

キャッシュ(cache) とは、一度読み込んだデータを内部に保存しておく機構のことです。2 回目以降の読み込み時はキャッシュを読み込むことで、処理時間の短縮を図ります

ウェブブラウザーにおけるキャッシュ一般に、HTML ファイルおよび HTML から読み込まれる外部リソース(スタイルシートファイルJavaScript ファイル画像ファイルなど)に対して適用されます

キャッシュが作られるタイミング

ブラウザーがあるファイルを読み込もうとする時、キャッシュがなければ実ファイルを読み込んだ上でそのファイルの内容をキャッシュします。

キャッシュが破棄されるタイミング

キャッシュがいつ破棄されるのかは完全にブラウザー依存です。異なるファイルキャッシュが同じ期間だけ存在するかどうかも分かりません。

キャッシュユーザーブラウザー操作で明示的に削除(クリアー)することはできますが、 サーバーからクライアント(ブラウザー)のキャッシュクリアーすることはできません。

ウェブアプリケーションキャッシュ対策

ウェブアプリケーションアップデートした際、クライアントキャッシュ無効にするために、以下の手法がよく使われます

link rel="stylesheet" type="text/css" href="style.css" >
< script type='text/javascript' src='script.js' >< /script >
< img src="picture.jpg" alt="" width="640" height="480" >

このような外部リソース読み込みについて、ファイル名の後ろにクエリ文字列を追加します。

link rel="stylesheet" type="text/css" href="style.css?v=2.4.0" >
< script type="text/javascript" src="script.js?v=2.4.0" >< /script >
< img src="picture.jpg?v=2.4.0" alt="" width="640" height="480" >

スクリプトでない静的ファイルクエリ文字列を付加しても、読み込まれファイルは同じです。つまりstyle.cssstyle.css?v=2.4.0 は同じ style.css というファイルを指します。

ブラウザーが style.cssキャッシュしている状態で、この行を読み込んだとします。

link rel="stylesheet" type="text/css" href="style.css?v=2.4.0" >

ブラウザーは「style.css?v=2.4.0 というファイルキャッシュにない」と判断し、style.css?v=2.4.0 というファイルを読み込みます。結果として、ディスク上の style.css が読み込まれスタイルシート更新されます

この HTML をまた読み込んだ時は、「style.css?v=2.4.0 というファイルキャッシュ済み」と判断し、ディスク上のファイルではなくキャッシュを利用します。

ウェブアプリケーションバージョン 2.5.0 にアップデートする時には、「?v=2.4.0」の部分を「?v=2.5.0」に書き換えてリリースします。

link rel="stylesheet" type="text/css" href="style.css?v=2.5.0" >
< script type="text/javascript" src="script.js?v=2.5.0" >< /script >
< img src="picture.jpg?v=2.5.0" alt="" width="640" height="480" >

同様の仕組みで、2.4.0 時代キャッシュがあっても 2.5.0 用に書き換えられたファイルが読み込まれキャッシュ問題は起こりません。

この手法は、キャッシュ問題解決する手段としては一般的に用いられているものです。俗に「キャッシュバスター (cachebuster)」とも呼ばれます

上記に長々と書いた内容を踏まえ、今回の問題についてご説明します。

「暫定対応」の指示が出る

日経った日の午後。Y さんが A4 判数ページにもなる「調査報告書」を作成した。問題になっているスタイルシートについて前回リリース分と今回リリース予定分の差分を取り、それぞれの行について「新規」「変更」「削除」の印をつけ、「とりあえず、このクラス指定が効いていないだけなので、HTML 中にインラインスタイル(< div style="..." >)で指定すればよい」と結論づけていた。

報告書には「状況から見て、変更・削除されたスタイル指定は影響が出るらしい。新規に追加した部分については影響がないようだ」とも。私が書いた説明を読んでいないのか、理解できなかったのか。

この報告書を元に、X さんから「この行とこの行にインラインスタイル指定してください。これで暫定対応します」と指示が出た。

私は「この修正は何ら根本的な対策になっていないことは理解していますか。『現状で問題になっている箇所』は、この環境たまたまそうなっているだけの話で、ほかのお客さまの環境では別の画面が崩れるかもしれないのです。それを承知の上で、これを暫定対応としてよいのですね」と X さんに確認。X さんは「はい」とだけ答えたので、黙って作業完了した。Gitコミットメッセージに「この方法は何の効果もないこと、それでも作業をしてよいのかを X さんに確認の上、作業」と書いてコミットした。

しばらくすると X さんから「うまく表示されていますOK です」と報告があった。

その日のうちに問題再発

夕方、私が帰ろうとすると、X さんが Y さんに「画面がおかしい」と言っている。横から覗くと、先ほど「暫定対応」とやらを入れた画面で、表示は正常だがボタンを押しても何の反応もない。私は静かに「JavaScriptキャッシュですね」。

聞けば、Y さんは「キャッシュスタイルシートにだけ効く」と思い込んでいたらしい。やはり先の説明を読んでいないようだ。そして、Y さんの環境ではボタン有効だったとも。

私は「Y さんの環境では(JavaScript の)古いキャッシュは効いていなかった。X さんのところではキャッシュが効いていた。これが、私が言っている『環境依存』の意味です。昼の暫定対応ではダメなんです。半月から私が言っているように、すべての外部リソース読み込みにキャッシュバスターをつけないと解決にならないんです」と伝える。

Y さんは観念した様子で、「キャッシュバスターって、一部分にだけ適用することもできますか」と聞く。この人、理解してないなと思いつつ、「はい、できますよ」と返すと、「では、問題の発生している範囲調査して、問題が起こっているファイルにだけキャッシュバスターを……」。やはり何も分かっていない。

私は繰り返し、ブラウザーキャッシュ環境依存なのですべての外部リソース読み込みにキャッシュバスターを付加しないと無意味だと説明した上で、こう付け加えた。

「指示されたことだけを黙ってやっていれば、そりゃあそっちのほうがラクですよ。でも、喧嘩をしてでも、場の雰囲気を悪くしてでも自分意見を主張するのは、技術者としてのちっぽけな良心からです。お願いですから専門家の言うことを聞いてください。私の意見が信用ならないのでしたら、ほかの技術者意見を聞いてください」

対応が先送りになる

この数日後、本件の対応を先送りにすることが決まったと X さんから報告があった。

聞けば、リリースを急いでいるのは特定顧客要望によるものらしい。その顧客スタンドアローンバージョンを利用しているので、アップデートの現地作業の際にブラウザーキャッシュを消してくればいいとのこと。

リリースに間に合わない間に合わないとあれだけ騒いでいたのに。プロジェクト管理がまるでできていない。

レビュー開催

そして今日夕方、この件についてレビューを開きたいとプロジェクトマネージャーの V さんから言われる。レビューって、何をやればいいんだろう。何をすれば気が済むんだろう。Redmine に書いた説明を読んで理解してもらえれば、やるべきことはひとつしかないと分かろうものなのに。

X さんから質問を受ける。「例の件、ほかの方法はないんでしょうか。『こういう方法もあるけれど、工数が掛かるので採用しません』というのがもしあれば話が進めやすいかと」。残念ながらありません、せいぜいファイル名そのものを変更するくらいですが、本質的には同じことですし管理の手間が増大します、と伝えた。

ついでに、X さんに「あの説明を読んで、よく分からない部分があったら教えてください」と尋ねると、実は忙しくて斜め読みしかしていないと白状された。その状態対応策を一生懸命協議していたのですな。

レビューの席でまた一悶着ありそうだ。どうやったら彼らを納得させられるのだろうか。信用できない技術者説明してもらったって、信じないんだったら意味がないのにねえ。

追記

文字数制限に引っかかってしまい、末尾が切れてしまっていました。続きはこちらに書きました。

https://anond.hatelabo.jp/20170706122924

2017-04-13

システムベンダーの人たちの日本語おかし

から気になってたんだが、情報を後ほどメールで送りますという時に、「共有します」ぐらいは分かるのだが、「連携します」とか「展開します」って変じゃないか

share英語でも言うが、cooperateとかlinkとかdevelopとか言わんだろ(知らんけど)。

2017-04-08

http://anond.hatelabo.jp/20170408175015

低速SIM使ってるとよくわかる

はてぶは遅い

 

<script type="text/javascript" src="//cdn-ak.b.st-hatena.com/js/hatena_dfp2.js?a16f7e7ba419b41ff07e90f4ea9126097f2a6bff"></script>

<link type="text/css" rel="stylesheet" href="//cdn-ak.b.st-hatena.com/css/v3/base.css?296a8df6c20332fef25d920d21d9989b8d3d333b" />

<link type="text/css" rel="stylesheet" href="//cdn-ak.b.st-hatena.com/css/v3/contents.css?40116584c503ce16944f052eedd7c5fb006e4548" />

<link type="text/css" rel="stylesheet" href="//cdn.www.st-hatena.com/css/hatena/header.css" />

<script type="text/javascript" charset="utf-8" src="//s.hatena.ne.jp/js/HatenaStar.js"></script>

<script type="text/javascript" charset="utf-8" src="//cdn-ak.b.st-hatena.com/js/lib/underscore-min.1.4.4.js?3757bd6bf3d27b23919bd69c87259db857c6a30f"></script>

<script type="text/javascript" charset="utf-8" src="//cdn-ak.b.st-hatena.com/js/lib/micro-location.0.1.1.js?303f552c22e921272d44c4ebe7a31eb447a381d4"></script>

<script type="text/javascript" charset="utf-8" src="//cdn-ak.b.st-hatena.com/js/Hatena/Bookmark.js?2d608dd908733757bb0f7822a276ca83fe9d2090"></script>

<script type="text/javascript" charset="utf-8" src="//cdn.www.st-hatena.com/js/header.ja.js"></script>

<script type="text/javascript" charset="utf-8" src="//cdn-ak.b.st-hatena.com/js/v3/startup.js?debbb1bc004886d83e3724aa2f5e653238598e94"></script>

意味あんのか?これ

2017-03-01

Miomio動画ダウンロードメモ

f = document.querySelector("div.play > iframe")
e = f.contentDocument.querySelector(".all_duration")
e.innerHTML = "<a href='" + f.contentDocument.querySelector("video").currentSrc + "'>link</a>"

でもちょいこれソースにしてるファイルが大きすぎるな。

40MBくらいの見れればいい画質でいいんだよこっちは。

2017-02-07

はてなNG毎日毎日追加していってもノイズが入る

みんなどうしてるの?

gattolibero.hatenablog.com
daisuke-tsuchiya.hatenablog.com
www.pojihiguma.com
reon5653desu.hatenablog.com
tensaychang.hateblo.jp
honeysuckle.hatenablog.jp
blog.imalive7799.com
west81.hatenablog.com
www.fair-skinned-monster.com
yutoma233.hatenablog.com
www.continue-is-power.com
www.ishikawayulio.net
www.warorince.com
www.jimpei.net
hatena.aaafrog.com
www.shotachannel.com
www.herb-danshi.com
www.laughdsad.com
www.shukatsu-eat.com
dankantakeshi.hatenablog.com
mhkj2.hatenablog.com
wqv5mbs2.hatenablog.com
kamkamkamyu.hatenablog.com
reki.hatenablog.com
junichi-manga.com
nikibiato.hateblo.jp
hitode909.hatenablog.com
www.care495.com
www.taiyaki-oyako.com
www.bloglifer.net
www.maskednishioka.com
blog.kaerucloud.com
www.glocallife.net
yukkki.hatenablog.jp
www.yuruiblog.com
www.murasakai.net
www.dokusyo-geek-ki.com
shick-sedori.com
rilakkuma.hatenadiary.jp
www.hitode-festival.com
hamusoku.com
jin115.com
kopelani.hatenablog.jp
rarasongjing.hatenablog.com
www.yururimaaruku.com
dabunmaker.hatenablog.com
santambo.hatenablog.com
www.dangouwasa.com
www.anizm.xyz
www.hesocha.com
www.hahalife0.com
shijinblog.hatenablog.com
www.konayuki358.com
satoueisaku.hatenablog.com
zatsugen.hatenablog.com
okite.hatenadiary.jp
nagaihksk.hatenablog.com
kotaro-nobuta.hatenadiary.jp
www.momijimom.net
www.rinsimpl.com
www.logosuemo.com
www.yohey-hey.com
www.network-business-sippai.net
minimote.hateblo.jp
ptskunx.hatenablog.com
jrockford.hatenablog.com
mocchi-blog.hatenadiary.com
tentama315.hatenablog.com
www.aritai.net
www.weblog-life.net
www.usamiblog.net
masa10xxxxxx.hatenablog.com
lobbjohn-yuku.hatenablog.com
shinichi40.hatenablog.com
ohrmsk.hateblo.jp
shine.hatenablog.jp
happylife-tsubuyaki.hatenablog.com
gwgw.hatenablog.com
taiyoukou-salaryooya.seesaa.net
sakurachannel0530.hatenablog.jp
nekokuro2510.hatenablog.com
www.toma-g.net
yuchanel.hatenablog.com
www.neginegigi.com
daiki-photo.hatenablog.jp
akira-i.hateblo.jp
www.webrand.xyz
option-trade.hatenablog.com
nethica.hatenablog.com
blog.shinma.tokyo
www.nubatamanon.com
www.empowerments.jp
ringringsong.hatenablog.com
utakata.hatenablog.jp
www.hoosaku.com
mamejeff.hatenablog.com
www.kinoblo.com
lovdiv.hatenablog.com
www.igakubook.com
www.bokusore.com
blog.net-li.com
www.fuwa-journal.com
www.blog-ialoha.com
www.haruo59.net
www.soumushou.com
interact.hatenablog.com
www.k-4design.com
www.mazimazi-party.com
ta-ko.hatenablog.jp
mika1045.iiblog.jp
www.picsim-blog.com
daiouoka.hatenablog.com
blog.hmp2blog.com
gachamania.hatenablog.com
www.tairakenji.com
blog.maniwanaoto.com
www.akira-blog.com
hikakusitainchaaan.com
www.kana-ri.com
www.taro.tr-ymd.com
www.butsuyoku.top
www.naginyagi.com
conandaisuki.hatenablog.com
www.satiarimama4.com
laugh-raku.com
www.toshigo.net
kazrock0806.hatenablog.com
blog.room8.co.jp
www.re1life.net
maili.hatenablog.com
route53.hatenablog.com
kotobapoem.hatenablog.com
kiyosui.hatenablog.com
www.iwako-light.com
www.mizue338.net
www.ex-ma.com
seo-k.hateblo.jp
pop-people.hatenablog.com
www.mamejeff.com
blog.gyakushu.net
uto-blog.com
www.yotuba.xyz
raiannka.hatenablog.com
www.kyu7.com
www.hanabiagaru.net
kaiwaup.com
nantehida.hatenablog.com
www.naoc2520.net
hrktksm.hatenablog.com
sabaoku.com
pipipipipi-www.hatenablog.com
www.iga-world.com
www.dagasorega-e.net
kame710.hatenablog.com
www.minimarisuke.com
www.tadasara.com
www.kandosaori.com
otokonokozukan.hatenablog.com
www.forest-lover.com
www.shining-man.com
www.tedium-life.com
rikubo3270.hatenablog.com
www.nanashiblog.com
www.zakkiblog.net
www.tettunn.com
www.masatygames.com
www.maekawa-koichiro.com
www.nuohman.net
ikedayuuto.hatenablog.com
www.tawashix.com
www.aile-oooi.net
www.katsuolog.com
motoavenger.hatenablog.com
www.culture-time.net
www.kurou-sagi.com
lazy.hatenadiary.jp
damesalesman-saisei.net
blog.8090rock.com
nagaimono.hateblo.jp
gadgerepo.com
tawashino.hateblo.jp
www.sirolog.com
www.tantandaisuki.com
www.tokushitai.com
www.goodnojob.com
www.catkiyo.com
www.tsuneni-gakusei.com
www.chantam.link
garaga.hatenablog.com
osyobu-osyobu-3889.hatenadiary.jp
www.iii.tokyo
www.mofnokikotori.net
katagirigiri.hatenadiary.jp
www.otakuch-blog.xn--tckwe
www.ken10blog.com
suzukidesu23.hateblo.jp
www.neoneet.info
ameblo.jp
papiko8-l.hatenablog.com
www.yurui-life.com
haru501227.hatenablog.com
www.itsumade-utsu.com
www.2dgod.com
www.nisokuhoko-kilin.com
e.hobiwo.com
hazama03.hatenablog.com
www.uruzou.me
www.wakamono-lifeplan.com
www.keikubi.com
pfassistant.hatenablog.com
www.kazulog.com
www.heibonnashufu.net
tatunii.net
doudemoii.hatenablog.jp
www.kokoro-yuyu.com
www.merucarist.net
ud-fibonacci.hatenablog.com
www.okonomide.com
blog.hitsujime.com
fujipon.hatenablog.com
syufufukugyou.hatenablog.com
www.cobalog.com
www.shonanboy.net
basanote.hatenablog.com
shinya-sheep.hatenablog.com
www.tomochinchin.com
ninshin-ikuzi.hatenablog.com
lifeplus.hatenablog.com
www.mein-pompan.com
ikemen.whdbeauty.com
maro-log.net
takegatari.hatenablog.com
techacademy.jp
www.inaka-kyoiku.com
www.birumendesu.com
wdw5fx.sblo.jp
blog.brand-new.tokyo
www.piece-hairworks.link
wdw5fx.hateblo.jp
blog.entreprep.biz
chokko.hatenablog.com
www.shigo45.com
www.ishikihikui-kei.com
4np0c0r1.hatenablog.com
oahair.info
www.mikeko.xyz
www.amanatusauce.com
rudiments.hatenablog.com
www.otoku-kasegu.com
www.kawahanashobo.com
www.kobayashihayate.com
zbuffer.hateblo.jp
fuufu2.hatenablog.com
www.baconjapan.com
kakuyasu-smartphone.biz
www.kurokami-cc.com
yokohamamegane.hatenablog.com
hokuromole.hatenablog.com
akislog.hatenablog.jp
www.fulogabc.net
www.eternalcollegest.com
www.aroundfiftyliu.com
fxshinma.hatenablog.com
coden.hatenablog.com
www.subcul-girl.com
m-ochiai.net
www.chabodosa.click
www.sakanouenosisyamo.xyz
slimleg-nolife.com
tabispo.whdtravel.com
tajuso.com
caplog.hatenablog.jp
munesada.com
www.hazama-log.net
okane.muragon.com
www.monochromen.com
habusyuki.hatenablog.com
ihsoy9.hatenablog.com
kabuku.hateblo.jp
yossense.com

2017-02-06

fortran to matlab

There is a program that can convert fortan code to matlab code.You can download from the following link.

http://www.mathworks.com/matlabcentral/fileexchange/5260-f2matlab

converter available

Matlabもしくはオクターブに変換し、メモリー効果だかなんだか他愛のない追加タームを付けることを

課題として与える。どうせ結果は出されへんやろから

最後最期の瞬間まで

「どうしてこんな簡単なこともできないのかな」

と嘆きのセレナーデ

本番は結果零でやらせる。

それなら結果を発表するところ以外はスライド作れるから問題なしやわな

2017-01-14

http://anond.hatelabo.jp/20170114155348

明確な目標があるのに、もったいない

ネットだと、情報が多すぎるのかな

javascriptかな?と思ったけど、ruby

ifもforもでてこなくてスマ

eachが形を変えたforです

いろんなとこからコピペ量産して、2時間近くかかりました^^

api取得はすぐだったけど、json、hash、arrayでごにゃごにゃ)

rubyソース

# ライブラリ
require 'net/http';
require 'uri'
require 'json'

# 検索文字
$q = 'http://ci.nii.ac.jp/books/opensearch/search?q=%E7%B3%9E&format=json'

# web-apiから取得
# https://support.nii.ac.jp/ja/cib/api/b_opensearch
def search(q)
    uri = URI.parse(q)
    json = Net::HTTP.get(uri)
    result = JSON.parse(json)
end

=begin
取得データ1件サンプル
{"title":"糞土",
"link":{"@id":"http://ci.nii.ac.jp/ncid/AN00094249"},
"@id":"http://ci.nii.ac.jp/ncid/AN00094249",
"@type":"item",
"rdfs:seeAlso":{"@id":"http://ci.nii.ac.jp/ncid/AN00094249.json"},
"dc:date":"1953",
"dc:creator":"糞土会",
"dc:publisher":["糞土会"],
"prism:publicationDate":"1953",
"cinii:ownerCount":"8"},
=end

# データ整形
#
# 入力データ構造
# {"@id":"http://ci.nii.ac.jp/books/opensearch/search?q=%E7%B3%9E&format=json",
#  "@graph":[ { "items":[ ,,,
#
# 出力(ハッシュ)
# {title =&gt; dc:date ,,, }
def format(hash)
    title_date = Hash.new

    # ハッシュキー"@graph"の値の配列の先頭のハッシュキー"items"のハッシュ配列を取得
    items = hash['@graph'][0]['items']

    # タイトル出版年を取得して、戻り値ハッシュへ追加していく
    items.each do |item|
        title = item['title'].chomp
        date  = item['dc:date']
        title_date.store(title, date)
    end

    return title_date
end

# 並び替え
def sort(hash)
    hash.sort_by do |key, value|
        value
    end
end

# 出力
def print(hash)
    hash.each do |key, value|
        puts "#{value}年 #{key}"
    end
end

# メイン関数
def main
    # web-api検索して、
    result1 = search($q)
    # データを整形して、
    result2 = format(result1)
    # 出版年で並び替えて、
    result3 = sort(result2)
    # 出力する
    print(result3)
end

# 実行
main

rubyスクリプトの実行結果

C:\Users\unko\Desktop\prog&gt;ruby webapi.rb
1848年 人欲辨 (じんよくべん)
1870年 雀糞論説
1920年 青瓷説
1933年 管内ニ於ケル鶏糞ノ利用状況
1947年 糞尿譚 : 小説1953年 糞土
1955年 黒い裾
1955年 形成
1959年 石糞
1972年 糞 : 海田真生個人文芸誌
1972年 乳幼児糞便図譜
1987年 糞尿と生活文化
1991年 皇居と糞尿と大嘗祭 : 皇居「糞尿」裁判を支える会ニュース
1995年 糞袋
2000年 糞尿史 : 遷都は糞尿汚染からの逃避だった
2005年 「糞尿」大全
2007年 糞虫たちの博物誌
2008年 うんちのはなし : う~んとげんきになる
2009年 糞神

2016-12-12

怪文書だが、転載しておく(自己保存用)

 内容としては話半分以下の怪文書だろうけど、自分(=投資業界)の知っている内容で事実関係を知っているor関係者から話を聞いたことがあるものが含まれているので、要検証と思い転載しておく。なんか突然削除されていたから。

赤浦さん周辺というと、ヤフーを辞めた松本真尚さんや現ヤフーでいろいろありつつ生き残っている「おざーん」こと小澤隆生さん、「けんすう」こと古川健介さん方面問題だと思うのだが、ここで語られている百社以上のベンチャーエッセンス吸われて一社に固められ急成長というのはnanapiKDDIもそのひとつだったと思う。また、赤浦さんの方面不思議投資は旧jig系列ファンドよりもグロービスの話は沢山聞く。独立系ベンチャーキャピタル情報をやり取りするとかそういうスキーム

DeNA村田さんだけ叩かれるのは不公平とは思うけれども、ご存知の通りiemo10億の買収はデューデリジェンス2か月、社内検討5か月という話が事実だとするならば、iemoが一回も決算をしていないのに10億のバリュエーションがついたということになってしまう。

もしもベンチャー業界が襟を正すとしたら、今回は良いチャンスなんじゃないだろうか。

ここから引用--

村田マリけが問題なのか?業界からみた裏事情

今回のWELQ騒動炎上中のDeNAの中で、雲隠れしているが実は主犯だと目されている村田マリ氏について、様々な人たちが内情を明らかにし始めているが、

gigazine.net

その名を轟かせたのは作って一年しかたっていない会社DeNA社長の守安氏に直談判して10億もの巨額のお金で売却したことであった。しか業界では、当時から明らかに過大な額での売却であったことから、また無知なオッサン殺しパワーで契約を取ったと話題になっていた。そもそもサイバーエージェント時代から女子力契約を取ってくることはは公然の秘密であったが「私たち顔採用なのかしら?」と言うほどのその自信は本当にどこから来るのかわからないが、効果は発揮しているようでもある。

netgeek.biz

しかし、いくらなんでも女子力だけで明らかに問題があるパクリメディアを10億ものお金で売却できるのか、と疑問に思うのが普通だ。ただ業界内でそれを納得できる公然の秘密となっている別の理由がある。それは夫の存在だ。

milkpan.link

実は夫の本間真彦はインキュベートファンドという業界では屈指のベンチャー投資ファンドメンバーであり投資家なのだ。夫である以上売却にひと肌脱いでる事は間違いないが、このインキュベートファンドというファンドがまた非常に問題のあるファンドであり、過去にも同様な犯罪スレスレベンチャーを騙して大手に売りつけたり上場させるということを何度もやっている、業界では有名な曰く付き問題ファンドなのである

このファンド創業者の赤浦徹は、前身となる自信が運営するファンドがなんと東証から市場勢力ファンドとして排除されたということもある、札付きの問題人物であり、本間もその一派なのだ過去にはファンドから出資を受けた企業は皆絶対上場承認されないという大変な事態となり業界が一時すったもんだした上、彼の過去問題がある数々の行動から、あらゆる証券会社に彼が入っているベンチャー絶対上場させないと言わしめたほどの人物である

業界内部に根を張ってインサイダー情報を手に入れ、公開株を売り買いして儲けるのは序の口(もちろん違法である)であり、投資先の人間犯罪すれすれの事業をさせて、売上があがるようならバレないように売却するのである。実際にその煽りを受けて逮捕されたもの複数いる。

それを知っている人間からすれば、この買収劇は村田マリだけではなく、インキュベートファンド一派が裏で糸を引き、最初から法律的にアウトであるビジネスモデルであることを隠して交渉を行い、DeNAが見事に引っかかった、ということであることがわかる。

はいえ、上記の様な問題がありながらも、実はこのファンドは非常の良い成績を上げており、業界内でもそれなりの力を持っている。赤浦氏はなんとベンチャーキャピタル協会常務理事まで努めている。だがその裏のファンドが行っている悪徳ビジネスモデルを知る者からすれば、今回のパクリメディア実態と非常に似ていることが理解できる。

ryuusnews.com

何の事はない。何もかもがパクリなのだファンドが儲かる仕組みは非常に単純だ。まず、無知な優秀な学生等の若者に目をつけて、数百万程度の投資額でなんと半分近くのシェアを得て主導権を握る(普通はそんなに大きなシェアベンチャーキャピタルがとることはない)。そういった投資を数多く繰り返しそれだけでも問題なのだが、なんと本来絶対に秘匿しなければならない投資先のビジネスモデルノウハウ技術財務情報などをなんと他の投資先にすべて流出させパクラせてしまうのである

ベンチャー企業にとって技術ノウハウビジネスモデルは命とも言えるもので、株主でありながらそれを流出させるというのはもちろん言語道断で許されることではない。だが、投資されているベンチャー側はマジョリティを持つ株主に報告することは義務であり、報告しない訳にはいかない。もちろんまさかその内容が流出しているとも思わないし、逆に一見いろいろなことを教えてくれる良いファンドしか見えない。

しかし当然ながらしばらくすると同じようなビジネスを行う他の会社がたくさん出てくることになる。ベンチャー企業側は単に競争が激化したと思っているのだが、それは実は自社の株主情報流出させているために起こっているのである。またたとえ流出に気がついたとしても、株のマジョリティを握られているので、もうどうしようもない。しまいには、売上が上がらないなら犯罪スレスレ事業に手を出せと脅され、こき使われるのである

一方投資サイドからすれば、投資先の最も成功しそうなベンチャーに、何百もの会社機密情報を教えるだけで、そのベンチャーは当然タダで最先端ノウハウを大量に手に入れられることから急速に伸びることになる。そして上場させるか会社売却して、売り抜けて終わり、である。ただそこで終わらないのがまたすごい。

その上場したベンチャー自身も、そのノウハウ本来自分たちが持っている能力で生み出したものではないので、ファンドが離れてしまうと結局ジリ貧となり上場後非常に苦しむことになる。そして業績不振理由上場した企業から創業者を追い出し、実質的経営権を得て内部情報を手に入れながら裏で株を売り買いして儲けるのである。また上場企業内部に関係者を送り込むこともある。

業界で一目置かれているのは、表向きはファンドとしてきちっとリターンを出しているという点なのだが、それは表から見た場合であり、実際には犯罪スレスレどころか、パクリ行為犯罪行為のもので上げているリターンである。その下には本来日本を支えるベンチャー企業になる可能性のあった優秀な人たちが死屍累々としているわけだ。

この構造、どこかで見たことがないだろうか。

そう、まさに嘘でもなんでも良いから人の記事をパクりまくって自分のものにして、PVを上げて数字を作り出し、オッサンをだまして売却した、村田マリが行った手法のものである普通に考えれば、いくらパクりまくると言っても、記事だけでなく、SEOの深いノウハウクラウド人材を利用するノウハウなどが最初からなければ、たった1年で10億もの大金で売却できる企業を作れるはずがない。今回の騒動、要するにビジネスモデルのものパクリであり、さら村田マリフロントにしてインキュベートファンド一派が仕掛けた詐欺モドキに、DeNAがさっくりと騙されたというのが実態なのだ最初からすべてがマッチポンプなのである。※なお直接iemo投資はしていないという指摘があったが、妻の財産と夫の財産は共有に近いわけであるから実質的には同じだ。インキュベイトファンド出資先は上場しているという指摘もあったが、それは前身ファンドではなく作り直したファンドからだ。

www.katsushin.com

村田マリが表にでてこない理由がここにあるのだろう。もしその裏まで探られ始めたら、そもそもWELQ炎上ではすまない恨み、ツラミネット上に噴出することになりかねず、夫のインキュベートファンドは壊滅するかもしれない。その可能性を考えれば、まだ著作権法違反ですんでいる方が良いというわけだ。それに最初から問題があると知って売却したのであれば、当然本人もDeNAから損害賠償提訴を起こされ、村田マリ破産さら逮捕となるわけだ。

でてこられるわけがない。

偉大なる元増田

http://anond.hatelabo.jp/20161211184026(削除済)

Googleキャッシュ

http://webcache.googleusercontent.com/search?q=cache:http://anond.hatelabo.jp/20161211184026

魚拓

http://archive.is/O6kzH

2016-08-18

悪徳企業 株式会社Link LifeのBroad Wimax契約してはいけない

使い出して1年弱、ちょっと田舎に行くと全然つながらないこと以外は特に不満なく使っていたのだが、先日、故障というかソフトウェアバグっぽいことが起きたのでサポートに問い合わせを試みた。

とりあえず公式Webサイトにある番号に電話をかけてみたが、一向につながらない。10円/20秒のナビダイアルというサービス通話することになるのだが、待受音楽が流れた状態(つまり通話状態)のまま30分以上待ったがついにつながらなかった。曜日時間帯ごとの電話の混雑予測掲載されているのだが、「普通」「やや混雑」「混雑」の3段階のうち最もつながりやすいはずの「普通」の曜日時間だったにも関わらず。

結局電話は諦めてメールで問い合わせた。自動返信メールには「1〜3営業日中に返信する」旨が書かれていたが、4営業日待っても返事がない。

再度同じ内容を問い合わせるも、返事がない。

数カ月後には解約予定なのだが、このぶんだとどうやって解約するのか見当もつかない。解約は電話しか受け付けていないから。

電話しか解約通知を受け付けない」と宣言していても、その電話に応じないんじゃどうしようもないよね。

適当フォーマットで解約通知の書面を作って内容証明郵便で送りつけておけば、仮に裁判に持ち込んだとき証拠になるんだろうか?

2016-07-25

gitにおけるコミットログ/メッセージ例文集100

私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくま単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。

要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのであるググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか

仕方なく自分でまとめたので、増田に垂れ流しておく。

はじめに

ここで挙げているコミットログは全て実際のコミットログから転載である。当然ながら各コミットログ著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユース範囲なら許してくれるだろうと考え名前プロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。

抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリGitHubSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。

結果として対象としたリポジトリは以下の通り。

atomのみ5400件抽出していたため、計25400件のコミットログベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。

こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である個人的に「うーんこの」と思った表現も、散見される場合は載せた。

ということで、以下用例を羅列していく。

用例集

オプションフラグメニューを追加した
ファイルを追加した
メソッド機能を追加した
実装を別のものへ切り替えた
  • Use args.resourcePath instead of args.devResourcePath
  • Use arrays instead of while loops
  • Use auto instead of repeating explicit class names
  • Use weak pointer instead of manual bookkeeping
  • Change all uses of 'CInt' to 'Int32' in the SDK overlay
  • Change Integer#year to return a Fixnum instead of a Float to improve consistency
新しく何かに対応した/機能上の制約を取り払った
何かを使うようにした
より好ましい実装に改良した
何かを出来ない/しないようにした
  • Don't bail reading a metadata instance if swift_isaMask isn't available
  • Don't exit until the parent asks for an instance
  • Don't include Parent pointer in Nominal/BoundGeneric TypeRef uniquing
  • Don't use MatchesExtension for matching filters
  • Don't use ES6 class for AutoUpdater windows class
  • Don't use MatchesExtension for matching filters
  • Avoid `distinct` if a subquery has already materialized
  • Avoid infinite recursion when bad values are passed to tz aware fields
オブジェクトの内容や挙動確認やすくした
Assertを追加した
不要コードを除去した
コードを移動した
名前修正した
さなバグタイポ修正した, 警告を潰した
バグや好ましくない挙動修正した
テストコメントドキュメントを追加した
テストを削除した
テストコメント修正した
ドキュメント修正した

表現傾向とまとめ

以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。

Add1149
Fix1014
Update584
Remove566
Use382
Don't260
Make228
Move178
Change103
Rename85
Improve76
Avoid68
Allow65
Implement60
Handle58

コミットログの基本形はもちろん動詞 + 名詞である名詞固有名詞複数形、不可算名詞が多いが、単数形場合冠詞は a が使われるか、あるいは省略される。the はまず使われない。

何かを追加した、という表現では非常に広く Add が使われる。メソッドからテストドキュメントに至るまで大概これでまかなえる。

一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typocrash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である

Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。

また、Fixtypo 以外でのドキュメント修正に対して使われることは稀である。対して Update はドキュメントコメントテストに使われ、本体コード修正に対しては使われない。本体コード修正にあわせてテスト更新したなら Update が使われる。ただ、テスト機構それ自体バグ修正したなら Fix である

無駄な何かを単純に除去したなら Remove を使う。これまでのもの(A)からのもの(B)に切り替えたのであれば Use B instead of A か Change A to B が使われる。新たに何かを利用するようにしたのであれば Use を、利用を取りやめた場合Don't use を使うことが多い。

何かをしないようにしたなら Don't を、内部実装効率化なら Make A + 比較級/形容詞Improve が使われる。

中身の変更を伴わない単なる名前の変更なら Rename A to B、コード機能論理上の場所を移動させたなら Move A to B である

この辺はリファクタリングと呼ばれる行為と思うが、Refactor というぼんやりした動詞はあまり使われず、このように変更内容の種類に応じて動詞が使い分けられている。

余談

コミットログにはWhyを書くべきだ、というのを何かで見かけたので because とか since を使ったログがどの程度あるかを調べたが、8540件のうち22件だった。基本的に短く、シンプルに、一目で意味が取れるログが好まれる傾向がある。例えば get rid of とか2件しか使われておらず、圧倒的に remove である

一方で、シンプル単語だけど開始単語としては使われないものもある。例えば次のような単語である。Expand(9)、Extend(8)、Print(5)、Optimize(5)、Publish(4)、Append(4)、Modify(3)、Manage(2)、Revise(2)、Dump(2)、Insert(2)、Migrate(2)、Enhance(1)、Edit(1) 。いずれもカッコ内は8540件に対する冒頭での登場回数である。結局、より一般的平易な単語で表せたり、Refactor同様に抽象度が高すぎると使われないのだろう。

おわりに

8000件もログを見たおかげで、迷いなくコミットメッセージが思いつくようになったのが個人的には今回書いてて最大の収穫だった。たぶんカンニングペーパーを作る行為それ自体効率のいい学習になるという話と同じだと思う。

このまとめも100以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。

2016-06-02

パナマ文書 前橋市千代田町関連

パナマ文書より抜粋

ATSUSHI TAKAKUSAGI,51A33DFACCC75BA6A06EA3BC376D70AC,The Panama Papers data is current through 2015,JPN,Japan,12103117,Panama Papers

https://offshoreleaks.icij.org/nodes/12103117

2-1-15-804 Chiyodamachi; Maebashi-City Gunma; Japan 371-0022,31743C7809236E332CA34818E0635CC0,The Panama Papers data is current through 2015,JPN,Japan,14008614,Panama Papers

https://offshoreleaks.icij.org/nodes/14008614

NANTO LTD.,NANTO LTD.,,SEY,Seychelles,,BUSINESS LINK HOLDINGS LIMITED UNIT C; 15/F.; HUA CHIAO COMMERCIAL CENTRE; 678 NATHAN ROAD; MONGKOK; KOWLOON HONG KONG,213854,27-SEP-2011,,,,Active,Mossack Fonseca,96996,HKG,Hong Kong,,The Panama Papers data is current through 2015,10031266,Panama Papers

https://offshoreleaks.icij.org/nodes/10031266

BUSINESS LINK HOLDINGS LIMITED

https://offshoreleaks.icij.org/nodes/11013270

国税庁法人番号公表サイトより抜粋

群馬県/前橋市/千代田町2丁目1-15

/登記記録の閉鎖等含める/商号五十音順(昇順)

4件 見つかりました

 

1070001005602 株式会社シンケンメディカル

群馬県前橋市千代田町2丁目1番15-801シティタワー前橋千代田町

4070001005392 *

群馬県前橋市千代田町2丁目1番15号シティタワー1004号

6070002003600 *

群馬県前橋市千代田町2丁目1番15-1003号シティタワー前橋千代田町

5070001002991 *

群馬県前橋市千代田町2丁目1番15-204号シティタワー前橋千代田町

http://www.houjin-bangou.nta.go.jp/

 

ロケーション情報

住友不動産広報部 シティタワー前橋千代田町

http://www.sumitomo-rd.co.jp/pdf/061110_5.pdf

 

株式会社シンケンメディカルとは何か?

詳細調査

 

ATSUSHI TAKAKUSAGIとは何者か?

タカクサギ(高草木/髙草木)という姓は

群馬県では多くみられる名前

同姓同名者が複数いると推測されるが

たとえば髙草木篤という名前社長群馬県にいる。

長尺金属プレス 株式会社北斗 会社概要
群馬県伊勢崎市赤堀今井町2丁目1044-1
代表者草木http://www.hokuto-g.co.jp/2008_GAIYOU.html

 

2016-05-20

http://anond.hatelabo.jp/20160520115839

あい

「&lt;」 は 小文字「<」 に

「&amp;amp;&amp;amp;」 は 小文字「&&」 に変えてください

javascript:for(var%20u,l=document.getElementsByTagName("link"),i=0;i&lt;l.length;i++)if(l[i].rel&amp;amp;&amp;amp;"canonical"==l[i].rel.toLowerCase()){u=l[i].href;break}u||(u=location.host+location.pathname+location.search),window.open("http://b.hatena.ne.jp/entry/b.hatena.ne.jp/entry/"+u);

http://anond.hatelabo.jp/20160520113032

2016-05-02

AMPなページが開かれたときに元のURLを開くブックマークレット

AMPかいモバイルなページをCDNから配信してくれる仕組みがあるらしいのだけど、

URLが変わる(クソ)仕様のため、はてブとの相性が悪い。

canonicalページを開くブックマークレット

javascript:var l=document.getElementsByTagName("link");for (var i = 0; i &lt; l.length; i++) {if (l[i].rel) {if (l[i].rel.toLowerCase()=="canonical") {location.href=l[i].href;}}}

(&lt; は 半角<)

参考:Obtaining canonical url using JavaScript http://stackoverflow.com/questions/5980682/obtaining-canonical-url-using-javascript

2016-03-28

http://www.slideshare.net/KenyaKodaira/2016-59970832

なんかたくさんブクマされてますが、読む必要ないと思います

p.4
  • HTML Template Engin`d`ってなんですかね。誤字脱字チェックはしましょうね。
  • gulpのgは小文字なのでよろしくです。
p.5
p.6
p.8
  • EditorCodingってなに
p.9
  • コードブロックが見づらいっす。黒バックにblueて誰が読めるのだろうか。若者か。
  • npm install後に急にgulpって書いてあるけど、それは何をするタスクなのです?
    • まぁ、この後gulpタスクについて出てるんでしょう……
      • 出てこなかった
p.10
p.15
p.16
p.18

コード品質が維持される場合に限り、難読化、最小化、コンパイルするのは自由です

  • HTMLの話ですよね? コード品質が維持されない難読化や最小化やコンパイルってなんだろう。
  • あとに出てくるけど、CSSには容量削減を異常に求めすぎてるわりには、HTMLには無関心な感じがするんですよね。
p.19

a、span、imgなどの最小の位置にでは開業は適宜対応

  • その適宜が人によってブレるから、それを潰すのが「フォーマット」だと思うんすよね。
  • いっそ「新しい要素が出現したら必ず改行する」くらい言ってほしい。
  • あと日本語が変なんで、それも。
p.20
p.21、22
p.2324
  • .editorconfigにどう書けばいいかをだな……。
p.25
  • HTMLルールだとしたら、そういう開発の都合のコメントを残して納品するのはお行儀が良くないっすね。
  • Jadeを使う前提のようだし、Jadeコメントでの話をしてるなら別にいいんすけどね。
  • でもさっきからJadeのサンプルが全く出てこないからオッサン不安になってきちゃったっす。
p.26

正しいHTML

  • HTMLの正しさとは?
  • 参考リンクから察するに、invalidでなければいいと思ってるなんてことはないっすよね。
p.27、28
p.29、30
p.31
p.32
p.36、37
p.40

CSS教科書

p.42、43
p.44、45
p.49、50
p.57、58
  • HEXの短縮は規定しなくていいと思います
  • ビルドをかける前に勝手に置換されるような仕組みを入れるべきところかと。
  • gulpでできますし、ググれば出てきます
  • ちなみに、#f00よりもredの方が1バイト少ないんですよ。
  • 容量削減は人が思いつきでやるには不十分なのです。
  • そんなのはビルド時に機械がやればいい。
  • 容量の削減を理由に人の行為制限をかけるのが愚かな行為だと気付いてくれたらうれしいっす。
p.61、62
p.63、64
p.71
p.72、73
  • FLOCSSとMindBEMding共存させるなら、書くべきことが足りなすぎませんか。
p.73

block__element__elementは使用しない

p.78、79
p.80、81
p.87

GoogleChromeなら変換時に右側にマーク

p.96
p.98

svgにすることで1つの画像でまかなえる場合svg使用する

p.102
  • ここまで4回くらい読みなおしたんですけが、どうにも上澄みだけの理解しかしてないように感じるんですよね。
  • Jadeについては何かルールは設けないのでしょうか。
  • JavaScriptについては……?
  • そのほかにも、ライティング自体が下手すぎて、これを人に見せるのはどうなのっていう感じがしちゃいました。
  • 誤字脱字くらいはちゃんとチェックしたほうがいいでしょうね。
  • 結論:いろいろ惜しいけど、よくなる余地はたくさんあるので、がんばってください。

2016-03-08

はてブ2階を表示するブックマークレット

最近2階が覗きたくなることが増えたので書いた。2階があればブクマ数の周りに2階のリンクを追加する。

javascript:void[].map.call(document.querySelectorAll("a.entry-info,.entry>a.entry-link,.users a"),function(e,n){n=new XMLHttpRequest,n.open("GET","/entry/jsonlite/"+e.href),n.responseType="json",n.onload=function(t,o){(t=n.response)&&e.insertAdjacentHTML("beforebegin",((o=t.count)+" upper"+(o>1?"s":"")).link(t.entry_url))},n.send()});

http://b.hatena.ne.jp/以下のページで使えるはず。

minify前
void [].map.call(document.querySelectorAll('a.entry-info,.entry>a.entry-link,.users a'),function(u,x){
  x=new XMLHttpRequest();
  x.open('GET','/entry/jsonlite/'+u.href);
  x.responseType='json';
  x.onload=function(j,c){
    if(!(j=x.response))return;
    u.insertAdjacentHTML('beforebegin',((c=j.count)+' upper'+(c>1?'s':'')).link(j.entry_url))
  };
  x.send();
});

2016-03-04

window.OBR = window.OBR||{};(function(OBR){window.OB_releaseVer="01000501";window.OBR=window.OBR||{};OBR.k=OBR.k||;OBR.La=OBR.La||{};window.OBR$=function(d){return document.getElementById(d)};OBR.d=OBR.d||function(){var d={},a={v:function(){return d},h:function(a){d.X=a;d.cb=;d.startTime=(new Date).getTime()},startTime:function(){return d.startTime},log:function(a){var e=((new Date).getTime()-d.startTime)/1E3;1E3>d.cb.length&amp;&amp;d.cb.push(e+" >"+a)},printLog:function(){if(d.X.c.dj)window.console.log(d.cb.join("\n"));else{var a=d.X.b.Ia();a&amp;&amp;(a.innerHTML=d.cb.join("
"),a.style.display="block")}return d.cb.join("\n")}};a.h(OBR);return a}();OBR.printLog=OBR.d.printLog;OBR.H=function(){this.J=[]};OBR.H.prototype.add=function(d,a){var c;"string"===typeof d&amp;&amp;"function"===typeof a&amp;&amp;(c={},c.name=d,c.ai=a,this.J.push(c))};OBR.H.prototype.Qf=function(d){var a,c;OBR.d.log("remove event :"+d);a=0;for(c=this.J.length;a<c;a+=1)if(this.J[a]&amp;&amp;this.J[a].name&amp;&amp;this.J[a].name===d)try{this.J.splice(a,1)}catch(e){OBR.d.log("rm evnt err: "+e)}};</p&gt;

OBR.H.prototype.o=function(d,a,c){var e,b,f,g;a=a||[];c=!!c;OBR.d.log("event fire:"+d);e=0;for(b=this.J.length;e<b;e+=1)if(f=this.J&amp;&amp;this.J[e]?this.J[e].name:"",g=this.J&amp;&amp;this.J[e]?this.J[e].ai:null,f===d&amp;&g)try{g.apply(this,a)}catch(h){OBR.d.log("fire event *"+d+"* error: "+h)}!0===c&amp;&amp;this.Qf(d)};OBR.H.prototype.sa=function(){this.J=[]};OBR.b=OBR.b||function(){var d={},a={},c=document,e=OBR,b=null;a.v=function(){d.X=e;return d};a.h=function(a){e=a};a.Ba=function(){return function(){}};a.Gi=function(){var a=window.jQuery;return void 0!==a?!(/1\.(0|1|2|3|4)\.(0|1)/.test(a.fn.jquery)||/^1\.1/.test(a.fn.jquery)||/^1\.2/.test(a.fn.jquery)||/^1\.3/.test(a.fn.jquery)):!1};a.F=function(a){return null===a||isNaN(a)?null:e.n("outbrain_widget_"+a)};a.Ia=function(){return e.n("ob_holder")};a.ne=function(f){var g=a.Ia();null===g&amp;&amp;(g=e.b.createElement("div",</p&gt;

"ob_holder"),g.style.display="none",f?e.b.insertBefore(g,f):document.body.appendChild(g));return g};a.Vc=function(){if(!e.n(e.c.Pb)){var f=e.b.createElement("iframe",e.c.Pb),g=f.style;g.display="none";g.width="1px";g.height="1px";f.src="about:blank";(g=a.Ia())||(g=a.Va());e.b.Q(f,g)}};a.Va=function(){if(c.body)return c.body;var a;a=e.b.K("","","body",!0);return 0>=a.length?c.lastChild:a[0]};a.createElement=function(a,g,b,e){var d;a=c.createElement(a);"string"===typeof g&amp;&amp;a.setAttribute("id",g);"string"===

typeof b&amp;&amp;(a.style.cssText=b);for(d in e)e.hasOwnProperty(d)&amp;&amp;a.setAttribute(d,e[d]);return a};a.G=function(a){if(e.c.$d===e.c.Od)try{c.createStyleSheet().cssText=a}catch(g){OBR.d.log(g)}else{var b=c.createElement("style"),d=c.body?"string"===typeof c.body.style.WebkitAppearance:!1;b.type="text/css";c.getElementsByTagName("head")[0].appendChild(b);b[d?"innerText":"innerHTML"]=a}};a.N=function(a,g,b,d){var m=c.createElement("script");m.type=e.c.wj;m.src=a;m.charset="UTF-8";m.async=!!g;m.defer=!1;b&amp;&amp;

e.b.s(m,"load",function(a){var f=a.target;f&amp;&amp;setTimeout(function(){f.parentNode.removeChild(f)},3E3)});d&amp;&amp;e.b.s(m,"load",d);return m};a.Cl=function(a,g){var b=e.b.createElement("link",a);b.setAttribute("rel","stylesheet");b.setAttribute("type",e.c.Eh);g&amp;&amp;b.setAttribute("href",g);return b};a.ih=function(a){var g=e.n("ob_iframe");g&amp;&amp;(g.src=a)};a.Hf=function(){var a;a=isNaN(a)?1E5:a;return Math.floor(Math.random()*a)};a.nk=function(a,g,b){return a.replace(g,b)};a.Ll=function(){var f;if(f=OBR.n("objsonpp"))if(a.kj())a.Ka(f.parentNode)&amp;&amp;

f.parentNode.removeChild(f);else return OBR.n("objsonpp");f=c.createElement("iframe");f.id="objsonpp";f.tk&amp;&amp;(f.tk="seamless");(f.frameElement||f).style.cssText="width: 0; height: 0; border: 0";f.src="";c.body.appendChild(f);return f};a.R=function(a){var g,b;b=c.getElementsByTagName("head");try{b&amp;&amp;0<b.length?b[0].insertBefore(a,b[0].firstChild):(g=c.getElementsByTagName("script"),g[0].insertBefore(a,g[0].firstChild))}catch(d){e.d.log("Err insertToHead:"+d)}};a.Kl=function(a){a=a||OBR;return"function"!==</p&gt;

typeof a.H?(OBR.d.log("namespace.EventManager not function"),null):new a.H};a.O=function(a){return encodeURIComponent(a)};a.Ka=function(a){return null!==a};a.pj=function(f){var b,c=!1;if(a.Zc(f))return!1;b=f.Oe().recMode||"";f=f.Oe().dynamicWidgetLayout||"";b=e.c.rk[b]||"";"2"===b&amp;&amp;"1"===(e.c.sk[f]||"")&amp;&amp;(c=!0);c||"1"!==b&amp;&amp;"3"!==b||(c=!0);return c};a.Zc=function(a){return void 0===a||null===a};a.tj=function(b){return a.Zc(b)||""===b};a.getElementsByClassName=function(b,g){g||(g=document);return g.getElementsByClassName?

g.getElementsByClassName(b):a.K("class",b,"*",!0,!0,g)};a.K=function(b,g,e,d,m,l){var p,q,n;p=[];e=e||"*";d=!!d;m=!!a.tj(m);e=l?l.getElementsByTagName(e):c.getElementsByTagName(e);l=0;for(q=e.length;l<q;l+=1)n="class"===b?e[l].className:e[l].getAttribute(b),null!==n&amp;&amp;(!1===m&amp;&amp;(n=n.toLowerCase(),g=g.toLowerCase()),(n=""===b?!0:d?-1<n.indexOf(g):n===g)&amp;&amp;p.push(e[l]));return p};a.Wb=function(a,b,c){a.detachEvent?a.detachEvent("on"+b,c):a.removeEventListener&amp;&amp;a.removeEventListener(b,c,!1)};a.s=function(a,</p&gt;

b,c){a.attachEvent?a.attachEvent("on"+b,function(){c.call(a)}):a.addEventListener&amp;&amp;a.addEventListener(b,c,!1)};a.Q=function(a,b){try{b.appendChild(a)}catch(c){e.d.log("Fail insert into Dom:"+c)}};a.lb=function(b){b=e.n(b);!a.Zc(b)&amp;&amp;a.Ka(b.parentNode)&amp;&amp;b.parentNode.removeChild(b)};a.insertBefore=function(a,b){return b.parentNode.insertBefore(a,b)};a.isArray=function(a){return a instanceof Array?!0:"[object Array]"===Object.prototype.toString.call(a)};a.sb=function(a,b){var c=/htt(p|ps)?:\/\/127\.0\.0\.1(:\d\d\d\d)?/i;

return/^htt(p|ps)?:\/\/([\w\-]*|[\w\-]*\.[\w\-]*)\.outbrain\.com(:\d\d\d\d)?/i.test(a)||c.test(a)?a:b};a.al=function(a){a=a.replace(/^(\s*)/g,"");var b=c.createElement("div");b.innerHTML=a;return b.childNodes};a.Ua=function(a,b){return a?a.getAttribute(b):null};a.xa=function(a,b,c){a&amp;&amp;a.setAttribute(b,c)};a.I=function(a,b){var c=RegExp("[ '\"|]"+b+"[ '\"|]");a&amp;&amp;!c.test("|"+a.className+"|")&amp;&amp;(a.className+=" "+b)};a.ma=function(a,b){a&amp;&amp;typeof b===e.c.$k&amp;&amp;(a.classList?a.classList.remove(b):a.className=

a.className.replace(RegExp("(^|\\b)"+b+"(\\b|$)","gi")," "))};a.$=function(a,b){a=a.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var c,e;try{return c=RegExp("[\\?&amp;]"+a+"=([^&amp;#]*)","i"),e=c.exec(decodeURIComponent(window.location.href.replace(/\+/g," "))),null===e?b:e[1]}catch(d){return b}};a.sh=function(a){"string"===typeof a&amp;&amp;0<a.indexOf("#")&amp;&amp;(a=a.substr(0,a.lastIndexOf("#")));return a};a.ie=function(a){var b=e.c.ga+"/strip_default.png";a.src!==b&amp;&amp;(a.alt="",a.title="",a.src=b)};a.Oh=function(){var a=</p&gt;

null,b,e,d=null;if("string"===typeof window.OB_MP_feed)a=window.OB_MP_feed;else if((b=c.getElementsByTagName("head"))&amp;&amp;0<b.length)for(e=b[0].getElementsByTagName("link"),b=0;b<e.length;b+=1)if(d=e[b],null!==d.type&amp;&amp;("application/rss+xml"===d.type||"application/atom+xml"===d.type)&amp;&amp;null!==d.href&amp;&amp;""!==d.href){a=d.href;break}return a};a.D=function(a,b){var c=null;a.currentStyle?c=a.currentStyle[b]:window.getComputedStyle&amp;&amp;(c=document.defaultView.getComputedStyle(a,null).getPropertyValue(b));return c};</p&gt;

a.xk=function(){var b=a.Ia(),g,c;a.Ka(b)&amp;&amp;(g=e.b.createElement("span","ob_a"),a.insertBefore(g,b),g.innerHTML=".",c=a.D(g,"color"),a.lb("ob_a"),g=e.b.createElement("a","ob_a"),g.setAttribute("href","void(0)"),g.innerHTML=".",a.insertBefore(g,b),b=a.D(g,"color"),a.lb("ob_a"),c="rgb(0, 0, 0)"===c||"#000000"===c?"#555":c,a.G(".ob-tcolor{color:"+c+"} .ob-lcolor{color:"+b+"} .ob-bgtcolor{background-color:"+c+"} .item-link-container:hover .ob-tcolor{border-color:"+c+"} "+(document.addEventListener?"":".odb_li:hover .ob-zapping-icon,.odb_div:hover .ob-zapping-icon,.item-container:hover .ob-zapping-icon,.ob-dynamic-rec-container:hover .ob-zapping-icon,.odb_li:hover .ob-textual-zapping-icon,.odb_div:hover .ob-textual-zapping-icon,.item-container:hover .ob-textual-zapping-icon,.ob-dynamic-rec-container:hover .ob-textual-zapping-icon{display:none !important;}")))};

a.Ke=function(b){var g=a.Ie("property","og:url","meta","content");null===g&amp;&amp;(g=a.Ie("rel","canonical","link","href"));null!==g||b||(g=window.location.href);null===g&amp;&amp;(g="");return g};a.Ie=function(b,g,c,e){var d=null;b=a.K(b,g,c,!1);null!==b&amp;&amp;0<b.length&amp;&amp;(d=b[0].getAttribute(e));return d};a.jh=function(b){var g,c,d;g=b.g("tracking",!1);c=b.g("comScoreEnabled",!0);d=e.c.je;!1===g&amp;&amp;(!0===c&amp;&amp;!1===d&amp;&amp;!b.Pe())&amp;&amp;(a.Vc(),g=b.q("pid",""),b=e.n(e.c.Pb))&amp;&amp;(b.src=e.c.ga+"/"+e.c.Ub+"3rd/comScore/comScore.htm#pid="+</p&gt;

g,e.c.je=!0)};a.Ei=function(){var b=a.Lb(8);"string"===typeof window.name&amp;&amp;(""===window.name||-1<window.name.indexOf("frame"))?(window.name=b,b=window.name):"string"===typeof window.name&amp;&amp;""!==window.name&amp;&amp;(b=window.name);return b=e.b.O(b.substring(0,9))};a.Lb=function(a){var b,c;b=[];a="number"===typeof a?a:8;for(c=0;c<a;c+=1)b.push("0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".charAt(Math.floor(61*Math.random())));return b.join("")};a.me=function(a){for(var b="",c=0;c<a.length;c++)b=</p&gt;

b.concat(a[c]?"1":"0");return parseInt(b,2)};a.Xc=function(b){var g=b.getElementsByTagName("a")[0];if(null===b.offsetParent||0===b.offsetHeight||0===b.offsetWidth||0===b.clientHeight||0===b.clientWidth||"none"===a.D(b,"display")||"hidden"===a.D(b,"visibility"))return!1;var c=parseInt(a.D(b,"padding-top"),10)+parseInt(a.D(b,"padding-bottom"),10);return 0===b.clientHeight-c||g&amp;&amp;"none"===a.D(g,"display")?!1:!0};a.Oc=function(a){for(var b in e.La)if(e.La.hasOwnProperty(b)&amp;&amp;e.La[b].l===a)return e.La[b];

return null};a.Rl=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0};a.Ga=function(a,b){return"function"!==typeof a?null:void 0===b?a():a(b)};a.kj=function(){return"Microsoft Internet Explorer"===navigator.appName};a.Fh=function(a,b){return a*b};a.Ge=function(a){if(!a||""===a)return[];a=a.replace("","").replace("http://","").replace("https://","").replace("www.","").replace("www2.","").split("/");a.pop();return 0<a.length?a:[]};a.ki=function(b,g){var c=a.Ge(b),e=[],d="";if(g>=c.length)d=

c.join(".");else{e[0]=c[0];for(d=1;d<=g;d+=1)e[d]=c[d];d=e.join(".")}return d};a.ti=function(){return"http"+("https:"===c.location.protocol?"s":"")};a.si=function(){var b,g;b=c.getElementById("widgetVersionSync");null===b&amp;&amp;(b=a.createElement("iframe","widgetVersionSync"),g=a.createElement("div",null,"display:none; height:0px; width:0px; border:none;"),g.appendChild(b),a.Va().appendChild(g));return b};a.ql=function(b){var g;g=window.OB_releaseVer;isNaN(g)||(isNaN(b)||g>=b)||(b=a.ti()+"://widgets.outbrain.com/external/sync/outbrainjs.html?needToBeVer="+

b.toString(),g=a.si(),g.src=b)};a.Sg=function(b){b=b.g("widgetVersionSync",0);isNaN(b)||""===b||(b=parseInt(b,10)||0,a.ql(b))};d.Rc=function(){if(b)return b;var a;try{var g=window.localStorage;g.setItem("OBtst","");g.removeItem("OBtst");a=g}catch(c){a={$b:{},setItem:function(a,b){this.$b[a]=b},removeItem:function(a){this.$b[a]=void 0},getItem:function(a){return"undefined"!==typeof this.$b[a]?this.$b[a]:null}}}return b=a};a.hg=function(a,b){d.Rc().setItem(a,b)};a.Qc=function(a){return(a=d.Rc().getItem(a))?

a:null};a.Gh=function(){d.Rc().removeItem("OB-USER-TOKEN")};a.h(OBR);return a}();OBR.ya=function(d,a,c,e,b,f,g,h,k){var m,l;m=this;l=0;k="function"===typeof k?k:OBR.b.Fh;m.start=function(){var p;l+=1;OBR.b.Ga(d,l)?OBR.b.Ga(a,l):(p=OBR.b.Ga(h,l))?OBR.b.Ga(e,l):(p=l===f&amp;&amp;1E3!==f)?OBR.b.Ga(e,l):(OBR.b.Ga(c,l),p=g?k(l,b):b,setTimeout(function(){m.start()},p))};m.start()};OBR.re=OBR.re||{fj:function(){return"complete"===document.readyState}};

OBR.Hc=function(){var d={},a=[];d.add=function(c){a.push(c)};d.remove=function(c){a.splice(c,1)};d.top=function(){return 0<a.length?a.shift():null};d.jj=function(){return 0>=a.length};d.Jl=function(){return a};d.qh=function(){a=[]};return d};

OBR.Ra=function(){function d(e,b){a.pb="resolve"===e?function(a){a&amp;&amp;a(b)}:function(a,g){g&amp;&g(b)};a.Pa=a.kk=function(){throw Error("Promise already completed.");};for(var f,g=0;f=c[g++];)f[e]&amp;&amp;f[e](b);delete c}var a={},c=[];a.pb=function(a,b){c.push({resolve:a,reject:b})};a.Pa=function(a){d("resolve",a)};a.kk=function(a){d("reject",a)};return a};

OBR.Ag=function(d){var a={},c=null,e,b;a.onClickOrAutoplay=void 0;a.onDisplayReady=void 0;a.onError=void 0;a.fetch=function(a){null===c?(c=a,b&amp;&amp;b(c,this),b=null):(c=a,OBR.Ja.of([this]))};a.shown=function(a){e=a;OBR.Ja&amp;&amp;OBR.Ja.pl(d.widgetId,d.playerId,e)};a.stopTimer=function(){if(this.tg){window.clearInterval(this.tg);var a=document.querySelector('[data-ob-player-id="'+d.playerId+'"] .timerNumber');a&amp;&amp;(a.textContent=a.parentElement.getAttribute("data-time"))}};a.placed=function(){OBR.Ja.ol(d.playerId)};

a.uj=function(a){b=a;c&amp;&amp;b(c,this)};a.Ue=function(){return d};a.Hl=function(){return e};a.Nl=function(){return d.when};return a};OBR.Fg=function(){var d={},a="00.000",c=null,e=null,b=0;d.start=function(){null===c&amp;&amp;(c=new Date);null!==e&amp;&amp;(b+=new Date-e)};d.stop=function(){var f=new Date(new Date-c-b),g=f.getUTCSeconds(),f=f.getUTCMilliseconds();e=new Date;return a=(9<g?g:"0"+g)+"."+(99<f?f:9<f?"0"+f:"00"+f)};return d};</p&gt;

OBR.rd=OBR.rd||function(){function d(){var a=window;a.googletag=a.googletag||{};a.googletag.cmd=a.googletag.cmd||[]}function a(a,g,c,e){var d=window;d.$revee&amp;&amp;d.googletag.cmd.push(function(){d.$revee.track({obpid:a,obsid:g,obdid:c,obpu:e});b.d.log("revee fire:"+e);b.d.log("revee fire id:"+c)})}var c={},e=!0,b;c.h=function(a){b=a;c.cc={}};c.Yb=function(f){if(f&amp;&amp;!1!==f.g("activateRevee",!1)){d();var g=f.q("pid",0),h=f.q("sid",0),k=f.q("did",0),m=f.ka();e||c.cc[k]?e&amp;&amp;(e=!1,f=b.b.N(b.c.U+"rva.outbrain.com/analytics-v1.js",

!0,!0,function(){m=document.location.href;a(g,h,k,m)}),b.b.R(f)):a(g,h,k,m);c.cc[k]||(c.cc[k]=!0)}};c.B=function(){e=!0;c.cc={}};c.h(OBR);return c}();OBR.c=OBR.c||function(){var d={},a={},c=OBR,e;a.Cg="opera";a.Od="msie";a.zg="firefox";a.xg="chrome";a.Eg="safari";a.Bg="mozilla";a.Al="boolean";a.$k="string";a.Vl="object";a.gl="undefined";a.Ul="number";a.Pb="ob_iframe";a.$e=!0;a.Ff=0;a.ec="outbrain_widget_";a.wj="text/javascript";a.Eh="このエントリーをはてなブックマークに追加ツイートシェア

2016-02-29

スポンサードリンクっていう表現が好き

お金が欲しいのだったらこの程度のこと飲めて当然でしょ?っていう大人のフレーバーがするから

思い返せば色々なものを丸呑みしてきた人生だったなぁ。




追記

どうしよう。流れ的にSponsored Linkのことだってもう言いづらい

2016-02-28

Warning: mysql_real_escape_string(): No such file or directory in /home/yosaki1/ero-atmanga.com/wp-content/plugins/statpress/statpress.php on line 1191

Warning: mysql_real_escape_string(): A link to the server could not be established in /home/yosaki1/ero-atmanga.com/wp-content/plugins/statpress/statpress.php on line 1191

Warning: mysql_real_escape_string(): No such file or directory in /home/yosaki1/ero-atmanga.com/wp-content/plugins/statpress/statpress.php on line 1194

Warning: mysql_real_escape_string(): A link to the server could not be established in /home/yosaki1/ero-atmanga.com/wp-content/plugins/statpress/statpress.php on line 1194

Warning: mysql_real_escape_string(): No such file or directory in /home/yosaki1/ero-atmanga.com/wp-content/plugins/statpress/statpress.php on line 1197

Warning: mysql_real_escape_string(): A link to the server could not be established in /home/yosaki1/ero-atmanga.com/wp-content/plugins/statpress/statpress.php on line 1197

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん