概要 先日ふと自分のPCのフィンガープリントを取ってみたところ「IPアドレス」など様々な項目が並ぶ中に「Math.tan」という変な項目を見つけました。 「なぜ三角関数が出てくるの?」と気になって調べてみたところ、**三角関数の値はブラウザやOSの実装により微妙に異なることがあり、特定の式をブラウザに計算させることで利用者を識別する手段になり得る1**という話でした。 面白そうだなと思ったので、本記事ではその手法で実際どの程度までブラウザ/OSを判別できるのか調査してみました。 検証方法 今回は様々な文献12の情報を参考に、以下の式を各OSの各ブラウザに計算させました。 tan(-1e300) cosh(10)(厳密には三角関数の類似ですが) これら以外も10数種類ほど試したのですが、判別に使えたのはこの2つのみでした。 試したOSとバージョンmacOS Catalina (ver.10

この記事は続編です。 前回の記事で、SFC版風来のシレンのROMデータの解析内容を元に乱数がどのようにして生成されているかを解説しています。そちらを読んでからこの記事を読んでいただくと、より内容を理解しやすいかと思います。 前回の記事:SFC版風来のシレンの乱数生成アルゴリズムの話 解析編SFC版風来のシレンの乱数の品質を調べる さて前回の記事でSFC版風来のシレンの乱数生成アルゴリズムが線形帰還シフトレジスタの一種であることが分かりました。 しかし乱数生成アルゴリズムは理解したものの、それによって生成された乱数が妥当な物なのかというのはアルゴリズムを見ただけでは分かりません。 シレンの乱数は偏りやすいと断言できるような目に見えて質が悪いものなのでしょうか。 この項でそれを考察してみたいと思います。 先にお断りしておきますが、本気で定量的・客観的に乱数の品質を検証しようと思うと本格的な統

This tweet is recursive. https://t.co/bZISaPd3Ts— Quine Tweet (@quine_tweet) 2016年9月19日 「このツイートはありません」となっていますが、URL をクリックすれば自分自身に飛べます。 以下、このツイートが生まれるまでの経緯を長々と書きます。 問題設定 そのツイート自身の URL を埋め込んだツイートを作ります。ツイートの URL はツイートをした後でないと決まらないし、ツイート文面を後から更新する手段はない(と思う)ので、単純ですが意外に難しい問題です。 調査 ご存知のように、現在のツイートの URL は次のような形式です。 https://twitter.com/<username>/status/<id>username はそのままなので、id を事前に予測できれば解決です。*1 調べてみるとこの id

ウェブにはSEOの情報が氾濫している。しかし、どれが正しいのかは、いまいちわからない。最近では「良質なコンテンツを提供するのが一番のSEO対策」という論調が主流になっているが、一方でSEOのテクニックがシェアされる様子もまだ見かける。 良質なコンテンツを提供すれば、SEOの対策はしなくてもいいの? 一体、正しいSEOって何? そんな素朴な疑問を、株式会社so.la代表でSEO専門家の辻正浩さんにぶつけてみた。 辻さんは普段からTwitterやブログなどでSEO情報を発信しており、日本でおこなわれる全検索のうち約2.5%は、辻さんが仕事で関わるサイトがクリックされているとのこと。 最近では悪質なSEO業者と熱いバトルを繰り広げたことも記憶に新しい。 そんな“SEOのご意見番”である辻さんの返事は「世の中の99%のサイトは、SEOなんて考えなくてもいいんじゃないでしょうか」というもの。その真意

知性とは何か AlphaGoの初戦で感じたこと Daisy, Daisy! Planted one day...AlphaGo sings a requiem for humanity March 10, 2016 清水 亮 ryo_shimizu 新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。 TweetAlphaGoが人類最強の棋士と目されるイ・セドル9段を初戦で下しました。 このことは、囲碁関係者に大きな衝撃を与えています。 反対にAI関係者にとっては、残念ながら想像通りの結果になったと言えます。AI関係者は、Googleがあそこまで断言するということは当然勝算あってのことだと考える人が多かったように思えます。仮に今回負け越したとしても、善戦すれば、数ヶ月

この話。PHP の mt_rand() は一貫して壊れている(consistently broken)らしい - 唯物是真 @Scaled_WurmPHPのmt_rand()が実装にミスがあることを知ったので、「PHPのコミットログに名前を載せるぞ╭( ・ㅂ・)و」と思ってプルリクを送ったら、一旦マージされたけど、リバートされた。 詳細 https://github.com/php/php-src/pull/1681/files ついでにテストコードも付けたけど、直すべきは1文字だけ。 twistというマクロの定義が1文字間違えている。 loBit(u)ではなくloBit(v)が正しい。 #define twist(m,u,v) (m ^ (mixBits(u,v)>>1) ^ ((uint32_t)(-(int32_t)(loBit(u))) & 0x9908b0dfU)) このマク
The best gamingkeyboards of 2025Here are the best gamingkeyboards you can buy, as chosen by Engadget editors.Microsoft andOpenAI announce the 'nextphase' of their partnershipMicrosoft andOpenAI have issued ajoint statement to say that they have signed a non-binding memorandum of understanding for the "nextphase" of their partnership.
先日、工藤さんがJavaScript向けに作った日本語のコンパクトな分かち書きツール、TinySegmenterをJuliaに移植したTinySegmenter.jlを作りました。 もともとは、PyconJPでjanomeの話を聞いたら居ても立っても居られなくなって、簡単なTinySegmenterを移植したんですが、そしたら思いもよらぬ展開が待っていました。 [2015/10/22 23:38 追記] 計測の問題を @repeatedly さんから指摘いただいたので再計測しました。 パッケージ登録時にMITの先生からツッコミが入るJuliaのパッケージはMETADATA.jlというセントラルなレポジトリで管理されています。 ここに登録されたパッケージはPkg.add("TinySegmenter")とREPLで実行するだけでパッケージが導入できます。*1 ここに登録をしようとした時に、

2015-05-27 waifu2xでアニメをアップコンバートする もう世の中で話題すぎて仕方が無いwaifu2xです(説明はしないので各自ぐぐれ)。 二次元画像を拡大したいと思ったことはありませんか? - デーultraist.hatenablog.com ところでwaifu2xを見て、皆さん思いませんでしたか? waifu2xでSD画質のアニメのアップコンバートしてえ! でもWebアプリだしアニメのアップコンバートなんて…と思ったらGithubでコード公開されてるし、AWSのPublic AMIもあります(北カリフォルニア ami-75f01931)。 自宅でwaifu2xサーバを立てるのもいいですが(その話はまた後日にでも書きますけど)、もうサクッとAWSにg2.2xlargeのスポットインスタンスを立ててしまいましょう。1時間7円くらい、1日170円くらいですよ。 というわけでこの

Python で実装され、その後Java にも移植されたソートアルゴリズムである TimSort が盛大にバグっていることが発見されました。 このバグがどのようにして発生するのかについては、以下のドキュメントを精査して下さい。 TimSort fails with ArrayIndexOutOfBoundsException on worst case long arrays OpenJDK’sjava.utils.Collection.sort() is broken: Thegood, the bad and the worst case どんなことが起こるのか 通常の利用では想定しえない場所でArrayIndexOutOfBoundsExceptionが発生します。 例えば、以下のようなスタックトレースになります。 Exception in thread "main" jav

目次 はじめに Git を使ったことがない方へ 生のデータが見たい方へ Git の全体像 .git の中身 Git オブジェクトデータベース 4種類のオブジェクト リファレンス リファレンスのリファレンス 大きなツリー Git オブジェクトの ID と 中身 ハッシュ関数 SHA1 の簡単な説明 tree とblob オブジェクト tree とblob の参照関係 ルートツリーの ID でツリー全体を識別する commit オブジェクト リファレンスとブランチ ブランチ ブランチ先頭を指すリファレンス HEAD リファレンス detached HEAD 2種類のタグ 一時待避 (stash) インデックス キャッシュとしての役割 マージ Fast-Forward マージ non Fast-Forward マージ rebase reset 2種類のブランチ 各リポジトリが自分のブランチを

誰もが一度はイラっとさせられたであろう文字認証「CAPTCHA」。ユーザがコンピュータで無いことを確認するセキュリティ機能のひとつですが、近年、これを解読することは「本のテキスト化」に協力することと同義になりました。同システムの開発者でクラウドソーシングも発案した起業家、Luis von Ahn(ルイス・フォン・アン)氏が、7億5,000万人が参加するプロジェクトが生まれたキッカケを語ります。(TEDxCMU 2011より) 誰もが一度はイラっとさせられるCAPTCHA(キャプチャ) ルイス・フォン・アン氏:このように、ゆがめられた文字の並びを読んで埋めるタイプのウェブフォームを見たことのある人は何人いますか? これを見て本当にいらいらすると感じた人は何人いますか? はい、すばらしいですね。私がこれを発明しました。私がこれを発明したメンバーの1人です。 (会場笑) これはCAPTCHAと呼
![あの「イラつく文字認証」のおかげで年間250万冊もの本がデジタル化されている - ログミー[o_O]](/image.pl?url=https%3a%2f%2fcdn-ak-scissors.b.st-hatena.com%2fimage%2fsquare%2f8ba18e7ffd334cdf4bc1b04ec39ddafc0c460dcc%2fheight%3d288%3bversion%3d1%3bwidth%3d512%2fhttps%253A%252F%252Fimg.logmi.jp%252Fwp-content%252Fuploads%252F2014%252F11%252Fvon1ec_R.jpg&f=jpg&w=240)
こんにちは。技術部検索グループの原島です。 上の画像は、スマートフォン(ブラウザ版)で見たクックパッドの検索結果ページです。レシピだけでなく、ニュースも表示されていますね。献立や掲示板のスレッドなどが表示されることもあります。クックパッドでは、検索結果ページに表示するコンテンツをクエリなどに応じて最適化しています。最適化は、膨大なログデータと最新の機械学習を用いることで、実現しています。このエントリでは、クックパッドにおけるコンテンツ最適化の裏側を紹介します。 最適化の背景 スマートフォンの普及に伴って、ユーザが利用するプラットフォームはPC からモバイルにシフトしつつあります。クックパッドにおけるモバイル利用者の割合も、ここ 2 年で 10% 以上増加しました。最近では、60% 以上のユーザがモバイルからアクセスしています。 ユーザの利用形態が変化すれば、検索結果ページもその変化に対

[CEDEC 2014]ナムコ作品で見る乱数の歴史。「ゲーム世界を動かすサイコロの正体 〜 往年のナムコタイトルから学ぶ乱数の進化と応用」レポート ライター:箭本進一 神奈川のパシフィコ横浜で行われた,ゲーム開発者向けイベントCEDEC 2014の最終日である2014年9月4日,「ゲーム世界を動かすサイコロの正体 〜 往年のナムコタイトルから学ぶ乱数の進化と応用」という講演が行われた。 登壇したバンダイナムコスタジオ HE技術部 加来量一氏 この講演のユニークな点は,旧ナムコの作品を「乱数」という視点から振り返るということだ。バンダイナムコスタジオ HE技術部のプログラマーである加来量一氏は,旧ナムコの初期作品50本を解析し,それぞれの時代でどのような乱数が使われていたかを特定した。そこから見えてくる乱数技術改良の歴史を見ていくというのが,講義の主旨なのである。 1980年代のナムコアーケ
![[CEDEC 2014]「ゲーム世界を動かすサイコロの正体 〜 往年のナムコタイトルから学ぶ乱数の進化と応用」 - 4Gamer.net](/image.pl?url=https%3a%2f%2fcdn-ak-scissors.b.st-hatena.com%2fimage%2fsquare%2f10648ed5c0d1a42db95e0d3f4eae3942f992f59b%2fheight%3d288%3bversion%3d1%3bwidth%3d512%2fhttps%253A%252F%252Fwww.4gamer.net%252Fgames%252F042%252FG004287%252F20140905040%252FTN%252F001.jpg&f=jpg&w=240)
はじめに 恐らく、プログラマの中で配列内の要素を整列させたりするソートにお世話にならなかった人、というのは余り考えられないのではないでしょうか。しかし、とはいえ、大抵はソートを自前で実装せず、組み込み関数であったり、あるいは何らかのライブラリで済ませることが殆どだと思う。 車輪の再発明というよりも、バグとか、自分が考慮していなかった挙動などを避けるために、自前でソートを組むことは余りないのですが、とはいえ、自分なりにソートを実装して見ると、それがどういう特徴を持ったソートであるか、というのがわかりますし、また、ソートというのはいったいどういう操作で実現されるのかという洞察が深まってくるなあ、という実感があったりする。 なので、今回はあるソート二つについての話を書くのが趣旨です。 最高のアルゴリズムはある、だが最悪のアルゴリズムは何か 一口にソートといったところで、ソート自体にも銀の弾丸があ

クッキーより怖いcanvas fingerprintingって何?迂回方法は?2014.07.28 16:009,463 satomi 問題:ホワイトハウスとYouPornが共通でもってるもの、なーんだ? こたえ:canvas fingerprinting 「canvas fingerprinting(canvasの指紋採取)」というのは、最近大手サイトで採用が広まってる新手のオンライン追跡ツールのことです。クッキーと違って、ユーザー側からは探知もブロックもできないという、とんでもない野郎です。 まさにユーザーの知らぬ間にウェブの閲覧行動がサイトに筒抜け、というマジックミラー状態。その現状をProPublicaが記事にしていますよ。 「canvas fingerprinting」を最初に発見したのはプリンストン大学と英ルーヴェン大学の研究チームです。ここが発表した「The Web Neve
平方数とは、ある整数の平方(=二乗)であるような整数のことを言います。つまり、0,1,4,9,16,...が平方数ということになります。 ところで、与えられた整数が平方数かどうかを判定するにはどうすれば良いでしょうか。与えられた整数の平方根の小数点以下を切り捨て、それを二乗して元の数になるかどうか、というのがすぐ思いつく実装です。 <?php function is_square($n) { $sqrt = floor(sqrt($n)); return ($sqrt*$sqrt == $n); } しかし、平方根の計算は比較的重い処理です。もっと高速化する方法は無いのでしょうか。 多倍長整数演算ライブラリGNU MPには平方数かどうかを判定するmpz_perfect_square_p関数が存在します(PHPでもgmp_perfect_square関数として利用できます)。本稿ではこの実装
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く