タグ

ブックマーク / hnw.hatenablog.com (53)

  • 自宅のPC環境を改善したら四十肩が治った話 - hnwの日記

    コロナの影響もあり、この3年ほどで在宅勤務の会社さんが多くなった印象があります。 それに伴い、自宅のPC環境を改善した人って多いんじゃないでしょうか。 ご多分に漏れず私もPC環境改善を行いまして、下記のような環境が普段使いの環境になりました。 筆者のメインPC環境 一見ありふれた環境に見えるかもしれませんが、私はこの環境を手に入れてから、それまで悩んでいた四十肩の症状が大きく改善しました。 稿では、この環境に至った経緯と購入した製品を紹介していきます。同じ悩みを持つ方はもちろん、四十肩・五十肩予備軍の方も参考にして頂ければと思います。 キーボード環境の紹介 上記の写真だとわかる人にしかわからないと思うので、実際の使い方を紹介します。 通常ポジション コンパクトキーボード(HHKB)2台を1つのPCに接続し、左右分割キーボードのように利用しています。 トラックボール使用時ポジション マウス

    自宅のPC環境を改善したら四十肩が治った話 - hnwの日記
    UDONCHAN
    UDONCHAN 2022/12/03
    すごい
  • PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記

    PHPPythonRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。 PHP 7.0.0 HashTable高速化 (2015/11) Python 3.6.0 dictobject高速化 (2016/12) Ruby 2.4.0 st_table高速化 (2016/12) これらのデータ構造はユーザーの利用する連想配列だけでなく言語のコアでも利用されているので、言語全体の性能改善に貢献しています1。 スクリプト言語3つが同時期に同じデータ構造の改善に取り組んだだけでも面白い現象ですが、さらに面白いことに各実装の方針は非常に似ています。独立に改善に取り組んだのに同じ結論に至ったとすれば興味深い偶然と言えるでしょう2。 稿では3言語の連想配列の従来実

    PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記
    UDONCHAN
    UDONCHAN 2021/01/12
  • Raspberry Pi の Wi-Fi パワーマネジメントモードについて調べた - hnwの日記

    さいきんRaspberry Pi 4を買ったんですが、Wi-Fiだけで運用したときにRaspberry Piへのアクセスがイマイチ不安定、ということがありました。ネットの情報を調べるとLinuxの無線ネットワークの「パワーマネジメントモード」をオフにすれば平和になるような話が見つかるんですが、その挙動を解説した記事が見つからなかったので自分なりに調べてみました。 パワーマネジメントモードの確認 パワーマネジメントモードの有効無効はiwコマンドで調べられます。たしかにwlan0で有効になっていますね。 $ iw dev wlan0 get power_save Power save: on パワーマネジメントモードの無効化 下記のようにすればパワーマネジメントモードを無効にできます。 $ sudo iw dev wlan0 set power_save off この設定はOSを再起動すると元

    Raspberry Pi の Wi-Fi パワーマネジメントモードについて調べた - hnwの日記
    UDONCHAN
    UDONCHAN 2020/10/11
  • 自宅のネットワーク図をメンテし続ける工夫 - hnwの日記

    みなさん、自宅のネットワーク図って何のツールで書いてますか?私は過去に次のようなツイートをしたところ案外バズったことがありました。 「自宅のネットワーク図って何のツールで書いてます?」 「それ自宅で必要?」 終 制作・著作 ━━━━━ ⓃⒽⓀ— hnw (@hnw) 2019年9月29日 これがバズるのは自宅にヤバいネットワークを組んでいる人が一定数いる証拠と言えるかもしれません。リプライ欄を見ても、みなさんそれぞれ工夫されていることがわかりました。 私個人はネットワーク図を書くのに色々なツールを試してきたのですが、イマイチ定着しないのが悩みでした。最初は頑張って書くのですが、いつの間にかメンテをサボってしまい、いざネットワーク構成をいじる段になると情報が古くて役に立たないことが複数回ありました。悲しいですね。 プロなら仕事で使う定番ツールがあるのかもしれませんが、私のようなアマチュアの立

    自宅のネットワーク図をメンテし続ける工夫 - hnwの日記
    UDONCHAN
    UDONCHAN 2020/09/27
    よさそう
  • PHP7から定数配列がOPcacheに乗るので巨大配列が使い放題という話 - hnwの日記

    PHP 7.0のリリースから約5年が経過し、そろそろPHP 8.0のリリースも見えてきました。人によっては使い始めて5年目になるはずのPHP 7.xですが、いまだに新しい発見があったりして面白いですね。 稿ではPHP 7.0から入った定数配列に関する性能改善について紹介します。 PHP 5時代は配列の組み立てコストが大きかった プログラミング上のテクニックとして、辞書データを連想配列としてプログラム中に記述し、これを必要に応じて使うというものがあります。たとえば次のコード例を見てみましょう。このような連想配列を持っておけば、プログラム中で国名コードをを扱う際に実在するかをチェックしたり、国名の日語表記に変換したりといった処理ができるわけです。 <?php $country_name = [ 'jp' => '日', 'us' => 'アメリカ合衆国', 'ru' => 'ロシア連邦'

    PHP7から定数配列がOPcacheに乗るので巨大配列が使い放題という話 - hnwの日記
    UDONCHAN
    UDONCHAN 2020/08/13
  • date-holidays という祝日ライブラリが良い意味で狂っていた - hnwの日記

    世界には色々なマニアがいるなーという話を紹介します。 先日Node.jsで使える祝日ライブラリを探していたところ、複数の国や地域の祝日に対応しているライブラリ date-holidays を見つけました。 commenthol/date-holidays: worldwide holidays このライブラリは稿執筆時点で143ヶ国379地域の祝日に対応しています。この時点で頭がおかしい(ほめ言葉)のがわかると思うんですが、さらに凄いのがこれらの祝日をすべてYAMLで定義しており、このYAMLが変態的だという点です。 YAMLによる祝日の定義例 どう凄いかは実際のYAMLを見た方が早いと思うので、例を紹介します。下記は日の祝日の定義の一部です。 01-15: name: en: Coming of Age Day jp: 成人の日 active: - from: 1948-07-20

    date-holidays という祝日ライブラリが良い意味で狂っていた - hnwの日記
    UDONCHAN
    UDONCHAN 2019/04/14
    これはすごい
  • ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記

    ECMAScriptの浮動小数点数の丸め関数である Number.prototype.toFixed() について調べてみたところ、浮動小数点数をわかっている人が作った硬派な仕様だと感じたので、解説してみます。 浮動小数点数の丸めの善し悪しについて 私はプログラミング言語の浮動小数点数の丸め処理に興味があり、過去に関連記事を30以上書いています。こうした活動から得られた知見として、良い丸め関数には次のような性質があると考えています。 仕様がシンプルで直感的であること 仕様が抜け漏れなく文書化されていること バグを作り込みにくい仕様であること どれも良い関数の一般論のような話ですが、丸め処理に限って言えば簡単な話ではありません。そもそも浮動小数点数の性質が人の直感に反するため利用者にとっても実装者にとっても罠が多く、結果として上の条件を満たせないことが多いのです(私が面白いと感じるポイント

    ECMAScriptの浮動小数点数の丸め仕様がスゴい - hnwの日記
    UDONCHAN
    UDONCHAN 2019/02/26
    参考になる
  • 日本語のパスワードジェネレータを作ってみた - hnwの日記

    Webサービスを使っていると、たまに「秘密の質問」の設定を求められることがあります。 こういう場合、個人的にはランダム文字列を登録したいと思うのですが、次のようにマルチバイト文字しか登録できないことが多い気がします。 普通のパスワードジェネレータではマルチバイト文字のパスワード生成ができないので、このような用途には使えません。そこで、ランダムなマルチバイト文字列を生成するサービス「 秘密の答えジェネレータ」を作ってみました。 自分でも実用しており、既に5サービスに設定しましたが、非常に便利だと感じます。 稿ではこのサービスの技術面の詳細について紹介します。 「秘密の答えジェネレータ」の構成要素 「秘密の答えジェネレータ」はHTML+JavaScriptだけで実現されており、GitHub Pagesでホストしています。また、独自ドメインのDNSおよびSSL化はCloudFlareで行ってい

    日本語のパスワードジェネレータを作ってみた - hnwの日記
    UDONCHAN
    UDONCHAN 2018/04/18
    便利
  • PHPのis_numeric関数は使うべきでないという話 - hnwの日記

    稿は私が前職の技術ブログで執筆した記事「そのis_numeric()は適切ですか?」を改題・再編集して掲載するものです。前職には許可を取ってあります*1。 稿ではPHPの関数is_numeric()の使いどころについて問題提起をしてみます。 is_numeric関数とは さて、まずはis_numeric()のリファレンスマニュアルを見てみましょう。 bool is_numeric ( mixed $var ) 指定した変数が数値であるかどうかを調べます。数値形式の文字列は以下の要素から なります。(オプションの)符号、任意の数の数字、(オプションの)小数部、 そして(オプションの)指数部。つまり、+0123.45e6 は数値として有効な値です。十六進表記(0xf4c3b00c など) や二進表記 (0b10100111001 など) は認められません。 http://php.net/m

    PHPのis_numeric関数は使うべきでないという話 - hnwの日記
    UDONCHAN
    UDONCHAN 2018/04/16
    罠だ
  • PHP 7.2.0からDateTimeでミリ秒表示するときの丸め処理が変わった話 - hnwの日記

    エイプリルフールなので(?)、PHPの日付処理の細かい挙動がひっそり変わった話の解説をします。 ちなみに稿はSlackグループ「PHPユーザーズ」の#randomチャンネルでの議論をまとめ直したものです。議論のきっかけを下さったmsngさん、tadsanさん、do_akiさんはじめとする皆様ありがとうございました。 PHP 7.0から日付のフォーマット文字列にミリ秒を意味する「v」が追加された PHP 7.0.0から、DateTime::format()でミリ秒指定ができるようになっています。 v ミリ秒 (PHP 7.0.0 で追加) Same note applies as for u. 例: 654 http://php.net/manual/ja/function.date.php date関数と違ってDateTimeオブジェクトはマイクロ秒の処理を行うので、これをミリ秒単位に丸

    PHP 7.2.0からDateTimeでミリ秒表示するときの丸め処理が変わった話 - hnwの日記
    UDONCHAN
    UDONCHAN 2018/04/01
    有用情報
  • PHPのsleep関数とusleep関数の挙動を調べてみた - hnwの日記

    筆者はPHPの現在時刻を上書きするPHP拡張モジュールphp-timecopを開発しているため、PHPの時間がらみのテストを世間一般の人より多く書いていると思います。テストケース中でusleep関数を多用しているのは世界中でも筆者くらいかもしれません。 ところで、先日php-timecopのテストをWindows上で動かしたところ、 usleep(100000) が99.8msくらいで帰ってきてテストに失敗するということがありました。 筆者はsleep関数やusleep関数は指定した時間と同じかそれより長い時間スリープすると考えていたのですが、当にそのような性質があるのでしょうか?また、sleep関数やusleep関数はどの程度の誤差があるのでしょうか? 稿ではこうしたsleepやusleepの挙動について深掘りしてみます。 sleep関数の挙動 まずはsleep関数の挙動から調べてみ

    PHPのsleep関数とusleep関数の挙動を調べてみた - hnwの日記
    UDONCHAN
    UDONCHAN 2017/07/18
    なるほど
  • PHPの連想配列は常にin_arrayより速いのか - hnwの日記

    プログラムを書いていると、入力値が辞書に含まれているかを調べたいようなことがあります。たとえば、ユーザーに都道府県名を入力させて、それが正しい都道府県名であるかどうかを調べたい、というようなことがあるかもしれません。 このような内容をPHPで書く際、キーに都道府県名を持つような連想配列を作る習慣がある人は多いはずです。これは典型的な連想配列の使い方といえるでしょう。 <?php $prefs = array( "北海道" => true, "青森" => true, // ... "沖縄" => true, ); if (isset($prefs[$input])) { // 都道府県名が正しい時の処理 } 一方で、in_array関数を使うやり方も考えられます。 <?php $prefs = array( "北海道", "青森", // ... "沖縄", ); if (in_array

    PHPの連想配列は常にin_arrayより速いのか - hnwの日記
    UDONCHAN
    UDONCHAN 2017/05/22
    いい話
  • アメリカで何年の4月1日がサマータイムだったか調べてみた - hnwの日記

    日付関連のテストケースを書いていたら、ロサンゼルスの1970年4月1日0時はサマータイムではないけれど、2012年4月1日0時はサマータイムであることに気づきました。何かの間違いじゃないかと思って改めて調べてみたところ、ロサンゼルスで4月1日がサマータイムだった年は以下の5つの時期に含まれることがわかりました。 1918-1919年 1942-1945年(War Time) 1948年 1974-1975年 2007年以降、現在まで このうち、1番目は第一次世界大戦中に制定された「標準時間法」 (Standard Time Act)によるものです。アメリカでは初のサマータイム導入でしたが、不評のため2年で廃止されたとか(おそらく終戦の影響もあったでしょう)。 2番目は第二次世界大戦時の省エネ対策として通年の「War Time」が実施されたもので、1942年2月9日から1945年9月30日ま

    アメリカで何年の4月1日がサマータイムだったか調べてみた - hnwの日記
    UDONCHAN
    UDONCHAN 2017/05/01
    参考になりすぎる
  • ポートノッキングで10秒間だけsshdを公開する設定 - hnwの日記

    先日Twitterに次のような書き込みをしたところ思ったより反応が良かったので、詳細の設定を紹介します。 UDP53番、TCP443番、UDP123番とポートノッキングをするとTCP443番に10秒だけsshdが現れる、という中二病全開の設定をした。皆様にもお勧めしたい。— hnw (@hnw) 2017年3月26日 といっても特殊なことをしたわけではなく、knockdでポートノッキングの設定を行い、iptablesと組み合わせて実現しました。 ポートノッキングとは ポートノッキングというのは、決められたポートを決められた順番で叩くことでファイアーウォールに穴を空けられるような仕組みのことです。ポートノッキングを使えば、TCPの7000番、8000番、9000番の3ポートにパケットを送りつけると22番ポート (SSH) へのアクセスが許可される、といった設定ができます。 ポートノッキングの

    ポートノッキングで10秒間だけsshdを公開する設定 - hnwの日記
    UDONCHAN
    UDONCHAN 2017/03/28
    めっちゃ良い
  • 世界最小のRSA鍵ペアは何bitか - hnwの日記

    「理論上最短のRSA鍵の鍵長は何ビットなのか?」という疑問が湧いてきたので、RSA鍵の長さに関する制約について調べてみました。とにかく小さいRSA鍵ペアを作ろうと思ったらp=3,q=5の4bit RSA鍵というのが作れそうですが、当にそんな鍵が作れるのでしょうか? 稿ではRSA暗号およびRSA署名のパディングに関する仕組みを紹介し、最短の鍵長となるRSA鍵について検討します。 RSAES-PKCS1-v1_5 におけるパディング 鍵長最短となるRSA鍵ペアを作る上で障害になるのが、RSA暗号のパディングと呼ばれる仕組みです。 RSA暗号における暗号化および復号処理は整数の累乗演算ですから、仮に平文mが1だった場合、暗号文も1ということになってしまい暗号として機能しなくなってしまいます。このような問題への対策として、受け取った平文をそのまま使うのではなく、パディング文字列を付加して暗号化

    世界最小のRSA鍵ペアは何bitか - hnwの日記
    UDONCHAN
    UDONCHAN 2016/09/12
    興味深い
  • PHPのround関数とは一体なんだったのか - hnwの日記

    (7/3 14:05追記)Javaに関する記述について誤認があったので盛大に書き換えました。Java 6、Java 7、Java 8それぞれで実装が変わっていたようです。 (7/13 23:55追記)記事中ではroundを四捨五入と言い切ってしまっています。これは筆者がC99のroundを基準に考えているためですが、言語によっては偶数丸めになっているround関数も珍しくありません。ご注意ください。 PHPのround関数について、ネット上で次のような記述を見つけました。 PHP 四捨五入の計算を間違える唯一の言語として畏れられていましたが、そのバグは治っているかもしれません(治ってないかもしれません) 主要なプログラミング言語8種をぐったり解説 - 鍋あり谷あり 各言語を面白おかしく紹介する内容とはいえ、ずいぶん雑な理解だなーという印象です。ゆるふわな話だけでPHPがdisられ続けるの

    PHPのround関数とは一体なんだったのか - hnwの日記
    UDONCHAN
    UDONCHAN 2016/07/03
    参考になる
  • DNSSEC対応の独自ドメインを年額$0.88で運用できるよという話 - hnwの日記

    (2016/3/27追記)0.88ドルというのは期間限定のキャンペーン価格のようです。普段はもっと高いのかもしれません。 DNSSECって名前は聞くけど詳細は知らないな、というくらいの理解度の人って多いんじゃないでしょうか。実は筆者もそんな一人だったのですが、この連休中に独自ドメインを取得してDNSSEC対応させてみました。DNSSEC対応できるレジストラ・ドメインの組み合わせとしてはNamecheapで.pwドメインを取るのが探した範囲では最安値で、最初の1年間だけ維持するなら0.88ドル、翌年以降更新する場合でも年額7.88ドルに収められることがわかりました。 稿では一連の顛末を紹介します。 そもそもレジストラやドメインのDNSSEC対応って何? DNSSECにおいて、レジストラはどういう役割を担うのでしょうか?レジストラの選択がDNSSECの利用にどういう影響を与えるのでしょうか?

    DNSSEC対応の独自ドメインを年額$0.88で運用できるよという話 - hnwの日記
    UDONCHAN
    UDONCHAN 2016/03/21
    参考になりすぎる
  • PHP7からstrlen関数に特化した高速化が採用された - hnwの日記

    (2016/01/01 02:20追記)mbstring.func_overloadの章を盛大に書き換えました。なぜか廃止されたと思い込んでたんですが、特に廃止もされてなくて、PHP 7でも動くことは動きます。ただ、仕組み上strlenだけ言うことを聞かなくなっていますので、使い道としては厳しいと思います。 (2017/5/14 追記)PHP 7でmbstring.func_overloadを有効にしてもstrlen()は期待通り動作しないと書いていましたが、期待通りmb_strlen()として動作していました。つまり、「2016/01/01 02:20追記」が一部嘘でしたので、記事を修正・追記しました。 みなさん、もうPHP 7は試してみましたか? PHP 7のセールスポイントと言えば高速化ですよね。その高速化ですが、個人的には「そこ速くする余地あったの?」と思えるような箇所が高速化され

    PHP7からstrlen関数に特化した高速化が採用された - hnwの日記
    UDONCHAN
    UDONCHAN 2016/01/01
    大変
  • PHP7から文字列の無駄なコピーが減った話 - hnwの日記

    このエントリは闇PHP Advent Calendar 2015の14日目です。 稿では、PHP7のzend_string構造体導入によるメリットの話をします。 PHP5とPHP7の文字列型の扱い PHP5では、文字列型の変数は次のようにメモリに割り当てられます(横幅いっぱいが8バイト)。 文字列の体以外はzval構造体で管理し、文字列の体は別途メモリ確保するという形になっています。一方、PHP7では次のようになります。 1つの文字列変数が、zval構造体とzend_string構造体の組み合わせで実現されています。 これだけ見ると、PHP7では文字列長と参照カウンタrefconuntがzvalから追い出されてzend_stringに移動したくらいで、PHP5とPHP7のメモリ消費量に大きな違いは無いように思えるかもしれません(あるいはPHP7の方が不利に見えるかもしれません)。しか

    PHP7から文字列の無駄なコピーが減った話 - hnwの日記
    UDONCHAN
    UDONCHAN 2015/12/14
  • GoでPHP拡張モジュールを書いた話 - hnwの日記

    12/6のGo Conference 2015 WinterでGoPHP拡張モジュールを書いたよ、という内容のLTをしてきました。 ざっくり言うと、Goって言ってもCのレベルに落ちてくれば連携なんて簡単でしょって思ってたけど、GoPHP拡張もビルドプロセスが隠蔽されてるので、落としどころが見つからなくて苦労したよって話でした。もっと綺麗に連携できる方法を編み出した方は教えてください。 PHP拡張モジュール側のビルドについて補足 拡張モジュールを共有ライブラリじゃなく静的ライブラリとして作ればいいじゃん、って発想で作り始めましたが、実は拡張モジュールを静的ライブラリとして作るのは結構ダルいという事情があります。というのも、拡張モジュールをphpizeするとconfigureオプションで何を指定しても静的ライブラリが作られないようにm4マクロが展開されてしまうのです。 そこで、できあがった

    GoでPHP拡張モジュールを書いた話 - hnwの日記
    UDONCHAN
    UDONCHAN 2015/12/07