投稿

2014の投稿を表示しています

Intel Dual Band Wireless-AC 7260 でスリープ解除後 Wi-Fi が繋がらなくなる

イメージ
スリープ解除後 Wi-Fi が繋がらなくなって、再度スリープ、スリープ解除するか、デバイスの有効無効を切り替えないと復帰しない不具合が、 Intel Dual Band Wireless-AC 7260 (Intel® PROSet/Wireless Software and Drivers 17.1) と NEC Aterm WF800HP (ファームウェア Ver1.0.16) の組み合わせで発生していました。 Intel 側も相互運用性に関する問題を認識しているらしく、 この解説 の通りデバイスの詳細設定で、省電力に関する機能 U-APSD 対応を無効とすることで繋がらなくなる現象は 発生しなくなりました。 直っていませんでした。以下の追記のご参照をお願いします。 2015/01/22 追記 U-APSD 無効の設定でもしばらく使っていると切れたままになる現象は起こったので、この機能は原因ではなかったようです。 ドライバのバージョンを 17.13.11 に更新して、設定は U-APSD も含めて初期状態で、2週間ほどスリープを駆使しながら使っているのですがまだ一度も発生していないので、ドライバの更新をお勧めします。 リンク Intel® Wi-Fi Products — TechNote: Access Point Interoperability Issue with uAPSD Windows 8.1* 用インテル® PROSet/Wireless ソフトウェア - インテル® ダウンロード・センター

CloudFlare: サブドメイン毎に Flexible, Full SSL を設定する

CloudFlare の SSL 設定の種類 ( What do the SSL options (Off, Flexible SSL, Full SSL, Full SSL Strict) mean? ) の設定について、ドメイン全体に適用されるグローバルな設定だけでは不十分なときは、Page rules の SSL から個別に Flexible SSL にするか Full SSL にするかなどの設定を行うことが出来ます。 設定画面へは My websites から、右の歯車を押して、Page rules で行けます。対象とするパスは www.example.com/* のように入力すれば OK みたいです。 Page rules の設定は Free plan だとドメインあたり3個までなので、足りない場合は Pro plan に移行する必要があります。

.htaccess を使って利用可能な Apache モジュールの一覧を取得する

共有サーバーなど、httpd.conf や mod_info の server-info を確認できない状況で、組み込まれているモジュールを確認するには、IfModule と Header append を組み合わせると、指定した中で利用可能なモジュールをレスポンスヘッダー X-Module に出力することができます。 # .htaccess <IfModule mod_deflate.c> Header append X-Module mod_deflate </IfModule> <IfModule mod_expires.c> Header append X-Module mod_expires </IfModule> <IfModule mod_rewrite.c> Header append X-Module mod_rewrite </IfModule> <IfModule mod_ratelimit.c> Header append X-Module mod_ratelimit </IfModule> <IfModule mod_setenvif.c> Header append X-Module mod_setenvif </IfModule>

Chrome でダウンロードしたファイル名の一部がハイフンになる

Google Chrome で Content-Disposition ヘッダでファイル名に時刻 (12:34:56) のような文字列を入れてダウンロードするとなぜか勝手に 12-34-56 のようにハイフンになってしまう理由が良く分からなかったのですが、Windows ではそもそもファイル名にコロンは使えないので、安全のため全プラットフォームでファイル名にコロンを含む文字列を設定しないようになっているからみたいです。 変換対象の文字一覧は、 filename_util_unsafe.cc の illegal_characters に入っていて、変換先がハイフンになる理由は、 filename_util_internal.cc の GetSuggestedFilenameImpl でコールバック関数 replace_illegal_characters_callback を第二引数を '-' として呼び出しているからのようです。 ReplaceIllegalCharactersInPath の使い方は変換先を ' ' にしたり '_' にしたりするバリエーションがあったので、必ずしもハイフンに変換されるという訳ではないみたいです。 リンク https://chromium.googlesource.com/chromium/src.git/+/39.0.2171.95/net/base/filename_util_unsafe.cc https://chromium.googlesource.com/chromium/src.git/+/39.0.2171.95/net/base/filename_util_internal.cc

Cocos2d-x で dlopen failed: cannot locate symbol "rand"

EABI は正しいのに Cocos2d-x v3 のアプリが立ち上がらずに即座にクラッシュする場合、ログに dlopen failed: cannot locate symbol "rand" が出ていないかを確認してみてください。 これはどうやら NDK が Android 5.0 (Lollipop) 64bit でしか動かないバイナリを作ってしまっているのが原因のようで、Cocos2d-x で公式に推薦されている Android NDK r9d を使うと大丈夫でした。 リンク Issue 168 - android-developer-preview - libc removed issetugid - A public project for reporting issues with Android Developer Preview releases - Google Project Hosting NDK r9d url - Compiling and linking error when using NDK r10 to build cocos2d-x v3.2 | Cocos2d-x

CloudFlare: 自動スクリプト挿入を止める方法

イメージ
無料で使える Universal SSL がどんな仕組みなのか気になったので、最近 CloudFlare を試しているのですが、初期状態でなぜか全ページに cloudflare.min.js が head 内に挿入されるのが気になったので、入らないようにする設定について調べてみました。 CloudFlare Apps で最初から有効になっているものが2つあって、ScrapeShield の E-mail obfuscation と SmartErrors で、両方を Off にするとスクリプトは入らなくなりました。上手く消えない場合は何度か On, Off を繰り返すか、Purge Cache するか、ページを Ctrl + Reload すると良かったです。

ISUCON4 に挑戦して予選敗退しました

アプリの実装は Node.js を選択、データストアは MySQL のままで、login_log を ban_ip, ban_user, last_login の3つのテーブルに分割して作り直してみましたがいまいちスコアを伸ばすことができず (14629) 予選敗退しました。 途中 /report の不整合が報告される問題が起こりましたが、これは login_log の7万件の初期データが反映されている必要があることに気づかなくて少し手間取りました。 マルチプロセス化のセッション共有方法は memcached、ローカルポート枯渇は sysctl.conf を設定、nginx の接続数上限は設定の変更で対応しました。 とても楽しいイベントを開催していただいた運営の方々にはとても感謝します。また挑戦しようと思います。 コード hidekiy/isucon4 - GitHub

Uptime Robot API を使って監視設定を一括更新する

Uptime Robot という無料で 50サイトまで死活監視してくれるサービスについて、監視設定を一括更新するには以下のように API を使うと簡単にできます。 requests ライブラリを使用しているので事前に pip install requests が必要です。 import requests urlBase = 'https://api.uptimerobot.com' baseParams = { 'apiKey': 'u123123-ffffffffffffffffffffffffff', 'format': 'json', 'noJsonCallback': 1, } # alert contact id を取得します for alertcontact in requests.get(urlBase + '/getAlertContacts', params=baseParams).json()['alertcontacts']['alertcontact']: print alertcontact['id'] # 全監視設定を更新します for monitor in requests.get(urlBase + '/getMonitors', params=baseParams).json()['monitors']['monitor']: print monitor['id'], requests.get(urlBase + '/editMonitor', params=dict(baseParams, **{ 'monitorID': monitor['id'], 'monitorAlertContacts': '123-456', # ハイフン区切り 'monitorInterval': 5, })).json()

映画「STAND BY ME ドラえもん」を見ました

レイトレーシング による正確な光の表現の涙、ドラえもんの鈴、ドラえもんボディの光沢感の違う素材は技術の進歩を感じる。タイムマシンの中の表現、のび太の机のデスクライトのシェードが透ける表現も良かったと思う。 鍵盤ハーモニカのケースの色合いの違いはとても良い。一方でドラえもん登場シーンでは量が正確に揃いすぎているお茶が出てきて笑った。 しつこく見せつけられるトヨタ。のび太の車のロゴ、未来の街に看板が2つ (TOYOTA, FUN TO DRIVE, AGAIN.)、一方ヒミツ道具は操作盤が白地に黄緑の光で、角が丸っこい感じが何となく Panasonic 感がするものが多かった。看板も1つ出ていた (Panasonic) 相変わらずのび太の車はのび太が運転していたし、脈拍数低下してきても音声アラートを鳴らすだけでオーナーを見殺しにするスマートウォッチは何も進歩しておらず、 ココセコム の方がずっと先を行っていると感じた。 序盤は、好奇心ではなくそれぞれ恐怖にドライブされているドラえもんとのび太 (仕込まれたプログラムに違反すると電撃、このままでは就職できないぞ) にはクリエイティビティを感じないし見ていて辛かった。 中盤以降は、のび太の、人のことを思いやる気持ち、というのが引き出されていて良かったと思う。 映画「STAND BY ME ドラえもん」公式サイト

StatusCake API を使って監視設定を一括更新する

StatusCake とは基本無料でサイト数の制限なく Web サイトの死活監視を行えるとても便利なサービスです。監視設定は管理画面より一つづつ設定を更新することは可能なのですが、複数の監視設定の変更を一度に行う一括更新機能は無いようなので、 StatusCake API を使って変更を行ってみました。 API Key はアカウント情報のページより取得できます。Username はログイン時のユーザー名を入力してください。以下のサンプルコードは Python で requests ライブラリ を使った場合の例です。動作させるには pip install requests を実行してライブラリを追加してみてください。 import requests urlBase = 'https://www.statuscake.com/API' authHeaders = {'API':'APIKEY', 'Username':'USERNAME'} # 各テストをすべて更新する例 for test in requests.get(urlBase + '/Tests', headers=authHeaders).json(): print test['TestID'], requests.put(urlBase + '/Tests/Update', headers=authHeaders, data={ 'TestID': test['TestID'], 'Confirmation': 3, 'TriggerRate': 1, 'CheckRate': 300, }).json() # テスト詳細の取得 requests.get(urlBase + '/Tests/Details', params={'TestID': 123123}, headers=authHeaders).json() # コンタクトグループ一覧を取得 requests.

[windows] ハードディスクの内容を完全に消去する

Windows Vista 以降では、OS 標準のフォーマットツールで、クイックでない完全なフォーマットを行うと、 Windows Vista の format コマンドの動作の変更 の通り、ゼロフィルを行うように仕様が変更されたので、GUI/CUI で通常のフォーマットを行えばそれで良いです。 考慮すべきこととしては、通常の方法以外でデータが読み取られる可能性が考えられます。バッドセクタになってしまった場所の機密情報を HDD のコントローラーを操作して読み取ったり、 磁気力顕微鏡 を使ってプラッタの残留磁気を読み取られる可能性を考慮しないなら、消去方法は1回のゼロフィルで十分実用的と思います。 Windows XP 以降をお使いの場合は、diskpart の clean all コマンドを使うとディスク全域へのゼロフィルを行うことが出来ます。具体的な手順は以下のようにすれば OK です。 diskpart を管理権限で実行 list disk select disk 123 # 消去対象を選択する detail disk # 確認 clean all OS のディスクを消去したいなど、OS を使わずにディスクを抹消したい場合や、1回のゼロフィルではなく政府機関認定の消去シーケンスを実行したい場合は、 DBAN (Darik's Boot And Nuke) を使えば良いです。 DBAN の無人モードは全ディスクを消去する機能で、あるディスクのみ消去するときはインタラクティブモードを使います。消してはいけないディスクがある場合、念のため BIOS/UEFI で ATA ポートを Disable にしておくと良いです。 本当にディスクが消去されているのかを目視確認するには、ディスクをローレベルで見ると良いです。Windows の場合は HxD - Freeware Hex Editor and Disk Editor などで確認できます。 SSD を消去したい場合は、製造元の提供するツールを用いて消去を行うと早く完全な消去が行えると思います。具体的には、Intel SSD Toolbox, Samsung Magician Software, OCZ Toolbox などに存在する、Secure Erase 機能が該当しま

Google Tag Manager を使って JavaScript エラーを収集する

Google Tag Manager は単にアクセス解析のタグを配信するだけでも、サイト自身にトラッキング ID などを直接埋め込まずに Tag Manager 管理画面から誰でも変更可能な状態に出来てとても便利です。 今回はさらにエラーリスナータグと、ユニバーサルアナリティクスのイベントトラッキングを組み合わせることで、サイトに変更を加えることなく、サイト上で発生したエラーを Google Analytics のイベントとして収集する方法を考えてみます。 設定方法 まず、エラーリスナータグを全ページに配信するように設定します。 次に、エラーリスナータグの発生させたイベントをユニバーサルアナリティクス (トラッキングタイプ=イベント) を使って報告したいのですが、エラー情報を受け渡す方法が一見したところ良く分かりません。色々触ってみたところ、受け渡し方法は、マクロを経由してデータレイヤ変数を引き渡せば良いみたいです。 こちらのヘルプ JavaScript エラー リスナー - イベント リスナー - Tag Manager ヘルプ に書かれている通り、データレイヤ変数が設定されるので、以下のようなマクロをまず設定します。 マクロ名 dataLayer gtm.errorLineNumber マクロのタイプ データ レイヤー変数 データ レイヤー変数名 gtm.errorLineNumber データ レイヤーのバージョン バージョン2 このようなマクロを使って、以下のようなイベントトラッカーを設定します。 配信条件 {{event}} が gtm.pageError に等しい タグの種類 ユニバーサルアナリティクス トラッキング タイプ イベント イベント トラッキングのパラメータ カテゴリ gtm 操作 {{event}} ラベル {{dataLayer gtm.errorUrl}}:{{dataLayer gtm.errorLineNumber}}: {{dataLayer gtm.errorMessage}} 値 (空欄) 非インタラクション ヒット True レポートの見方 エラー統計情報は、レポートで、行動 > イベント > 上位のイベント > イベントカテ

[java] Lombok と AspectJ を組み合わせて使う

Lombok はリフレクションなどは使用せず、コンパイル時にゲッターやセッター、ロガー、toString、hashCode, equals など自動生成出来そうなものを生成してくれる大変便利なライブラリです。これと、 AspectJ を組み合わせようとすると、厄介な問題が発生したのでメモしておきます。 まず、よく使用されているらしい aspectj-maven-plugin を使おうとすると、ソースコードに対する weaving は Lombok が処理する前のコードをコンパイルして weaving しようとして、コンパイルに失敗しました。そこで処理対象を Java バイトコード (.class) に変更しようとして、 この方法 を見つけました。頑張れば出来そうな気はしますが spring-aspects を使うプロジェクトでまだ上手くビルド出来ていません。 次に見つけた、 jcabi-maven-plugin の ajc ゴール を使う方法は、特に何も追加の設定をすることなく、Lombok 経由で作られた .class に対して weaving を行ってくれました。この組み合わせが良いと思います。 <!-- project > build > plugins --> <plugin> <groupId>com.jcabi</groupId> <artifactId>jcabi-maven-plugin</artifactId> <version>0.9.3</version> <executions> <execution> <goals> <goal>ajc</goal> </goals> </execution> </executions> </plugin> Spring Framework + AspectJ 少し蛇足ですが、 @Transactional , @Scheduled , @Async , @Cacheable を使うには、m

[android] 定期的に位置情報を取得するアプリ

Android 4.2 にて、GPS 有効の状態で、バックグランド時も定期的に詳細な位置情報を取得するという動きをするアプリが1つでも存在すると、電池がどんどん無くなるので、この現象が起こりうるアプリについてメモしておきます。 新しくインストールしたアプリが原因で、この不可解な電池消費が起こり得ることが心配な方は、高精度の位置情報が必要な時以外は GPS 無効にしておくのが良いと思います。 Google の現在地送信機能 Path の近所機能 Path Talk の Ambient Status の Location 自動更新機能 Facebook の近所通知機能 (過去存在したが最新バージョンでは削除されているようです) また、このアプリを使うと、どのアプリのせいでスリープ状態が解除されているか分かって大変便利です。 Wakelock Detector

Google Analytics でサイトの速度サンプルレートを設定する

Google Analytics にはサイトの速度を計測する仕組み (レポート > 行動 > サイトの速度 を参照) が存在するのですが、デフォルトのサンプリングレートが 1% になっているので、アクセスの少ないページの情報が少なくて寂しいです。そこで、全アクセスについて計測対象とするように、サンプリングレートを 100% とするには、以下のようにすれば良いです。 新しい方の Universal Analytics (analytics.js) を使用している場合以下のようにパラメータ siteSpeedSampleRate を与えます。 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); // こっちは削除 // ga('create', 'UA-XXXX-Y', 'auto'); ga('create', 'UA-XXXX-Y', 'auto', {'siteSpeedSampleRate': 100}); ga('send', 'pageview'); 古い方の ga.js を使用している場合は以下のように設定用メソッド _setSiteSpeedSampleRate を呼び出します。 var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); // 次の行を追加

[Android] Facebook, Twitter アプリのベータテスターになる方法

ベータテスタープログラムに参加して Facebook , Twitter アプリの最新版を試してみてはいかがでしょうか? 多少の不完全さ (ローカライズの不備、便利なのか良く分からない機能など?) を受け入れることで、正式版を使っている人より1か月 (体感値) ほど先を行くことが出来ます。また、UI の変更などもいち早く察知することができ、アプリ開発者でなくとも興味のある方もいらっしゃるのではないかと思います。 Facebook こちらのグループに参加する: Facebook for Android Beta Testers 「自分の表示名」の欄は何でもよいので入れる必要があります。あとで変更も可能です。 こちらで「テスターになる」を押す: Android アプリのテスト - Google Play Twitter こちらのグループに参加する: Twitter for Android Experiment Facebook の場合と同様ですが、加えて Google+ プロフィールでの参加はできない設定のようです。 こちらで「テスターになる」を押す: Android アプリのテスト - Google Play 補足 「テスターになる」のページではテスターをやめることも可能です。ダウングレードは行われないので、元に戻すにはアンインストール、再インストールを行えばよいです。 テスター設定は端末単位ではなく同一の Google アカウントすべてに影響します。現行リリースバージョンと比較するためには別の Google アカウントを用意する必要があります。 モバイル版 Google グループ はエラーが適切に表示されない (バリデーションエラーが全て500エラーと表示されるなど) 気がするので PC 版を使うことを推奨します。 リンク Android用Facebookのベータプログラム Twitter for Android experiment agreement - 利用規約

静的ファイルの配信を Google Cloud Storage に移行しました

イメージ
ブログの静的ファイルの配信を Amazon S3 + CloudFront の構成から、 Google Cloud Storage へ移行してみました。Google Cloud Storage の方は単体で CDN 付なのでオブジェクトの ACL を一般公開設定にするだけで CDN 部分の設定が不要なのが便利です。 具体的には、Cloud Storage のコンソールで配信したいドメイン名でバケットを作成し、CNAME を c.storage.googleapis.com に向ければよいです。ドットを含む名前でバケットを作成する際は、それがドメインの所有権の確認が済んでいるドメイン以下である必要があるみたいです。 Bucket and Object Naming Guidelines - Google Cloud Storage 準備 Web UI はありますが細かい設定をしようとすると現時点では1ファイルずつしか設定できないので、速やかにCLIツールをインストールすることをお勧めします。 使用するコマンドは gsutil (Google Storage Util?) で、これのみインストールする方法もありますが gcloud コマンドからインストールすると自動更新対象になって良いと思います。gcloud コマンドのインストールは、 Google Cloud SDK Quick Start で、インストール中にお勧めされるがままに進めると自動で gsutil も使用可能になると思います。 コマンド集 # バケット一覧 gsutil ls # ヘルプ gsutil help cp # ファイルをアップロード gsutil cp SRC DEST # ディレクトリをアップロード gsutil cp -r SRC_DIR DEST # 今回アップロード時に使ったコマンド gsutil -h "Cache-Control: public,max-age=31536000" cp -a public-read -z js,css,txt,html -r SRC_DIR gs://static.hidekiy.com/1/ setmeta が遅い オブジェクトの新規作成 cp に比べてメタデータ (HTTP ヘッダ

Google Cloud DNS を使ってみました

イメージ
Google が 2014/3/25 発表した Google Cloud DNS を個人用ドメイン hidekiy.com で使い始めてみました。値段も AWS に比べて少し安く設定されているみたいです。 2014/5/11 時点 Amazon Web Services 0.50 USD(ホストゾーンごと)/月 – 最初の25のホストゾーン 0.10 USD(ホストゾーンごと)/月 – それ以上のホストゾーン 0.500 USD(100万クエリごと)-最初の10億クエリ/月 0.250 USD(100万クエリごと)-10億クエリ以上/月 Google Cloud Platform Managed Zones: 0-25 $0.20 per managed zone per month Managed Zones: 25+ $0.10 per managed zone per month for each additional zone after 25. Queries: 0-1 billion $0.40 per million queries. Queries: over 1 billion $0.20 per million queries per month. AWS Route 53 の SLA (Service Level Agreement) は 100% Available なことで有名ですが、先日の以下の件について、何ら公式発表はなく、何も起こっていないかのように処理されているようなので、個人的に AWS の極東地域用の IP エニーキャストの運用についてちょっとした疑問が生じています。 うちの状況証拠的にはRoute53に何かあったように見える。サービス自身のDNSに使ってなくてもS3やら各コンポーネント間通信で名前解決に依存するから、AWS使ってる以上影響避けづらい罠 — fujiwara (@fujiwara) December 23, 2013 手順 公式ドキュメント Getting started with Google Cloud DNS の通りで問題なく使えたので是非チェックしてみてください。gcloud コマンドも大変良くできていて、ログインはブラウザで認可ボタンを押すだけで済みます。 コマ