pixivで「いいね」などの危険なシェア系ボタンを表示させない
pixivで表示される「いいね」などのシェア系ボタンは、ちょっと危険だと感じたので、表示させないためのスクリプトを書きました。
ご活用ください。github.com
いろいろ整理した
mups β
photo(Google Keep note art) by sage_solar
生まれ変わるらしい、、
重要なお知らせ
誠に勝手ながら、2015年5月6日をもちまして「otoge.net」のサービス提供を終了させていただきます。
otoge.netは2012年のサービス開始以降、総プレイ回数が9万回を超えるなど、多くの方に遊んでもらうことができました。
otoge.netは学生時に開発したサービスで、個人的な思い入れも深いサービスということもあり、終了させるのは名残惜しいですが、何卒ご理解の程よろしくお願いいたします。
「終了のお知らせ」ページにもちょっと書いてあるけど、自分が学生である2012年くらいから運用していて、MashupAwardsでも受賞できたりと、思い入れの強いサービスとなった。
ログを見ると未だに遊んでくれている人がいたり、結構最近である2014年6月くらいに紹介記事を書いてくれているブログがあったりして、終わらせるのは名残惜しかったけど、思い立ったが吉日ということで、急遽クローズさせた(個人で運用してたサービスなので許してください)。
otoge.netを運用してたVPSは解約して、mupsのサーバに「終了のお知らせ」ページを乗っけて、バーチャルホストさせることにした。
Nginxはバーチャルホストの設定も楽で、改めて良いものだと思った。
あと、今まで書いてきたユーザースクリプトの中で、唯一未だに使っているpixiv用のやつ(作品をソートしたりフィルタリングする)を、今後もメンテしやすくするため、GitHubで管理することにした。github.com
2012年産なので、ちょっとだけリファクタした。
ただのユーザースクリプトだけど、gif画像貼っつけたりしてREADMEもそこそこちゃんと書いた(日本語で)。
pixiv_sk/README.md at master · shikato/pixiv_sk · GitHub
(なんか色々うつってる気もするけど気にしないことにした)
これで、少しだけ身が軽くなったような気がする。
今年のクール別アニメOP/ED BEST
自分が携帯音楽プレーヤーで聴く曲は、基本、その時期に放送しているアニメの気に入ったOP/EDで、購入した曲をクールごとのプレイリスト(2014秋みたいな名前)に突っ込んで作業中等に聞いている。
なので特定のお気に入りアーテイストとかはあまりいない気がする。
ここ最近、少し体調を崩しベッドの上で音楽を聞くくらいしかやることがない時期があり、ずっと上述したクール別プレイリストを聴いていたら、ふとクールごとのBEST OP/EDを決めたくなったので決めてみた。
曲ごとに感想を書こうと努力してみたけど、語彙も文章力も音楽の知識も無いので酷いものとなった。
2014秋
OP
courage / ソードアート・オンラインII
すごく良い。
OPで流れる映像は確か3パターンくらいあるけど、キリトが一切出てこないやつがベスト。
マザーズ・ロザリオ編をある程度まで見た後にOP見ると毎度泣きそうになる。
SAOはマザーズ・ロザリオ編見るまでは普通に面白い良質アニメだと思って見ていたけど、マザーズ・ロザリオ編で急激にハマってしまい、視聴中にゲームのSAOホロウフラグメントが急にやりたくなり、視聴後PS Vitaと共にAmazonで衝動買いした。
Vita衝動買いした回は、キリトが、ユウキとアスナに迫ってくる群衆の中から抜け出し、その群衆の前に立ち塞がる辺りで終わった回。
その一個前の回のユウキとアスナが立ち会う回も良かったし、翌週のボス攻略する回も凄く良かった。
KarafinaのBGMも凄くいい。マザーズ・ロザリオ編でボス戦とか良い所で流れる曲が格好いい。
最終回はまだ見ていない。明日多分見る。
ED
星屑のインターリュード / 天体のメソッド
今までのfhanaの曲の中で一番のお気に入り。
fhanaは毎度良い感じにタイアップしている気がする。
終盤にイントロ流してシームレスにエンディング入るやつが毎度良かった。
2014夏
ED
aLIEz / アルドノア・ゼロ
ウラオモテ・フォーチュン / 月刊少女野崎くん
花雪 / ハナヤマタ
選べなかったので3つで。
aLIEz、初めてEDで流れた時は、歌詞あるんだ、と衝撃を受けた気がする。
そういえばどっちもアルドノア・ゼロが入った。
あと千代ちゃんは可愛かった。
2014春
OP
killy killy JOKER / selector infected WIXOSS
black bullet / ブラック・ブレット
STAND PROUD / ジョジョの奇妙な冒険 スターダストクルセイダース
選べなかったので3つで。
WIXOSSは2期のも良いけど、やっぱり1期のOPが好き。
2014冬
OP
divine intervention / ウィッチクラフトワークス
Be mine! / 世界征服~謀略のズヴィズダー~
JUSTITIA / ウィザード・バリスターズ~弁魔士セシル
選べなかったので3つで。2014冬もOP豊作だった。
セシルは本編そんなに面白くなかった気がするけどOPは良かった(ウィッチとズヴィズダーは本編も面白かった)。
ED
With You / With Me / マギ
ウィッチ☆アクティビティ / ウィッチクラフトワークス
こっちは2つで。
マギ、終盤イントロ流れ出しシームレスEDパターンが毎度良かった気がする。
今年BEST
ED
表裏一体 / HUNTER×HUNTER
何かずっと流れていたのでクール別BESTに入れづらかったけど、今年BEST EDは表裏一体にしたい。
キメラアント編で初めて映像と共に曲が流れた時は鳥肌が立った気がする(初めて聞いたのは映画だった可能性もある)。
ただ、会長選挙編のEDは映像に手抜き感があって残念だった(4人が突っ立てるだけ)。暫定EDかと思ったら最後まであれだった。
さいごに
あんまりBESTにならなかった。
Mashup Awards10で賞をいただきました
Mashup Awards10で、ドワンゴ賞とTINAMI賞をいただきました。
ドワンゴ賞の商品です。Planning Cardsやマグカップなど実用的で嬉しい。
プレゼンターは清水さんで席も隣だったけど、インタビュー記事をちょうど最近読んだりしていて、死ぬほど緊張した。でも話せて良かったです。
「技術的負債」の返済ルールを作る 株式会社ドワンゴ 清水俊博 氏 |IT・Web業界の転職ならDODAエンジニア IT
TINAMI賞の商品は何故かコーヒーセットでしたが実用的で嬉しい。
プレゼンターの方に実際に使ってもらっている画面を見せてもらったりして感激した。
学生のときに取ったやつと合わせてMashup Awardsの盾が3つになった。達成感あります。
印象的だった作品
台風リアルタイム・ウォッチャー:台風情報と「減災リポート」のリアルタイム・マッシュアップ
データの活用っぷりに感動した。1日でつくったらしい。TVでも紹介されてるしすごい。
18. Tetris 3D Modeler - 栗原一貴: Kazutaka Kurihara's Website
3Dプリンタ夢あるけどデータ作るの難しい→じゃあテトリスみたいにやれば簡単に作れるのでは。
みたいな発想が良いです。
一列揃えるとちゃんと消える点も面白かった。
VISTouch on Vimeo
なんか面白いことに使えそう。
あとプレゼン見ていて思ったことは、学生多いし、みんなプレゼンがうまいということ。
特に12歳の子がハキハキと安定感のあるプレゼンしている姿を見て衝撃を受けました(たぶんこの子かな)。自分はプレゼンとかすると周囲に不安感を与えるタイプなので羨ましい。
さいごに
突貫で作ったので完成度はまだまだ低いですが、賞もとれたので、継続開発がんばりたいと思います。
そういえば以下の記事で構成等を説明しています。
RubyとNode.jsでIFTTTみたいなものをつくる - Qiita
PixivSortFilterAddItemが動かなくなっていたので対応した
PixivSortFilterAddItemがいつの間にか動かなくなっていた。
リアルタイム検索で「PixivSortFilterAddItem」と検索してみると、
みたいな感じで、困ってる人がいるようなので、対応した。
SQLiteを使ってAndroid端末内でお手軽に日本語全文検索する
タイトルの通り、SQLiteを使ってAndroid端末内でお手軽に日本語全文検索する方法です。
FTS
SQLiteにはFTSという全文検索用モジュールがサポートされているのでそれを使う。
最新版はFTS4で、Android APIレベル11以上なら標準で使えるようなのでFTS4を使う。
公式ドキュメント
SQLite FTS3 and FTS4 Extensions
N-gram
FTS標準のトークン作成処理はスペース区切りにしか対応していないので、日本語の場合、自分でトークンを作成する必要がある。トークン作成には、お手軽にトークンを作成できるN-gram方式を採用する。
以下が指定した値(N)でN-gram変換するだけのNgramクラス。
/** * N-gramクラス * @author shikato * */ public class Ngram { private Ngram() { } /** * N-gram変換したテキストを返す * @param aText N-gram変換するテキスト * @param aN N * @return N-gram変換されたテキスト */ public static String getNgramText( final String aText, final int aN ) { final StringBuilder ngramText = new StringBuilder(); final int length = aText.length(); if ( length < 1 ) { return ""; } if ( length > aN ) { int roop = length - aN; for ( int i = 0; i < roop; i++ ) { ngramText.append( aText.substring( i, i + aN ) ); ngramText.append( " " ); if ( i == ( roop - 1 ) ) { i++; ngramText.append( aText.substring( i, i + aN ) ); if ( i % aN >= aN ) { i++; ngramText.append( " " ); ngramText.append( aText.substring( i, i + aN ) ); } } } } else { ngramText.append( aText ); } return ngramText.toString(); } }
FTSテーブル作成
FTSテーブルでは値がすべて文字列扱いになってしまうので、実際に使用するときはメインのテーブルと全文検索用のFTSテーブルにわけて使うことが多くなると思う。
以下が上述したように、メインのテーブルと全文検索用のFTSテーブルにわけて作成する例。
CREATE TABLE hoge ( id INTEGER PRIMARY KEY AUTOINCREMENT, text TEXT ) CREATE VIRTUAL TABLE hoge_fts USING fts4( words TEXT )
検索対象テキストをメインテーブルのtextに格納し、検索対象テキストをN-gram変換したものを、FTSテーブルのwordsに格納する。
FTSテーブルを作成すると、docidというAUTO INCREMENTなカラムが自動的に用意されるので、メインテーブルと結合するときに使う。ちなみにdocidはrowidの別名なのでテーブル定義にはない。
あと、FTSでテーブルを作ると、~_contentのような名前のテーブル(Shadow Tables)が5つくらい勝手に作られるけど、普通に使う分にはあまり意識する必要はなさそう。
その辺りの詳細は公式ドキュメントに書いてある。
http://www.sqlite.org/fts3.html#section_9
保存
今回の例ではメインのテーブルとFTSテーブルにわけているので、両方のテーブルに保存する(メインのほうには通常のテキスト、FTSテーブルのほうにはN-gram変換したテキスト)。
※保存するテキストは、ユーザーの入力値になることがほとんどだと思うので、実際の開発時にはプリペアードステートメント等でSQLインジェクション対策する。
INSERT INTO hoge ( text ) VALUES( "hoge" ) INSERT INTO hoge_fts ( words ) VALUES( "ho og ge" )
同様に削除や更新の際も、両方のテーブルに対して実行する。
検索
MATCHを使用する。
SQLは以下のような感じになる。検索キーワードにN-gram変換したテキストを使用する。
※検索キーワードはユーザーの入力値になることがほとんどだと思うので、実際の開発時にはプリペアードステートメント等でSQLインジェクション対策する。
SELECT * FROM hoge h INNER JOIN hoge_fts hf ON h.id = hf.docid WHERE words MATCH "ho og ge"
前方一致だとこんな感じになる。
SELECT * FROM hoge h INNER JOIN hoge_fts hf ON h.id = hf.docid WHERE words MATCH "ho og ge*"
他にも色々な検索方法がある。
http://www.sqlite.org/fts3.html#section_3
パフォーマンス
SQLiteの.timerオプションを使用して測定。 投入したデータは5万件ほど。
普通にLIKE
SELECT count(*) from hoge WHERE text LIKE "%hoge%" CPU Time: user 0.104006 sys 0.240015
FTS メインテーブルとの結合なし
SELECT count(*) from hoge_fts WHERE words MATCH "ho og ge" CPU Time: user 0.000000 sys 0.000000
FTS メインテーブルとの結合あり
SELECT count(*) FROM hoge h INNER JOIN hoge_fts hf ON h.id = hf.docid WHERE words MATCH "ho og ge" CPU Time: user 0.004000 sys 0.000000
FTS 前方一致でメインテーブルとの結合あり
SELECT count(*) FROM hoge h INNER JOIN hoge_fts hf ON h.id = hf.docid WHERE words MATCH "ho og ge*" CPU Time: user 0.004001 sys 0.000000
やっぱりLIKEより速い。
まとめ
LIKEで検索するより速いし、別途ライブラリ等もいらないので、お手軽に端末内で日本語全文検索するときは使うと良いと思う。
さくらインターネットの田中社長
今週を振り返ってみると、さくらインターネットの田中社長に、スケールアウト可能になった、さくらVPSとさくらクラウドの使い分けや、今時の専用サーバの話等を直接聞けたのは、すごく貴重な経験だった気がする。
さくらの専用サーバが申し込み後、最速10分で使えるようになる、という話も驚いたし、クラウドで数はすぐに増やせるようになったけど、DBサーバ等、増やすだけではパフォーマンスが出ない箇所には、化け物のようなスペックの専用サーバ(それでも月5万くらい)を使う事例が増えてきている(さくらクラウドとの複数台構成も容易らしい)、などの話は興味深かった。
それと講演での「ビジネスは感動を得た時に出てくる(田中社長の場合は自分の学内サーバに初めて秋葉原からアクセスできたとき)」みたいな話も面白かった。
あと前評判通り、見た目若い、かつ良い人オーラが出ていたし、話していてサーバ等の技術そのものに対する興味関心のようなものが伝わってきて、非常に好感の持てる人柄だと思った(何か上から目線な書き方になってしまいすみません)。
さくらのサービスは、今後は仕事で使うことは難しそうだけど、少なくとも個人での開発においては、今まで以上にさくらユーザーになりそうだし、レア名刺が増えたので良かった。