-
: Pixel 3 XLを1ヶ月半使ったので今更レビューします
発表(2018年10月10日)1日後に予約購入して. 2018年11月04日に到着して使い始めて. Pixel 3 XL届いた pic.twitter.com/8yarWngwLn — エヌユル (@ncaq) 2018年11月4日 今更レビューしてます. Google Pixel 3 - 日本 - 世界を見る新しい方法 - Googleストア クリスマス特典で今買うとPixel スタンドが無料でついてくるらしいですよ. スタンドの有用性については購入してないので知らないです. スマートフォン遍歴
-
J:COMのようなOP25Bをしていてサブミッションポート(587)をサポートしていないプロバイダでTLS(465)でメールをリレー送信する
J:COMに完全に移行してメールが送信できなくなった OP25Bのせいです. J:COMは一応リレー用メールサーバを用意している マンションが契約した時に配られた書類をひっくり返して確認しました. しかし世の中の手順書はみんなサブミッションポートを前提にしている postfixでOutbound Port 25 Blocking(OP25B) 対策 -自宅サーバ編- | server-memo.net など色々資料がありますが, みんな587を前提にしているのでそのまま使えません. Gmail
-
サイトにsitemap.xmlを追加しました, 簡単かと思ったら意外と大変で2時間ぐらいかかりました
動機 昔の記事を更新した時にGoogleに優先してクロールしてほしいため. Yesodを使った時は動的コンテンツを含んでも yesod-sitemap を使ってサクッと作れたのでかなり簡単な作業だと認識したため. 参考実装 Sitemap with Hakyll を参考に, こちらはテンプレートではなく処理前コードを書きました. 最終的には/sitemap.xmlには <?xml version="1.0" encoding="utf-8"?>
-
: Gentoo上のEmacsでまともなRust環境を構築しました, バグ報告で問題が解決しました
Rustその2 Advent Calendar 2018 - Qiita の10日目の記事です. バグ報告した影響か, rustic-modeの作者の修正によって以下の内容はあっという間に陳腐化しました. 最後の章で修正を記述します. なので最後の章を読んで内容を実行してください. 陳腐化した内容はこれはバグとの戦いとして一応内容を残しておくことにします. これまでrust-modeとflycheck-rustだけでEmacsでRustを書いていましたがそろそろ限界になってきました flycheck-r
-
: Rustの肥大化したmain.rsをファイル分割する方法(超簡略版)
Rustその2 Advent Calendar 2018 - Qiita の5日目の記事として投稿します. Rust初心者向け記事です. Rust 2015を想定していますが, Rust 2018向け情報も含んでいます. Rustのモジュールに関する情報, たくさん情報があって混乱しました. なので文字数少なくまとめます. 実行プログラム向けにmain.rsと書いているので, ライブラリを書いている人はlib.rsと以下読み替えて下さい. コードを分割してpubなどをつける 同じディレクトリsrcに, 新
-
: Acerの4Kモニタ(RT280K)を購入しました, GNU/LinuxでのフルHDモニタを混ぜたマルチディスプレイ環境もきちんと設定できました
購入したもの RT280Kです. RT280Kbmjdpx | acer セールで価格が¥35,840になってたので, そろそろ4Kモニタぐらい買っても良いだろうと思って購入しました. 他にも色々ありましたがこれは4KモニタでありながらGtoGが1msを謳っているので, ゲームにも使えないことは無いだろうと判断しました. もちろんプロゲーマーなら144Hz駆動のやつでも買うのでしょうけど, 私はヌルゲーマーだから関係ありませんね. トリプルディスプレイ スピーカーが無音状態でもうるさい この
-
: Surfingkeysを使ってFirefoxでも高速にGoogle翻訳を使う
Firefoxで一番不便なのはワンクリックでページを機械翻訳に投げられないとこなんだよな…いい感じの拡張もなかった…作れという話かもしれんけど — Hideyuki Tanaka (@tanakh) 2018年12月7日 Surfingkeysでキーボードに割り当ててワンキーで飛ばすようにしてます — エヌユル (@ncaq) 2018年12月8日 私はFirefoxを使っていますがGoogle翻訳も便利に使っています. brookhong/Surfingkeys: Map your key
-
SpamAssassinをバージョン3.4.2にアップデートすると任天堂からのメールが文字化けする症状を直しました
結論 設定ファイルに書いてある add_header all Report _REPORT_ を消すと治ります. 症状 最近任天堂から来るメールが常に文字化けしているので割と困っているThunderbirdが悪いのかと思ったけど生のメールファイルでエンコード試してみたけど正しく認識しないASCIIがそのままなのでutf-8っぽさはあるし実際content-typeもutf-8が指定されてるんだけどutf-8で読めないサポートに連絡だな pic.twitter.com/VMu6I3QwRY —
-
: 海外からDDoS攻撃してくるカメラをシャットダウンしてしまうのは不正アクセスなのか?自首してみたが返答がない!そして泥沼のDDoSへ
顛末を記録した雑多なログになっているので整理されていない部分が多々あります. 2万文字を超えているので気合を入れて読むか適当に読み飛ばしてください. これでも不要な調査データを省いたりしてスリム化したのですが超巨大化してしまいました. 2018-11-07から自宅のネットワークの調子が悪すぎる 自宅のネットワークが死んでいました. J:COMの回線現在98%パケットロスするという状態になっています pic.twitter.com/Vfe0O3p5j2 — エヌユル (@ncaq) 2018年11月7
-
Mackerelを実験として自宅サーバに導入しました
サーバのCPU使用率やネットワーク利用率とかをモニタリングしたい 最近思うことがありまして(詳しくは片付いてからサイトに書きます), サーバのCPU使用率やネットワーク利用率をモニタリングしたいと思うようになりました. また仕事で運用しているサーバも監視したくて, それの実験としてまず自宅サーバで試してみようとという思いもありました. 既にAWSのRoute53 ヘルスチェックのhttps外形監視は導入していますが, CPUなどのデータもわかりやすく見ておきたいですね. AWSのデフォルトのグラフ見づらく
-
Haskell Day 2018に参加しました
Haskell Day 2018 - connpass 発表はせず, 聞き専です. やっぱり遅刻しました 8時30分に起きる予定が9時30分に起きてしまったので, 会場に着いたのが本来10時のはずが10時53分になってしまいました. 一応メンターやるつもりだったんですが立候補する時間はとうに過ぎてしまいました. あまり手を挙げて質問する人が居ないのでどっちにしろメンターとして活動するのは無理だった感が出てきました. ハンズオン あれ?show 5 丸めとか四捨五入気にしなくていいって...あれ?
-
EmacsのDocker関連パッケージまとめ
docker.el Silex/docker.el: Manage docker from Emacs. EmacsからDockerを操作するソフトウェア. Gitに対するMagitみたいなもの? Dockerのコマンドラインを緻密に覚えなくても適当にTUIで操作が出来て便利. 特にEmacsから起動した場合はDockerイメージ内部の貧弱なBashではなくて, Emacsのテキスト編集キーバインドを使って操作できるのでとても便利. Docker Remote API Silex/docker-api
-
webサイトの「Cookieを使用する理由」に「理解しました」を一々押さなくて済むようになるアドオンもしくはフィルタ
EUのGDPRの影響もあり, Cookieを使用する時に使用許可を求めてくるサイトが非常に増えてきました. 殆どのwebブラウザにはCookieを拒否する設定があるので, Cookieが嫌な人はその人が設定で無視すれば良いのに, 何で私が「同意する」「I agree」を一々押さないといけないんですかね? 特にスタックオーバーフロー系のサイトはドメインが細かく区切られているため, よく押す必要があってストレスです. ストレスでしたがだるくて放置していましたが, 今日なんとなく解決する方法を調べたら分で発見しま
-
DiscordのGNU/Linux版で通話開始直後にノイズが走る問題は環境変数PULSE_LATENCY_MSECを90に設定することで解決できます
Discordはとても良いソフトウェアですが, 繋ぎ始めの瞬間だけとてもノイズが走るのが難点でした. SlackとSkypeを使っていましたが, Skypeを投げ捨ててDiscordに移行することにしました - ncaq しばらく待っていればノイズが消えて普通に通話できるようになるのですが, それまで待つのは鬱陶しいですね. この問題を解決しようと色々単語を変えて検索してみて, やっと解決方法を見つけました. lectrode commented on 2018-08-24 16:37 I was hav
-
PHP 7.2にアップデートした時Tiny Tiny RSSがrequires mcrypt functions which are not foundとエラーを出す時の対処法
PHP 7.2でmcryptモジュールは削除されました. PHP: PHP 7.1.x で推奨されなくなる機能 - Manual よってこれまでmcryptでフィードを暗号化していたTiny Tiny RSSでは以下のようなエラーが出ます. Tiny Tiny RSS was unable to start properly. This usually means a misconfiguration or an incomplete upgrade. Please fix errors indicated
-
最近(秋)朝起きた時に足がだるくなる時の対策法
気温が下がって足が冷えているから寝る時にちゃんと長ズボンを履く. 足が冷えてると血行が悪くなるのでだるくなる. だるさは最悪一日中続きます. 毎年起きているので学習してきました.
-
babelで分割代入を変換するのはobject-rest-spreadではなくtransform-destructuring
babel 難読化ツールjavascript-obfuscatorが分割代入での破壊的代入に対応していない function main() { const o = {v: 1} let v; ({v} = o); console.log(v); } main(); は生のJavaScriptだと1を出力しますが, javascript-obfuscatorを通すとundefinedを出力します. javascript-obfuscator break Assignment wi
-
: GentooとEmacsでC#(Unity)開発
omnisharp-emacsはデフォルトでomnisharpをダウンロードする しかし最新版を手で指定してやらないと動作しない模様 dotnetコマンドを使えばslnファイルは作れる Gentooだとdev-dotnet/dotnetcore-sdk-bin OmniSharpがシンタックスエラーは表示しますが型エラーが表示されない 何故か動くようになりました EmacsでC#(Unity)のプログラムを書く Gentooにunity-editorをインストールしたいなら今はdidactic
-
Gentooにunity-editorをインストールしたいなら今はdidactic-duckを使う
unity-editorがインストールできない Gentoo Linuxにfkmclaneのdev-util/unity-editorがインストールできない. 理由はdev-dotnet/gtk-sharpのビルドに失敗するからとのこと. そもそもこのunity最新版なのか? fkmclaneはdev-util/unity-editor-2017.3.0_p2 なので最新版なのか疑わしい. 今年は2018年のはずなので. Gentoo Portage Overlays - dev-util/unity
-
Firefoxからなんとか追い出されずにQuantumに移行して旧アドオンと似た環境を作れました
最新版に移行したメモ. だいぶ前の話ですがFirefoxの最新版ではXPCOMやXULを使う拡張が動かなくなりました Firefox QuantumではXPCOMやXULを使うアドオンは動かなくなりました. リリース直後にはそうなると私は死しか無かったのでその場しのぎの回避策を使っていました. Firefox ESRの使用です. ESR版は長くサポートされるので, 最新版ではなくても深刻なセキュリティリスクは小さいです. Gentooにもちゃんとセキュリティアップデートが降りてきます. というかstabl
-
CommonMarkでは順序付きリストの数値は無視されなくなっていました
古典的Markdownでは順序付きリストの数値は無視されます Markdownをそれなりに書いている人はみんな知っていると思いますが, 古典的Markdown処理系では 2. foo 3. bar は <ol> <li>foo</li> <li>bar</li> </ol> と変換されて, 数値が2から始まることは無視されます. というか順序付きリストの数値は基本無視ですね. これはHTMLの順序付きリストは1から始まり, こ
-
ゲームではないプログラミングに適したラップトップPCを調べた時のメモ
クーポン考えなくてもXPS 15が最適っぽい. クーポン考えるとこの時期の19%もしくは17%割引が得なのでますますXPS 15が最適っぽい. 前提 用途: Electronなどを使ったアプリケーション開発 OS: LinuxがメインでWindowsもサブで起動出来ると良い CPU: 6コア版 メモリ: 32GB SSD: 1TB モニタ: 15インチ前後 今使っているものへの不満 XPS 13 9360 (075B) CPUのパワーがないのでbabelとwebpackとElectronの実行が
-
electron-builderがnode_modulesのディレクトリをapp.asarにパッケージングしない原因はapp/package.jsonに依存を書いていないからでした
問題解決を行おうと思ったのですが徐々に行き詰まってきてしまったので, 問題点と調べた内容を整理するためにメモを取ります. 問題 Electronアプリケーションをelectron-builderでパッケージングすると, Semantic UI LESS のアイコンが表示されません. 原因 ビルドとパッケージの手順は, webpackでsrcからappにデータをビルド, appの内容をdistにパッケージするようになっています. ビルドしたときはきちんと app/node_modules/semanti
-
Semantic UI ReactのMessageでlistプロパティを使ってキーが重複してしまう時はchildrenを使えば良い
Formのバリデーションエラーを Semantic UI Reactの Message で表示したいと思って実装していました. Messageにはlistという属性があり, ここにコンテンツを渡せば複数のメッセージがリストで表示されます. <Message error list={Object.values(this.state.errors)} /> Messageはlistのメッセージ内容をそのままkeyにするので, 同じ内容のメッセージがあると, Reactに Warning:
-
さくらインターネットのUbuntuサーバにssh接続しようとするとConnection refusedになって接続できない問題の解決法
予想外の苦戦 知人にお願いされてssh接続できるサーバを建てることになりました. 知人はさくらインターネットのVPSを契約していてそれに立ち上げることになりました. ssh接続可能な環境なんて5分で建てられるわwって舐めてかかったら意外と苦戦しました. 原因は以下です. ssh: connect to host x.x.x.x port 22: Connection refused このエラーが常に出て全てのssh接続を弾くようになり何も出来なくなりました. 原因 SSH - SSH接続する際、「
-
勘違いしていましたがReduxのstateにはMapなどのプレーンじゃないオブジェクトも保存できます
致命的な勘違いをしていました ReduxのstateにはJavaScriptのPlain Objectしか保存できないと思い込んでいました. ここでいうプレーンなオブジェクトというのはconstructorが[Function: Object]になっているものですね. 正しい認識 結論から言うとReduxのstateには基本的に全てのデータ型のオブジェクトを格納できます. しかし一部はReduxの開発者ツールには表示されません. 実験 stateのfooフィールドにDate, moment, Im
-
: 正社員として働き始めてからおよそ4ヶ月が経過したので給与明細と労働感想を公開します
給与明細で紙飛行機を作って一番遠くに飛ばせた人が優勝する大会を開こう — ばんくし (@vaaaaanquish) 2017年10月21日 kazoo04とかならフォロワーが1万人も居るので「イケてるエンジニアは皆給与明細を公開している」みたいなムーブメントを起こせるはず — ばんくし (@vaaaaanquish) 2018年6月1日 4月に正社員として雇われてからおよそ4ヶ月が経過したので給与明細を公開したいと思います. 給与明細を公開すると私にとっても皆にとっても良いことが産まれる可能
-
ESLintのコアのみのルールで相対importを禁止する
前提として絶対importを使っています webpackの設定を以下のようにしています. const path = require('path'); module.exports = { resolve: { extensions: ['*', '.js', '.jsx', '.json'], modules: [path.resolve('./src'), path.resolve(
-
sentry-electron 0.5.5が`TypeError: module.require is not a function`で起動できない問題を調査しました(未解決)
@sentry/electron - npmのバグ調査をしました. 前に0.5.4が壊れているのをissueで報告しました. I update to 0.5.4, error on MODULE_NOT_FOUND · Issue #81 · getsentry/sentry-electron issueがcloseされたから問題は解決したと思ってv0.5.5にアップグレードしました. 他の問題が発生しました. % y yarn run v1.7.0 $ cross-env NODE_ENV=develop
-
Gentoo LinuxやArch LinuxなどでStackage LTS 12が使用できないのはncurses 5をインストールしていないからでした
問題 私の管理するパッケージに最新のstackageだとビルドができないというissueが届きました. yesod-form-bootstrap4-1.0.0 build failure with yesod-*-1.6.2 · Issue #2 · ncaq/yesod-form-bootstrap4 それならばとりあえず最新のstackageを試すべきだなと思って, stack config set resolver ltsしてstack setupします. すると以下のエラーが発生しました. % s
-
ダイキンのS22VTESというエアコンを購入したのですが実際にかかる価格がわからなくてややこしかった
エアコンを買い替えたい そろそろ暑くなってきました. 私の部屋にあるエアコンは東芝製の30年ぐらい前のものらしい, RAS-251BVZというものです. ググっても情報がリモコンぐらいしか出てこない程度には古い. 燃費考えると買い替えてもペイするのでは? 燃費を考えなくてもどうも温度センサーが鈍いようで, かなり部屋が暑くなるまで止まることを繰り返していて非常に不快なので最新のものに買い替えたくなりました. プラズマクラスターやナノイーのような, 疑似科学に手を出していないところが良いので聞いてみたら,
-
: Gentooのworldを更新したらncaq-overlayのmikutterが起動しなくなった問題を解決しました
Gentooのworldを更新しました. するとmikutter 3.7.1を起動しようとすると以下のエラーが出るようになりました. /usr/share/mikutter/core/mui/gtk_form_dsl_select.rb:4:in `<top (required)>': uninitialized constant Gtk (NameError) ruby-gtk2はインストールするようにしているからおかしいなと思って, とりあえず当該ファイルに require
-
Electronのproduction環境でasarにある画像などのリソースがnet::ERR_FILE_NOT_FOUNDで読み込めないのはBrowserRouterが原因でした
環境 Electron 2 Electron Builder 20 React: 16 webpack 4 React Router 4 Gentoo Linux やりたいこと url-loaderを排除してfile-loaderにしたい. 動機 とある画面を読み込むのがとても遅く, 速くしたかった. 同じ画像を大量に読み込むので, url-loaderを削除してfile-loaderにしてみたらとても速くなった. パスを変更すると読み込めなくなる問題も loader: 'file-l
-
: 自宅のルータが存在しないサイトにアクセスした時に証明書エラーを出すのを直す
自宅のネットワークでドメイン切れのwebサイトにアクセスすると証明書の警告が表示されます 以下のように存在しないwebサイトにアクセスすると, httpsにリダイレクトするように促されます. % curl -I 'example.invalid' HTTP/1.1 301 Moved Permanently Server: nginx/1.12.2 Date: Wed, 04 Jul 2018 05:05:44 GMT Content-Type: text/html Content-Len
-
: AtCoderをD言語で解きたくなったので環境を整えました, いや整えられてないです
AtCoderをD言語で解きたくなった D言語がC++に対して勝る点 GCがついているのでメモリ管理が面倒ではない rangeに対応しているのでsortなどを行うためだけにbegin, endを使う必要がない rangeに加えてUFCSがあるのでデータと連ねて処理する時に直感的に記述できる 標準で配列が動的構築に対応しているのでvectorのような長いコードを書く必要がない 標準の文法に連想配列がありインターフェイスがわかりやすい C++だとintの最大値がstd::numeric_limits
-
ReactでTable要素のmount(描画)に時間がかかる問題を初回の描画を切り捨てることで解決しました
事案 React + ReduxでTableの描画に10秒程度かかる. 要素は多くて700件ぐらい. やりたいこと 描画を2秒ぐらいにはしたい. やってたこと Reduxのデータ構造見直し Reduxのデータをなるべく更新しないようにする mainプロセスの処理最適化 階層を小さく 全て無駄だった そもそもupdateではなくmountに時間がかかっているのですからやってたことは全て無駄. 更新減らすとかも無駄. ページャ作れば良い Table要素はどうせ大半はファーストビューに含まれ
-
doctestを実行するようにしたのですが, 全部指定するとTravis CIが通らない
これまでhaddock形式のコメントで使い方を書く時にdoctestの形式でコメント書いていました. しかし, 実際doctestは実行していませんでした. いい加減実行してテストしておこうと思ったので導入しました. Travis CIのコマンドを変えずにテストを自動実行して欲しいのでコマンドラインでの実行はやりたくないですね. Stack(Cabal)と連携して実行するようにしたいです. package.yamlに書くことにします. doctest-discoverを導入してみました しかし公式の導入方
-
render内でReact Routerを使ってRedirectした後に, Reduxのstateにdispatchしたら, 警告が発生する問題をコンストラクタとrenderを併用して解決
やりたいこと Reduxのstateからリダイレクト先を取ってきて, React Routerでリダイレクトしたら, リダイレクト先をクリアします. この処理が何故かコンポーネントの一部のcomponentWillReceivePropsで行なわれていて, そのコンポーネントを表示しない設定を追加したかったのでHoCに移しました. componentWillReceivePropsはもう消去が確定してますしね. なんでそんな実装になってたの React関係ない外部コンポーネントでイベント待受してリダイ
-
: データベーススペシャリスト試験に2回目の挑戦で合格しました
ネットワークスペシャリストの記事 ネットワークスペシャリスト試験に合格したので学習方法などを書いておきます - ncaq 1回目 1回目の結果 当時就活で精神ボロボロでフラフラだったのであんまり期待してませんでした. 2回目 2回目の結果 試験前日の土曜日に休暇を取りましたが, 集中できずにほとんど勉強できてなかったのであまり期待してませんでした. 答えも適当に埋めてましたし. でもギリギリで合格することが出来ました. 試験時はこんなことツイートしてたみたいですね. カーソルのこと
-
certbotをnginxを起動したままsystemdのtimerで動かして証明書を自動更新する仕組みが出来た気がします
問題 今日サイトやメールの証明書が突然切れて叩き起こされました. 本来はLet's Encryptには切れそうな証明書をメールで通知する機能があるのですが, 昔古い証明書に関する通知を消したら, メールアドレスごと通知が消滅する仕組みだったようで, 通知が全く来なくなってしまいました. 通知の復活方法が調べても出てこない… 要望 自動更新するようにしたい. 他のシステムも自動更新出来るようにしたいですが, まずは自分の個人サイトで試してうまく行くか試したい. 実装方法 certbotはcertbo
-
: JavaScriptでtypeof x === 'undefined'を使わないで欲しい理由
何故嫌なのか説明します. 結論追記 アクセス数がそこそこあるので短く結論. 基本的にx == nullを使ってください. ESLintのだいたいのルールでも==の曖昧比較はx == nullだけは許可しているはずです. nullを弾けない > typeof null 'object' となります. undefinedの場合弾いて, nullの場合許容したい時があるでしょうか. 私はほとんどそんなものは見たことがありませんし, それはしばしば設計ミスを示しています. 一般的にn
-
CSSのwidthを指定して, 選択された値より実際のwidthが小さくなってしまう原因は, 他の要素が大きいことと, flex-shrinkの未設定でした
症状 Electron/1.8.7, Chrome/59.0.3071.115でwidthの値が指定した値より小さくなってしまう現象に遭遇していました. この現象のせいで要素が隠れてしまうバグが発生していました. 小さくなってしまうだけなら反映されてないだけだと納得出来るのですが, Chromeの開発者ツールで選択された値より計算された値が小さくなってしまっていたので混乱していました. 値が食い違う この要素にはpaddingもmarginも存在せず. box-sizingを開発者ツールで解除してみ
-
このHakyllサイトのシンタックスハイライターをhighlight.jsからPygmentsに移行しました
highlight.jsへの不満 このサイトではhighlight.jsをコードのシンタックスハイライトに利用していました. これには以下の問題がありました. Emacs Lispに対応していない フロントエンドでの変換なのでクライアントがアクセスするたびに無駄なオーバーヘッドがかかる 正直パフォーマンスはどうでも良いのですが, Emacs Lispに対応していないのは致命的です. Pygmentsへの移行 PygmentsはPythonで書かれたシンタックスハイライターで多くの言語をサポートして
-
: SlackとSkypeを使っていましたが, Skypeを投げ捨ててDiscordに移行することにしました
これまで Syakeでは, これまでチャットにはSlackを使って, 通話にはSkypeを使っていました. Slackにも通話機能があると思われるかもしれませんが, どうもSlackのクライアントの通話機能にはバグがあるようでした. 私の環境だとSlackで通話するとチャットのウィンドウが使えなくなっていたので, 通話にはSkypeを使っていました. そしてリモートで働く時は基本的にSkypeを付けっ放しにして働いていました. 問題 しかし, SlackでもSkypeでも共通する問題がありました. そ
-
ncurses 6.1にアップデートしたらatopなどのレイアウトが崩れる問題には環境変数TERMを変えれば良いことがわかりました, エスケープシーケンスrepが原因でした
要約 シェルの設定に export TERM=gnome-256color と書けば解決. 問題 ncursesが6.1にアップデートしてから, システム監視ツールのatopのレイアウトが崩れるという問題が発生していました. I upgrade to ncurses 6.1, atop layout broken. · Issue #25 · Atoptool/atop 環境に関する情報提供もありましたし, 今回調査してバグ修正を行ってみようとしました. issueに寄せられたコメントによると,
-
Emacs 26のDiredでディレクトリを削除する時に一々yesを入力しないで済むようにする
Emacsの標準ファイラDiredはディレクトリを削除する際に一々プロンプトを出して再確認します. しかも以下の設定 ;;"yes or no"を"y or n"に (fset 'yes-or-no-p 'y-or-n-p) を行っていても, お構いなしにyではなくyesを要求してきます. yならともかくyesを一々入力するのはかなり面倒くさいですね. これEmacs 26で追加された設定のようで, バグとして認識されているようですね. emacs
-
HaskellでDebug.Traceする時に変数名を2回書かなくても良くなるライブラリdebug-trace-varを公開しました
ncaq/debug-trace-var: You do not have to write variable names twice in Debug.Trace 秒速でコピペしたいHaskellデバッグ用関数 - Qiita を読んで, そう言えばprintデバッグする時に色々と面倒だから開発したかったことを思い出したので, 昼休みに書きました. printデバッグする時には, どの変数をデバックしているのかわかりやすいように, しばしば以下のように書きます. import Debu
-
ウイルス性胃腸炎にかかってつらかった
40℃の熱と下痢で死ぬほどつらかった. 5月29日(火曜日) 日中のテンションがおかしかった. 夜に体がものすごく暑くなって, そろそろ夏が到来したと思って, 一瞬エアコンつけて消して寝ました. 5月30日(水曜日) 会社に行きました. 起きるのがつらく, いつもより1時間遅刻して11時からの出社でした. 会社に着いたあたりで鼻水, 頭痛, 体の痛みを感じました. 吐き気があって, 昼ごはん食べるのがものすごく辛かった. 昼休憩時に寝転がってないと辛かったので会社の床に寝ていました. 昼休憩が終わって
-
.emacs.dのEmacs LispをEmacs内部で全てバイトコンパイルする方法
Emacsを26にアップデートしました. Emacs 26 そうするとファイルを全てバイトコンパイルし直さないといけません. ディレクトリ内のすべてのEmacs Lispファイルを一発でバイトコンパイル - Qiita という風に, バッチモードを使ってバイトコンパイルする方法がありますが, この方法だとload-pathを設定によって変更している場合, 読み込みが出来なくて一部のファイルはバイトコンパイル出来ません. 調べてみたところ, 以下の記事が見つかりました. elisp - How do I
-
JavaのListの連結リストによる独自実装
大学の講義で2015年に書いたMyList.javaを2016年にgistにアップロードしていたのですが, 何故かこれだけ記事にしていませんでした. 何故でしょう? コードが汚かったから恥ずかしかったのかな? 昔のコードが汚いのは当たり前で恥ずかしがることでは無いのに. というわけで, せっかくなので当時レポートに書いた解説を添えて記事にしておきます. いやあ, HaskellやC++の思想がまぜこぜになって一貫していないのでかぶれてる感半端ないですね. ソースコード 当時レポートに書いた解説 Li
-
EsqueletoのilikeでYesodのTextareaを検索する
やりたいこと YesodのTextarea型で保存しているフィールドを Esqueletoのilike関数で検索したい. なぜそのままだとダメなのか ilikeはSqlStringのインスタンスを要求していてTextareaはそのインスタンスじゃないから ilikeの右辺がTextだから型が一致してないとダメ なんでTextじゃなくてTextareaをモデルに保存したの ユーザのtextareaを保存する場所で, 複数回編集が行われることが予想されたので復元が容易なTextarea型にしました
-
Emacs, ENSIMEでScala, Play開発環境を作る
複数回詰まったのでメモ. ひっかかったところだけ書くので他は公式ドキュメント見てください. Emacsへのインストール ENSIMEはpackage.elでインストールできます. scala-modeなどもついてくるのでそれ以外はインストールしなくて良いです. 依存ライブラリがオプショナルなのでバイトコンパイル時にエラーが出ますが気にしない. プラグインのインストール ~/.sbt/0.13/plugins/plugins.sbtに addSbtPlugin("org.ensime
-
競技プログラミングのコンテストに初参加して, 調子に乗って初参加なのにAtCoder Regular Contest 097の方に参加したら見事爆死しました
AtCoder Regular Contest 097 - AtCoderに参加しました. 競技プログラミングのコンテスト初参加です. BeginnerではなくRegular Contestの方に参加したら最初の問題すら解けずに無事死亡しました. C - K-th Substringをずっとやっていました. 最初にHaskellで書きました. import Data.List main :: IO () main = do s <- getLine k <-
-
ReduxのMiddlewareを使ってSentryにReduxのstate情報を送りつける
Sentryというエラー収集サービスがあります. ここには例外などが収集されるのですが, エラーが起きたときのReduxのstateが入るとエラー調査に役立ちますね. SentryにはSentry.setExtraContext(旧版ではSentryClient.setContext)という関数があって, ここに任意のJSONを入れることが出来ます. しかし, 適当に初期化時に設定しても, 初期状態のstateが入るだけで何も役に立ちません. onFatalError関数を追加すればエラー時にフックをかける
-
: laymanがgit commitのauthorを勝手に上書きしていたので報告と対策
何が起きたか 私は ncaq/ncaq-overlay: ncaq personal gentoo overlay というオーバーレイを作っているのですが, これのコミット作者が自分の表記になっていないことに気がつきました. どうやらlaymanでaddした場合リポジトリの設定でコミット作者とコミットメールアドレスが書き換えられるようです. それに気が付かずlaymanの名前とメールアドレスでコミットしていたわけですね. なんで? どうやら 433687 – app-portage/layman-2.0.
-
IBus 1.5.18がクラッシュして日本語入力が出来ないのは絵文字キーを無効にしているせいかもしれません
今朝さあ仕事始めるぞとラップトップを開いたら, ibus-engine-mozcがクラッシュして日本語入力が出来なくなっていて戸惑いました. 色々調べてみたら, IBusのバージョンを下げれば入力できることが分かりました. issueを開きました. ibus-engine-mozc crash ibus 1.5.18, ibus 1.5.17 don't crash · Issue #2007 · ibus/ibus 数日前に既に解決済みなことを教えて貰いました. IBusEngine SEGV when
-
WebMoneyを決済手段として実装するサイトの一部に運営者のミスによって脆弱性が発生しています
IPAとWebMoneyとサイト運営者に報告したのが2月7日です. そろそろ注意喚起を兼ねて広く公開しておきます. 脆弱性の内容 WebMoneyの「基本導入マニュアル」を参照してください. 持ってない方は頑張って手に入れてください. このバグもWebMoneyにバグ報告したのですが優先度が低いということで修正されませんでした. そしてその7ページ目の下半分テーブル4行目(ヘッダは含めない)を読んでください. 次に9ページ目の下半分を読んでください. このファイルを公開してはいけないということがわかりまし
-
StackはGHCやCabalに並列ビルドのjobsオプションを伝えていませんが, 伝えたとしてもGHCの問題で全然速くならない
注意 この記事の内容は既に古くなっています。 GHCの並列ビルドは既に実用的です。 GHCの並列ビルドが実用的になっていました - ncaq を参照してください。 以前の文章 CabalやGHCには-jオプションがあり, ビルド時に並列に処理するかを指示できます. Stackはパッケージ毎に並列ビルド(依存関係のないパッケージを別々にビルドすること)はCPUのコア数に応じて行います. しかし, パッケージ自体の並列ビルドのオプションはcabalに指定していません. 日々GHCのビルドを待つ我々としては
-
stackでも1コマンドでworldパッケージをインストールしたい
stackではグローバルのリゾルバを以下のコマンドで最新版に更新できます. stack config set resolver lts stackのltsをアップデートするたびにzshのhistoryをたどってhlintやstylish-haskellのインストールを行うのは面倒だと思いました. portageのworldみたいに使うパッケージを登録しておいて, コマンド1回でインストールできるようにしたいですね. シェルスクリプトでうまく改行区切りでパッケージを管理するにはどうしたら良いのかなという疑
-
ゆうちょダイレクトの劣悪なログイン画面にKeePassXCの自動入力で立ち向かう
ゆうちょダイレクトのUIはありとあらゆる部分が劣悪です. もっとも悪いのはログインがクソ面倒くさいということです. まずユーザIDとパスワードが別ページに表示されるので, 一緒に入力できないのでブラウザのパスワードマネージャに保存できません. 無駄なセキュリティ対策かと思いきや, ユーザIDはないパスワードだけは保存可能なので, 真に何の意味もないんですよね. またユーザIDがハイフンで区切られる部分で3つに分割されているので, パスワードマネージャからユーザIDをコピペしようとしても3回に渡ってコピペしな
-
Emacs Lispでsort-dwimを書きました
前から書こうと思ってましたがだるくてやってなかったものです. (defun sort-dwim () "1行選択している時は単語のソート, 選択してない時はパラグラフの行ソート, 選択している時はその範囲の行ソート" (interactive) (save-excursion (if (and (use-region-p) (eq (line-number-at-pos (region-beginning)) (line-number-at-
-
Shift_JISに対応しているのでag(the_silver_searcher)からrg(ripgrep)に乗り換えました
ggreer/the_silver_searcher: A code-searching tool similar to ack, but faster. から BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern に乗り換えました. rgの方がagより速いことは知っていましたが, そこまでagの速度に不満を持っていなかったため, あまり乗り換える気にはなっていませんでした. しかし, ついさっき,
-
mikutterでカラー絵文字を表示するためにcairo 1.15のebuildを書きました
インストールは以下から. ncaq/ncaq-overlay: ncaq's personal gentoo overlay mikutter twemojiプラグイン - cobodoのブログを読んで, そう言えば前回mikutter 3.6にアップデートした時に, cairoのバージョンさえ上げればカラー絵文字表示できそうだなという結論に至ったことを思い出しました. なので, cairo 1.15のebuildを書きました. ダウンロードするURLを少し変えたりするだけであっさりインストールできました.
-
Google AdSenseのレスポンシブ対応の関連コンテンツのサンプルコードは間違っています
Google AdSenseの関連コンテンツの量を増やしてみようと, これまで自動設定頼りだったパラメータを修正してみました. ここはレスポンシブwebサイトなので, その記述をしようとしました. そしたらドキュメントのバグを発見しました. レスポンシブ対応の関連コンテンツ ユニットをカスタマイズする方法 - AdSense ヘルプの関連コンテンツ ユニット内の行数と列数を指定する > レスポンシブ対応サイト: 4×1(モバイル)、2×2(PC)に書かれているコードは, <script asyn
-
updatedbをsystemdのタイマーで自動的に実行してファイル検索locateの情報を最新に保つ
Unixにはlocateというプログラムがあります. これはコンピュータ内部のファイルを検索するためのプログラムであり, findよりも圧倒的に高速です. 検索キーワードには正規表現を使うことができます. helm-for-filesのhelm-locateにも使われています. Emacsのhelm-for-filesでnintendoと検索している様子 なぜlocateがfindよりも高速なのか. locateはファイルのインデックスを参照するから速いのです. しかしlocateにはだからこその弱点
-
Clang C++コンパイラは関数内でデストラクタのある構造体が確保された場合スコープを区切っても末尾呼び出し最適化を行わない場合がある?
C++の規格には詳しくないのですが, 本の虫: C++入門書で再帰について解説しようとしたら思わぬ最適化できないコードに出くわしたを読んで試してみました. コンパイルコマンドはclang++ -std=c++17 -O2 tco.cpp. これはsegmentation fault (core dumped)します. #include <iostream> struct raii { raii() { std::cout << "constructor"
-
mikutter 3.6.6をGentooのOverlayでインストールできるようにしました
Overlayはこちらから. ncaq/ncaq-overlay: ncaq's personal gentoo overlay 公式リポジトリに何が起きていたか Gentoo公式のmikutterは3.5.4までしか提供していません. またそれはdev-ruby/delayer-deferred-2.0.0では動かないため, 何も考えずに公式パッケージをインストールすると動かないという状況になっていました. mikutter-3.6.1をインストール というわけで, 前に mikutter-3.6.
-
webpack, Electron環境で__dirnameをfalseにするとDevtronが動かなくなり__dirnameをtrueにするとプロダクションでパスが参照できない問題を解決しました
Devtronという開発ツールがあります. ElectronのIPC通信を見てくれるやつです. 優れものです. しかし困ったことがあって, Devtronはwebpackの設定を__dirname: trueにしないとディレクトリを正しく読み込みません. かと言って__dirname: trueにすれば良いのかというとそうではなく. __dirname: trueにすると, __dirnameがソースコードの場所を指してしまいます. するとプロダクション環境でindex.htmlを参照するのが難しくなってし
-
gtagsでctagsを有効にしてJSXのタグを生成する
放置していましたがいい加減gtagsの設定を整えることにしました. 参考: GNU GLOBALの対応言語を大幅に増やすPygmentsパーサーを導入する - Qiita ctagsをオプション無しで有効にする ctagsを有効にしている環境で, /etc/gtags.confを, default:\ :tc=gtags:tc=universal-ctags:tc=htags: と変更します. そして :langmap=JavaScript\:.js.jsx:\ のように.jsと書かれている隣り
-
Immutable.js 4.0.0-rc.9はFlowでもTypeScriptでもgetとsetの文字列を検査してエラーを出します
Immutable.jsのRecordについて情報を察知しました. class extendでRecordを継承して独自の型を作るやつです. 生JavaScript版, 型安全も何もない. const { Record } = require("immutable"); class Person extends Record({ name: "", birthday: null }) { get age() { return new Date().get
-
JavaScript標準関数Math.maxで配列の最大値を取得する方法とその罠
JavaScript標準関数にはC++の max_element のような「配列の最大値を返す」関数は存在しません(しないよね?). よってMath.max()を使います. Math.maxは与えられた引数から最大の数を返すので, 配列を引数に分解してやれば良いわけです. つまり > Math.max(...[]) -Infinity > Math.max(...[], -1) -1 > Math.max(...[1, 2, 3]) 3 みたいにやるわけですね. 空配列を適用したら-I
-
Emacsの標準バックアップ機能で初回保存時に限らず常にバックアップするようにする
Emacsには標準でファイルバックアップ機能があります. (custom-set-variables '(backup-directory-alist `(("" . ,(concat user-emacs-directory "file-backup/")))) '(delete-old-versions t) ;askだと削除時に一々聞いてくる '(kept-new-versions 50)
-
Zenbackを削除してGoogle AdSenseの関連コンテンツを追加しました
これまで関連記事の表示のためにZenbackを使ってきました. しかし, Google AdSenseの関連コンテンツの表示に乗り換えることにしました. Zenbackの広告表示領域がそこそこ大きく, 内容も固定 精度があまり良くない ためでした. Google AdSenseの関連コンテンツはサムネイルを自動抽出してくれるのも良いですね. 記事に画像が貼り付けられてないと何故かフッターのSkypeアイコンをサムネイルとして認識してしまうのはご愛嬌. 何でだ…? ソーシャルボタンなどは自分で設置すること
-
HaskellのOverloadedStringsでByteStringを作るとマルチバイトを切り捨てる罠があります
ずっと前に知っていたのですが, 頻繁に忘却するので記事にすることにしました. {-# LANGUAGE OverloadedStrings #-} import qualified Data.ByteString.UTF8 as U main :: IO () main = do putStrLn $ U.toString "あ" -- B putStrLn $ U.toString (U.fromString "あ"
-
: git pullした時に削除済みのリモートブランチとマージ済みのローカルブランチを自動削除する
GitHub Flowのように細かく機能別にブランチを分けてpull requestを作っていく形式だとブランチのゴミが鬱陶しくて仕方が無くなります. Gitにはgit fetch --pruneというオプションがあり, これでリモートブランチは削除を検知して消してくれます. しかしローカルブランチはそのままです. なんでそのままなのかわからないのですが, とりあえず削除するのがいい加減面倒になってきたので, シェルスクリプトを書くことにしました. これ自体はGit でマージ済みのブランチを一括削除する -
-
日報をgit logから自動抽出してクリップボードにコピーする
私が今働いている会社は勤務時間を入力する際に「今日何をやったか」を入力する欄があります. 一々手でコピーしていたのですが面倒になってきました. なのでgit logから抽出してクリップボードにコピーするシェルスクリプトを書きました. alias git-daily='git log --all --format="%h %ai %s" --since=$(date +"%Y-%m-%d-00:00:00") --author=$(git config user
-
Gitでファイルを追加するだけの時に雑なメッセージを生成してコミットする
私は~/Documents/をGitで管理しています. Google Driveも使用していますが, 基本的にデータはGitで管理して自宅サーバのプライベートGitリポジトリにpushしてpullして同期しています. 一度Dropboxの同期ミスでロールバックが発生して以来, ずっとこうしています. pushしてpullするのは少し面倒くさいですが, 常にプログラムを待受させなくて済みますし, 基本的にデータの同期は1日の最初にやるだけなので, これで十分なのです. 真に問題であるコンフリクトが発生したとき
-
: Semantic UIでツールチップを要素へのマウスホバーで表示するにはdata-tooltip属性を使う
Semantic UIには Popup | Semantic UIというものがありますが, これはマウスホバーでツールチップを出すための専用の要素を作る使いにくいものです. ボタンなどに注釈としてツールチップを追加したいですよね. しかしHTMLネイティブのものは見辛いから使いたくない. せっかくSemantic UIを使っているのですから. 調べてみたらGitHubのissueが出てきました. Tooltip on disabled button · Issue #4296 · Semantic-Org/
-
JavaScript(EcmaScript)では引数の評価順序は左から右と定められている
JavaScriptで引数が左から右に評価されること前提のコードを書いていました. そこでCやOCamlでは引数の評価順序が定められていないことを思い出しました. Big Sky :: gcc は副作用のある関数呼び出しを含む式評価順序を最適化する。 日本語で文献が無かったので検索に苦労しましたが, Stack Overflowの質問を見つけ出しました. What is the order of evaluation for function arguments in Javascript? - Stack
-
nginxで404ページをリダイレクトさせずに表示する
このサイトの404がnginxのデフォルトのままで流石にあんまりにもあんまりでした. 日本語で説明を表示してトップページへのリンクぐらい残しておこうと思いました. nginxで404ページをカスタムする方法は簡単で, error_page 404 /404/index.html; と書けばそこのファイルを参照してくれます. しかし, このデフォルト設定には1つ問題があって, 404エラー時に404のファイルのURLに飛んでしまいます. これはユーザにとっても管理者にとっても望ましくない動作です. ユーザ
-
helm-ls-gitをhelm-for-filesで一緒に表示する
helm-ls-gitという現在いるgitの管理ファイルを表示するhelmコマンドがあります. これを私はhelm-for-filesで表示した時に一緒に表示させてrecentfなどと一緒に一括検索させていました. それを実現するためにはhelm-for-files-preferred-listにソースを追加すれば良いのですが, helm-ls-gitのソースはデフォルトではnilであり, 追加するだけでは動きません. 変数を初期設定するためにhelm-ls-git-lsを呼び出しておくという暴力的手段を用
-
company-modeでタブキーで複数の補完候補がある時は候補をスクロールして補完候補が1つの時は補完を決定する
emacsの補完用パッケージcompany-mode - Qiitaに実現できそうな関数が載っていましたが. パッケージ化されていないコードをあまり取り込みたくなかったので敬遠しました. 調べてみると標準でcompany-complete-common-or-cycleという関数があってこれが思った通りの動作をしてくれました. 以下のように書けば完璧です. (define-key company-active-map (kbd "<backtab>") 'compan
-
company-modeでタブキーに補完もインデントも割り当てる
auto-completeには(ac-set-trigger-key "<tab>")という関数があります. これを実行すると普段はタブキーをインデントに使い, 補完出来るときのみ補完することが可能になります. company-modeにはそのような関数はなかったため, 補完をワンキーでサクッと実行したい私は困ることになりました. 探ってみるとcompany-indent-or-complete-commonという関数があるようでした. これを(global-set-key (kbd "<
-
SpamAssassinの学習フィルタを重視する
私のメールサーバの~/.spamassassin/user_prefsにはadd_header all Report _REPORT_と書かれていて全てのメールにスパムチェックレポートが追加されるようになっています. スパムが判定されなかったり逆に誤検知が起きた時に原因を知るためです. これを日々見ていると, どうも学習フィルタをあまり信用していないのが原因だとわかってきました. 例えばとある検知されなかったスパムメールは以下のようなレポートとなっています. X-Spam-Checker-Version:
-
webpack, babel, node環境で例外時のスタックトレースに元ソースの場所を表示させる
問題 nodeに読み込ませるソースをwebpackとbabelでコンパイルするようにすると, エラー時のスタックトレースが at Object.eval (webpack-internal:///76:29:7) のような意味不明なものになってしまいます. これはソースマップを有効にしていても起きてしまいます. webpackのissueにも既にこの問題は報告されていましたが. SourceMap don't link to an src file but to webpack-internal:///[
-
遅まきながらEmacsのHaskell開発環境をInteroに移行しました
InteroというHaskellのEmacs向け開発環境があります. Intero for Emacs commercialhaskell/intero: Complete interactive development program for Haskell 私はhaskell-modeとFlycheckを既にうまく強調させて動かしていたため. これを使う必要はないかと思って移行していませんでした. しかし今改めて説明画面を見ると. GHCの提案警告に従ってコードを修正する機能. テストなどの違うター
-
M570がチャタリングを起こすようになったのでMX ERGOを購入して満足しました
2014-10-21にM570トラックボール(正確にはM570t)を購入しました. 概ね満足していたのですが, ここ最近チャタリングを起こすようになってしまいました. もう数年使ってたから仕方ないですね. 普段あまりドラッグ動作はしないので, チャタリングを起こしてもスクリーンショットを選択して取得する時に, 誤動作が起きてイラッと来るぐらいだったのですが. とあるものを購入してからチャタリングは深刻な問題になりました. Sid Meier’s Civilization® VIです. このゲームはドラッ
-
webpack 4でJavaScriptソースをビルドすると__dirnameが/になってしまう問題の解決法がわからない
やっていた作業 今書いているElectronアプリはmainプロセス側はBabelもTypeScriptもFlowも使っていない生JSで書かれていました. 生JSというのも問題ですが, rendererプロセス側ではBabelを使っていたので, mainプロセスとrendererプロセスでコードを共有できず, 同じコードがコピペして増えるという悪夢が発生していました. 私はこれを解決すべく, mainプロセス側もBabelとwebpackを通すようにコードを変更していました. webpackの設定ファイル
-
Emacsのレジスタ機能を使って隔離された疑似クリップボード空間を手に入れました
Emacsのkill-region(カット)(デフォルトではC-wに割り当てられる)はクリップボードに文字列を追加します. いやカットがクリップボードに文字列を追加するのは当たり前ですね. Emacsはそれに追加してkill-line(行を削除する)コマンドやkill-word(単語を削除する)などもクリップボードに文字列を追加します. 行や単語をテキストファイルの中で移動させたいことはよくあるため, 一々行を選択してカットする必要がなく, 削除と同じコマンドでカット出来るのは便利です. 削除時にカットされ
-
YesodのShakespearean TemplatesのHamletで埋め込み形式を使うのはやめてwfsHamletSettings = (wfsHamletSettings def){hamletNewlines = NoNewlines}しましょう
Yesodの Shakespearean Templates :: Yesod Web Framework Book- Version 1.4 はのHamletはインデントで閉じタグを表現します. <body> <p>Some paragraph. <ul> <li>Item 1 <li>Item 2 のように書くわけです. しかしHamletにはタグを埋め込みで書いて閉じタグを明示的に書く方式も
-
: JavaScriptで渡された配列引数をシャローコピーする場合デフォルト引数を適当に使うより引数省略を検知してシャローコピーを省略したほうが高速
とあるpull requestで. JavaScriptクラスのコンストラクタで. 配列引数にundefinedが渡されていることをtypeof foo === 'undefined'によって検知して. 引数が省略されている場合new Arrayして, 引数が省略されていなかった場合配列のシャローコピーを行っているのを見ました. 私は見た, 思った, 書いた. 「それデフォルト引数設定すれば良くないですか?」 とすると「引数を省略した場合配列のコピーが生じるのでかなりパフォーマンスが悪くなる」と返されました
-
jest自体の動作確認は--no-cacheオプションを付けて行いましょう
ハマった順序 babel 7にプロジェクトのライブラリをアップデートしたらjestがbabelのビルドでコケるようになりました. 対応コードを色々書いてみて成功したので, 本当に必要な記述だけを見極めるために変更を元に戻しました. そして失敗を確認するために再度テストを実行したら何故かテストが成功するようになりました. CircleCIでは失敗するのでそのリビジョンでは既に修正されていたということも無さそうです. 原因 キャッシュが原因でした. 私もキャッシュが原因だと疑ったのでgit clean -
-
WebStorm(IntelliJ IDEA)に負けないEmacsのweb開発環境
最近はElectronとReactでアプリを書いています. web開発ならWebStormという風潮があるのでIntelliJ IDEAを使ってみたのですが3日でEmacsに戻ってきました. 周りはみんなIntelliJを使っていて. CTOの方針でVim, Emacs, Atom, VSCodeなどのテキストエディタを初心者に使わせるのはNGで. IDEを使わせるということになっているので. 少し肩身が狭いですが私はEmacsを使い続けています. というわけで現代的(2018年)なEmacsでのweb開発
-
: アプリケーションのパスが変更された時にwebpackのfile-loaderがファイルパスの先頭にスラッシュを付けないので下部のディレクトリを見に行って404になってしまう問題の解決法がわからない
環境 electron webpack babel-loader url-loader file-loader react-router 問題 importやrequireでurl-loaderのfallbackであるfile-loaderが出力するパスの先頭にはデフォルトではスラッシュが付いていません. よってReact Routerなどを使って下部のディレクトリ/foo/に移動した際. ルートに置いてあるbar.pngファイルを読みに行く時. 本来/bar.pngにアクセスして欲しいところ,
-
ReactにcomponentDidReceivePropsが欲しいと思ったけれど今回は無くても解決しました
React.Componentのライフサイクル関数には 新しいpropsを引数で受け取るcomponentWillReceiveProps 新しいpropsとstateを引数で受け取るcomponentWillUpdate propsとstateが更新された後に呼び出されるcomponentDidUpdate があります. ここでクラス内で複数propsを参照する処理を行っていると, propsを更新されてから処理を行いたい時があります. ReactのcomponentWillReceiveProps内
-
親が自宅サーバを物理的に落としてくるのでTwitterで死活監視結果を送ってくれるUptime Robotを導入しました
今日の8時頃に母親が自宅サーバを棚から物理的に落とすということが発生しました. それによりこのサイト, メールなどのサービスが1時間ほど全て止まりました. 落ちていることはTwitterでフォロワーさんに教えて貰いました. その後父親にSkypeで通話して復旧して貰いました. こういう事件は定期的に起きています. これの対策法は全くわかりません. 場所を変えるというのは家の配線の都合上不可能で, 親が線に物を引っ掛けてサーバを落とすという行為は再三注意していますが定期的に起きます. せめて落としたら電話して
-
PostgreSQLアンチパターン 自動採番される疑似キーを手動で入力する
SQL全般の話ではなくPostgreSQLの話です. IDリクワイアド Pseudokey Neat-Freak(疑似キー潔癖症) に関連するアンチパターン. 運用の問題なのでアンチパターンではないかもしれません. 問題 id bigint not null default nextval('foo_id_seq'::regclass) のような自動採番される人工キーに対して, 自動採番のシステムを通さないで, id手動で指定してinsertで入力してしまうと, 次のinsert時
-
Haskellでファイルの変更を監視
別プログラムがファイルにデータの書き出しを行うのを監視する必要があったため. hinotifyというinotify APIのHaskell向けバインディングを使います. 非Linux環境? 何もわからない. import Control.Concurrent import System.INotify main :: IO () main = do inotify <- initINotify watchDescriptor <- add
-
JavaScriptアンチパターン 関連するデータを別の変数に入れる
今日のJavaScriptアンチパターン. class Constant { static get kirby() { return 'kirby'; } static get kirbyColor() { return 'pink'; } static get metaknight() { return 'metaknight'; } static get
-
Re:Haskellで書いてみたらC++の10倍遅かった 5倍程度になりました
10倍は遅すぎませんか? 本の虫: Haskellで書いてみたらC++の10倍遅かった を読みました. 10倍は差が出過ぎなのではないかと思いました. C++ソースコード まずC++のソースコードが完全なものではないので補完しました. #include <algorithm> #include <array> #include <iostream> #include <random> template <typename Random> b
-
現在通信しているポートとプロセス名を確認するコマンド
数年前色々探った結果sudo netstat -aepWが便利だとわかりました. よく使うので, 私は以下のエイリアスを設定しています. alias n='sudo netstat -aepW|less' サーバで実行すると以下のようになります. ソケット名は長いので省略. 私のnginxにアクセスしているクライアントもリモートホストが開示されているので省略. ctive Internet connections (servers and established) Proto Recv-
-
HaskellのGHCによるビルドをLLVMのリンカーLLDで高速化することが出来なかった
リンクが遅い 現在SYAKERAKEをHaskellとYesodで書いています. ゲーム販売webアプリケーションSYAKERAKEを支える技術, HaskellとYesodで作られています - ncaq 開発上常に問題が発生していて, それはビルドに時間がかかるということです. コンパイルが必要になる時はまあ仕方がないです. 本質的に時間がかかることに対してはハードウェアの更新で対応するしかないです. しかし, 差分ビルドが有効になっていても, ちょっとした1つのファイルの変更でかなり時間がかかってしま
-
ゆうちょ銀行の銀行コードなどを確認する
今回Google アドセンスに支払い方法を追加する時に, Google アドセンスに銀行コードを要求されて困りました. ご丁寧にキャッシュカードの何処に書かれているのか画像が添付されているのですが, ゆうちょ銀行のキャッシュカードにはそれは載っていないようです. どうやるのかググって【Google AdSense】お支払い方法の設定(受取口座の追加)※ゆうちょ銀行にも対応! | はぴすぷというサイトを見つけたのですがリンク先のゆうちょ銀行のサイトがリンク切れになっています. 新しいページも載ってないので非常
-
Nintendo SwitchのJoy-Conの破損は保証期間内でも有償修理になるので気をつけましょう
2018-01-25日に, 電車の中でJoy-Con(R)の故障に気が付きました. 故障の内容は, Nintendo SwitchのJoy-Conは本来, 裏にある取り外すボタンを押しながらでないと本体から取り外せないはずですが, 上にスライドさせようとするだけで取り外しされてしまう, というものです. 家に帰ってからJoy-Conグリップに接続して試してみたのですが, やはりボタンを押さなくても取り外しされてしまいます. よく見るとJoy-Conのプラスチックの部分がRはLに比べて摩耗しているように見えま
-
: デュアルブートしている環境でVirtualBoxでLinuxをホストOSとして別パーティションのWindowsをゲストOSとして起動
忘れると困るので自分用にメモします. 私のXPS 13 9360は買った直後にパーティションを切ってGentoo Linuxをインストールしています. その後Windowsは殆ど起動していなかったのですが, Windows環境を必要とする状況が出てきました. VirtualBoxで専用ディスクを生成しても良いのですが, せっかく別パーティションにWindowsが存在すること, vagrant upが何時まで経っても終わらないことから, この別パーティションのWindowsを有効活用するようにしました. まず
-
spamcがベイジアンフィルタの学習データを認識しない問題はspamassassinコマンドを直接使ったら解決しました
spamassassinの精度が悪すぎることから調査してみたらspamcコマンドだとベイジアンフィルタの学習データを認識しないことがわかりました. spamcというのはspamdと組み合わせて使うspamassassin用のクライアントです. spamassassinを一々立ち上げていると初期化コストがかかるため, これを使えば軽量にスパムチェックが出来ることになっています. 例によって私もこれを使っていました. しかし, どうもspamassassinの精度が悪すぎることが長年の悩みでした. 全部のスパム
-
GNU/LinuxでのCDのリッピングにはAudexがオススメです
最近CDをリッピングすることも少なくなってきましたが, GNU/LinuxでのCDのリッピングには Audex - KDE UserBase Wiki がオススメです. audexでリッピングする前のメタ情報認識 5年前ぐらいに知って, ずっとこれを使っています. KDEのソフトウェアですが, もちろんKDE環境でなくても利用できます. おすすめポイントはMusicBrainzとfreedbの両方に対応していることで, どちらかの引っかかったデータを利用することが出来ます. データがない場合や間違って
-
mikutter-3.6.1.ebuildを書こうとしたけれどidn-ruby-0.1.0.ebuildが書けないので正常に動作するものが書けなかった
現在Gentooの公式portageリポジトリのmikutterは3.5.4-r1です. 公式で提供している delayer-deferred の最新版に対応していないので古いものをインストールする奇妙な状況になっていました. ならばとりあえず私のoverlayにmikutter-3.6.1を追加しようと思いました. mikutter-3.6.1がdivaを要求して, divaがportageに存在しないためこれを追加する必要がありましたが, これ自体は他のfakegemを要求するebuildを参考にして簡
-
WebMoneyがつらい
電子マネーWebMoney(ウェブマネー)がつらい. 私はWebMoneyを個人顧客として使ったことはありません. 決済手段として導入しようとしていてとにかく仕様が地獄. 怒りのあまり文章が整ってないですし順序も支離滅裂です. 私の怒りを整理するために書いているのであまり参考にはならないかもしれません. 仕様書が簡単にアクセスできる場所にない 「問い合わせ」をしないと仕様書が見れません. 普通にweb上にパブリックに公開していません. 我々の場合, 詳細な仕様書が来たのは契約後でした. なので私は契約する
-
私の誕生日なのでぜにぃ姫を使って親交のある人にBitZenyを配りましたが1ZNY配られると思ってたら10ZNY配られてしまい50人のつもりが5人になってしまいました
本当はスクリプトにして再実行できるような形で配布したかったのですが, 忙しかったので適当に済ませました. 方法は雑すぎるので秘匿します. TwitterのAPI使いにくすぎる. 適当に親交のある人を取得してthanksで送りまくったら, ドキュメントに書いてある通り, 1ZNY送信されると思ってたら, 実際には10ZNY送信されて, 50人に送信するつもりが5人にしか送信されませんでした. 悲しいけどまあ良いや. 一応開発者にはTwitterでドキュメントのミスを報告しました. 額を気にするならthanks
-
D言語で(a == 1 && a == 2 && a == 3)をtrueにする
D言語で無かったので. import std.stdio; void main() { auto a = new N(); if (a == 1 && a == 2 && a == 3) { writeln("true"); } } class N { bool opEquals(int rhs) { return true; } } opEqualsによるオーバーロードが可能
-
Haskellで拡張無しでみそスープする
C++ では 2 + 2 の動作を上書きできないかもしれないが、ところで、ここに Haskell という言語があります — Make 生活リズム 正常 again (@mod_poppo) 2018年1月23日 「1+1は?」Haskell「みそスープ」 pic.twitter.com/SF9wi21zeJ — Hideyuki Tanaka (@tanakh) 2018年1月23日 +を実行できるようにするにはNumのインスタンスを作れば良い. みそスープを出力するようにするにはShowを
-
: JavaScriptのexportはexport default以外禁止にしてしまった方が楽になる
追記: 2020-12-11 別にそうでもないなと考えを変えました. なぜ default export を使うべきではないのか? - LINE ENGINEERING には納得できる論も多いですし, この時やっていたプロジェクトのモジュールがつらいのは単に命名がまずかったからです. 概要 相当遅ればせながらJavaScriptのモジュールについて調べて, 自分なりの付き合い方をまとめました. 結論: export defaultのみを使おう. 他のexportはやめよう. JavaScriptコ
-
計算理論のテスト用ノート
決定性有限オートマトン KK = 状態の集合 ΣΣ = 入力の集合 δδ = 現在の状態状態 -> 入力 -> 新たな状態 q0q_0 = 初期状態 FF = 受理状態の集合 非決定性有限オートマトンはδ=K−>Σ−>{K}δ = K -> Σ -> \{K\}となっている. ε付きは入力が空白の入力を受け付ける. 正規言語 列の長さ: その列に含まれる記号の個数, 列xの長さを|x|と書く.また長さ0の列を空列と呼び, εで表す. 列xとyの連接とは, 列x
-
アルゴリズムとデータ構造2のテスト用ノート
B木 各ノードは最大m本の枝を持つ, 恨と葉以外のすべてのノードはm/2以上の枝を持つ, 挿入時ノードの要素数がm-1を超える場合は真ん中の要素を親として2分割して部分木を作り, 親のノードの枝の位置に挿入する, それを繰り返す, ノードの中間の要素を消す時は, 子の最大の要素をそこに挿入する, 葉がなくなってしまう場合は隣から貰ってくる, 隣にも存在しない場合, 子の要素2つを合体して新たな子とし, 枝の数を減らす, 高さは0オリジン, 全てのノードに要素を詰めた場合, 要素数は高さ*次数0+高さ*次数1
-
アルゴリズムとデータ構造2(テスト返却)
私のテスト結果は100点満点中68点でした. 平均点は64.7, 最高点は92点だそうです. 手計算が多くて全然駄目だと思っていたのですが, 意外とそこそこ出来ていたそうです. 紙上でアルゴリズムの計算過程を書くよりも, プログラミング言語で書いて出すという形式の方が良かったと思いました. まあ自分が有利になるからそう思っているだけで, 全体で良い講義になるという確証があるわけではないのですが. 間違えた答えについては, 計算用紙を提出してしまったのでなんでこんな答えが出てきたのかわからなくなってしまいまし
-
mmapというファイルやデバイスをメモリーにマップするシステムコールの解説
選択3: mmap mmapについて説明しなさい。その際に必ずanonymous メモリーについて言及すること。 概要 mmapとは, ファイルやデバイスをメモリーにマップするシステムコールです. 一応mmapはPOSIXに含まれているシステムコールです. しかし, POSIXに定義されている動作はごく一部で, 特にflags引数に指定できるのはMAP_FIXED, MAP_PRIVATE, MAP_SHAREDの3つしかなく, 無名ページもサポートしていません. それぞれのUNIXが独自に拡張してお
-
UNIX(NeXTSTEP)
寝坊して20分遅刻したので最初何喋っていたのか全く把握してませんでした. スティーブ・ジョブズのNeXTのプレゼンがキャノンの日本語字幕付きでしか動画が残っていないらしい. ウケる. NeXTのアーキテクチャってメインフレームを参考にしてたんですね. メインフレームのアーキテクチャをワンボードに載せるという. コンパックとか懐かしい名前が出てきますが, HPは現役でIBMはPCをLenovoに売り渡して時代を感じます. Mach Kernelの話. ダイナミックローディングが出来るのは当時としては珍しかった
-
fioによるbcacheシステムのベンチマーク, あまりbcacheに期待しないほうが良い
ファイルシステム: Btrfs, マウントオプションは/dev/bcache0 on / type btrfs (rw,noatime,compress=zstd,ssd,space_cache,subvolid=5,subvol=/) SSD: Samsung SM961 HDD: TOSHIBA DT01ACA3 bcacheが正常に効いているのか確認するため, キャッシュデバイス無効有効両方でベンチマークを取ることにします. 本当はbcacheを使わない純粋なSSDでのベンチマークもするべきなので
-
: Linuxでは何故SSD向けのキャッシュ機構をZFSのようにファイルシステムに依存せずにbcacheのような形で提供しているのか考察
選択2: SSD向けのキャッシュ機構 SSD向けのキャッシュ機構bcache Linuxカーネル3.10ではSSD向けのキャッシュ機構bcacheが新たにサポートされた。ファイルシステムZFSなどではSSDをキャッシュとして使うメカニズムを持っているが、bcacheはファイルシステムなどに依存しない独立した形で提供されている。 Linuxのアプローチではファイルシステムにも依存しないアプローチを採用するのは何故か論じなさい。 ZFSのメインターゲットであるSolarisにもDCD -- Disk Cac
-
科学論・科学史102(元素合成)
電子には重さはあるけれど, 大きさは点で無い. 電子の大きさはめっちゃ小さいとかではなく, 極限で0に近づく. ただ点だけれど電子には重さがあり, 0.5MeVの重さを持っている. 原子核はもっと重たい. 太陽が石油の塊だとすると, あのエネルギーの放射では100年ほどでエネルギーが尽きてしまう. 核融合のエネルギーが太陽を光らせている. 核反応と化学反応には相当の違いがある. 太陽では小さいものから大きいものを作る核融合を使っている. 人間は核融合に未だ成功してない. 私「ロシアでは核融合炉出来ていると聞
-
systemdを使ってサーバーで優先度を低くしてBitZenyを採掘する方法
手元のwebサーバ兼ルータもCeleronですが, 一応CPUが存在していて, BitZenyはCPUでもそこそこ掘れるので設定してみました. しかしこのサーバの本懐はマイニングではないので, あくまでCPUが空いている時にのみ動かしたい. 普通にsystemdのユニットファイルのNice値を設定することで可能のようでした. [Unit] After=network.service [Service] ExecStart=/home/ncaq/.local/bin/minerd 省略 Nice=19 [
-
Gentooでccminerをビルドしてmonacoinを掘る
どうもmonacoinを1モナ2000円で掴んだ負け組です. 今回はせっかく高級なGPUがあるんだからccminerでmonacoinを掘る環境を整えました. それまでもGPUだけはあったんですが, 電源の能力が不足していたのでGPUマイニングは行っていませんでした. それが電源が変わって負荷に耐えられるようになったのでマイニングを行ってみることにします. PCの電源を750WのFSP RAIDER RA-750から1000WのCorsair RM1000iに乗り換えたらGPUが安定駆動するようになりました
-
nvidia-cuda-sdk-9.0.176がglibc-2.26-r5でビルドできない問題の解決方法
nvidia-cuda-sdk-9.0.176をglibc-2.26-r5環境でビルドしようとすると, /usr/include/bits/floatn.h(61): error: invalid argument to attribute "__mode__" /usr/include/bits/floatn.h(73): error: identifier "__float128" is undefined のようなビルドエラーになります. これを正攻法で解決
-
PCの電源を750WのFSP RAIDER RA-750から1000WのCorsair RM1000iに乗り換えたらGPUが安定駆動するようになりました
今までFSP RAIDER RA-750を使っていました. これをCorsair RM1000i PS562 CP-9020084-JPに変更しました. 変更した理由は, 従来の電源でMSI KOMBUSTORのストレステストを実行したら, KP41でWindowsが強制終了するためです. 計算上Threadripper 1950XとGTX 1080 Tiの構成では750Wで足りるはずなのですが, 症状がどう見ても電源容量の不足のため, 変更しました. 変更したらストレステストは問題なく動くようにな
-
Haskell拡張で暗黙的なデータ変換を行って比較する型クラスを作ることは可能ですが, 少なくとも私の素朴な実装は実用的ではない
Haskell, Maybe a型とa型を比較できるようEqとかOrdが定義されてないのはなぜだろう。Just x == y = x == yx == Just y = x == yみたいな。 — Ryou Ezoe (@EzoeRyou) 2018年1月12日 Eq a bというふうに型を2つとる設計にしなかったのはなぜだろう。NumとIntとFloatみたいに共通の型を作れってことなんだろうか。 — Ryou Ezoe (@EzoeRyou) 2018年1月12日 そういうclass
-
UNIX(UNIXとIoT時代のセキュリティ)
Meltdownの時事ネタ. 最近の組み込み機器はLinuxが動いているという話. そう言えばIntelの組み込み機器死にましたね. Intel、「Galileo」「Edison」「Joule」の提供終了へ - ITmedia NEWS 下手な安いラップトップは物理コア数2ですよね. というか私が今使ってるXPS 13 9360もi7-7500Uなので物理コア数2. スマートフォンに載ってるARM系の物理コアが8(実働は4)が当たり前なのでスマートフォンの方がコア数多いことが普通に多いという. Intelで
-
BitZenyをRyzen Threadripper 1950Xで採掘する時の良い環境とオプションを探しました
BitZenyをRyzen Threadripper 1950Xで採掘する時の良い環境とオプションを探します. 環境やオプションを変えてマイニングして, ハッシュレートを記録していきます. 検証環境. % uname -a Linux strawberry 4.14.8-gentoo-r1 #15 SMP Wed Dec 27 23:26:15 JST 2017 x86_64 AMD Ryzen Threadripper 1950X 16-Core Processor AuthenticAMD GNU/Li
-
Threadripper 1950Xに対してメモリが足りなかったので16GBから32GBに増設しました
16コア32スレッドのThreadripper 1950Xを購入して, これで並列ビルドも楽々!clangやchromiumのビルドも超速で終わるようになる! と思っていたのですが, 1つ誤算がありました. メモリが足りない. 最近のメモリの高騰から, メモリは送られた16GBのものを使っていたのですが, これでは到底32スレッドを活かすビルドができないことが判明しました. atopで見ればわかるのですが, cc1plusは1プロセスにつき700MB程度のReal Sizeメモリを消費して, これが32個起
-
情報リスク管理(総まとめ)
試験の話. 持込禁止. 現代社会がバランスが崩れているというか, 常に人間にモラルなんてない気がします. サイバーセキュリティ人材が不足しているという話本当だろうか… 私は相手にもされなかったので懐疑的, 私個人の問題と言えばそれはそう. 清掃員とサイバーセキュリティのエンジニアを並べられて強みは? と言われても困る. 情報リスク管理ということで実際の情報漏洩事案などをもっとバンバン知れるものだと思ってたのですが, そういうのがあまり無くて残念でした.
-
科学論・科学史102(量子力学の世界, 小テスト)
蜜柑の色は橙色だが, 黒体放射している橙色の物体と温度が異なるのは何故か 蜜柑は黒体ではないため, 反射光があるだけ. 光源を消去したら蜜柑の色も異なる. と回答しました 合ってるっぽいですね. プランクが導入した量子が実際に存在することを示したのは誰か, またその人は量子をどのようなものだとしたか アインシュタイン. 電子を量子だとした. と回答しました. わからなかったのでダメ元でした. 正解はエネルギーを割って割って割れなくなったものでした. 間違えました.
-
サービス情報システム(C言語には関数が存在しないという迷言)
早々に 「C言語には関数の定義はない」 「getcharは関数ではない」 という発言が飛び出してきました. 一体何を言っているのかわからない. もうこの講義についていける気がしません. 7.21.7.6 The getchar function と思いっきりC11(N1548)に書いてるんですよね. 「HTTPのプロトコルは何を送っても良い」 ????? 授業後に「C言語には関数の定義はない」という言葉の真偽を聞くために, C言語規格にgetchar関数が定義されていることを示したら, 「C言語に関数は
-
スクリーンショット環境をimport(ImageMagick)からgnome-screenshotに移行できなかったので, PyGObjectで「最近開いたファイル」を追加するスクリプトを書きました
最近スクリーンショットを撮ることが増えたので, gnome-screenshotに移行しようとしました. importの不便な点は, スクリーンショットが「最近開いたファイル」に表示されないため, 選択するのが面倒ということです. 当初はimportで取得したファイルをどうにかして「最近開いたファイル」に登録することを考えていましたが, gnome-screenshotを使えば自動登録されるのでそれで良いことに気がつきました. 以前のスクリーンショット取得関数は以下です. これをxmonadで呼び出していま
-
alias pa='ps aux|ag'をag自身が見えないようにfunctionに変更して同期させましたがスマートな書き方ではない気がします
私は数年前から以下のzsh aliasを使用していました. alias pa='ps aux|ag' これを定義していると現在mozcが実行されているか調べる時にpa mozcと入力するだけで良いので便利です. しかしこのaliasには1つの問題がありました. agがps auxと同時に起動されてしまい, 引数に検索キーワードが含まれるので検索にag自身が引っかかってしまいます. これまでまあ別に良いやと思って数年過ごしてきましたが, 突如修正したくなったので修正しました. aliasで