サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
参議院選挙2025
qiita.com/hnw
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Google App Engine Standard Environment(昔からある方のGAE環境)で使われているコンテナ技術がBorgと呼ばれるGoogle独自の実装である、というのは既に公開情報になっています1。一方で、その上でどんなバイナリが動くのか、どのlibcが採用されているか、などの情報は意外と表に出てきていません。今回その正体らしきものが見えた気がするので紹介します。 推測:GAE Standard Environmentのサンドボックス環境はNaClである 根拠らしきものは後で示しますが、GAE Standard E
Google Cloud Datastoreは一般的なRDBMSに比べると使えるクエリの柔軟性がありません。特にGAE初心者が困惑する点の一つが、SQLのCOUNT関数相当の機能が用意されていないことです。 「正確な件数なんて大抵の場合不要な情報だろう」というのがGoogleの中の人の考えなのかもしれません。実際、GoogleのプロダクトはGoogle検索にせよGmailにせよ件数表示が適当なものが多い気がします。その方針を貫き通せるならそれが一番いいような気もしますよね。 とはいえ、Datastoreを使っていてCOUNT関数が欲しくなるときもあるでしょう。できるだけ労力をかけず、かつできるだけGoogleさんにお金を払わずにDatastoreクエリの件数を取る方法について調べてみました。 統計用のkindを利用する 特定のkindのおおよその総件数を知りたい場合、Datastoreの統
これによれば、キーを明示的に指定した検索と祖先指定ありの検索は常に最新の結果が取得できる(=強整合性)ことがわかります。それ以外の通常のクエリは最初に紹介したように最新の結果が得られるとは限りません。 いま格納したデータが検索できない状況を観測してみる しかし、趣味プログラマがGAEで遊んでいる程度の範囲だと結果整合性による影響の実感はないかもしれません。そこで、Datastoreに登録した直後に同じデータが検索できるかどうか、次の4つの場合について実験してみました。これらは上の表の①〜④に対応しています。 通常クエリ datastore.NewQuery("testkind").Filter("name =", uniqueName) プロジェクションクエリ datastore.NewQuery("testkind").Project("value").Filter("name =",
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
去る12/1(日本時間12/2)にPHP 7.1.0が無事リリースされましたね!みなさんビルドしてみましたか? そんな中、PHP Classesの記事「PHP Performance Evolution 2016 from PHP 5, PHP 7.0, PHP 7.1 and PHP 8/Next」にPHP 7.0から7.1で結構な性能改善があったと書いてあったので、追試してみたら本当だったという話を紹介します。 記事の概要 上記の記事ではPHP 5.6→7.0での性能改善が大きかったこと、7.0→7.1でもかなりの性能改善があったこと、PHP 8.0になるであろうJITコンパイル実装も現時点でかなり速いことなどが紹介されています。 このうち1番目と3番目は既に知られている内容だと思いますが、2番目は筆者は初耳だったので、手元の環境で確かめてみました。 ベンチマーク(OPcacheなし)
PHPのstatキャッシュ PHPにはCurrentStatFileという内部管理用の変数があり、直前のstatシステムコールの結果を1件だけ覚えています。これはたとえば次のような状況で使われます。 <?php mkdir("foo"); var_dump(is_dir("foo")); // bool(true) var_dump(is_dir("foo")); // bool(true) パッと見ではわかりませんが、実は上記プログラムのis_dir()の内部処理は1回目と2回目とで異なっています。1回目は真面目にstatシステムコールを呼んでfooがディレクトリかどうかOSに問い合わせているのですが、2回目の呼び出しではシステムコールを呼ばず、直前のシステムコールが返した値を使い回すという挙動になっています。本稿ではこのキャッシュのことをstatキャッシュと呼ぶことにします。 以下の関
Travis CIやCircleCIのテストを全部パスしてからgit pushしたいけど、git pushしないとCIが動かない、どうしたらいいんだ?とお悩みの方はいらっしゃいませんか?実は、履歴を汚さずにCIする方法があるんです。手元のcommitを本来のブランチではなく一時的な別ブランチにpushすればいいんです。 Travis CIやCircleCIでは特に設定しない限り全ブランチのpushに対してCIが走るので、別ブランチへのpushでもテスト結果を確認することができます。無事にテストをパスしたら改めて本来のブランチにpushすれば良いでしょう。 以下に例を示します。たとえばmasterブランチにcommitしたけどまだpushしていない状況としましょう。ここで次のようにすればローカルのmasterブランチをリモートの新たなブランチにpushすることができます。
Docker imageは数MBから数百MBほどの大きさになることが多いかと思います。アップロードしたイメージをDocker Hubからダウンロードする場合、どのような経路になるのでしょうか。 「どっかのCDNを使ってるんでしょ?Dockerだけに。」「」 気になったのでちょっと調べてみました。 docker pull中の通信を見る docker pull中にWiresharkを起動して怪しい通信を探したところ、54.192.233.29:443との通信がイメージのダウンロードに対応しているようです。
下記PHP Internals MLでの議論によれば、今後「Zend Signals」がデフォルトで有効になる予定です。少なくとも7.1.0beta2時点では有効になっており、特に問題が見つからなければこのままリリースされるはずです。 [PHP-DEV] Enable Zend Signals by Default で、Zend Signalsって何? 「Zend Signals」または「Zend Signal Handling」というのはZend Engineの内部的なシグナルハンドリングの仕組みです。PHP言語の世界に新たな関数を追加するようなものではありません。 この有効・無効はphpinfo()で確認することができます。 先ほど紹介したML上での議論によれば、ざっくり次のような話のようです(かなり端折ってます)。 Dmitry「Zend Signalsを有効にすればOPcacheの
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 2010年以前発売のマザボで最近の大容量HDDを使おう、という話題を紹介します。 古いマシン+新しいHDDって何が怖いんだっけ? 自作PC知識が10年くらい止まっている人(私です)は初耳かもしれませんが、マザーボードのブート用ファームウェアは2010年頃から「UEFI」という規格が採用されており、昔から使われていた「BIOS」はほぼ死滅している状況です。 また、HDD市場に3TB超えの製品が投入されはじめたのも同時期で、当時は大容量HDDとBIOSの相性問題が話題になっていました。具体的には、古いマザーボードで3TB超えのHDDを起動デ
(2016/7/26 9:15)タイトルを変更して所感などを追記しました PHPのソースコードを眺めていたところ、PHP7からstrposやstrstrの内部実装が変更されており、高速「っぽい」文字列マッチングアルゴリズムが導入されていることに気づきました。 具体的には、Zend/zend_operators.hにあるzend_memnstrの実装が変更されており、検索文字列が3バイト以上かつ検索対象の文字列が1024バイト以上の場合にSunday algorithmで文字列マッチングを行います。 Sunday algorithmとは アルゴリズムの教科書にも出てくる文字列マッチングアルゴリズムとしてBM法(Boyer-Moore algorithm)がありますが、Sunday algorithmはBM法の派生アルゴリズムの一つです。 Sunday algorithm このアルゴリズムの概
(2016/12/06追記)本稿の内容を勝手にやってくれるPull Requestがmergeされたので、下記のような苦労は過去のものになりました。「MacOSX上でphp-buildするときの苦労が減った話」も合わせてご確認ください。 「Mac OS X El CapitanからOpenSSLのヘッダファイルが消えた話」で紹介したように、Mac OS X El Capitanの/usr以下のOpenSSLは0.9.8系かつヘッダファイルがないので、この環境でphp-buildでPHPをビルドしようと思ってもコンパイル中に死にます。 /var/tmp/php-build/source/7.0.6/ext/date/php_date.c:3756:5: note: use function 'llabs' instead abs((utc_offset % 60))); ^~~ llabs
CIサービスを提供している会社ってたくさんありますよね。機能比較も大事ですけど、各企業の継続性や今後の機能追加意欲なども気になったので、資金調達に成功している会社を調べてみました。 以下のリスト中、Travis CI以外の4社は400万〜2800万ドルの出資を獲得しています。特に直近で資金調達ができているCodeshipとWerckerはサーバ・インフラ系の投資及び人員増強にお金が使えそうです。(追記:と思っていたらCircleCIが巨額の資金調達を行ったというニュースが!資金面でもCircleCIが一歩リードといったところでしょうか) 一方で、Travis CIは株式での資金調達なしでここまで来ているんですね。現状の知名度では一人勝ちですし、有料プランも強気の価格設定なので、既に黒字化できているのかもしれません。外部出資なしでイグジットできたらすごいですね。 Travis CI 社員数:
「hotkeys - What's the best prefix/escape sequence for screen or tmux? - Super User」が面白かったのでザックリ紹介します。 回答は人気順です。当然ですけど、Emacs派とVim派が同時に納得する解は少ないですね。 screenではCtrl+A、tmuxではCtrl+Bがデフォルトのコマンドプレフィックスキーになっている。しかし、どちらも他のエディタやシェルで使われているキーストロークだ。他のプログラムと衝突しないオススメのキーを教えてほしい。 Ctrl+O 「Emacsユーザーには良い選択だと思う」 「VimだとCtrl+Oはよく使うからダメだ、VimユーザーにはCtrl+Jがオススメだ」 「押すのに両手が必要だからイマイチだ」 Ctrl+\ 「キーボード上で打ちやすい位置にあればオススメ、滅多に使わないはずだ
整数で値をひとつ読み込み、それを半径とする円の面積を求めて表示するプログラムを作成しなさい。 円周率は3.14とし、計算結果は、小数第2位を四捨五入して小数第一位まで表示すること。 知恵袋方面に上記のプログラムをPHPで書きたい人がいるという噂を聞きました。世の中にはPHPの宿題が出る学校があったりするのかもしれません。PHPなら任せろー、というわけでPHPのLua拡張を利用して書いてみましょう。LuaもLua拡張も初心者ですが、がんばります! まず手元のPHPのバージョンを確認します。今回はPHP 7.0.4を使います。 $ php -v PHP 7.0.4 (cli) (built: Mar 9 2016 16:14:46) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1
AWS SDKを利用してプログラミングをする際、クレデンシャル情報(アクセスキーとシークレットキー)をハードコードしたりGitHubにpushしたりしちゃダメよ、というのは当然だと思うんですが、じゃあどこに格納しておくのが正解なんだっけ?と悩んだのでまとめておきます。 検索の優先順位について AWS SDKを使ったプログラム中でアクセスキーなどが明示的に指定されていない場合、クレデンシャル情報は次の優先順位で検索されます。 環境変数AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEY(.NET SDK以外) 設定ファイル~/.aws/credentials (Linux/Mac)または%USERPROFILE%\.aws\credentials (Windows) SDKごとの設定ファイル(後方互換性のため) SDKストア(.NET SDKのみ) (コードがEC2
SipHashとは 従来、プログラミング言語の連想配列に用いられるハッシュ関数は十分シンプル(=高速)かつ通常の利用で衝突しにくい関数が利用されていました。多くのプログラミング言語ではDJBX33AやDJBX33Xが使われていたようです。 しかし、HashDoSという意図的にハッシュの衝突を起こすような攻撃が問題視されて紆余曲折あった後、現在多くの言語の連想配列で利用されているハッシュ関数がSipHashです。 HashDoSを防ぐには暗号論的ハッシュ関数でないといけないようで、かつ連想配列のような用途では速度も重要なのでこのような新たなハッシュ関数が開発されたようですね。詳しくはリンク先を参照のこと。 SipHash: a fast short-input PRF SipHashとAdvanced Hash Flooding - 不意になにかを残すブログ Hash-flooding Do
GitHubで複数アカウントを作ってもいいのかを調べたところ、利用規約にこんな一文を見つけました。 One person or legal entity may not maintain more than one free account, and one machine user account that is used exclusively for performing automated tasks. (引用元:GitHub Terms of Service - User Documentation) 以下、拙訳。 いち個人や法人は1つより多くの無料アカウントを維持することはできません。また、自動化タスクの実行のみに使えるマシンユーザーアカウントも1つより多く持つことはできません。 ちょっと意外な気もしますが、個人がGitHubに無料アカウントを2アカウント以上作成すると厳密には
タイトルの通り、一部の人にだけ便利なPHP情報をご紹介します。 ZTSとは ZTS (Zend Thread Safe) は、マルチスレッド環境に対応するためのPHPの機構です。 マルチスレッド環境では、同じメモリ領域を複数のスレッドが共有します。複数のスレッドが同時に一つのリソース(たとえばグローバル変数)を読み書きする可能性があるので、シングルスレッド環境とは異なるプログラミングが必要になります。マルチスレッド環境で安全に動くようなプログラムのことをスレッドセーフと呼びます。 つまり、ZTSというのはPHPのスレッドセーフ実装ということになります。 とはいえ、PHPはシングルスレッド環境で動かす方が一般的です。LinuxやMacOSXなど、多くの環境のPHPがNTS (Non Thread Safe) で動作しているはずです。ZTS動作が必要なのはWindows+IIS環境くらいでしょ
DS18B20(デジタル温度センサー)を買ったのでArduinoで動かしてみました。これは1-Wireインターフェースで接続する電子部品です。 DS18B20 公式データシート (PDF) その和訳 準備 まず、下記2つのライブラリをインストールします。 PaulStoffregen/OneWire milesburton/Arduino-Temperature-Control-Library 前者はTeensy(Arduinoと互換性の高い独自の開発ボード)を開発しているPJRC社でメンテしているようなので、1-Wireを扱うなら鉄板のライブラリと言えそうです。後者はDS18B20専用のライブラリのようで、前者のライブラリに依存しています。かなり活発にメンテされているようですから、選択肢としては悪くなさそうです。 配線 Arduino側は2番ピンとVCC、GNDだけしか使いません。 デー
動機 他人の出しているPull Requestについて、自分のブランチとして実験・修正したい、ということがありました。具体的には下記のような状況です。 本体GitHubリポジトリ Aさんがforkしたリポジトリ Pull Requestが出ているブランチ(←これを自分のリポジトリに取り込みたい!) 自分がforkしたリポジトリ 自分が本体からforkしていない状態であれば、単にAさんのリポジトリをforkするだけで問題のブランチも手に入りますが、残念ながら自分は既にfork済みで、かつ何度かPull Requestを送っているので自分のリポジトリを消すわけにもいきません。 また、問題のブランチがTravis CIでのテストに通るかどうかに興味があったので、手元にPull Requestのコピーを作るだけでなく、自分のブランチとしてGitHubにpushして、自分のTravis CIアカウン
会社の同僚からArduino 互換ボードの「Pro Micro 5V/16MHz」のクローン(eBayなどでは「Leonardo Pro Micro」などと呼ばれていたりします)をもらったので、色々調べてみました。 そもそもこの「Pro Micro」はArduino公式の商品紹介ページには掲載されていません。これはArduino界隈では大きいベンダーの一つであるSparkFun Electronics社が設計・販売しているArduino互換ボードなのですが、Arduinoを名乗らずに販売しているようです。 Pro Micro - 5V/16MHz - DEV-12640 - SparkFun Electronics このPro MicroはArduino Pro Miniに似たサイズのボードでありながら、マイコンにATmega32U4を採用し、USBコネクタ(mini-B)も備えています。
PHP5用のextensionは変更なしではPHP7上で動きません。#ifで分岐して両対応にするのも厳しい印象で、多くのextensionは別ブランチで開発しているようです(調べた範囲ではAPCu、msgpack、memcachedなどが別ブランチで開発しているようです)。 今回PHP7用の実験的なextension「php7_explorer」を書いてみました。書いてみてPHP5用のextensionとの違いを改めて実感したので、ざっくりの違いをまとめてみます。 「おまじない」を書かなくてよくなった PHP5までは、Zend APIのプロトタイプ宣言最後にTSRMLS_DCを、呼び出し時の引数リストの最後にTSRMLS_CCをつけるという「おまじない」が必要でした。これはZTS (Zend Thread Safety)サポートのため、必要なときだけ余計な引数を引き回すようなマクロ定義です
Arduinoのタイマー割り込みを使おうとすると若干煩雑なのでライブラリが欲しいですよね。それに、ポータビリティも大事だと思うんです!筆者はATmega32U4しか持っていないので、ATmega328P前提のコードだと動かないことがあるんです…。 でも例によってライブラリ使う人が少ない業界だなーという印象で、これ使っておけば鉄板みたいなライブラリは無いのかも。 FlexiTimer2 一番メンテされてそうなライブラリで、名前の通りタイマー2を使うもの。後述するMsTimer2の改良版で、割り込み間隔を自由に設定できます。 # include <FlexiTimer2.h> void flash() { static boolean output = HIGH; Serial.println(output); output = !output; } void setup() { Serial
次のページ
このページを最初にブックマークしてみませんか?
『@hnwのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く