QNAPが壊れたのでディスクからデータを抜き出した

壊れたのはディスクではなくLANインターフェース。5年間も稼働させていたので障害が発生するのは仕方ないのだが、HDDの故障は想定していてもLANインターフェースは想定外だった。 QNAPに載せていたHDDはHGST社製で、5年連続で稼働しても不具合なし。評判通り…

Rails 5からRails 6へのアップグレードでujsをwebpacker化する

rails 6ではassets pipelineがデフォルト無効になり、jsはwebpackerで管理されるようになった。 ところがRails 5からアップグレードした場合webpackerは自動的に有効にならず、assets pipelineは無効にされるので、ujsで動いてるリソースのdeleteリンクなど…

gemモジュール使用時は必ずversionを指定する

もうすぐ2.7が出るというのに今頃Rubyを2.6系にアップデートを行ったところ、動かなくなってしまった。 状況 ansibleで以下を行っている rbenvをインストール rbenv install を実行し、Ruby 2.6をインストール gemモジュールでrbenv以下のgemコマンドを指定…

配列そのものを大小比較する

配列の要素ではなく、配列それ自体の大小比較をしてみる JavaScript [1, 11, 3] > [1, 2, 4] false JSで配列を順序比較すると文字列に変換されて辞書順比較を行うためfalseとなる。順序比較するとまずToPrimitiveが呼ばれるがArrayはToPrimitiveを実装してな…

MySQL8.0でwindow関数

これを見ている MySQLパフォーマンスチューニングTIPS - Speaker Deck MySQL 8.0からwindow関数が使えるようになっていたらしい。 window関数は分析用と思われがちだが、各ユーザの最も高いスコアを取得とか、各ユーザの最後のデータを取得といったシステム…

REALFORCE SA for Macを買った

Macのキーボード環境は貧弱である。Apple純正のキーボードを除くとMac向けキーボードに選択肢はほとんど無い。 USキーボードであればWindows用でもレイアウトが同じなのでWindows用を買ってきて使う手もある。だが、あいにく私はJISキーボード派。JISキーボ…

カハンの加算アルゴリズム

浮動小数点数の小数演算には誤差が付き物 function sum(array) { let result = 0; for (let i = 0; i < array.length; i++) { result += array[i] } return result; } const a = Array(1000000).fill(0.1); console.log(sum(a)); 結果 100000.00000133288 こ…

AWS ElastiCache RedisのマルチAZがt2インスタンスでも使えるようになっていた

t2インスタンスではマルチAZが使えなかったので、開発環境ではマルチAZなしで構築していたんですが aws.amazon.com 去年の11月ぐらいから使えるようになっていたらしい。 いいですね。これで価格を抑えてマルチAZ環境のテストが行えます。

WebコンテンツのDark Modeについて

WebコンテンツのDark Modeの情報が全然ない。まぁ、まだ仕様策定中で実装してるのがmac版のsafariだけなので仕方ないのだが。 Safari以外の状況は以下のような感じ。 https://bugs.chromium.org/p/chromium/issues/detail?id=889087 https://bugs.chromium.o…

Node v12でTLS v1.3を試す

先日リリースされたNode v12はTLS v1.3に対応しているらしい。というわけで早速試してみた。 サーバ証明書の作成 まずテスト用に自己署名サーバ証明書を作成する。ここでは楕円曲線secp521r1*1のecdsaの秘密鍵を作成した。鍵を作成できるサブコマンドは何種…

公開鍵は暗号よりも電子署名

こちらはSSHではRSA公開鍵は電子署名に使っているのであって、暗号化をしているのではないという記事。 qiita.com 実はRSAを暗号として用いるシーンは減ってきている。 現在、我々に最も馴染みのあるRSAの用途はSSL/TLSだろう。TLSでは本文の暗号化は共通鍵…

prefers-color-scheme対応のSafari 12.1がリリースされた

prefers-color-scheme対応のSafari 12.1がmacOS 10.14.4とともにリリースされた。prefers-color-schemeはOSの外観モードに応じて切り替えのできるメディアクエリ @media (prefers-color-scheme: dark) { div { color: #fff; background-color: #333; } } @me…

evalとFunctionを使わず文字列をJSコードとして実行する

以下のコードは古のスーパーハカーが書いたと言われる、SNSでシェアしただけで行政機関の執行を受けるほどの危険なコードらしい。 for(;;) alert('何回閉じても無駄ですよ~'); なぜこのコードが危険なのか私には説明できないのだが、そんなコードを実行可能…

Node.jsのテストツールAVA

最近のNode界隈ではAVAというテストツールがイケているという噂なので試した。 GitHub - avajs/ava: Testing can be a drag. AVA helps you get it done. import test from 'ava'; test('foo', t => { t.pass(); }); test('bar', async t => { const bar = …

出版業界はまだ2005年ぐらいを生きているのだろうか?

note.mu これはすごいですね。時代錯誤が。今年2019年ですよね?2005年じゃなくて、Amazonがkindleを売り始めたの10年以上前ですよ。 ビジネスの世界はデータが命。機械学習やAIがデータ分析のツールとして持て囃され爆発的な進歩を遂げる昨今、アメリカのIT…

bundle installするとcan't find gem bundlerと言われる

bundle installするとcan't find gem bundlerとエラーが表示される $ bundle install --path=vendor/bundle Traceback (most recent call last): 2: from /Users/nullpon/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>' 1: from /Users/nullpon/.rbenv/versions</main>…

Rubyの配列の長さはcountではなくlength/sizeで取得する

countではなくlength/sizeが良いらしい def bench(msg) t = Time.now 30000.times do yield end puts "#{msg}:\t#{Time.now - t}s" end arrs = (0...100).to_a.map do |i| Array.new(rand(100)) end bench("count") do arrs.each { |a| a.count } end bench(…

JavaScriptでBase64エンコードする

NodeはBufferにbase64エンコード機能があるのだが Buffer.from("あいうえお", "utf-8").toString("base64") ブラウザのJSにはこういう便利な実装がないのだった。どうするか? window.btoa paulownia.hatenablog.com ブラウザにはbtoaというbase64エンコード…

Symbol.iteratorでユーザクラスを反復可能にする

JavaScriptのユーザクラスをfor of構文でループ可能にする方法。Symbol.iteratorでiteratorプロトコルを実装したオブジェクトを返す関数をセットするか、ジェネレータ関数を実装すれば良い。楽なのは後者 class Hoge { *[Symbol.iterator]() { yield 1; yiel…

async/awaitで配列要素の非同期処理を書く

二年ぶりぐらいにNodeを書いているのだが、寝ている間にコールバック地獄はasync/awaitの導入によって終了していたらしい。ほほーう。 で、配列要素の非同期処理である。コールバック時代はnpmのasyncモジュールを使うのが一般的だったが、async/await時代の…

scriptのasync属性とdefer属性の挙動

MDNによるとscriptのdefer属性は この論理属性は、スクリプトを文書の解析完了後かつ DOMContentLoaded が発生する前に実行することをブラウザーに示します。 と書かれているが、文書の解析完了と言う言葉が具体的にどういう意味を持つのかわからない。非def…

lsコマンドをhistoryに残さない

lsコマンドの履歴なんて不要。 zshでHIST_IGNORE_SPACEというオプションをセットすると、先頭にスペースを入れて実行したコマンドが履歴に残らなくなる。まずこれをセット setopt HIST_IGNORE_SPACE 次にlsのエイリアスを作成。先頭にスペースを入れてエイリ…

地球上の2点間の距離を求める

地球を真球と仮定して球面余弦定理に当てはめれば近似値が出る。 ググるとhaversine fomula(半正矢関数)という関数を使った計算式が出てくる。これは三角関数表を引く回数を減らすために球面余弦定理を変形したもの。PCではsinやcosを簡単に計算できるので…

ブラウザはport 6000にアクセスできない

知らんかった… Dockerでローカル環境を構築していた時にブラウザはport 6000にアクセスできないことを知った。例えばdockerで以下のようにnginxを起動。 docker run -p 6000:80 -v $(pwd)/htdocs:/usr/share/nginx/html --name web nginx:latest chromeで ht…

新MacBook Airは最強のドヤリングマシン

MacBook AirとMacBook Pro 13 inch、ディスプレイのサイズは同じだがどちらを買うべきか。メモリ8GB、ストレージ256GBの今年のモデルで比較すると MacBook Air ¥156,800 MacBook Pro 13inch ¥198,800 価格差は3万2000円。CPUの性能差を考えるとPro 13 inch…

MySQLのCTE

SQLアンチパターンをパラパラめくっていて、 ナイーブツリーの項で SQL-99標準では、WITHキーワードの後に共通テーブル式(CTE:common table expression)を指定する形式の再帰クエリ構文を定義しています。 という一文を目にし、ふとMySQL 8からCTEが使え…

HTML Canvasでバイリニア法、バイキュービック法、ランチョス法

ディレクトリを漁っていたら、10年ぐらい前に書いたHTML CanvasとJavaScriptによるバイリニア法の画像拡大のコードが出てきた。これが酷いコードだったので最近の文法も使って書き直し、ついでなのでバイキュービック法とランチョス法による拡大縮小も書いて…

プログラミングが役立つIT業界と役立たないIT業界

現役SEですけど、プログラミングできてもあんま役に立たないっすよ。給与高い管理系の仕事にシフトしていくほどなおさら使わない。IT職でさえ、こんなもんです。子供の習い事は習字がいいと思います。会議でホワイトボードにシステム設計ガシガシ書いてると…

Railsのbefore_forkで接続を閉じる必要あるの?

Railsのunicornやpumaのconfigをネットでググってみると以下のような設定が見つかる。 # unicorn preload_app true before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! end after_fork do |serve…

rapportdとxartstorageremoted

新品のMacBook proに見知らぬportが開いていたので調べてみた。 $ netstat -nat | grep LISTEN tcp6 0 0 *.49298 *.* LISTEN tcp4 0 0 *.49298 *.* LISTEN tcp6 0 0 *.61500 *.* LISTEN tcp4 0 0 *.61500 *.* LISTEN $ sudo lsof -i:49298,61500 Password: C…