記事一覧はこちら

Rubyのコードを書いてみた

毎回毎回Eclipse立ち上げてjavaってのも大げさだし、実行ファイルとソースコードを両方管理しないといけないのは面倒。c#も同じく。 書き捨てのスクリプト言語では、今までphpを使っていたんだけど流石にあんまりなのでrubyを使ってみた。phpだとwindows上で日本語ファイルの扱いがめっちゃ面倒。 試しにOriconのサイトからランキングのデータを抜いてローカルに保存するコードを書いてみた。日時オブジェクトの操作、httpGetでの取得、正規表現取り扱い、ローカルに日本語unicodeファイルを作成、クラスの構文、例外を投げる書き方を試す。

require 'net/http'
require "date"
require 'json'
class OriconCdRanking
  def get( timeFromArg , timeToArg )
    timeFrom = getBeforeMonday( timeFromArg )
    timeTo   = getNextMonday( timeToArg )
    getOneDay( timeFrom )
  end
  # 前の月曜日を返す。引数が既に月曜日ならそれを返す
  def getBeforeMonday(timeArg)
    time=timeArg
    while time.monday? == false
      time  = time - 24*60*60
    end
    return time
  end
  # 次の月曜日を返す。引数が既に月曜日ならそれを返す
  def getNextMonday(timeArg)
    time=timeArg
    while time.monday? == false
      time  = time + 24*60*60
    end
    return time
  end
  def getOneDay( getTimeArg )
    # http://www.oricon.co.jp/rank/js/w/2015-05-04/p/2/
    if getTimeArg.monday? == false
      raise ArgumentError, "月曜日じゃない"
    end
    urlDate = getTimeArg.strftime("%Y-%m-%d")
    result = []
    for i in 1..5
      # urlPathを定義
      if i == 1 then
        urlPath = "/rank/js/w/%s/" % urlDate
      elsif
        urlPath = "/rank/js/w/%s/p/%d/" %  [ urlDate , i ]
      end
      responceStr = Net::HTTP.get('www.oricon.co.jp', urlPath)
      responceStr = responceStr.encode("UTF-8", "Shift_JIS")
      responceStr.scan(/<p class="num[^"]*">\d+<\/p>.+?<!-- \/.wrap-text -->/m) do |loopStr|
        matchRank  = loopStr[/<p class="num[^"]*">(\d+)<\/p>/,1] || ""
        matchImage = loopStr[/<img src="(.+?)"/,1] || ""
        matchTitle = loopStr[/<h2 class="title">(.+?)<\/h2>/,1] || ""
        matchLink  = loopStr[/class="inner"><a href=\"(.+?)\">/,1] || ""
        matchName  = loopStr[/<p class="name">(.+?)<\/p>/,1] || ""
        matchDate  = nil
        if loopStr[/<ul class="list">.*?<li>.*?発売日:.*?(\d+)年(\d+)月(\d+)日/m] then
          matchDate = Time.local( $~[1].to_i , $~[2].to_i , $~[3].to_i )
        end
        matchLabel = ( loopStr[/<ul class="list">.*?<li>.*?<\/li>.*?<li>(.+?)<\/li>/m,1] || "" ).strip
        oneData={ 
          :rank  => matchRank ,
          :image => matchImage ,
          :title => matchTitle ,
          :link  => matchLink ,
          :name  => matchName ,
          :date  => matchDate ,
          :label => matchLabel
        }
        result << oneData
        puts JSON.generate(oneData)
      end
    end
    File.open("結果 日本語 ❤.txt", "w") do |file|
      result.each{|resultLoop|
        file.puts(JSON.generate(resultLoop))
      }
    end
  end
end

t1 = Time.local(2015,1,2) 
t2 = Time.local(2015,12,1) 

a = OriconCdRanking.new()
a.get( t1 , t2 )

コードは未完成で、本当は指定した範囲の全部のランキングを取得するはずだったけど自重。日本語のファイル名を扱えるのが特にいいね。ちょっとした書き捨てスクリプトなら全然書けそう。ただクラスを定義してからじゃないと使えないのはちょっとな。一つのファイルに書こうとすると、クラスを書いた下にmain的な処理を書く必要があって見にくい気がする

長期アニメは話数のカウントが分からなくなってくる

ドラえもんポケットモンスターみたいに同じタイトルで数年放送をやるアニメは、話数が分からなくなってくる。 テレ朝チャンネルクレヨンしんちゃんの湯浅回をやるっぽいんで特番のリストを作っていたんだけど、そもそも特番かどうか のカウントすら統一されたデータが無いっぽい。あっちの情報では特番扱いなのに、こっちの情報では普通の第何話となってるって事。しかも本放送では新作+再放送の組み合わせで放送された特番が、テレ朝チャンネルでは再放送部分がカットされて新作のみになってる。ここまで来るとローカルでどう管理すればいいのか全くわからなくなる。

結論から言うと、 クレしん→一番面倒 ドラえもん→ズレはあるけど自分の中でルールを決めればなんとか対応できる ポケットモンスター→特番の有無でズレがあるけどなんとかなる。 サザエさん→話数がケタ違いだからしょうがないけど、それでも精度の高い情報あり。 ワンピース、ちびまる子ちゃん名探偵コナン→公式HPに全話の話数表示ありで素晴らしい。

って感じかな。クレしんは根本的にどうしようもないけど、それ以外の長期アニメはほぼなんとかなるってのは以外だった。

クレヨンしんちゃん

1992年放送開始。公式HPに話数は無い。 imgTemp-2015-12-31-03-00-35 バックナンバーも話数なし。URLはhttp://www.tv-asahi.co.jp/shinchan/contents/next2/0168/の様な構造で、どうやらHPがリニューアルした時からのカウントっぽい。映画を放送する特番も何の特別も無くカウントされている。 imgTemp-2015-12-31-03-01-35 ところがテレ朝チャンネルには話数の表記があって、特番とは明確に区別されている。だけどテレ朝チャンネルのHPは放送予定のある話数しか書いてないから、テレ朝チャンネルHPから完全な一覧を作る事が出来ない。 クレヨンしんちゃん|アニメ・特撮|テレ朝チャンネル クレヨンしんちゃん TVスペシャル|アニメ・特撮|テレ朝チャンネル

もう一つ重要な情報として、ムトウユージ監督がツイッターで、2015/09/11放送のエピソードが904話だと言っている。これはスタッフ同士でケーキを作ってお祝いしたので、監督だけがなんとなく思っている というレベルでは無いらしい。 テレ朝チャンネルの情報では「湯たんぽでぬくぬくだゾ/ゼッタイに拾いたい石だゾ」が第806話となっている。これはテレビ朝日の公式HPによると2015/01/09放送。そして9/11が904話らしいので、その間の一覧はこちら。湯たんぽでぬくぬくだゾが806話として毎週一話づつ増えた場合の話数。サブタイはテレビ朝日の公式HPから。テレビ朝日公式からなので映画放送も1カウントしてる。

放送日話数?サブタイ
2015/01/09806話湯たんぽでぬくぬくだゾ/ゼッタイに拾いたい石だゾ
2015/01/30807話雪の宿のミステリーだゾ前編・後編
2015/02/06808話『アゲアゲ母ちゃん29号だゾ』『愛のみかんだゾ』
2015/02/13809話『サンキューベリードッグだゾ』『風間くんとおつかいだゾ』
2015/02/20810話『インコがきた!だゾ』『疑惑!?父ちゃんの写真だゾ』
2015/02/27811話『テニスで対決だゾ』『本屋さんでサイン会だゾ』
2015/03/06812話『ミッチー&ヨシりんとリアルおままごとだゾ』『若い二人はこうして家を買ったゾ 前編・後編』
2015/03/13813話『ひまわりが眠れないゾ』『床下のヒミツだゾ』
2015/03/20814話『かぶってるゾ』『掃除機を買うゾ』
2015/04/10815話『映画クレヨンしんちゃん ガチンコ!逆襲のロボとーちゃん』
2015/04/17816話『たけのこ大襲撃だゾ前編・後編』
2015/04/24817話『家に入れないゾ』『インターネットでお電話するゾ』
2015/05/01818話『シロの引越し物語だゾ』『ちんあなごを見たいゾ』
2015/05/08819話『骨折父ちゃんだゾ』『ゆるキャラをプロデュースするゾ』
2015/05/15820話『~骨折父ちゃん~つきそいするゾ』『バッグを拾ったゾ』
2015/05/22821話『~骨折父ちゃん~ギプスをはずすゾ』『忍ちゃんとお留守番だゾ』
2015/05/29822話『双子が来たゾ前編・後編』
2015/06/05823話『春我部は今日も雨だったゾ』『紅さそり隊解散だゾ』
2015/06/12824話『待ち受け画像を撮るゾ』『ザキヤマさんが来~る~だゾ』
2015/06/19825話『ドローンは見てたゾ』『地獄のセールスレディ 逆襲だゾ』
2015/06/26826話『夏のおでかけ会議だゾ』『ぬか漬けデビューだゾ』
2015/07/10827話『テーブルを回すゾ』『ラジオ体操で早起きだゾ』
2015/07/31828話『純情かき氷だゾ』『熱血!修造先生とプールだゾ』
2015/08/21829話『キャンプへ行くゾ』
2015/08/28830話『ひみつちゃんと勝負だゾ』『ひみつちゃんは友だちだゾ』
2015/09/11831話『幻のセミを捕るゾ』『なぐられうさぎ<泡>だゾ』

全然ズレてるじゃねーか!AパートBパートそれぞれで話数カウントしてるのかもしれないけど、だったら倍以上ズレる事になるし、統一されてねえ。映画カウント含めても全然足りない。 クレヨンしんちゃんのファンサイトによると、9/11は871話ってなってるけど、それでも足りてない。 ここまで来ると、何時放送回 としか書けなくなるよねえ

ドラえもん

2005年放送開始。のぶ代ドラは放送が終わったから確定した話数の情報があるだろう、きっと・・。 テレビ朝日公式には同じく話数は無いが、URLが通し番号になってる!例えば2013/10/25放送の「ハロウィンって何の日?」は0346となっている。テレ朝チャンネルでは290話でズレてる。 Wikipediaドラえもんエピソード一覧ページ放送時間を拡大した回や通常と異なる時間・曜日に放送した回を特番とする数え方だと295回でテレ朝チャンネルの数字に近づく。 imgTemp-2015-12-31-03-36-36

初期に放送された「(秘)スパイ大作戦/ハロー宇宙人」の回、テレ朝チャンネルでは6話だけどWikipedia的には第5回。初回放送は放送時間拡大だから特番扱いでカウントしていないんだけど、おそらくそのズレがある。

で、テレビ朝日的に346となっている「ハロウィンって何の日?」だけど、特番を全部含めてカウントするとwikipeidaの295回と一致する。特番含めて、放送ごとにカウントしているって事だな。

ワンピース

1999年放送開始。なんと公式に話数表記がある!フジテレビとしての公式HPは簡易的な物で、ワンピースポータルサイトにリンクがあったのでこっちがアニメ公式と言えるかな。 imgTemp-2015-12-31-03-53-07 東映アニメーションの公式HPにも話数表記がある。バックナンバーもある! imgTemp-2015-12-31-03-53-53 もちろん、フジテレビNextの話数表記とも完全一致、Wikipediaの話数リストとも一致 素晴らしい

サザエさん

1969年放送開始。こんな古いのにサブタイ一覧を纏めたサイトがあるのは素晴らしい。 「サザエさん」がギネス世界記録に認定 - 芸能社会 - SANSPO.COM(サンスポ)によると、2013/9/1現在で2250回。サザエさん(アニメ版)データベース @ ウィキ - 2013年(年間)でも同じカウントで、もしかして完全なデータベース?途中で調整して数ズラしてるのかも知れないけど・・・。サンスポのカウントがフジテレビ発表の物と確証が持てないからつらい。衛星再放送も無いし、公式HPにも表記なし。

ちびまる子ちゃん

1期は1990年~、2期は1995年~。 公式HPに話数カウントあり。1期の情報もあって完全なデータベース。素晴らしい imgTemp-2015-12-31-04-07-59

ポケットモンスターXYZ

公式に話数なし!テレ東公式にもなし、BS-jにもなし。が、キッズステーションには話数表記があった。まだ放送開始直後で差分は不明。 全作のXYは面倒で、特番の特別編 最強メガシンカが話数に組み込まれている。やれやれ。

名探偵コナン

1996年放送開始。公式HPに全話の話数表示あり。最高!

HTML5のShadow DOMを使ってもラジオボタンのname属性は重複しないように気をつけないといけない

<input type="radio" name="radio_test">のname属性はShadow DOMの中で分離してくれない@chrome47Win

https://fushihara.org/blog/archives/2531に関連してる。自作のchrome拡張で何故かラジオボタンのチェック状態が勝手に解除されると思ったら、ラジオボタンのname属性に基づく1つのボタンしかチェック状態にならない処理はShadow DOMを突き抜けてくれるらしい

テスト用コードはこちら。3つあるボタンはそれぞれがShadowDOM。 imgTemp-2015-12-28-22-31-29 ShadowDOMが3つある訳だから、当然ラジオボタンもそれぞれ1つづつ合計3つ押せる・・・と思ったのに1つしか押せない

えー

「これは公開情報だから問題ない」は前世紀から否定されている

住所でポン!の話 【関西の議論】「ネットの電話帳」はプライバシー侵害か NTT「公開情報」で打つ手なし “削除要求”にヤフー、グーグルも苦慮(1/4ページ) - 産経WEST 一度でもタウンページに載せたんだから文句を言うな。これはお前が公開した情報だ。ネットではよくある論調だと思うけど、それ通じないんだよね。 神戸地方裁判所1999年6月23日判決、判例時報1700号99頁 で検索。 [quote font="program" width="auto" id="" source='判例で理解するIT関連法律 - 第14回 個人情報保護 プライバシ侵害の危険性を知る:ITpro' enable_child_shortcode="" ] インターネット接続会社,ニフティの電子掲示板に,診療所を開業していた眼科医が活発に書き込みを行っていた。この眼科医が他の会員を誹謗・中傷している,と考えた別の会員が,眼科医の氏名,職業,診療所の住所・電話番号を掲示板に書き込んだ。

 書き込みが行われた日は34回,翌日には10回,診療所にいたずら電話がかかってきた。さらに,注文していない商品が合計3回,通信販売会社から診療所に配達された。こうした嫌がらせのために眼科医は体調を崩し,内科医の診療を受けた。

 眼科医は,「プライバシを侵害された」として,個人情報を書き込んだ会員に損害賠償を求める訴訟を起こした。訴えられた会員は,「眼科医の氏名,職業,診療所の住所・電話番号はNTTの職業別電話帳に公表されている情報なので,プライバシの侵害には当たらない」,と主張して争った。

 裁判所は,「職業別電話帳に診療所の住所・電話番号を掲載したのは,営業目的のためであり,その情報を勝手に掲示板に書き込むのは,他人に知られたくない個人の私的な事柄をみだりに公開する行為でありプライバシ侵害に当たる」と判断。個人情報の書き込みを行った会員に対して,慰謝料20万円と診療費相当額の損害賠償をするよう命じた。(神戸地方裁判所1999年6月23日判決,判例時報1700号99頁)[/quote] 「そんなつもりで公開した個人情報じゃない」が認められたら勝てるんだよね

参考 弁護士 小松亀一法律事務所知財法等氏名・自宅住所電話番号はプライバシーか 個人のプライバシー権について、判例などを元に解説する。 - luckdragon2009 - 日々のスケッチブック ネットプライバシー裁判

GooglePlayMusicとアップルのミュージック どっちを使えばいいんだ・・・

・普通の音楽とpodcastがある ・普通の音楽は基本的にシャッフルで聞きたい。しかし、普通の音楽の中にあんま聞かないサントラも入っていて、それを除いてシャッフルしたい。既読管理なんてしないから一部曲除くシャッフルがあればそれでいい。 ・podcastは1エピソードづつ聞くからシャッフルは必要ない。しかしエピソードが基本毎週増えるから容量が半端ない。既読管理をしたいからアプリの使い勝手は重要。

普通の音楽は聞く分にはiOSでいい。容量も足りてるし、強力なカスタムプレイリストやシャッフルからこの曲を除くの機能はiOSにしかないし。 GooglePlayMusicは1つのプレイリストに1000曲しか入らないし、カスタムプレイリストもこの曲除く機能はない。 ただ何も考えずにPCから同期すればいいのは魅力的。 なので、普通の音楽はiOSでワイヤードなシンクをすればなんとかなる。

Podcastは既読管理をしたいし、旧エピソードも保存したい。 iOSPodcastアプリはどうにも使い方が慣れない。既読未読のフラグの管理方法がよくわからなかった。 それに、旧エピソードを保存するために全部保存すると容量が全く足りない。

GooglePlayMusicに強力なプレイリストが欲しい。apiとか公開されてないよね。 昨日今日公開されたサービスなら改善に期待が持てるけど、アメリカ含んで4年近くサービスやった上でこの貧弱なプレイリストはちょっとなあ 困った困った。GooglePlayMusicはPodcastサービス始めるらしいね。

Qiitaのメモ機能をローカルで使う方法

つまり、MarkDownのテキストファイルをHTMLに変換しローカルのjsでメニューを表示する imgTemp-2015-12-13-08-12-52 セットのmarkdown.7zファイル ただMarkdownをhtmlに変換するのはgithubAPIだからオンラインが必要だけど・・・

ローカルのマークダウン記法のテキストファイルをhtmlに変換する。Githubに認証なしで使えるMarkdownAPIがあるのでそれを使う。ので、必然的にフォーマットはGithubMarkdownになる。 Markdown | GitHub Developer Guide それだけだとcssは無いし、qiitaに特徴的なメニューが無い。 cssSass: Syntactically Awesome Style Sheetsで書く。変換はめんどいのでsassをコンパイル出来る単一jarファイルを作る方法 – FNBで書いた方法でcssに変換する。

メニューは、まずmarkdownをhtmlに変換する所で##の見出しの一覧を作って <h1>見出し</h1>のhtmlに仕込んでおく。

<div id="menu">
<a href="#user-content-ショートカットキー"><h1>ショートカットキー</h1></a>
<a href="#user-content-第二階層"><h2>第二階層</h2></a>
<a href="#user-content-コンソールで使える予約語"><h1>コンソールで使える予約語</h1></a>
<a href="#user-content-console.logで使えるフォーマット"><h1>console.logで使えるフォーマット</h1></a>
</div>

後はjsでスクロールイベントに合わせて色を変える。便利便利。

これでローカルでMarkdownの便利な書き方、モノはhtmlなので画像もOK、Qiitaの便利なメニューも使える。そして閲覧はオフラインで出来てプライベートにメモれる。markdownを変換する時にgithubに投げる必要があるけど。これで完璧なメモ環境が出来た。 imgTemp-2015-12-13-08-44-46imgTemp-2015-12-13-08-47-20 なんとか.mdを_convert.batにD&DでconvertedFilesにhtmlが出来る。ので、画像もconvertedFilesの中に置く。 .sassはsass.batにD&Dで.cssに変換する。

"use strict";
window.addEventListener("DOMContentLoaded", function(){
  var ss=new ScrollSpy(".anchor",10);
  document.addEventListener("scroll",function(){
    ss.onScroll();
  });
}, false);
class ScrollSpy {
  constructor(anchorQuery,offsetMargin) {
    this.anchorQuery=anchorQuery;
    this.offsetMargin=offsetMargin;
  }
  onScroll(){
    var index=this.find();
    var nodes=this.getMenuNodes();
    for(var i=0;i<nodes.length;i++){
      if(i==index){
        this.changeMenuAttribute(nodes[i],true);
      }else{
        this.changeMenuAttribute(nodes[i],false);
      }
    }
  }
  find(){
    var qs=document.querySelectorAll(this.anchorQuery);
    var tbs=[];
    for(var i=0;i<qs.length;i++){
      var rect = qs[i].getBoundingClientRect();
      if(this.offsetMargin<rect.top){
        continue;
      }
      tbs.push({"index":i,"top":rect.top,"name":decodeURIComponent(qs[i].getAttribute("href").substr(1))});
    }
    console.table(tbs);
    if(tbs.length==0){
      return 0;
    }else{
      return tbs[tbs.length-1].index;
    }
  }
  getMenuNodes(){
    return document.querySelectorAll("#menu h1,#menu h2,#menu h3,#menu h4,#menu h5,#menu h6");
  }
  changeMenuAttribute(node,flag){
    if(flag){
      node.classList.add("active");
    }else{
      node.classList.remove("active")
    }
  }
}
package org.fushihara.github.markdown;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringEscapeUtils;

import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Request.Builder;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;

public class GithubMarkdown {
    static final Charset utf8 = Charset.forName("utf-8");
    final String tempReplaceKey;
    OkHttpClient httpClient = new OkHttpClient();

    public static void main(String[] args) throws FileNotFoundException, IOException, URISyntaxException {
        String markdownTextPath = "";
        String saveDirectory = "";
        String savePath = null;
        String templeteTxtPath = GithubMarkdown.getDefaultTempleteFilePath();
        for (String string : args) {
            if (string == null || string.equals("")) {
                continue;
            } else if (string.startsWith("-d:")) {
                saveDirectory = string.substring(3);
            } else if (string.startsWith("-t:")) {
                templeteTxtPath = string.substring(3);
            } else {
                markdownTextPath = string;
            }
        }
        if (markdownTextPath.equals("")) {
            System.out.println("GithubMarkdown.jar [-d:保存フォルダ] [-t:テンプレートテキスト] markdownテキストのパス");
            return;
        }
        if (saveDirectory.equals("")) {
            savePath = new File(new File(markdownTextPath).getParentFile(), new File(markdownTextPath).getName() + ".html").getPath();
        } else {
            savePath = new File(saveDirectory, new File(markdownTextPath).getName() + ".html").getPath();
        }
        System.out.println("version:" + System.getProperty("java.version"));
        System.out.println("load:" + markdownTextPath);
        System.out.println("save:" + savePath);
        GithubMarkdown ghm = new GithubMarkdown();
        String markdownText = GithubMarkdown.loadText(markdownTextPath);
        System.out.println("rawText:" + markdownText.length() + " chars");
        markdownText = ghm.syntaxHighlightKeepFileName(markdownText);
        String markdownHtmlRaw = ghm.convertMarkdown(markdownText);
        markdownHtmlRaw = ghm.syntaxHighlightRestoreFileName(markdownHtmlRaw);
        System.out.println("markDownText:" + markdownHtmlRaw.length() + " chars");
        String headText = GithubMarkdown.loadText(templeteTxtPath);
        String finalText = headText;
        finalText = finalText.replace("/*title*/", new File(markdownTextPath).getName());
        finalText = finalText.replace("/*body*/", markdownHtmlRaw);
        finalText = finalText.replace("/*menu*/", ghm.getMenuHtml(markdownText));
        ghm.saveText(savePath, finalText);
    }

    public GithubMarkdown() {
        this.tempReplaceKey = String.format("x%x", System.identityHashCode(this));
    }

    /**
     * 自分自身のjarファイル名の拡張子をtxtにしたパスを返す
     * 
     * @throws URISyntaxException
     * @throws IOException
     */
    private static String getDefaultTempleteFilePath() throws URISyntaxException, IOException {
        String myFile = new File(GithubMarkdown.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getAbsolutePath();
        if (!myFile.endsWith(".jar")) {
            throw new IOException(myFile);
        }
        String tempPath = myFile.substring(0, myFile.length() - 4) + ".txt";
        return tempPath;
    }

    /** ファイル名の構文があるqiita独自のシンタックスハイライトの構文からファイル名の部分を一旦移動させる */
    private String syntaxHighlightKeepFileName(String markdownRaw) {
        final Pattern pat = Pattern.compile("^(```[a-zA-Z0-9_]+?):(.+)", Pattern.MULTILINE);
        final Matcher matcher = pat.matcher(markdownRaw);
        final StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            // 一致したグループは matcher.group(n) で取得できる。
            // ここで replacement を加工する。
            String replacement = this.tempReplaceKey + ":" + matcher.group(2) + System.lineSeparator() + matcher.group(1);
            matcher.appendReplacement(sb, replacement);
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    private String syntaxHighlightRestoreFileName(String markdownHtml) {
        final Pattern pat = Pattern.compile("<p>" + this.tempReplaceKey + ":(.+?)</p>\\s\\s(<div[^\\>]+?>)([\\s\\S]+?)</div>");
        final Matcher matcher = pat.matcher(markdownHtml);
        final StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            // 一致したグループは matcher.group(n) で取得できる。
            // ここで replacement を加工する。
            String replacement = String.format("%2$s<div class=\"code-lang\">%1$s</div><div class=\"highlight-pre\">%3$s</div></div>", matcher.group(1).toString(), matcher.group(2).toString(), matcher.group(3).toString());
            matcher.appendReplacement(sb, replacement);
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    private static String loadText(String path) throws IOException {
        try {
            byte[] bytes = Files.readAllBytes(new File(path).toPath());
            return new String(bytes, utf8);
        } catch (FileNotFoundException e) {
            return "";
        }
    }

    private String getMenuHtml(String rawText) {
        StringBuilder sb = new StringBuilder();
        Pattern pat = Pattern.compile("\\s*(\\#+)\\s*(.+)");
        Matcher mat = pat.matcher(rawText);
        while (mat.find()) {
            String sharps = mat.group(1).toString().trim();
            String title = mat.group(2).toString().trim();
            sb.append(createMenuHtmlOneItem(sharps.length(), title));
            sb.append(System.lineSeparator());
        }
        return sb.toString();
    }

    private String createMenuHtmlOneItem(int level, String label) {
        return String.format(Locale.US, "<a href=\"%3$s\"><h%1$d>%2$s</h%1$d></a>", level, StringEscapeUtils.escapeHtml4(label), "#" + StringEscapeUtils.escapeXml11("user-content-" + label));
    }

    private void saveText(String path, String content) throws IOException {
        Files.write(new File(path).toPath(), content.getBytes(utf8), StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE);
    }

    private String convertMarkdown(String rawText) throws IOException {
        Builder rb = new Request.Builder();
        // rb.addHeader("key", "value");
        rb.url("https://api.github.com/markdown/raw");
        RequestBody rbody = RequestBody.create(MediaType.parse("text/plain"), rawText);// 第二引数はbyte[]やfileの場合もある
        rb.post(rbody);
        Request request = rb.build();
        OkHttpClient client = new OkHttpClient();
        String result;
        Response response = client.newCall(request).execute();
        result = response.body().string();
        return result;
    }
}

47Newsのアクセス数が右肩下がりになってる ように見える

引用ではなく転載。47newsがこんな細かいアクセスランキングを公開してくれているの知らなかった。メンテされてないのかなと思ったけど、トップページから2クリックで行けるし、モダンなスマホページでは共通のフッターに総合アクセスランキングってあるし。俺の知らない所で47Newsにボイコット運動でも起きてるのかな? [quote font="program" width="auto" id="" source='47NEWS(よんななニュース)' enable_child_shortcode="" ][ 2015/12 ] : |||||||||||| : 25111567 [ 2015/11 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 112487143 [ 2015/10 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 194695767 [ 2015/09 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 214415768 [ 2015/08 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 202467232 [ 2015/07 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 188213674 [ 2015/06 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 192644370 [ 2015/05 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 234552738 [ 2015/04 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 218631547 [ 2015/03 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 220908487 [ 2015/02 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 190617646 [ 2015/01 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 204221988 [ 2014/12 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 175121648 [ 2014/11 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 170037936 [ 2014/10 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 193941778 [ 2014/09 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 173708115 [ 2014/08 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 176075935 [ 2014/07 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 176071923 [ 2014/06 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 152861662 [ 2014/05 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 156026084 [ 2014/04 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 150917835 [ 2014/03 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 191457422 [ 2014/02 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 161282363 [ 2014/01 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 157407651 [ 2013/12 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 165038188 [ 2013/11 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 128886568 [ 2013/10 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 133819736 [ 2013/09 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 140666903 [ 2013/08 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 168712881 [ 2013/07 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 150804720 [ 2013/06 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 130212059 [ 2013/05 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 127331624 [ 2013/04 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 125434484 [ 2013/03 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||| : 109210943 [ 2013/02 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||| : 106454257 [ 2013/01 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 129870068 [ 2012/12 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 128508068 [ 2012/11 ] : ||||||||||||||||||||||||||||||||||||||||||| : 86596425 [ 2012/10 ] : ||||||||||||||||||||||||||||||||||||||||||||||| : 95409203 [ 2012/09 ] : ||||||||||||||||||||||||||||||||||||||||||| : 87758399 [ 2012/08 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||| : 102203659 [ 2012/07 ] : |||||||||||||||||||||||||||||||||||||||||||||||| : 97476337 [ 2012/06 ] : ||||||||||||||||||||||||||||||||||||||||||| : 86830572 [ 2012/05 ] : |||||||||||||||||||||||||||||||||||||||||| : 84688644 [ 2012/04 ] : ||||||||||||||||||||||||||||||||||||||||| : 82755151 [ 2012/03 ] : ||||||||||||||||||||||||||||||||||||||||||| : 87515859 [ 2012/02 ] : |||||||||||||||||||||||||||||||||||||||||||||| : 92399372 [ 2012/01 ] : |||||||||||||||||||||||||||||||||||||||||||||||| : 97973991 [ 2011/12 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 112843785 [ 2011/11 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 116087153 [ 2011/10 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 131119464 [ 2011/09 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 130471881 [ 2011/08 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 142400963 [ 2011/07 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 134932246 [ 2011/06 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 128140851 [ 2011/05 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 130876320 [ 2011/04 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 146737574 [ 2011/03 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 159206435 [ 2011/02 ] : ||||||||||||||||||||||||||||||||||||||||||||||||| : 98000789 [ 2011/01 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 131145496 [ 2010/12 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 127510880 [ 2010/11 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 127164881 [ 2010/10 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 122022903 [ 2010/09 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 125685216 [ 2010/08 ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 116358703 [ 2010/07 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 115099451 [ 2010/06 ] : |||||||||||||||||||||||||||||||||||||||||||||||||| : 100794379 [ 2010/05 ] : ||||||||||||||||||||||||||||||||||||||||||||||||||| : 103131474 [ 2010/04 ] : ||||||||||||||||||||||||||||||||||||||||| : 82602233 [ 2010/03 ] : |||||||||||||||||||||||||||||||||||||||| : 80616814 [ 2010/02 ] : |||||||||||||||||||||||||||||| : 60326845 [ 2010/01 ] : ||||||||||||||||||||||||||| : 54188696 [ 2009/12 ] : ||||||||||||||||||||||| : 47758587 [ 2009/11 ] : |||||||||||||||||||||||| : 48452455 [ 2009/10 ] : ||||||||||||||||||||||||| : 50398610 [ 2009/09 ] : ||||||||||||||||||| : 39286581 [ 2009/08 ] : ||||||||||||||||||||||||||| : 55060392 [ 2009/07 ] : |||||||||||||||||||||| : 45163385 [ 2009/06 ] : |||||||||||||||| : 33728028 [ 2009/05 ] : ||||||||||||||||||| : 39875000 [ 2009/04 ] : |||||||||||| : 25188910 [ 2009/03 ] : ||||||||||||| : 26031300 [ 2009/02 ] : |||||||||||| : 24351292 [ 2009/01 ] : ||||||||||| : 22419555 [ 2008/12 ] : |||||||| : 17004340 [ 2008/11 ] : ||||||||| : 18012665 [ 2008/10 ] : |||||||||| : 21504707 [ 2008/09 ] : ||||||||| : 18595639 [ 2008/08 ] : ||||||||| : 18153607 [ 2008/07 ] : |||||||| : 16441939 [ 2008/06 ] : ||||||| : 15812953 [ 2008/05 ] : ||||| : 10205769 [ 2008/04 ] : ||| : 6195590 [ 2008/03 ] : ||| : 6049333 [ 2008/02 ] : || : 5129395 [ 2008/01 ] : || : 5453627 [ 2007/12 ] : || : 4986280 [ 2007/11 ] : || : 4508450 [ 2007/10 ] : || : 4122777 [ 2007/09 ] : | : 3268753 [ 2007/08 ] : | : 3995270 [ 2007/07 ] : || : 4319378 [ 2007/06 ] : | : 2971485 [ 2007/05 ] : | : 2707758 [ 2007/04 ] : | : 2322039 [/quote] [quote font="program" width="auto" id="" source='http://www.47news.jp/AccessAnal/AccessAnal_pv_day.html' enable_child_shortcode="" ][ 2015/12/13(日) ] : : 31439 [ 2015/12/12(土) ] : ||||||||||||||||||||||||||||||||||| : 1770477 [ 2015/12/11(金) ] : |||||||||||||||||||||||||||||||||||||||| : 2046444 [ 2015/12/10(木) ] : |||||||||||||||||||||||||||||||||||||||||| : 2138240 [ 2015/12/09(水) ] : ||||||||||||||||||||||||||||||||||||| : 1850557 [ 2015/12/08(火) ] : ||||||||||||||||||||||||||||||||||||||||| : 2051311 [ 2015/12/07(月) ] : ||||||||||||||||||||||||||||||||||| : 1754459 [ 2015/12/06(日) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 2836418 [ 2015/12/05(土) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||| : 2747200 [ 2015/12/04(金) ] : ||||||||||||||||||||||||||||||||||| : 1786298 [ 2015/12/03(木) ] : |||||||||||||||||||||||||||||||| : 1648743 [ 2015/12/02(水) ] : |||||||||||||||||||||||||||||||||||||||| : 2043870 [ 2015/12/01(火) ] : |||||||||||||||||||||||||||||||||||||||||||||||| : 2415953 [ 2015/11/30(月) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 3275046 [ 2015/11/29(日) ] : |||||||||||||||||||||||||||||||||||||||||||||| : 2306643 [ 2015/11/28(土) ] : ||||||||||||||||||||||||||||||||||||||||||||||| : 2355940 [ 2015/11/27(金) ] : ||||||||||||||||||||||||||||||||||||||||| : 2074501 [ 2015/11/26(木) ] : |||||||||||||||||||||||||||||||||||||||||||||||| : 2403818 [ 2015/11/25(水) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 2840907 [ 2015/11/24(火) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||| : 2612623 [ 2015/11/23(月) ] : |||||||||||||||||||||||||||||||||||||||||| : 2108399 [ 2015/11/22(日) ] : ||||||||||||||||||||||||||||||||||||||||||||||||| : 2481150 [ 2015/11/21(土) ] : |||||||||||||||||||||||||||||||||||||||||||||||||| : 2545256 [ 2015/11/20(金) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 2960689 [ 2015/11/19(木) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||| : 2747367 [ 2015/11/18(水) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 3197936 [ 2015/11/17(火) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 3961549 [ 2015/11/16(月) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4147925 [ 2015/11/15(日) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4091222 [ 2015/11/14(土) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 3900161 [ 2015/11/13(金) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4089313 [ 2015/11/12(木) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4238766 [ 2015/11/11(水) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4355107 [ 2015/11/10(火) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4198391 [ 2015/11/09(月) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5481328 [ 2015/11/08(日) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5219580 [ 2015/11/07(土) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4659640 [ 2015/11/06(金) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4552830 [ 2015/11/05(木) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4523146 [ 2015/11/04(水) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 4862569 [ 2015/11/03(火) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5202978 [ 2015/11/02(月) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5797654 [ 2015/11/01(日) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5294709 [ 2015/10/31(土) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 6082003 [ 2015/10/30(金) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 6272592 [ 2015/10/29(木) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 6747180 [ 2015/10/28(水) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 6819125 [ 2015/10/27(火) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 7240476 [ 2015/10/26(月) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5731778 [ 2015/10/25(日) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5021049 [ 2015/10/24(土) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5006492 [ 2015/10/23(金) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5692472 [ 2015/10/22(木) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5924696 [ 2015/10/21(水) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 7060473 [ 2015/10/20(火) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 6204288 [ 2015/10/19(月) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5991532 [ 2015/10/18(日) ] : ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5294509 [ 2015/10/17(土) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 5810604 [ 2015/10/16(金) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 6721006 [ 2015/10/15(木) ] : |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| : 7142655 [/quote]

飛行機のコクピットにレーザー光線が当たっているとはどんな状況なのか

新幹線や飛行機の運転席にレーザー光がってニュース、どうやって気がついたんだろう。 運転手の目に直接入ったならすぐに分かるだろうけど、そうなの? [quote font="program" width="auto" id="" source='ASITA LASER' enable_child_shortcode_="" ]imgTemp-2015-12-13-03-48-18[/quote] この写真で言うと、レーザーポインターが当たっている所は中央の白い部分(A)を指すのか、それとも周りの反射とか収束しきれずに光っている所(B)も当たっていると言うのか。 物理的には後者(B)だけど、普通に話す時は前者(A)の意味で使ってるな。

前者(A)の意味で新幹線や飛行機の運転席にレーザー光が当たったと言ってるのであれば、狙いがめっちゃ正確で運転手もよく気がついたなそれってなるし、 後者(B)の意味でレーザー光線が当たったと言ってるのであれば、運転席に当たりっこなくても、そっちの方に向けるだけで違法になるのねってなるし。

[quote font="" width="auto" id="" source='www.fnn-news.com: 伊丹空港で全日空機に...' enable_child_shortcode="" ]警察は、威力業務妨害の疑いもあるとみて捜査している。[/quote] 何にでも使える万能法だから具体的に何が違法となったのかよくわからんな。

[quote font="" width="auto" id="" source='www.fnn-news.com: 伊丹空港で全日空機に...' enable_child_shortcode="" ]上空300メートル付近を飛行中、パイロットが、コクピットの窓にレーザー光線が当てられていることに気づいた[/quote] [quote font="program" width="auto" id="" source='レーザー照射で機長が目に負傷 NY空港、無事着陸 - 47NEWS(よんななニュース)
インターネットアーカイブより' enable_child_shortcode
="" ]米ニューヨークのケネディ空港で今月15日、着陸体勢に入った旅客機のコックピットに向かってレーザー光線が照射され、機長が目に軽傷を負う事故があったことが分かった。[/quote] これだと前者(A)の意味で使ってるように見えるけど、後者でもレーザー光線が当たってる、軽軽軽軽軽傷を負った と言えなくもないし。

それか、周りの反射とか収束しきれずに光っている所 をさらに分類して ・(B-1)レーザーポインターが自分に向けて照射されていると認識出来る領域 ・(B-2)レーザーポインターが光っている事が認識出来る領域 B-1も含めてって話かな

B-1を含めるのであれば、感覚的にそりゃいかんよねってなって違和感ないけど B-2まで入るとちょっと屋外で使う時は気をつけなきゃいけないっすな

ChromeのDevToolに「Rendered Fonts」が追加されていた

またChromeのDevToolが便利になってしまった imgTemp-2015-12-11-06-31-26

css - Rendered Fontsに適用されるフォントについて - スタック・オーバーフロー 2015年6月の段階であったっぽい^^;

sassをコンパイル出来る単一jarファイルを作る方法

基本的には Sass, compass and JRuby in a single jar - SeanChenXi.com でいいんだけど、現時点(2015/12/09)で動かないのでメモ。 実行すると、こんな感じで何故かフルパスが入ってしまう。

>java -jar jcompass.jar -S compass create --help
io/console not supported; tty will not be manipulated
Errno::ENOENT: No such file or directory - C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!C:/gems/compass-core-1.0.3/VERSION
     read at org/jruby/RubyIO.java:3785
     read at org/jruby/RubyIO.java:3968
     Core at C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/gems/compass-core-1.0.3/lib/compass/core/version.rb:10
  Compass at C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/gems/compass-core-1.0.3/lib/compass/core/version.rb:4
   (root) at C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/gems/compass-core-1.0.3/lib/compass/core/version.rb:3
  require at org/jruby/RubyKernel.java:1040
   (root) at /C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1
  require at /C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:54
  require at org/jruby/RubyKernel.java:1040
   (root) at C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/gems/compass-core-1.0.3/lib/compass/core.rb:1
   (root) at /C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1
     each at org/jruby/RubyArray.java:1613
  require at /C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:54
  require at org/jruby/RubyKernel.java:1040
   (root) at C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/gems/compass-1.0.3/lib/compass.rb:14
   (root) at C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/gems/compass-1.0.3/lib/compass.rb:4
   (root) at /C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1
  require at /C:/Users/hoge/AppData/Local/Temp/tmp_20151208Tue220735/jcompass/jcompass.jar!/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:54
     load at org/jruby/RubyKernel.java:1059
   (root) at uri:classloader:/bin/compass:23

C: でgrepしたけどよくわからんかったので古いバージョンを入れる。

http://www.jruby.org/download からjruby-complete-1.7.xx.jarを入れる。俺は1.7.13を入れた。 その状態で

java -jar scss.jar -S gem install -i gems sass -v 3.4.17 --no-document --no-format-executable
java -jar scss.jar -S gem install -i gems bourbon --no-document --no-format-executable
java -jar scss.jar -S gem install -i gems neat --no-document --no-format-executable
jar uf scss.jar -C gems .
java -jar scss.jar -S scss styles.scss

でよし。 のはず。最新版sassが3.4.19だからどっかでおかしくなったはず。jrubyでおかしいからプルリクエスト送ります!ってそれいいのかな。 File: SASS_CHANGELOG — Sass Documentation sassのchangelog。結構頻繁に更新してる。出来れば最新版を使いたい。 jruby-complete-1.7.13-sass一通りファイル。無断転載。

と思ったけどjarを実行するフルパスに日本語があると死ぬ。マジか~今時それか~

台東区の公式HP「89言語に対応(ドヤ」→使うのはグーグルの自動翻訳

imgTemp-2015-11-30-22-45-59 あかんて。事故るて。 imgTemp-2015-11-30-22-46-54 imgTemp-2015-11-30-22-47-03 なにわろてんねん。 そのモン語が正しいかどう確認するの?どうせ隅っこに日本語以外の内容は保証しないとか書くんだろうけど、そんなの意味ないですやん。見る側が右クリックから一発で翻訳出来るのにサイト側でやる意味ないて。 前例がいくらでもあるのになぜやる・・・ [quote font="program" width="auto" id="" source='福島県HP、翻訳ソフト誤訳連発 そばは「side」 - 47NEWS(よんななニュース)' enable_child_shortcode="" ]福島県HP、翻訳ソフト誤訳連発 そばは「side」  福島県の公式ウェブサイトの外国人向けページで、自動翻訳ソフトを用いて日本語から外国語に変換しているため、食品の「そば」が側面や脇を意味する「side」と表示されるなど、誤訳や意味が通じないケースが多数あることが25日、分かった。  県は原発事故の風評払拭に向け、海外への正確な情報発信を「喫緊の課題」と位置付けている。ただ、誤訳は農水産物の出荷制限解除など正確さが求められる部分にも及んでおり、県の姿勢が問われそうだ。  「正確な翻訳ではない場合があるが、県は一切責任を負えない」と明記されているが、利用者から「何が正しい情報なのか分からない」との声が出ている。

2015/07/25 17:40 [/quote]

[quote font="program" width="auto" id="" source='大仏がオサラギさん?間違いだらけ奈良HP
見落としがちなグローバル化の落とし穴 - 第4回●誤訳だらけ? 機械翻訳:ITpro' enable_child_shortcode
="" ]大仏がオサラギさん?間違いだらけ奈良HP  奈良市観光協会が、今春更新した外国語版のホームページ(HP)に、多くの誤訳があるとの指摘を受け、HPを一時閉鎖していたことがわかった。  経費抑制のためインターネットの自動翻訳システムを使ったためで、「国際観光都市として恥ずかしい限り」と担当者は平謝りだ。

 寺社などを紹介すHPは今年3月に更新され、従来の英、韓、中、仏語に、スペイン語ポルトガル語、ドイツ語、イタリア語のページを追加。この際、1言語150万円だった翻訳の外部委託をやめ、全部で35万円の自動翻訳システムに変えた。

 例えば英語では、東大寺の「大仏」を姓と認識して「Mr.Osaragi(ミスター・オサラギ)」と翻訳。「仏ほとけの慈悲」は「French mercy(フランスの慈悲)」とした。「平城京へ都が遷うつされた」では、訳せなかった「遷」の字が英文に交じっていた。誤訳は「数え切れないほど」あり、観光ガイドらからの苦情を受け、協会は現在、更新前のHPを公開している。

(2012年5月28日 読売新聞)[/quote]

[quote font="program" width="auto" id="" source='秋田→飽きた ナマハゲ→はげ頭病 「機械翻訳で…」誤訳多数 観光庁が東北観光博サイト閉鎖
見落としがちなグローバル化の落とし穴 - 第4回●誤訳だらけ? 機械翻訳:ITpro' enable_child_shortcode
="" ]秋田→飽きた ナマハゲ→はげ頭病 「機械翻訳で…」誤訳多数 観光庁東北観光博サイト閉鎖  東日本大震災からの復興を支援する国のキャンペーン「東北観光博」の公式ホームページの英語、中国語、韓国語版で誤訳が多数見つかり、管理する観光庁は日本語以外のホームページを一時閉鎖した。自動翻訳機能ソフトを使ったため固有名詞が直訳されたといい、訂正して今月下旬に再開する予定としている。  誤訳の例として、歌人石川啄木の法要「啄木忌」は「Woodpecker mourning」(キツツキ喪)▽秋田県の生保内(おぼない)関所跡は「Barrier trace in life insurance」(生命保険における関所跡)▽秋田は「tired」(飽きた)-など。仙台市の「旧伊達邸」はローマ字表記で「きゅういたつてい」に。秋田県男鹿市の伝統行事「ナマハゲ」に至っては中国語で「はげ頭病」の意味になり、秋田県だけで30カ所以上あった。

 観光庁はホームページ上に「機械翻訳によるもので100%正確なものではない」と注釈をつけたが、日々の閲覧数が1万回を超えるようになった今月以降、誤訳の指摘が相次いだ。

 秋田県は「観光はイメージで左右される。しっかりしてほしい」、宮城県は「復興に向けた大切なイベントなのに、あまりにレベルの低い間違いだ」と批判。観光庁は一時閉鎖を謝罪し「見つけるたびに直してきたが、作業が追い付かなくなった」としている。

msn産経ニュース 2012.4.14)[/quote]

もう2015/11/30 22:58 時点で公開してた。 imgTemp-2015-11-30-23-00-52 imgTemp-2015-11-30-23-02-06 英語、中国語簡体字、中国語繁体字、韓国語、フランス語、タイ語、マレー語、インドネシア語Myサイト翻訳|株式会社高電社 というサービスを使ってるらしい。けど、それ以外は全部グーグル翻訳て。 imgTemp-2015-11-30-23-04-02 税金かえしてっ

C#でchromeのCookieのencrypted_valueを復元する方法

メモメモ fushihara/UnprotectChromeCookie @github

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _sln {
    class Program {
        String fromPath;
        String toPath;
        static void Main(string[] args) {
            new Program("", "");
        }
        Program(String fromPath, String toPath) {
            if (fromPath == "") {
                fromPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Google\Chrome\User Data\Default\Cookies"; ;
            }
            if (toPath == "") {
                toPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "cookie");
            }
            run(fromPath, toPath);
        }
        static void run(String fromPath, String toPath) {
            if (!System.IO.File.Exists(fromPath)) throw new System.IO.FileNotFoundException("Cant find cookie store", fromPath); // race condition, but i'll risk it
            File.Copy(fromPath, toPath, true);
            var connectionString = "Data Source=" + toPath + ";pooling=false";
            var list = new List<Dictionary<String, String>>();
            using (var conn = new SQLiteConnection(connectionString)) {
                using (var cmd = conn.CreateCommand()) {
                    cmd.CommandText = "SELECT host_key,name,encrypted_value,value FROM cookies WHERE value = ''";
                    conn.Open();
                    using (SQLiteDataReader reader = cmd.ExecuteReader()) {
                        while (reader.Read()) {
                            String hostKey = (String)reader["host_key"];
                            String name = (String)reader["name"];
                            Byte[] encryptedValue = (Byte[])reader["encrypted_value"];
                            String value = (String)reader["value"];
                            if (encryptedValue.Length == 0) {
                                continue;
                            }
                            var decodedData = System.Security.Cryptography.ProtectedData.Unprotect(encryptedValue, null, System.Security.Cryptography.DataProtectionScope.CurrentUser);
                            var plainText = Encoding.ASCII.GetString(decodedData);
                            list.Add(new Dictionary<string, string>() {
                                { "hostKey", hostKey },
                                { "name", name },
                                { "value",plainText}
                            });
                        }
                    }
                }
                using (SQLiteTransaction trans = conn.BeginTransaction()) {
                    foreach (var i in list) {
                        using (SQLiteCommand cmd = conn.CreateCommand()) {
                            cmd.CommandText = "update cookies set value = @value where host_key = @hostKey and name = @name ";
                            cmd.Parameters.Add(new SQLiteParameter("@value", i["value"]));
                            cmd.Parameters.Add(new SQLiteParameter("@hostKey", i["hostKey"]));
                            cmd.Parameters.Add(new SQLiteParameter("@name", i["name"]));
                            cmd.ExecuteNonQuery();
                        }
                    }
                    trans.Commit();
                }
                conn.Close();
            }
        }
    }
}

スタートレックのハンドサインを採用してから絵文字は腐っている

[quote font="program" width="auto" id="" source='デュレックスが「公式コンドーム絵文字」目指し支持呼びかけ - ねとらぼ' enable_child_shortcode="" ]12月1日の「世界エイズデー」に、Unicodeの標準化団体Unicode Consortiumにコンドーム絵文字を提案するとのこと。携帯端末のメッセージのやり取りは恋人関係の発展に大きな影響を持っており、公式のコンドーム絵文字は予防や性的な幸福を高めると同社幹部は語っています。[/quote] いらねーだろこんなの。なんだよ支持呼びかけって。なんでユニコード コンソーシアムがエイズの予防を考えないといけないんだよ。 「Unicodeはそういう物ではありません」ってきっぱり断ってくれる事を望む

Unicode 7.0の仕様公開、ヴァルカン式挨拶が追加 | スラド IT この段階から問題。どんだけ知名度あろうが、1作品のアイコンを入れてんじゃねーよ。文字じゃねーだろそれ 一番最初の絵文字は日本のケータイキャリアで使われていたって実績があるけど、ヴァルカン式挨拶を文字として使っていた実績がどんだけあるんだよ。それ日本のケータイより多いの?

サウナ、ノキア、そして…! フィンランドが公式絵文字を発表 : ギズモード・ジャパン まさか、これをunicodeに追加なんて言い出さないよね?

KitKatの絵文字キャンペーン、Unicodeを宣伝の場所にすることの是非は? | スラド idle と思ったらキットカットが入れろと言い出した。馬鹿だろ

アイルランドの追加絵文字提案はなぜ認められたのか - Togetterまとめ [quote font="program" width="auto" id="" source='https://twitter.com/ogwata/status/12829674722' enable_child_shortcode="" ]同時にISO/IEC 10646(≒Unicode)は部分実装を許す。その結果、典拠に疑問のある、実装されるかどうか分からない「ゴミ」が増えていく。これはISO/IEC 10646の構造的な問題。そういうお話でした。 [/quote] ゴミだらけです。 もうどうにでもな~れ(AAry

チャンピオンって電子版あったっけ? とググったけど分からなかった

「バイナリ畑でつかまえて」作者の新連載&「弱ペダ」人気投票、週チャンで - コミックナタリー この「AIの遺電子」が読みたくてチャンピオンを買おうと思ったんですよ。でもコンビニの前で電子版あるんじゃね?と思って、その場で コンビニの目の前でググったんだけど、あるのか無いのかの確証が持てなかった件について。 2015/11/05の現時点で週刊少年チャンピオンの電子版は存在しない。

写真は説明無い限り全てファーストビュー。 電子書籍と言えばKindleでしょ と、アマゾンアプリを立ち上げて週刊 チャンピオンと入力。 が、どうもおかしい。コミックしか出ない。 imgTemp-2015-11-05-22-19-31 この場合、俺の探し方が悪いのか本当に無いのか判断出来ない ので、存在を知っていたジャンプで試してみた。ジャンプは電子版出しているはずだ。実際にはジャンプはKindleでは出ていない imgTemp-2015-11-05-22-20-33 あるにはあるけど、どう見ても古本 というかオフィシャルではない。

まさかアマゾンのアプリじゃ駄目でKindleのアプリが必要なのか? そう思ってKindleアプリで検索。KindleのアプリはストアのUIが非常に悪い。まず検索結果ページで、今何のキーワードで検索しているのか分からない。検索ボックスクリアするなよ imgTemp-2015-11-05-22-22-50 明らかに違う。とうか次へがグレーアウトしているからこれが全て。

もう一度ジャンプ imgTemp-2015-11-05-22-24-41 おおあったあった と思ったらジャンプはなんか0円の紹介雑誌だし、なんでマガジンが混ざってるのお前 ここでマガジンで検索する事に気がつくべきだった

ここでチャンピオンの電子版の確認をする事が出来ないと思ってコンビニで買いました。

当然だけど、あることの証明は簡単だけど無い事の証明は難しいわな

「Snip2Code」というサイトにコードをコピーされ困った話

ネットに一度上げた情報を消すことは不可能。必ずコピーされる。 普段言う側だったけど、言われる側に回りました。俺は悪くない。

2015/09/27にニコニコ動画のプレイヤーをhtml5版に差し替えるユーザースクリプトredditで公開されて、2015/10/11にそれを改造した版を俺がこの fushihara.org/blog のブログに公開した。 imgTemp-2015-10-21-20-30-06 その後ちょくちょくウオッチしていたら、2015/10/14にドワンゴの社長名義で「商売の邪魔すんなゴラァ」と言われてオリジナルの作者さんがスクリプトを削除 それを見て俺もビビってブログとgist.github.comを消してやれやれ と思っていたら火の粉が飛んできた

ニコニコ動画のプレミアム会員限定機能を利用可能にするUserScript、ドワンゴに警告され公開停止に | スラド IT [quote font="program" width="auto" id="" source='ニコニコ動画のプレミアム会員限定機能を利用可能にするUserScript、ドワンゴに警告され公開停止に | スラド IT' enable_child_shortcode="" ]これを受け、作者は公開を中止。また、独自に派生版を作成したユーザもGitHub Gistから該当のコードを削除した。ただし、派生版の作者はGitHub上では削除したものの、同一のコードをSnip2Codeでも公開しており、消し忘れなのかこちらは現在も削除されていない。[/quote]

マジかよジーザス!ググったら確かに存在している(2015/10/21時点)。そして消す方法がわからん imgTemp-2015-10-21-20-35-02 確かにここに書いてあるデータは俺がgist.github.comに投稿したデータと等しい。フッターにはgist.githubのリンクもあるから間違いないんだけど、これが消せない。gist.githubは2015/10/14時点で消したはずなのに imgTemp-2015-10-21-20-36-51

会員登録 というか、github認証を使ってログインしたんだけど、俺のデータとして紐付けされていないっぽいんだよね imgTemp-2015-10-21-20-42-26 アカウントページから「あなたのコード一覧」みたいなの選んで消して、自動取得をオフにして、プライベートにして終了 と思っていたんだけど、そもそも自分のコード一覧というページが無いっぽい。プロフィールからSee all snippets by fushiharaというリンクがあるからクリックしたら https://www.snip2code.com/Explore?user=fushihara というユーザー名で検索した結果が出るだけ。んでその一覧に上記のニコニコのコードが入っていない

よく見たら、ニコニコのコードとそれ意外では紐付けされているユーザー情報が違うっぽい 自分のアカウントに紐付けられていて削除等可能なコード imgTemp-2015-10-23-22-42-54 自分のアカウントに紐付けられていなくて削除出来ないコード。ハイパーリンクでクリックできるみたいな見た目だけどクリック出来ない imgTemp-2015-10-23-22-43-01

なんらかの違う扱いはされているんだが、どういう条件でsnip2codeにインポートされるのかが分からない github.gistに投稿された新着コードが勝手にインポートされる訳でもないし、pastebinとか魚拓みたいに誰かがurl指定してアーカイブする機能は無さそうだし 原因がわからんと対策も分からんから、今後もそういう事はあるんだろうな。別にクロールするのも、第三者がインポートする事に文句を言う気は全く無くて、俺がこっそりアップロードしてわざと残しているように見えるUIを止めて欲しい。「このページは作者に関係なく勝手にコピーしました」と書いてくれ

ニコニコ というかドワンゴのケツを舐めたいから言っておくと この残っているスクリプトは俺がわざと残している訳ではない って感じでよろしくお願いしますペロペロ 英語でメッセージ送ってプリーズ消してくれとまで言ったし、消す努力はしたんですよ

このgistを上げる時、最初はオリジナルの作者さんのコードをまんま上げて、差分でオレオレ改造版のコードを上げたんだよ。こうすれば差分が見れるでしょーって理由で んでsnip2codeにコピーされているコードはオレオレ改造版だから、gistを消さずにカラのテキストでコミットしたらそれが反映されたかもしれない。それは勉強できた というか以前からそれやってたんだけど慌てて削除ポチってしまった

にしてもスラドの人のアンテナいい感度してますな。ググったけど、このsnip2codeが出てきたのは嫌儲のスレに1レスだけ しかもレスアンカーも無く完全に埋もれていた つってもスレが乱立した訳でもないから順番に見ていけば確実にキャッチ出来るだろうけどさ