Alienware m17に買い換えてGentoo LinuxをBtrfs on dm-cryptでインストールしてNVIDIAのGPUを有効にして起動しました

この記事には Alienware m17の購入に至った理由 購入方法(ALIENWARESTORE AKIBAでの購入が1万円割引でオススメ?) Gentoo LinuxのBtrfs multiple device on dm-cryptでのインストール方法 OptimusをBIOSで無効化出来ない状態でもNVIDIAのGPUをLinuxで使う方法 Alienware m17のレビュー が書かれています. Alienware m17 (08A2) 型番P32Eを購入しました 第8世代のインテルCPUを搭載した薄型ゲーミング ノートパソコンAlienware m17 | Dell 日本 これ新製品だからか型番でググっても何も出てきません.型番はシールにはP32Eと書いてますが,lshwは08A2と報告してきます. おしゃれな箱に入っています XPS 13と比べると暴力的に大きい 購入理由 ゲームではないプログラミングに適したラップトップPCを調べた時のメモ - ncaq で検討した時はデスクトップが支給されると決まったと書きました. しかしその後ほぼリモートワーク許可さ

xmobarで日本語dateをフォーマットして表示する方法

xmobar標準のdateを使うと表示はこうなります. date 私は英語を理解しないのでSatの意味が分かりません.しばらくそのままこれを表示させて英語の曜日を覚えようと思いましたが無理でした.日本語にしたい. 実は日本語にすること自体は簡単です. xmobarにDateの設定をせずに%date%を動かせば良いのです. 日本語date しかしこれはなんかスペースが多くて領域が勿体ないですね.JSTなのも自分にとっては自明ですし… と思って設定します. Run Date "%F %a %T" "date" 10 すると先程のように英語設定で表示されます.なんで…? そこでDateZoneですね. xmobarをwith_datezoneフラグ付きでインストールします. stack install . xmobar --flag xmobar:with_xft --flag xmobar:with_datezone 設定を書きます. Run DateZone "%F %a %T" "ja_JP.utf8

:
Linuxカーネル5.0ではCFQ, Deadlineと言ったシングルキュースケジューラが全て削除されてカーネルのデフォルトIOスケジューラ設定も無くなっていました

Linux 5.0での変更 5.0での全体の変更はここで見れます. 今回ビックリしたのはblock/cfq-iosched.cとblock/deadline-iosched.cの削除です. CFQが主にSSDで性能が良くないことは知っていましたが,Deadlineが削除されるとは思っていませんでした. まあパフォーマンスの最大化 - ArchWikiを信じるならCFQとDeadlineはマルチスレッドに対応していないので削除は時代の流れでしょう. 言及はコミット上ではここでされています. すごい破壊的変更なのに,Linux 5.0のリリースニュースにもチェンジログをまとめたサイトでも全然取り上げられて無くて,make menuconfigして初めて気がついてびっくりしました. LKMLはメーリングリストは購読するのメールが溢れそうですし,あんな分量の英語を読めないので私は読んでません… またそれに伴ってカーネルのデフォルトのIOスケジューラ設定も削除されました.そしてカーネルのmenuconfigでもこれまではEnable the block layer/IO Schedulersと

RustプロジェクトでCircleCIを設定する

RustプロジェクトについにCircleCIを導入する余裕が生まれてきたので,設定メモを書きます. ググったのですが全網羅して書いてる所が見つからなかったので仕方なく自分で調べて書いてます. CircleCIのimageを利用する 最初はRust公式のDockerイメージrust - Docker Hubを使おうと思ったのですが, CircleCI的にはCircleCIの作ってるcircleci/rust - Docker Hubを推奨してるらしいですね. それでタグは何を選択すれば良いんでしょう…Tags (344)とか探す気がしない.少なくとも今回はJavaScriptは一切関係してこないので,nodeだのbrowserだのは要らないのですが…デフォルトのタグ無しを選択することにしました. コンポーネントをインストールする CircleCIのrustイメージにはclippyとrustfmtが含まれていないので command: rustup component add clippy rustfmt する必要があります. rustfmtでフォーマットチェックする ビルド

:
Rust超初心者向けチュートリアル,ツールとマクロの紹介

社内向けに発表した資料を多少改変してコミュニティに還元します. 初心者向けガイドなので既に書いてるって人は見なくても良いと思います. 実際に手を動かしてツールをインストールしてもらうことを推奨します. 適当に動かしたい人向け Rust Playground webサーバがRustコードを実行してくれます. Rustのダウンロード数100位までのライブラリが使えるので,大抵のサンプルはインストール不要でここで実行できます. shareしたコードは自動的にgistにアップロードされるのでそこだけは注意. share機能でパーマリンクで簡単にコードをシェアできるので,TwitterやGitHubやChatworkでソースを送り合うのに便利です. rustup rustup.rs - The Rust toolchain installer curl https://sh.rustup.rs -sSf | sh システムの方法で入れたいとかはnightlyの扱いが地獄なので諦めてrustupを使った方が良いです. stableかnightlyか nightlyは不安定版なので一般ユー

RustのStructOptで環境変数に値をフォールバックさせたい時の書き方

問題 プログラムにAWSのキーを入力して動かしたい. 素直に引数に入れさせたいのでStructOptを使って認識するようにします. use structopt::StructOpt; #[derive(StructOpt, Debug)] #[structopt(name = "basic")] pub struct Opt { #[structopt(short = "a", long = "aws-access-key-id")] pub aws_access_key_id: String, } でもAWS関連のツールって普通環境変数の値を見てキーを認識するじゃないですか. 環境変数 - AWS Command Line Interface その感覚でこのツールを使った人は認識しなくて混乱します. StructOptで指定されなかった場合環境変数にフォールバックする方法無いのかなと思って,公式ドキュメントを眺めてもローレベルのパースに使ってるclapには書いてありますが,StructOpt自体のドキュ

Firefox for Androidでも「通知の許可の要求をブロック」する方法

webのプッシュ通知の許可を求めてくるダイアログは鬱陶しいですよね. 鬱陶しい通知許可ダイアログの例 Notifications APIは非常に濫用され,どのサイトに行ってもいきなり許可を求めてくるようになりました. 非常に不快です. デスクトップ版Firefoxには「通知の許可の要求をブロック」する機能があります. 通知の許可の要求をブロック 私はこれを使って,有用であるChatworkとFacebook以外の通知を求めるダイアログを完全にブロックしています. 快適です. しかし残念ながら,何故かAndroid版Firefoxにはこの設定をするUIがありません. しかし内部で動いているプログラムは同じなので,about:configで設定してしまえば同じ設定が出来るのではないかと考えました. デスクトップ版Firefoxでそれっぽい設定値を探すと,permissions.default.desktop-notificationがそれなのではないかという推論しました. 実際そうらしいです.Turn off all "Will you allow ____ to sen

Emacsでrusticとeglotを使っている時にflymakeのハイライト表示がバグるので無効化しました

前提 私はEmacsでRustを書く時にbrotzeit/rustic: Rust development environment for Emacsを使っています. そしてLanguage Server Protocolのフロントエンドにjoaotavora/eglot: A client for Language Server Protocol serversを使っています. rusticはeglotを自動設定して,eglotはflycheckではなくflymakeを使ってエラーの検出と表示を行います. しかしそれはflycheckが使えないということではなく,flycheckはflymakeをバックエンドにしてエラーをきちんと表示してくれます. 問題 エラーが出てきた後それを修正すると,flycheckはきちんとエラーが修正されたことをエラーリストを消して教えてくれます. しかしflymakeは認識と表示が不整合な状態になることが多々あり,コードのアンダーラインに赤い線がハイライトされたままになることが多く,コンパイルエラーが治ったのかわかりにくいです. 解決法 エラー

:
Rustで外部crateの型にメソッドを実装する

Rustにはメソッド構文があります. メソッド構文 となるとデータに関連する処理は単独関数ではなくメソッドで実装したいですね. よし type Comments = Arc<RwLock<BTreeMap<u32, String>>>; impl Comments { fn lines(&self) -> Vec<String> { unimplemented!(); } } これはエラーになります. 理由についてはRustのコヒーレンス - 簡潔なQを読みましょう. ここでは手っ取り早く解決方法だけを書きます. type Comments = Arc<RwLock<BTreeMap<u32, String>>>; trait Lines { fn lines(&self) -> Vec<String>; } impl Lines for Comments { fn lines(&self) -

nickel.rsで作ったサービスでCORSを許可する

ガバガバセキュリティで良い場合. 特別なパッケージは要らないです. サンプルコードnickel.rs/enable_cors_header_set_issue.rs at 181065e693dd826f167534126bce5aa2254ed657 · nickel-org/nickel.rsを見ます. enable_cors関数を実装します.コピペする場合はMITライセンスのサンプルコードなので転載元は明示しておきましょう. server.utilize(enable_cors);でヘッダを付加する設定を行います. server.options("**", middleware!(""));で全てのOPTIONSメソッドに対して200 OKを返す設定をします. これでプリフライトリクエストが成功します. 細かく制御したい場合は第一引数のrouteをちゃんと書いて下さい. 今回は簡単でしたがnickelやはりmiddlewareマクロや寿命管理が難しい.やめたい.

:
EmacsのHaskellの開発環境をinteroからHaskell IDE Engineに移行しました

chrisdone/intero: Complete interactive development program for Haskellをやめて,haskell/haskell-ide-engine: The engine for haskell ide-integration. Not an IDEを使い始めました. 昔の移行記事遅まきながらEmacsのHaskell開発環境をInteroに移行しました - ncaq 昔の記事を見て気がついたのですが,今はターゲットの切り替えはhaskell-session-change-targetとしてhaskell-mode標準で備えていますね. 動機 以下の機能が欲しかったからです. apply-refactによるhlintの推奨コードへの自動書き換え 領域の自動フォーマット 賢い補完 新しいプロジェクトを開くたびにinteroをビルドし直すような無駄の排除 Language Server Protocolへの統合 インストール デスクトップにはbcacheを使っていて容量に関しては割と富豪なので 何も考えずに make bui

xmonadを再起動した時xkeysnailが終了してくれなくて2重起動するようになっていたのでsystemdに管理だけ任せて起動はxmonad側で行うようにしました

xmonadで起動したzshのスクリプトがxmonadの終了時に終了しない spawn ".xmonad/xkeysnail-ncaq-daemon" としてstartupHookに差し込んであるスクリプトが終了しません. xkeysnail-ncaq-daemonの内容は以下です. #!/usr/bin/env zsh set -ux while do sudo xkeysnail --quiet ~/.xkeysnail-ncaq/config.py >&2 echo "error: xkeysnail rebooted!" done xmonadを終了してもこのスクリプトが終了しないため,xmonadを再起動したら結果的にxkeysnailが2重に起動することになり,Linuxカーネルが滅茶苦茶エラーを吐くことになります. init_uevent_argv: buffer size too small でjournalが埋め尽くされます! zshスクリプトって親プロセスが死んでも生き残るの

デスクトップLinuxにBtrfsとSnapperを使うようになってファイルを間違えて削除してしまう恐怖から開放されました

今の私のデスクトップはbcache+Btrfsで,ラップトップはBtrfsという構成なのですが,Btrfsの機能を活かしたら最高に便利でした. Btrfsに関する基礎的な知識はこちらを参照してください. Btrfs - ArchWiki 圧縮にlzoを選んでるのと(zstdの方が良い)discardオプションを使っているのが(NVMeの場合fstrim.timerを使った方が良い)今風では無いですがそれ以外は網羅しています. スナップショット Btrfsにはスナップショット機能があり,その時点でのディレクトリの状態を取っておけます. もちろんコピーした分だけサイズが増大するということはなく,コピーオンライトを使っているため,スナップショットを取った後に変更した分だけ使うサイズが増加します. Snapper これだけだと手動でスナップショットを取らないといけないので面倒くさいですが,スナップショットの取得や削除を自動化してくれるSnapperというツールがあります. Snapper - ArchWiki snapper create-config / で設定を作ることができます

:
RustのCargoプロジェクトで素直に書いたDockerfileをdocker buildするとソースが書き換わるたびにフルビルドが走って滅茶苦茶遅いことはcargoのファイルだけコピーしてビルドすることで解決します

Docker初心者です. C++アプリケーションに依存してたりして少し複雑なcargoプロジェクトをDockerで動かせるようにしていました. 素直に COPY . . RUN cargo build --release と書いていたら,ソースに変更を加えるたびに,依存ライブラリのビルドが全て走って,毎回滅茶苦茶時間がかかります. その対策として, # プログラムの依存関係だけをコピー COPY Cargo.toml Cargo.lock /work-dir/ # 何もプログラムが無いとビルドエラーになるのでダミーのものを用意する RUN mkdir -p /work-dir/src/ && touch /work-dir/src/lib.rs # キャッシュのために依存ライブラリだけをビルドする RUN cargo build --release # リポジトリ全体をコピー COPY . . # 本物のビルドを行う RUN cargo build --release のようにCargo関連のファイルだけをコピーしてダミーのソースコードを配置してビルドする

MSIのM-Flashで更新対象のBIOSファイルが認識されないと思ったら,同じ型番の違うマザーボードのBIOSをダウンロードしていました

2017年からUEFIアップデートしてないですし,最近第二世代Ryzen対応させるアップデートが出てるはずなので,MSIのマザーボードのBIOS(UEFI)をアップデートしようと思いました. まずはlshwで型番を確認 strawberry description: Desktop Computer product: MS-7B09 (To be filled by O.E.M.) vendor: Micro-Star International Co., Ltd. version: 2.0 serial: To be filled by O.E.M. width: 4294967295 bits capabilities: smbios-2.8 dmi-2.8 smp vsyscall32 MS-7B09で検索して,出てきたBIOSファイルをUSBメモリに詰めて,そしてファイルが認識しません. lshwの出力する型番ファイルが間違っているというわけではなく,UEFIの出力する型番も同じです. UEFIの画面 調べてみると

Dockerで起動したサーバにcurlでアクセスしても「接続が相手からリセットされました」とエラーメッセージが出るだけの時の解決策

エラー curl: (56) Recv failure: 接続が相手からリセットされました 解決法 docker run --network=host で解決します. In Mac, curl: (7) Failed to connect to localhost port 8080: Connection refused · Issue #359 · bazelbuild/rules_docker 見てて気が付きました. 1日潰しました. The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server. Use host networking | Docker Documentation でLinux以外はhostをサポートしてないからLinux以外では使えません. あとポートマッピングも出来ません. 何故かは

GentooをXPS 13 9360に再インストールした時に詰まった所のメモ

前回のインストール. XPS 13 9360(2016年発売)にgentooをインストール - ncaq 動機は容量が足りないためです.次のXPS 15のアップデートまでこのPCで耐えしのぐつもりなのでやっていきます. Windowsのパーティションが縮小できませんでした 「十分な空き領域がないのでこの操作を完了できません」と出てくる 前回のインストール時には縮小できる範囲が半分ぐらいだったのでちょうどそれぐらいで分割しましたが,明らかに足りなくなってきたのがわかりました. しかしWindows側も容量が足りていない. しかし,Windows Updateを全て終わらせてからディスクのクリーンアップをしてみたら,以前のWindowsの30GBを消せました. よしこれでパーティションの縮小が出来るようになると思って, Windows 10/8/7でCドライブを縮小できないことを解決! などを見て ページングファイルを無効化 メモリダンプを無効化 などを行ってみたら,「ディスクの管理」は「このサイズまで縮小できます」と返事を返すようになりました. しかし,いざ縮小してみると,「十分

xmonadでxmobarなどに表示されるウィンドウタイトルがかなり短く省略されてしまうことの対策

問題 4Kディスプレイを買ってから気がついたのですが,xmonadが表示するウィンドウタイトルはかなり短く省略されてしまいます. 短く省略されている図 せっかく大きなディスプレイを買ったのにタイトルが省略されているのは勿体無い! 特にFirefoxのwebページのタイトルは長いのが多いですし,Emacsのマイナーモード群は下のステータスバーではウィンドウ分割されると読めなくなるので余ってる領域で全部閲覧したい. ということで何故省略されているのか調べて解決させました. 原因 xmonadやxmonad-contribやxmobarのソースコードを読んで,原因はxmonad-contribにあることがわかりました. 私のxmobar周りの設定は以下のようになっています. main :: IO () main = statusBar "xmobar" myPP (\XConfig{modMask} -> (modMask, xK_u)) myConfig >>= xmonad myPP :: PP myPP = def { ppCurr

:
FirefoxがGCCとClangのどちらでビルドした方が速いか私のGentoo Linux環境で測定してみました

結論 あまり変わらないのでClangを使うことにしました. FirefoxがGCCではなくClangでビルドされるようになりました 次のナイトリーからTier-1プラットフォームのFirefoxすべてがLLVM Clangでビルドされることになると伝えた。 Firefox全プラットフォームでLLVM Clang利用、性能向上を確認 | マイナビニュース そしてFirefox 64からは正式にClangで全てのプラットフォームに提供されるようになりました. Improved performance for Mac and Linux users, by enabling link time optimization (Clang LTO). (Clang LTO was enabled for Windows users in Firefox 63.) Firefox 64.0, See All New Features, Updates and Fixes しかし実はGentooのデフォルト設定だとGCCでビルドされるままなんですよね.Gentooの特性上コンパイラ依存を

:
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 スタンドが無料でついてくるらしいですよ.スタンドの有用性については購入してないので知らないです. スマートフォン遍歴 2011年: Samsung Galaxy S2(ドコモ版) 2014年: Google Nexus 5(LG, Google Playから購入) 2017年: Google Nexus 6P(Huawei, 中古で購入) 2017年: Huawei P10 lite 2018年: Pixel 3 XL(HTC(引き抜き?), Google Playから購入) Nexus 6PからHuawei P10 liteに乗り換えました,オススメのスマートフォンです - ncaq なん

J:COMのようなOP25Bをしていてサブミッションポート(587)をサポートしていないプロバイダでTLS(465)でメールをリレー送信する

J:COMに完全に移行してメールが送信できなくなった OP25Bのせいです. J:COMは一応リレー用メールサーバを用意している マンションが契約した時に配られた書類をひっくり返して確認しました. しかし世の中の手順書はみんなサブミッションポートを前提にしている postfixでOutbound Port 25 Blocking(OP25B) 対策 -自宅サーバ編- | server-memo.netなど色々資料がありますが,みんな587を前提にしているのでそのまま使えません. Gmail使う方法だとダメ Gmailは元のFromをX-Google-Original-Fromに格納してFromがGmailのものになってしまうのでダメです. ポートを465に変えるだけだとダメだったと思ったらユーザ名がドメインも含んでるだけでした sasl2使うのは諦めてpostmapで認証する仕組みにして以下のようにmain.cfを書きました. # OB25B対策 smtp_tls_loglevel = 1 smtp_use_tls = yes smtp_tls_wrappermode

サイトにsitemap.xmlを追加しました,簡単かと思ったら意外と大変で2時間ぐらいかかりました

動機 昔の記事を更新した時にGoogleに優先してクロールしてほしいため. Yesodを使った時は動的コンテンツを含んでもyesod-sitemapを使ってサクッと作れたのでかなり簡単な作業だと認識したため. 参考実装 Sitemap with Hakyllを参考に,こちらはテンプレートではなく処理前コードを書きました. 最終的には/sitemap.xmlには <?xml version="1.0" encoding="utf-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> $for(entry)$ <url> <loc>https://www.ncaq.net$url$</loc> <lastmod>$updated$</lastmod> </url> $endfor$ </urlset> と書

:
Gentoo上のEmacsでまともなRust環境を構築しました,バグ報告で問題が解決しました

Rustその2 Advent Calendar 2018 - Qiitaの10日目の記事です. バグ報告した影響か,rustic-modeの作者の修正によって以下の内容はあっという間に陳腐化しました. 最後の章で修正を記述します.なので最後の章を読んで内容を実行してください.陳腐化した内容はこれはバグとの戦いとして一応内容を残しておくことにします. これまでrust-modeとflycheck-rustだけでEmacsでRustを書いていましたがそろそろ限界になってきました flycheck-rustが安定してなくてエラーが出るときと出ない時があったためです racerを導入 rustic-modeを導入するも,めちゃくちゃバグ報告した,workaroundも書きました できた環境 Gentooだと何が問題なのか Firefoxが既にRustを使っていることは有名です.また私はRust製の高速grepであるripgrepを使っています. Shift_JISに対応しているのでag(the_silver_searcher)からrg(ripgrep)に乗り換えました - nca

:
Rustの肥大化したmain.rsをファイル分割する方法(超簡略版)

Rustその2 Advent Calendar 2018 - Qiitaの5日目の記事として投稿します. Rust初心者向け記事です. Rust 2015を想定していますが,Rust 2018向け情報も含んでいます. Rustのモジュールに関する情報,たくさん情報があって混乱しました. なので文字数少なくまとめます. 実行プログラム向けにmain.rsと書いているので,ライブラリを書いている人はlib.rsと以下読み替えて下さい. コードを分割してpubなどをつける 同じディレクトリsrcに,新しいファイルを作ってそこに分割したいコードを書いて下さい. 例えばstructopt向けのstruct Optをopt.rsに書くとか. useはmain.rsのものをそのままコピーすれば大抵OKです. それで関数とかstructとかそのフィールドにpubをつけて回って下さい. マクロをexportしたい場合は#[macro_export]を使います. /// writeln!とflushを同時にしたい /// [Masaki Haraさんのツイート: "OKです。CC0 1.0によ

:
Acerの4Kモニタ(RT280K)を購入しました,GNU/LinuxでのフルHDモニタを混ぜたマルチディスプレイ環境もきちんと設定できました

購入したもの RT280Kです. RT280Kbmjdpx | acer セールで価格が¥35,840になってたので,そろそろ4Kモニタぐらい買っても良いだろうと思って購入しました. 他にも色々ありましたがこれは4KモニタでありながらGtoGが1msを謳っているので,ゲームにも使えないことは無いだろうと判断しました. もちろんプロゲーマーなら144Hz駆動のやつでも買うのでしょうけど,私はヌルゲーマーだから関係ありませんね. トリプルディスプレイ スピーカーが無音状態でもうるさい このディスプレイ点いている時は何故か「キーン」という音が鳴っていて結構うるさいです. これはAmazonで買ったから気が付かなかったとかではなく,家電量販店とかでも他の音があるから静かな自宅じゃなかったら気が付かなかったでしょう. 何の音だろう…電気通すのに音が鳴るのかな?そこまでの低レイヤーには詳しくないですね. 静かな自宅だとPCのファンレベルにはうるさいのでかなり気になります. とりあえずスピーカーの音を0にしてみたら音が鳴らなくなりました.1だとめっちゃうるさいのに0だと音が鳴りません.

:
Surfingkeysを使ってFirefoxでも高速にGoogle翻訳を使う

Firefoxで一番不便なのはワンクリックでページを機械翻訳に投げられないとこなんだよな…いい感じの拡張もなかった…作れという話かもしれんけど — Hideyuki Tanaka (@tanakh) 2018年12月7日 Surfingkeysでキーボードに割り当ててワンキーで飛ばすようにしてます — エヌユル (@ncaq) 2018年12月8日 私はFirefoxを使っていますがGoogle翻訳も便利に使っています. brookhong/Surfingkeys: Map your keys for web surfing, expand your browser with javascript and keyboard. という拡張機能があって,ChromeとFirefoxで使えます.これはかつてのKeySnailのようにJavaScriptを好きに記述することが出来ます.WebExtensionの規制上,KeySnailほどシステムに介入できるわけではありませんが. これを使えばキーボード入力で好きなJavaScriptを発動させることが出来ます. 私のSurfi

SpamAssassinをバージョン3.4.2にアップデートすると任天堂からのメールが文字化けする症状を直しました

結論 設定ファイルに書いてある add_header all Report _REPORT_ を消すと治ります. 症状 最近任天堂から来るメールが常に文字化けしているので割と困っているThunderbirdが悪いのかと思ったけど生のメールファイルでエンコード試してみたけど正しく認識しないASCIIがそのままなのでutf-8っぽさはあるし実際content-typeもutf-8が指定されてるんだけどutf-8で読めないサポートに連絡だな pic.twitter.com/VMu6I3QwRY — エヌユル (@ncaq) 2018年11月30日 任天堂からのメールが文字化けしてる問題ThunderbirdだけじゃなくてAndroidのGmailでも発生してるからやっぱり向こう側か私のメールサーバがおかしいっぽい — エヌユル (@ncaq) 2018年11月30日 そう言えば任天堂からのメールが文字化けしてる件spamassassinをアップデートしたときと同期してる気がする暫くspamassassin通すのやめてみるか — エヌユル (@ncaq) 201

:
海外からDDoS攻撃してくるカメラをシャットダウンしてしまうのは不正アクセスなのか?自首してみたが返答がない!そして泥沼のDDoSへ

顛末を記録した雑多なログになっているので整理されていない部分が多々あります. 2万文字を超えているので気合を入れて読むか適当に読み飛ばしてください. これでも不要な調査データを省いたりしてスリム化したのですが超巨大化してしまいました. 2018-11-07から自宅のネットワークの調子が悪すぎる 自宅のネットワークが死んでいました. J:COMの回線現在98%パケットロスするという状態になっています pic.twitter.com/Vfe0O3p5j2 — エヌユル (@ncaq) 2018年11月7日 今日の私14時 サーバが落ちていることが通知される,サーバにDHCPがアドレス振ってくれてない15時 ucomがついに死んだかと思いjcomに移行する16時 移行できたけどOP25Bどうしよう17時 jcom回線が98%パケットロス状態18時 なんとなくucomに戻してみたらDHCPからアドレス振られた私の午後返して… — エヌユル (@ncaq) 2018年11月7日 ucom回線に戻して治って良かった良かったと思ったらucom回線も90%以上のパケットロスが発生

Mackerelを実験として自宅サーバに導入しました

サーバのCPU使用率やネットワーク利用率とかをモニタリングしたい 最近思うことがありまして(詳しくは片付いてからサイトに書きます),サーバのCPU使用率やネットワーク利用率をモニタリングしたいと思うようになりました. また仕事で運用しているサーバも監視したくて,それの実験としてまず自宅サーバで試してみようとという思いもありました. 既にAWSのRoute53 ヘルスチェックのhttps外形監視は導入していますが,CPUなどのデータもわかりやすく見ておきたいですね.AWSのデフォルトのグラフ見づらくないですか? そこで無料のサーバ監視ツールを導入しようとして,対象になったのがMackerelです. Mackerel(マカレル): 新世代のサーバ管理・監視サービス 他にも色々あるようですが,多くの人がこれを勧めているので使ってみることにしました. 登録 登録はGitHubアカウント持ってれば即座に済むので,1分で済みました.流石にメールアドレスの確認は必要でしたが.こういうサービスにありがちな,勤務先などの個人情報をとにかく引っ張ろうとするようなフォームじゃないのはとても良いですね.

Haskell Day 2018に参加しました

Haskell Day 2018 - connpass 発表はせず,聞き専です. やっぱり遅刻しました 8時30分に起きる予定が9時30分に起きてしまったので,会場に着いたのが本来10時のはずが10時53分になってしまいました. 一応メンターやるつもりだったんですが立候補する時間はとうに過ぎてしまいました. あまり手を挙げて質問する人が居ないのでどっちにしろメンターとして活動するのは無理だった感が出てきました. ハンズオン あれ?show 5 丸めとか四捨五入気にしなくていいって...あれ? #HaskellDay pic.twitter.com/4z3JqKosDQ — taashi (@taashi_s) 2018年11月10日 を見てバグをGitHubのissueに立てました. Ex5に「誤差を気にしなくて良い」と書いているにも関らず実際は気にする必要がある · Issue #78 · haskell-jp/makeMistakesToLearnHaskell Haskellを導入した話とHRRの紹介 Haskell を導入した話と HRR の紹介 Haskel

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.el: Emacs interface to the Docker Remote API Emacs LispからDockerを操作するためのライブラリ.先程のdocker.elを作るために作られているようですね.一般Dockerユーザは直接使うことは無さそうです. docker-compose-mode meqif/docker-compose-mode: Major mode for editing docker-compose files docker-composeのファイ

webサイトの「Cookieを使用する理由」に「理解しました」を一々押さなくて済むようになるアドオンもしくはフィルタ

EUのGDPRの影響もあり,Cookieを使用する時に使用許可を求めてくるサイトが非常に増えてきました. 殆どのwebブラウザにはCookieを拒否する設定があるので,Cookieが嫌な人はその人が設定で無視すれば良いのに,何で私が「同意する」「I agree」を一々押さないといけないんですかね? 特にスタックオーバーフロー系のサイトはドメインが細かく区切られているため,よく押す必要があってストレスです. ストレスでしたがだるくて放置していましたが,今日なんとなく解決する方法を調べたら分で発見しました. I don't care about cookies というアドオンもしくはフィルターです. 適用前 適用後 引用元 このように「Cookieを使用する理由」を撲滅してくれます. アドオン版はFirefox, Chrome, Operaに対応しています. こんな身元のはっきりしないマイナーなアドオンを入れて何かあったら嫌という人は,Adblockやublockのフィルターとして利用することができます.ublockさえ信頼出来れば安心できます. これならEdgeやSafariでも

DiscordのGNU/Linux版で通話開始直後にノイズが走る問題は環境変数PULSE_LATENCY_MSECを90に設定することで解決できます

Discordはとても良いソフトウェアですが,繋ぎ始めの瞬間だけとてもノイズが走るのが難点でした. SlackとSkypeを使っていましたが,Skypeを投げ捨ててDiscordに移行することにしました - ncaq しばらく待っていればノイズが消えて普通に通話できるようになるのですが,それまで待つのは鬱陶しいですね. この問題を解決しようと色々単語を変えて検索してみて,やっと解決方法を見つけました. lectrode commented on 2018-08-24 16:37 I was having static/crackling whenever I joined voice chat until I came across this workaround: PULSE_LATENCY_MSEC=90 discord AUR (en) - discord 環境変数PULSE_LATENCY_MSECを90に設定すれば良いそうです. Discordを起動する時だけに設定するのは面倒なので,/etc/env.d/のファイルに書くとか,xmonad.hsに liftIO $ se

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 by the following messages: * FEED_CRYPT_KEY requires mcrypt functions which are not found. You might want to check tt-rss wiki or the forums for more information. Please search the forums before creating new topic for your question. これを解決

最近(秋)朝起きた時に足がだるくなる時の対策法

気温が下がって足が冷えているから寝る時にちゃんと長ズボンを履く. 足が冷えてると血行が悪くなるのでだるくなる. だるさは最悪一日中続きます. 毎年起きているので学習してきました.

babelで分割代入を変換するのはobject-rest-spreadではなくtransform-destructuring

難読化ツール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 without declaration. · Issue #328 · javascript-obfuscator/javascript-obfuscator それはプロパティの名前を正しく認識していないためで,以下のようにコンパイルされるからです. function main() { const _0x501e82 = { v: 0x1 }; let _0x5b6c40; ({ v } = _0x501e82); console["log"](_0x5b6c40); }

:
GentooとEmacsでC#(Unity)開発

omnisharp-emacsはデフォルトでomnisharpをダウンロードする しかし最新版を手で指定してやらないと動作しない模様 dotnetコマンドを使えばslnファイルは作れる Gentooだとdev-dotnet/dotnetcore-sdk-bin OmniSharpがシンタックスエラーは表示しますが型エラーが表示されない 何故か動くようになりました EmacsでC#(Unity)のプログラムを書く Gentooにunity-editorをインストールしたいなら今はdidactic-duckを使う - ncaq OmniSharp/omnisharp-emacs: Troll coworkers - use Emacs at work for csharp!をインストールします.omnisharp-emacsにはGitHubからomnisharpのサーバプログラムをダウンロードする機能がついているので,自前でビルドしてインストールする必要はありません.~/.emacs.d/.cacheにインストールするのでgit管理している人は除外しておきましょう. バージョ

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-editorで調べてみたところ半公式overlayにunity-editorの2018があるとのこと. むかし2017使ったら複数のChromiumプロセスがCPU100%を専有して使い物にならなかったので,どうせビルドできても使えないだろうと判断して2018をインストールしてみることにします. didactic-duckを追加します. インストールできました なんか文字描画がガタガタで読めたものじゃなくなっているのですが,とりあえずインストールは出来たので良いとします.

Firefoxからなんとか追い出されずにQuantumに移行して旧アドオンと似た環境を作れました

最新版に移行したメモ. だいぶ前の話ですがFirefoxの最新版ではXPCOMやXULを使う拡張が動かなくなりました Firefox QuantumではXPCOMやXULを使うアドオンは動かなくなりました. リリース直後にはそうなると私は死しか無かったのでその場しのぎの回避策を使っていました. Firefox ESRの使用です.ESR版は長くサポートされるので,最新版ではなくても深刻なセキュリティリスクは小さいです.Gentooにもちゃんとセキュリティアップデートが降りてきます. というかstableに対しては保守的なGentooではunstableを有効にしない限り,デフォルトではESR版のFirefoxがインストールされます. やめてweb開発者さん古いブラウザを使うなと叩かないで私もweb開発者なんです. しかしFirefoxのESRバージョンであるFirefox 52もサポートは9月に終了します. なので頑張ってまともに使える環境を整備しました. 作業メモを公開します. Firefox自体の移行はサポート終了ギリギリに行っていて,少しずつ環境整備を行いました. React

CommonMarkでは順序付きリストの数値は無視されなくなっていました

古典的Markdownでは順序付きリストの数値は無視されます Markdownをそれなりに書いている人はみんな知っていると思いますが,古典的Markdown処理系では 2. foo 3. bar は <ol> <li>foo</li> <li>bar</li> </ol> と変換されて,数値が2から始まることは無視されます. というか順序付きリストの数値は基本無視ですね. これはHTMLの順序付きリストは1から始まり,これを制御するweb標準的方法はなかったためです. 同僚がチケット管理システムのMarkdownのこの挙動がバグではないかと質問していたので,仕様ですと返しました. CommonMarkでは無視されない 今調べてみるとCommonMark Specでは数値の始まりは無視されないようですね. 変換結果を見るとstart属性に数値が設定されています. start この整数値を持つ属性は、リスト項目の序数の開始値を指定します。序数の形式が XXXI のようなローマ数字や文字であっても、値は常

ゲームではないプログラミングに適したラップトップ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の実行が遅い メモリが8GBでは全然足りない,swap食いまくる ストレージが256GBで全然足りない Intel HD Graphics 620は流石にゲームしなくても描画が遅い,アプリ切り換えで画面が一瞬グレイになる ディスプレイが13インチでフルHDだと流石に狭い Dell Dellの特徴としてクーポンで10数%普通に値引きしてたり学割が本人使用じゃなくても良いという点があります. 学割使用可能の人が他の人が使うために代理購入しても良いです.チャットで不正にならないか確認しました

electron-builderがnode_modulesのディレクトリをapp.asarにパッケージングしない原因はapp/package.jsonに依存を書いていないからでした

問題解決を行おうと思ったのですが徐々に行き詰まってきてしまったので,問題点と調べた内容を整理するためにメモを取ります. 問題 Electronアプリケーションをelectron-builderでパッケージングすると,Semantic UI LESSのアイコンが表示されません. 原因 ビルドとパッケージの手順は,webpackでsrcからappにデータをビルド,appの内容をdistにパッケージするようになっています. ビルドしたときはきちんとapp/node_modules/semantic-ui-less/themes/default/assets/fontsにアイコンフォントはコピーされるのですが,electron-builderでパッケージングすると,node_modulesディレクトリはapp.asarにパッケージングされずに除外されてしまいます. 副産物としてビルド組み込みを改善できました Semantic UI LESSをアプリケーションに組み込むにあたって,postinstallのたびにnode_modulesの内部を書き換えるようになっていました.しかし本来バ

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: Encountered two children with the same key,と警告されます. 同じ内容のメッセージでも2つ該当する時があるのでこの場合は重複して表示させたいです.幸いそれぞれのメッセージには対象とする入力があるのでキーは個別に設定できます. 標準の使い方をしているだけなのにエラーが出るのはなんか納得がいかないので,ソースコード見て解決策を探そうと思いましたが,よく考え直してみたらlistショートカットを使わずにchildrenで渡せば問題ないことに気が付きました.

さくらインターネットのUbuntuサーバにssh接続しようとするとConnection refusedになって接続できない問題の解決法

予想外の苦戦 知人にお願いされてssh接続できるサーバを建てることになりました. 知人はさくらインターネットのVPSを契約していてそれに立ち上げることになりました. ssh接続可能な環境なんて5分で建てられるわwって舐めてかかったら意外と苦戦しました. 原因は以下です. ssh: connect to host x.x.x.x port 22: Connection refused このエラーが常に出て全てのssh接続を弾くようになり何も出来なくなりました. 原因 SSH - SSH接続する際、「ssh: connect to host XXX.XX.XX.XX port 22: Connection refused」と表示されてしまう(83193)|teratail に書いているようにfail2banが私のIPアドレスを弾くようになったのが原因です. ユーザ作りたてで当然暗号鍵使うか,ちょっと開発するだけの環境だけでサービス提供しないからパスワードで済ますか悩んでて,何回かパスワード認証に失敗したのが原因ですね. 解決 とりあえずwebサービスは提供しないので,VPSの

勘違いしていましたがReduxのstateにはMapなどのプレーンじゃないオブジェクトも保存できます

致命的な勘違いをしていました ReduxのstateにはJavaScriptのPlain Objectしか保存できないと思い込んでいました.ここでいうプレーンなオブジェクトというのはconstructorが[Function: Object]になっているものですね. 正しい認識 結論から言うとReduxのstateには基本的に全てのデータ型のオブジェクトを格納できます.しかし一部はReduxの開発者ツールには表示されません. 実験 stateのfooフィールドにDate, moment, Immutable.Record, Mapを入れてconsole.logで表示しました. すると,全てのデータ型でオブジェクトは正常に型を保ったまま表示されました. しかし,Mapのみ開発者ツールに{}として表示されました. これは以下の結果を見れば条件がわかります. > JSON.stringify(moment()) '"2018-08-18T03:30:43.933Z"' > JSON.stringify(immutable.Map([[

:
正社員として働き始めてからおよそ4ヶ月が経過したので給与明細と労働感想を公開します

給与明細で紙飛行機を作って一番遠くに飛ばせた人が優勝する大会を開こう — ばんくし (@vaaaaanquish) 2017年10月21日 kazoo04とかならフォロワーが1万人も居るので「イケてるエンジニアは皆給与明細を公開している」みたいなムーブメントを起こせるはず — ばんくし (@vaaaaanquish) 2018年6月1日 4月に正社員として雇われてからおよそ4ヶ月が経過したので給与明細を公開したいと思います. 給与明細を公開すると私にとっても皆にとっても良いことが産まれる可能性があると思うからです.以前2017年10月にTwitterで給与明細を公開した所時給が上がったり良いことが実際にありました. また私は情報を共有することは基本的に良いことだと思っています. あと就職エントリ買いてという要望もありました. 一応スペック 専修大学ネットワーク情報学部卒業 18卒 22歳 データベーススペシャリストとネットワークスペシャリストと情報セキュリティスペシャリスト保有 AtCoder茶色の競技プログラミング苦手勢 TOEIC最高点数345点 数学ができなす

ESLintのコアのみのルールで相対importを禁止する

前提として,絶対importを使っています webpackの設定を以下のようにしています. const path = require('path'); module.exports = { resolve: { extensions: ['*', '.js', '.jsx', '.json'], modules: [path.resolve('./src'), path.resolve('./node_modules')], }, }; こう設定するとアプリケーションの内部モジュールにも絶対importが使えるようになります. これを導入した当時はあまりにもディレクトリが深く大量に存在して,現在どこに居るか一々時間をかけて把握しないとimportが出来ないという問題が発生していたため,苦肉の策として絶対importを導入することに決めました. 絶対importなら import common from 'common'; と

sentry-electron 0.5.5が`TypeError: module.require is not a function`で起動できない問題を調査しました(未解決)

[@sentry/electron - npm](https://www.npmjs.com/package/@sentry/electron)のバグ調査をしました. 前に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=development electron . App threw an error during load TypeError: module.require is not a function at new ElectronFrontend (/home/ncaq/Desktop/foo/app/webpack:/node_modules/@sentry/electron/dist/dis

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します. すると以下のエラーが発生しました. % stack setup Writing implicit global project config file to: /home/ncaq/.stack/global-project/stack.yaml Note: You can change the snapshot via the resolver field there. Using latest snapshot resolver: lts-12.0 Downloaded lts-12.0 build plan. No se

ダイキンのS22VTESというエアコンを購入したのですが実際にかかる価格がわからなくてややこしかった

エアコンを買い替えたい そろそろ暑くなってきました. 私の部屋にあるエアコンは東芝製の30年ぐらい前のものらしい,RAS-251BVZというものです.ググっても情報がリモコンぐらいしか出てこない程度には古い. 燃費考えると買い替えてもペイするのでは? 燃費を考えなくてもどうも温度センサーが鈍いようで,かなり部屋が暑くなるまで止まることを繰り返していて非常に不快なので最新のものに買い替えたくなりました. プラズマクラスターやナノイーのような,疑似科学に手を出していないところが良いので聞いてみたら,ダイキンをオススメされました.実際手を出してないっぽい.色々なメーカの製品を見てみたところダイキンが格別高いというわけでもないので,ダイキンにすることにしました. 私の部屋はそんなに広くないので,一番安いモデルで十分でしょう. よって購入するのは以下の商品です. 価格.com - ダイキン S22VTES 価格がわからない 本体の価格は書いているのでわかります. しかし取り付け料金,撤去料金が簡単にはわかりません. 表記していないところもありますし,一つ一つ辿って問い合わせる必要がある

:
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 'gtk2' を書き加えます. するとGemfileが存在しないというエラーが出ます. とりあえず古いからかもしれないと思って3.7.2のebuildを作成します. Gemfileが存在しないというエラーが出たので,これまでmikutter.rbとcoreだけをインストールしていた所,全てインストールするようにしました. すると以下のエラーが出ます. /usr/share/mikutter/vendor/twitter-text/extractor.rb:2:in `r

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-loader', options: { publicPath: '/' }, すれば解決しました. 問題 development環境ではちゃんと動きます. しかし何故かproduction向けにビルドして実行ファイルを作ると読み込めません. Failed to load resource: net::ERR_FILE_NOT_FOUND になってしまいます. asar l app.asarするとちゃんと画像ファイルがバンドルされていることが分かります

:
自宅のルータが存在しないサイトにアクセスした時に証明書エラーを出すのを直す

自宅のネットワークでドメイン切れの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-Length: 185 Connection: keep-alive Location: https://example.invalid/ Expires: Fri, 03 Aug 2018 05:05:44 GMT Cache-Control: max-age=2592000 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload Cache-Control: no-cache するとその先443の

:
AtCoderをD言語で解きたくなったので環境を整えました,いや整えられてないです

AtCoderをD言語で解きたくなった D言語がC++に対して勝る点 GCがついているのでメモリ管理が面倒ではない rangeに対応しているのでsortなどを行うためだけにbegin, endを使う必要がない rangeに加えてUFCSがあるのでデータと連ねて処理する時に直感的に記述できる 標準で配列が動的構築に対応しているのでvectorのような長いコードを書く必要がない 標準の文法に連想配列がありインターフェイスがわかりやすい C++だとintの最大値がstd::numeric_limits<int>::max()で取得するところD言語だとint.maxで極めてわかりやすい 標準ライブラリが充実している D言語がC++に対して劣る点 GCがある分その分遅い 私がC++の経験の方が多いのでD言語の標準ライブラリをあまり把握していない 日本語資料があまりないので標準ライブラリの解説は英語を読む必要がある AtCoderにあまり重要視されていない(C++はboostまでついててずるい) D言語がHaskellに対して勝る点 破壊的操作を容易に行えるためメ

ReactでTable要素のmount(描画)に時間がかかる問題を初回の描画を切り捨てることで解決しました

事案 React + ReduxでTableの描画に10秒程度かかる. 要素は多くて700件ぐらい. やりたいこと 描画を2秒ぐらいにはしたい. やってたこと Reduxのデータ構造見直し Reduxのデータをなるべく更新しないようにする mainプロセスの処理最適化 階層を小さく 全て無駄だった そもそもupdateではなくmountに時間がかかっているのですからやってたことは全て無駄. 更新減らすとかも無駄. ページャ作れば良い Table要素はどうせ大半はファーストビューに含まれないのですから範囲外の要素は描画しなければ良い. つまりページャを実装すれば良い. 一般的に範囲外要素を描画しないミドルウェア的なものがあった気がするんですがググっても出てこない. react-virtualizedでした. ページングにしたんですね。ちなみにreact-virtualizedとかは検討しましたか? — 🍤エビリファイ定食🍤 (@eofykun) 2018年6月28日 まあ今回は700件程度なのでこれ使うのはオーバーキルっぽいですね. 追加で操作は要求でき

doctestを実行するようにしたのですが,全部指定するとTravis CIが通らない

これまでhaddock形式のコメントで使い方を書く時にdoctestの形式でコメント書いていました.しかし,実際doctestは実行していませんでした.いい加減実行してテストしておこうと思ったので導入しました. Travis CIのコマンドを変えずにテストを自動実行して欲しいのでコマンドラインでの実行はやりたくないですね. Stack(Cabal)と連携して実行するようにしたいです. package.yamlに書くことにします. doctest-discoverを導入してみました しかし公式の導入方法だとだと引数にソースファイルを全指定する必要があるようですね.(勘違い)それはファイル指定に漏れが発生しそうなのでイヤですね. そこでdoctest-discoverを使うと,ファイル一覧を自動生成してくれるようですね. package.yamlに以下のように指定します. tests: doctest: main: doctest-driver.hs ghc-options: - -fwarn-tabs - -threaded

render内でReact Routerを使ってRedirectした後に,Reduxのstateにdispatchしたら,警告が発生する問題をコンストラクタとrenderを併用して解決

やりたいこと Reduxのstateからリダイレクト先を取ってきて,React Routerでリダイレクトしたら,リダイレクト先をクリアします. この処理が何故かコンポーネントの一部のcomponentWillReceivePropsで行なわれていて,そのコンポーネントを表示しない設定を追加したかったのでHoCに移しました.componentWillReceivePropsはもう消去が確定してますしね. なんでそんな実装になってたの React関係ない外部コンポーネントでイベント待受してリダイレクト処理が入るので. renderに全部書いたら警告出ますね Warning: Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are

:
データベーススペシャリスト試験に2回目の挑戦で合格しました

ネットワークスペシャリストの記事 ネットワークスペシャリスト試験に合格したので学習方法などを書いておきます - ncaq 1回目 1回目の結果 当時就活で精神ボロボロでフラフラだったのであんまり期待してませんでした. 2回目 2回目の結果 試験前日の土曜日に休暇を取りましたが,集中できずにほとんど勉強できてなかったのであまり期待してませんでした. 答えも適当に埋めてましたし. でもギリギリで合格することが出来ました. 試験時はこんなことツイートしてたみたいですね. カーソルのこと全く知らなかったので適当に答えたら間違ってた — エヌユル (@ncaq) 2018年4月15日 午後1全然時間足りなかった…これは落ちた気がする — エヌユル (@ncaq) 2018年4月15日 時間配分を間違えて焦ってまともな回答ができなかったこれは落ちたか… — エヌユル (@ncaq) 2018年4月15日 午後2終わったー感触としては何もわからなかったのでダメみたいですね敗因は疲れからまともに前回の反省と勉強をしなかったこと — エヌユル (@ncaq

certbotをnginxを起動したままsystemdのtimerで動かして証明書を自動更新する仕組みが出来た気がします

問題 今日サイトやメールの証明書が突然切れて叩き起こされました. 本来はLet's Encryptには切れそうな証明書をメールで通知する機能があるのですが,昔古い証明書に関する通知を消したら,メールアドレスごと通知が消滅する仕組みだったようで,通知が全く来なくなってしまいました.通知の復活方法が調べても出てこない… 要望 自動更新するようにしたい. 他のシステムも自動更新出来るようにしたいですが,まずは自分の個人サイトで試してうまく行くか試したい. 実装方法 certbotはcertbot renewだけで証明書更新が出来るため,これをsystemdのタイマーで動かせば自動更新が出来るはず. 課題 certbotは認証に80や443ポートを使うため,nginxを起動したままだと更新が出来ません. nginxを起動したまま更新できるnginxプラグインがあるのですが,これを昔(1年前ぐらい?)試してみたことがあるのですが,うまく動きませんでした. そしてwebrootは超面倒くさいです. 解決 とりあえずもう一度試してみるかとユーザーガイド - Let's Encryp

JavaScriptでtypeof x === 'undefined'を使わないで欲しい理由

何故嫌なのか説明します. nullを弾けない > typeof null 'object' となります. undefinedの場合弾いて,nullの場合許容したい時があるでしょうか.私はほとんどそんなものは見たことがありませんし,それはしばしば設計ミスを示しています.一般的にnullも同じく弾くべきです. 変数のフィールドを参照した際のTypeErrorはundefinedでもnullでも起きるため,両者を弾く意義は大いにあります. falseを弾けない > typeof false 'boolean' undefinedとnullを弾いてfalseを許容するプログラムは実際見たことがありますが,これもややこしく設計ミスの可能性が高いです. 意図した場合だとしても,false以外を弾くならx === falseとした方が意図が明白です. 空文字列を弾けない(賛否両論) > typeof '' 'string' undefinedとnullを許容しないで空文字列を許容するプログラムは割

CSSのwidthを指定して,選択された値より実際のwidthが小さくなってしまう原因は,他の要素が大きいことと,flex-shrinkの未設定でした

症状 Electron/1.8.7, Chrome/59.0.3071.115でwidthの値が指定した値より小さくなってしまう現象に遭遇していました. この現象のせいで要素が隠れてしまうバグが発生していました. 小さくなってしまうだけなら反映されてないだけだと納得出来るのですが,Chromeの開発者ツールで選択された値より計算された値が小さくなってしまっていたので混乱していました. 値が食い違う この要素にはpaddingもmarginも存在せず.box-sizingを開発者ツールで解除してみても同じくズレました.スクロールバーは横幅70pxも存在しません. とりあえず大きめの値を設定してはみ出しを回避することはできますが,それでは原因がわからない. min-widthを設定すれば小さくならないのですが,min-widthとmax-widthを両方設定するのは敗北感あります. 原因 色々調べたら以下のページを見つけました. HTML - CSSでWidthをpx指定しているのに、指定サイズより幅が小さくなる(92815)|teratail 原因はflex-shrink -

このHakyllサイトのシンタックスハイライターをhighlight.jsからPygmentsに移行しました

highlight.jsへの不満 このサイトではhighlight.jsをコードのシンタックスハイライトに利用していました. これには以下の問題がありました. Emacs Lispに対応していない フロントエンドでの変換なのでクライアントがアクセスするたびに無駄なオーバーヘッドがかかる 正直パフォーマンスはどうでも良いのですが,Emacs Lispに対応していないのは致命的です. Pygmentsへの移行 PygmentsはPythonで書かれたシンタックスハイライターで多くの言語をサポートしているのが特徴です. これでサーバ側でシンタックスハイライトを行うようにします. Pandoc自体のシンタックスハイライトを無効化する Pandoc自体にjgm/skylighting: A Haskell syntax highlighting library with tokenizers derived from KDE syntax highlighting descriptionsというKateのXMLを利用したシンタックスハイライト機能があります. これもそこそこの言語に

:
SlackとSkypeを使っていましたが,Skypeを投げ捨ててDiscordに移行することにしました

これまで Syakeでは,これまでチャットにはSlackを使って,通話にはSkypeを使っていました. Slackにも通話機能があると思われるかもしれませんが,どうもSlackのクライアントの通話機能にはバグがあるようでした.私の環境だとSlackで通話するとチャットのウィンドウが使えなくなっていたので,通話にはSkypeを使っていました. そしてリモートで働く時は基本的にSkypeを付けっ放しにして働いていました. 問題 しかし,SlackでもSkypeでも共通する問題がありました. それはノイズがうるさいことです. 相手がMacBook Proを使っていて,内部のマイクで通話しているため,ファンの音が常に聞こえます.VirtualBoxを常に起動しているためファンが常に回っているとのこと. ちなみに私はC270という安いwebカメラをディスプレイに引っ掛けて使用しています. このファンの音はかなりうるさく,ニコニコ動画で作業用BGMを流すことで対策してみようかと思いましたが無理でした. PulseAudioにも「こちらのエコーノイズ」を軽減する機能はあるようですが,向こう

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に寄せられたコメントによると,TERM環境変数によって動作が変わるようです. TERMに使えるメジャーな環境変数はtoeコマンドで取得できます. 2018-06-11T15:13:26 ncaq@strawberry/pts/6(0) ~/Desktop/LilyTerm % toe screen VT 100/ANSI X3.64 virtual terminal screen-256color GNU Screen with 256 colors xterm xterm terminal emul

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 26 force typing yes/no for deleting dir? : emacs この入力を行わない設定は以下になります. (custom-set-variables '(dired-recursive-copies 'always) ; 聞かずに再帰的コピー '(dired-recursive-deletes 'always) ; 聞かずに再帰的削除 ) デフォルト値はaskになっていて聞くようになっているので,

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 Debug.Trace main :: IO () main = do let a = 1 traceIO $ "a = " ++ show a これは変数名を2回書いて面倒くさいし可読性が悪いです. なのでQuasiQuotesによって2回書かなくても済むようなライブラリを書きました. {-# LANGUAGE QuasiQuotes #-} import Debug.Trace.Var main :: IO () main = do le

ウイルス性胃腸炎にかかってつらかった

40℃の熱と下痢で死ぬほどつらかった. 5月29日(火曜日) 日中のテンションがおかしかった. 夜に体がものすごく暑くなって,そろそろ夏が到来したと思って,一瞬エアコンつけて消して寝ました. 5月30日(水曜日) 会社に行きました. 起きるのがつらく,いつもより1時間遅刻して11時からの出社でした. 会社に着いたあたりで鼻水,頭痛,体の痛みを感じました. 吐き気があって,昼ごはん食べるのがものすごく辛かった. 昼休憩時に寝転がってないと辛かったので会社の床に寝ていました. 昼休憩が終わって1時間ほど働いて,完全に目眩がして「あっこれ風邪だな」と気がついたので早退することにしました. フラフラになりながらも家に帰りつきました.帰っている間はまだTwitterをする余裕があったようです. 家で寝付いて夜になって,風邪がどんどん悪化しているのを感じました. とにかく熱があって頭が痛くなって,気分がとてつもなく悪くなっていました. 夜(20時ぐらい?錯乱していたのでわからない)に熱を測ってみたところ,40℃の熱があることがわかって,救急外来に行くことにしました. 親の車で連れて行ってもら

.emacs.dのEmacs LispをEmacs内部で全てバイトコンパイルする方法

Emacsを26にアップデートしました. Emacs 26 そうするとファイルを全てバイトコンパイルし直さないといけません. ディレクトリ内のすべてのEmacs Lispファイルを一発でバイトコンパイル - Qiita という風に,バッチモードを使ってバイトコンパイルする方法がありますが,この方法だとload-pathを設定によって変更している場合,読み込みが出来なくて一部のファイルはバイトコンパイル出来ません. 調べてみたところ,以下の記事が見つかりました. elisp - How do I byte-compile everything in my .emacs.d directory? - Stack Overflow 私は数値のみで前置キーを渡す設定を有効化しているので,diredで.emacs.dを開いてC-0 M-x byte-recompile-directoryで全てバイトコンパイル出来ました.

JavaのListの連結リストによる独自実装

大学の講義で2015年に書いたMyList.javaを2016年にgistにアップロードしていたのですが,何故かこれだけ記事にしていませんでした. 何故でしょう?コードが汚かったから恥ずかしかったのかな? 昔のコードが汚いのは当たり前で恥ずかしがることでは無いのに. というわけで,せっかくなので当時レポートに書いた解説を添えて記事にしておきます. いやあ,HaskellやC++の思想がまぜこぜになって一貫していないのでかぶれてる感半端ないですね. ソースコード 当時レポートに書いた解説 ListedList形式の実装を選択した. フィールドに名前をつけるにあたって,自分の中での命名法則を整理するために,InkScapeで図を描いた. head, tailの命名はHaskellのPreludeの影響. begin, rbegin, endの命名はC++のiteratorの影響. prev, nextはJavaのiteratorの影響. begin, rbegin Mainへの追加 Mainではprintlnによる出力がされている. いちいちこれを目で見て正しい値を確認するの

EsqueletoのilikeでYesodのTextareaを検索する

やりたいこと YesodのTextarea型で保存しているフィールドをEsqueletoのilike関数で検索したい. なぜそのままだとダメなのか ilikeはSqlStringのインスタンスを要求していてTextareaはそのインスタンスじゃないから ilikeの右辺がTextだから型が一致してないとダメ なんでTextじゃなくてTextareaをモデルに保存したの ユーザのtextareaを保存する場所で,複数回編集が行われることが予想されたので復元が容易なTextarea型にしました.今は少し後悔しています. プログラム側で変換かけるのが難しい理由 Valueはファンクターですが,Esqueleto query expr backend => exprはファンクターでは無いため,簡単に内部を編集することができない. SqlStringのインスタンスを用意すれば良いのでは 右辺と左辺を合わせなければダメ. castStringを使えば? なるほど,SqlStringのインスタンスを定義して,castStringを併用すれば可能ですね. instanc

Emacs, ENSIMEでScala, Play開発環境を作る

複数回詰まったのでメモ. ひっかかったところだけ書くので他は公式ドキュメント見てください. Emacsへのインストール ENSIMEはpackage.elでインストールできます. scala-modeなどもついてくるのでそれ以外はインストールしなくて良いです. 依存ライブラリがオプショナルなのでバイトコンパイル時にエラーが出ますが気にしない. プラグインのインストール ~/.sbt/0.13/plugins/plugins.sbtに addSbtPlugin("org.ensime" % "sbt-ensime" % "2.6.0") と書きます. 私の環境ではまだsbt v1ではない. ENSIMEは謎のバージョン付きディレクトリを作るので下のリンクに従って無効化しておきましょう. ScalaをAtomで開発しやすくする | TIS NOTE ~/.sbt/0.13/global.sbtに以下のようなものを書きます. import org.ensime.EnsimeKeys._ ensimeIgnoreMissi

競技プログラミングのコンテストに初参加して,調子に乗って初参加なのに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 <- read <$> getLine let subs = sort $ nub $ concatMap (\size -> map (\from -> take size $ drop from s) [0 .. length s - size]) [1 .. length s] putStrLn $ subs !! (k - 1) 無事TLEしたのでとりあえずC++に切り替えることにしました

ReduxのMiddlewareを使ってSentryにReduxのstate情報を送りつける

Sentryというエラー収集サービスがあります. ここには例外などが収集されるのですが,エラーが起きたときのReduxのstateが入るとエラー調査に役立ちますね. SentryにはSentry.setExtraContext(旧版ではSentryClient.setContext)という関数があって,ここに任意のJSONを入れることが出来ます. しかし,適当に初期化時に設定しても,初期状態のstateが入るだけで何も役に立ちません. onFatalError関数を追加すればエラー時にフックをかけることが出来るようですが,今使っている@sentry/electron 0.4.1ではこのオプションが無いことがわかりました. そして最新版はエラーになって使えないという事情があります.I update to 0.5.4, error on MODULE_NOT_FOUND · Issue #81 · getsentry/sentry-electron なので,ReduxのMiddlewareを使ってstateが更新されるたびにSentryClient.setContextすることでデータを付

laymanがgit commitのauthorを勝手に上書きしていたので報告と対策

何が起きたか 私はncaq/ncaq-overlay: ncaq personal gentoo overlayというオーバーレイを作っているのですが,これのコミット作者が自分の表記になっていないことに気がつきました. どうやらlaymanでaddした場合リポジトリの設定でコミット作者とコミットメールアドレスが書き換えられるようです. それに気が付かずlaymanの名前とメールアドレスでコミットしていたわけですね. なんで? どうやら433687 – app-portage/layman-2.0.0_rc3: please consider setting dummy username for gitの要請を受けて,Add setting the default user name and email when adding new git based… · gentoo/layman@faf6c74のコミットでデフォルトユーザを設定するようにしたようです. このバグチケットにはgit pullするのに対してメールアドレスを聞いてくると書いていますが,私の記憶ではgit cloneと

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 they have no emoji shortcut keys · Issue #2005 · ibus/ibus 敗因はIBusの設定というものが存在することを忘れていたことです. 以下のコマンドで治ります. gsettings reset org.freedesktop.ibus.panel.emoji hotkey null安全じゃない言語,というかC言語は大変だなあと改めて思いました. 次のバージョンでは未設定でも動くようになるようです.

WebMoneyを決済手段として実装するサイトの一部に運営者のミスによって脆弱性が発生しています

IPAとWebMoneyとサイト運営者に報告したのが2月7日です.そろそろ注意喚起を兼ねて広く公開しておきます. 脆弱性の内容 WebMoneyの「基本導入マニュアル」を参照してください. 持ってない方は頑張って手に入れてください.このバグもWebMoneyにバグ報告したのですが優先度が低いということで修正されませんでした. そしてその7ページ目の下半分テーブル4行目(ヘッダは含めない)を読んでください.次に9ページ目の下半分を読んでください. このファイルを公開してはいけないということがわかりましたね? WebMoneyのモジュールは素のCGIなので,CGIを動かすようにApacheをディレクトリ全体に適用して,うっかりファイルも公開してしまっていることが多いです. IPAに報告したところ,運営者から「これは公開して構わないものだから脆弱性ではない」という寝ぼけた返事をもらいましたが,マニュアルにも書かれている通りこれは公開してはいけません.マニュアルできちんと警告されています. 具体的な攻撃方法については面倒臭いので調べてないですが… WebMoneyは加盟店を検査した方が良

StackはGHCやCabalに並列ビルドのjobsオプションを伝えていませんが,伝えたとしてもGHCの問題で全然速くならない

CabalやGHCには-jオプションがあり,ビルド時に並列に処理するかを指示できます. Stackはパッケージ毎に並列ビルド(依存関係のないパッケージを別々にビルドすること)はCPUのコア数に応じて行います.しかし,パッケージ自体の並列ビルドのオプションはcabalに指定していません. 日々GHCのビルドを待つ我々としては,コンパイル速度は高めたいところです. これを指定すれば速くなるのではないかと思って調べました. 関連issueが出てきました. Develop/Document multi-level parallelism policy · Issue #644 · commercialhaskell/stack なるほどパッケージごとに並列ビルドしながらパッケージ自体を並列ビルドしたらCPUのコア数制限を簡単に突破してしまいますね.しかしそれ自体はシステムの監視などでどうにかなりそうです. と思ったら興味深いコメントを発見しました.このリンクによると, #9221 ((super!) linear slowdown of parallel builds on 40 core m

stackでも1コマンドでworldパッケージをインストールしたい

stackではグローバルのリゾルバを以下のコマンドで最新版に更新できます. stack config set resolver lts stackのltsをアップデートするたびにzshのhistoryをたどってhlintやstylish-haskellのインストールを行うのは面倒だと思いました. portageのworldみたいに使うパッケージを登録しておいて,コマンド1回でインストールできるようにしたいですね. シェルスクリプトでうまく改行区切りでパッケージを管理するにはどうしたら良いのかなという疑問もありました. #!/usr/bin/env zsh world=" hlint intero profiteur stylish-haskell yesod-bin " echo $world|xargs stack install 一瞬でした. これをautoloadディレクトリに配置してzshrcでautoload -U stack-install-worldしておきます.

ゆうちょダイレクトの劣悪なログイン画面にKeePassXCの自動入力で立ち向かう

ゆうちょダイレクトのUIはありとあらゆる部分が劣悪です. もっとも悪いのはログインがクソ面倒くさいということです. まずユーザIDとパスワードが別ページに表示されるので,一緒に入力できないのでブラウザのパスワードマネージャに保存できません.無駄なセキュリティ対策かと思いきや,ユーザIDはないパスワードだけは保存可能なので,真に何の意味もないんですよね. またユーザIDがハイフンで区切られる部分で3つに分割されているので,パスワードマネージャからユーザIDをコピペしようとしても3回に渡ってコピペしないといけなくて,ひどく面倒くさいです. マネーフォワードに登録することで口座の確認は簡単になりますが,振込には結局ゆうちょダイレクトにログインすることが必要です. これをKeePassXCの自動入力で解決することが可能でした. 自分はKeePassXCの自動入力を全く使ったことがないので,そもそも自動入力の方法がわからなくてとても苦労しました. まずKeePassXCに登録しているゆうちょダイレクトのユーザIDをハイフン無しで登録しておきます. 自動入力の欄で「カスタムされた自動入力シーケンス

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-pos (region-end)))) (progn (kill-region (region-beginning) (region-end)) (let ((line (car kill-ring))) (setq kill-ring (cdr kill-ring)) (insert (string-join (sort (split-string line) (lambda (a

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の速度に不満を持っていなかったため,あまり乗り換える気にはなっていませんでした. しかし,ついさっき,agとptとripgrep,どっちがどうでどれを使えばいいのか調べた予習 - Lambdaカクテルを読んで,rgはShift_JISのファイルに対応していると知って,移行を決意しました. まだまだShift_JISのファイルを見ることは多いのです. しかし,実際試してみたところ,-Eオプションの指定なしに日本語Shift_JIS文字列を探索することはしないようですね.それでもagが検索を諦めたShift_JISファイルのラテン文字部分は検索できましたが. また,rg -E Shift_JIS

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を少し変えたりするだけであっさりインストールできました. mikutterでカラー絵文字表示できました. 😊 それどころか,LilyTermなどGNU/Linuxの大半のソフトウェア(Emacsを除く,Emacsは独自に文字に色を付ける仕組みを持ってるので仕方がない)がカラー絵文字対応になりました. しかしmozcでカラー絵文字を変換すると,謎のちらつきが起きるので,stableになってないのはそういう理由なのだなと納得しました. まあ私が使う分には多少描画揺れが生じてもカラー絵文字が出てくれることの方がうれしいので,cairo 1.15を

Google AdSenseのレスポンシブ対応の関連コンテンツのサンプルコードは間違っています

Google AdSenseの関連コンテンツの量を増やしてみようと,これまで自動設定頼りだったパラメータを修正してみました. ここはレスポンシブwebサイトなので,その記述をしようとしました. そしたらドキュメントのバグを発見しました. レスポンシブ対応の関連コンテンツ ユニットをカスタマイズする方法 - AdSense ヘルプの関連コンテンツ ユニット内の行数と列数を指定する > レスポンシブ対応サイト: 4×1(モバイル)、2×2(PC)に書かれているコードは, <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- pbad --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-xxxxxxxxx" dat

updatedbをsystemdのタイマーで自動的に実行してファイル検索locateの情報を最新に保つ

Unixにはlocateというプログラムがあります. これはコンピュータ内部のファイルを検索するためのプログラムであり,findよりも圧倒的に高速です. 検索キーワードには正規表現を使うことができます. helm-for-filesのhelm-locateにも使われています. Emacsのhelm-for-filesでnintendoと検索している様子 なぜlocateがfindよりも高速なのか.locateはファイルのインデックスを参照するから速いのです. しかしlocateにはだからこその弱点があります.locateはupdatedbコマンドでインデックスを作成しないと検索ができません.また,updatedbを実行した後に作られたファイルは検索結果に出てきません. 私はこの問題を解決するためにたまにupdatedbを実行していたのですが,だんだん面倒になってきました. 今使っているデスクトップPCはある程度強力なスペックを持っています.また,今はラップトップを充電せずに使うことはほぼ無いので,バッテリーを気にする必要はありません.というわけで自動化しました. まず/etc/sy

Clang C++コンパイラは関数内でデストラクタのある構造体が確保された場合スコープを区切っても末尾呼び出し最適化を行わない場合がある?

C++の規格には詳しくないのですが,本の虫: C++入門書で再帰について解説しようとしたら思わぬ最適化できないコードに出くわしたを読んで試してみました. コンパイルコマンドはclang++ -std=c++17 -O2 tco.cpp. これはsegmentation fault (core dumped)します. #include <iostream> struct raii { raii() { std::cout << "constructor" << std::endl; } ~raii() { std::cout << "destructor" << std::endl; } }; void recursion() { auto v = raii(); recursion(); } int main() { recursion(); return 0; } これは1分ほど回してもsegvしません. #include <iostream

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.1.ebuildを書こうとしたけれどidn-ruby-0.1.0.ebuildが書けないので正常に動作するものが書けなかった - ncaqに書いた通りoverlayでmikutter 3.6を提供しようと頑張ったのですが,どうもうまくいかなかったので諦めていました. 今日朝起きたら急にやる気になったので書きました. やったことは mikutterのebuildを最新のものに twitter-text-2.1.0の提供 idn-rubyの提供 idn-rubyの件なのですが,Projec

webpack, Electron環境で__dirnameをfalseにするとDevtronが動かなくなり__dirnameをtrueにするとプロダクションでパスが参照できない問題を解決しました

Devtronという開発ツールがあります.ElectronのIPC通信を見てくれるやつです.優れものです. しかし困ったことがあって,Devtronはwebpackの設定を__dirname: trueにしないとディレクトリを正しく読み込みません. かと言って__dirname: trueにすれば良いのかというとそうではなく.__dirname: trueにすると,__dirnameがソースコードの場所を指してしまいます.するとプロダクション環境でindex.htmlを参照するのが難しくなってしまいます. 今日はLinux版のelectron-builderが生成したAppImageが動かない問題を解決しようとしていて.__dirname: falseにすると解決するのですが.Devtronが動かない問題に頭を悩ませていました. 改めて調べなおしてみると,9日前にREADME.mdにworkaroundが追加されていました.update readme with note about webpack · electron/devtron@f6ec1c7 webpackを使っているとき,

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と書かれている隣りに.jsxを追加します. こうすることでgtags, ctagsの順でパーサーを探索して,jsxもタグ付けしてくれるようになります. defaultを変更しているので,--gtagslabelを指定する必要はありません.helm-gtags-auto-updateを有効にしていれば更新でタグも追加されます. 当初はpygmentsも有効にしていたのですが,両方有効にしているとタグ生成が完了しないプロジェクトがあるということがわかってきたのでやめました. node_modulesを探

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().getFullYear() - this.birthday.getFullYear(); } 年齢偽装() { return this.set("birthday", new Date("1950-01-01")); } } const ncaq = new Person({ name: "ncaq", birthday: new Date("1996-01-25") }); consol

JavaScript標準関数Math.maxで配列の最大値を取得する方法とその罠

JavaScript標準関数にはC++のmax_elementのような「配列の最大値を返す」関数は存在しません(しないよね?). よってMath.max()を使います. Math.maxは与えられた引数から最大の数を返すので,配列を引数に分解してやれば良いわけです. つまり > Math.max(...[]) -Infinity > Math.max(...[], -1) -1 > Math.max(...[1, 2, 3]) 3 みたいにやるわけですね. 空配列を適用したら-Infinityになるので最低値を次の引数に指定しましょう. ただ,この方法には罠があって,配列にスプレッド演算子を付けるのを忘れた時に値が0やNaNになります. > Math.max([]) 0 > Math.max([], -1) 0 > Math.max([1, 2, 3]) NaN これはMath.maxは引数を全て数値に変換してから比較を行い,Number([]) === 0であることに由来します. これはエラーログなどを吐かないので数十分溶かしました.

Emacsの標準バックアップ機能で初回保存時に限らず常にバックアップするようにする

Emacsには標準でファイルバックアップ機能があります. (custom-set-variables '(backup-directory-alist `(("" . ,(concat user-emacs-directory "file-backup/")))) '(delete-old-versions t) ;askだと削除時に一々聞いてくる '(kept-new-versions 50) ;backupに新しいものをいくつ残すか '(kept-old-versions 0) ;backupに古いものをいくつ残すか '(make-backup-files t) ;バックアップファイルを作成する。 '(vc-make-backup-files t) ;VCS以下のファイルもバックアップを作成する '(version-control t)

Zenbackを削除してGoogle AdSenceの関連コンテンツを追加しました

これまで関連記事の表示のためにZenbackを使ってきました.しかし,Google AdSenceの関連コンテンツの表示に乗り換えることにしました. Zenbackの広告表示領域がそこそこ大きく,内容も固定 精度があまり良くない ためでした. Google AdSenceの関連コンテンツはサムネイルを自動抽出してくれるのも良いですね.記事に画像が貼り付けられてないと何故かフッターの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 "あ") -- あ 以上. HaskellのOverloadedStringsは文字列のエンコードを規定していないのでマルチバイト文字を受け取ると適当に丸めてByteStringにします. もちろん既出です. 文字列リテラルで指定されたマルチバイト文字を無理やりByteStringで扱おうとすると、特にエラーも出さず間違った結果を返すので注意が必要ですね。なので、ByteStringは文字列というよりは、生のバイト列を収めるデータ型と思ったほうが良いと思います。 Haskell Tip

git pullした時に削除済みのリモートブランチとマージ済みのローカルブランチを自動削除する

GitHub Flowのように細かく機能別にブランチを分けてpull requestを作っていく形式だとブランチのゴミが鬱陶しくて仕方が無くなります. Gitにはgit fetch --pruneというオプションがあり,これでリモートブランチは削除を検知して消してくれます.しかしローカルブランチはそのままです. なんでそのままなのかわからないのですが,とりあえず削除するのがいい加減面倒になってきたので,シェルスクリプトを書くことにしました. これ自体はGit でマージ済みのブランチを一括削除する - Qiitaを参照にして簡単に出来ました. parallel --no-notice git branch -d {} ::: $(git branch --merged|ag -v '\*|master') git branch -d {} master, git branch --merged masterとするとmasterを基準にして,masterに一々チェックアウトしないで済むようになります.しかし代わりにmasterブランチ以外にマージ済みのゴミブランチが消せ

日報を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.email)|xsel --clipboard --input --logfile /dev/null' これでコマンド一発で日報をクリップボードにコピーすることが出来て時間が効率化されます. sinceの指定の仕方がよくわからず少し手間取りました.

Gitでファイルを追加するだけの時に雑なメッセージを生成してコミットする

私は~/Documents/をGitで管理しています.Google Driveも使用していますが,基本的にデータはGitで管理して自宅サーバのプライベートGitリポジトリにpushしてpullして同期しています. 一度Dropboxの同期ミスでロールバックが発生して以来,ずっとこうしています. pushしてpullするのは少し面倒くさいですが,常にプログラムを待受させなくて済みますし,基本的にデータの同期は1日の最初にやるだけなので,これで十分なのです. 真に問題であるコンフリクトが発生したときに復旧するのが楽なため,私はこの方法を気に入っています. しかしファイルを追加するだけの時に一々コミットメッセージを書くのが面倒という問題がありました.最近データファイルなどを単に追加することが増えたため特に面倒に感じます. そこでファイル名だけをカンマで並べたメッセージで適当にコミットするシェルスクリプトを書きました. 私しかコミットメッセージは見ないのでこれぐらいで十分なのです. git-add-file() { git add --all . readonly local

:
Semantic UIでツールチップを要素へのマウスホバーで表示するにはdata-tooltip属性を使う

Semantic UIにはPopup | Semantic UIというものがありますが,これはマウスホバーでツールチップを出すための専用の要素を作る使いにくいものです. ボタンなどに注釈としてツールチップを追加したいですよね.しかしHTMLネイティブのものは見辛いから使いたくない.せっかくSemantic UIを使っているのですから. 調べてみたらGitHubのissueが出てきました. Tooltip on disabled button · Issue #4296 · Semantic-Org/Semantic-UI これによるとdata-tooltip属性を追加することでツールチップを楽に要素に追加できるようです. Reactの場合以下のようになります. <div data-tooltip="foo" /> <Checkbox data-tooltip="このボタンはhogeの場合無効" disabled={this.props.foo} toggle /> できました. 要素がdisabled

JavaScript(EcmaScript)では引数の評価順序は左から右と定められている

JavaScriptで引数が左から右に評価されること前提のコードを書いていました.そこでCやOCamlでは引数の評価順序が定められていないことを思い出しました. Big Sky :: gcc は副作用のある関数呼び出しを含む式評価順序を最適化する。 日本語で文献が無かったので検索に苦労しましたが,Stack Overflowの質問を見つけ出しました. What is the order of evaluation for function arguments in Javascript? - Stack Overflow ここで参照されているES5によると,関数呼び出しは引数のリストを生成して,引数リストは左から右に評価されるようですね. よってJavaScriptでは安心して引数が左から右に評価されることに依存するコードを書いて構わないようです.

nginxで404ページをリダイレクトさせずに表示する

このサイトの404がnginxのデフォルトのままで流石にあんまりにもあんまりでした.日本語で説明を表示してトップページへのリンクぐらい残しておこうと思いました. nginxで404ページをカスタムする方法は簡単で, error_page 404 /404/index.html; と書けばそこのファイルを参照してくれます. しかしこのデフォルト設定には1つ問題があって,404エラー時に404のファイルのURLに飛んでしまいます. これはユーザにとっても管理者にとっても望ましくない動作です. ユーザはどのURLが404だったのか把握することが難しいですし,管理者へのエラー報告の情報も減ってしまいます. そこで以下のように記述します. location = /404/index.html { internal; } これでリダイレクトは内部リダイレクトになってURLはそのまま404エラーになってくれます.

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を呼び出しておくという暴力的手段を用いていたのですが,アップデートの影響かその方法ではエラーが起きてしまうことがわかりました.公式ドキュメントを見るとhelm-ls-git-build-git-status-sourceを使えと書いてあるのですが,呼び出しても設定がされません.コードを見ると,helm-ls-git-build-git-status-sourceはソースを作るだけで,変数に代入するのは自前でやるようになっていると気がつきました. 以下のコードでエラーなしに一緒に表示することが出来ます. (require

company-modeでタブキーで複数の補完候補がある時は候補をスクロールして補完候補が1つの時は補完を決定する

emacsの補完用パッケージcompany-mode - Qiitaに実現できそうな関数が載っていましたが.パッケージ化されていないコードをあまり取り込みたくなかったので敬遠しました. 調べてみると標準でcompany-complete-common-or-cycleという関数があってこれが思った通りの動作をしてくれました. 以下のように書けば完璧です. (define-key company-active-map (kbd "<backtab>") 'company-select-previous) (define-key company-active-map (kbd "<tab>") 'company-complete-common-or-cycle)

company-modeでタブキーに補完もインデントも割り当てる

auto-completeには(ac-set-trigger-key "<tab>")という関数があります.これを実行すると普段はタブキーをインデントに使い,補完出来るときのみ補完することが可能になります. company-modeにはそのような関数はなかったため,補完をワンキーでサクッと実行したい私は困ることになりました. 探ってみるとcompany-indent-or-complete-commonという関数があるようでした. これを(global-set-key (kbd "<tab>") 'company-indent-or-complete-common)のように設定してやれば,タブキーは普段は補完で,インデントしたい時だけインデントとして動いてくれるようです. 独自の関数呼び出しを要求するauto-completeより通常のEmacsのキーバインド割り当ての上で実現するcompany-modeの方が行儀が良いかもしれません.

SpamAssassinの学習フィルタを重視する

私のメールサーバの~/.spamassassin/user_prefsにはadd_header all Report _REPORT_と書かれていて全てのメールにスパムチェックレポートが追加されるようになっています. スパムが判定されなかったり逆に誤検知が起きた時に原因を知るためです. これを日々見ていると,どうも学習フィルタをあまり信用していないのが原因だとわかってきました. 例えばとある検知されなかったスパムメールは以下のようなレポートとなっています. X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sonoda.localhost.ncaq.net X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=4.0 tests=BAYES_99,BAYES_999, HTML_IMAGE_RATIO_06,HTML_MESSAGE,MSGID_FROM_MTA_HEADER,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2 aut

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:///[LINE_NUMBER] · Issue #5186 · webpack/webpack 「source mapはブラウザが読み込むものだからnodeは取り扱わないよ」とownerにすげなく言われています. 解決法 evanw/node-source-map-support: Adds source map support to node.js (for stack traces)を使います. これをインストールしてエントリーポイントに import 'source-map-s

遅まきながらEmacsのHaskell開発環境をInteroに移行しました

InteroというHaskellのEmacs向け開発環境があります. Intero for Emacs commercialhaskell/intero: Complete interactive development program for Haskell 私はhaskell-modeとFlycheckを既にうまく強調させて動かしていたため.これを使う必要はないかと思って移行していませんでした. しかし今改めて説明画面を見ると.GHCの提案警告に従ってコードを修正する機能.テストなどの違うターゲットにflycheckを移動させる機能.などが魅力的に見えたので移行してみることにしました. 移行してみたら型表示がリッチになっただけではなく.モジュールの補完機能が動いたりして予想以上の効果に満足です.hasktagsを使わなくても関数の定義箇所に飛べます.名実ともにIDEという感じですね. 往年のghc-modの機能を超えている感じがします.Emacs使ってるHaskell使いはStackを使っているなら移行して損はないと思います. hlintとの共存 当初hlintはデフォルトで

M570がチャタリングを起こすようになったのでMX ERGOを購入して満足しました

2014-10-21にM570トラックボール(正確にはM570t)を購入しました. 概ね満足していたのですが,ここ最近チャタリングを起こすようになってしまいました.もう数年使ってたから仕方ないですね. 普段あまりドラッグ動作はしないので,チャタリングを起こしてもスクリーンショットを選択して取得する時に,誤動作が起きてイラッと来るぐらいだったのですが.とあるものを購入してからチャタリングは深刻な問題になりました. Sid Meier’s Civilization® VIです. このゲームはドラッグする動作が多く,ドラッグが途中で解除されてしまうとそこでコマンドが決定されてしまいます. 電源を切ったりしてみましたがチャタリングが治ることはありませんでした. まあ如何せん2014年に買ったものなので仕方がないと思って,最近発売されたMX ERGOを購入してみることにしました.買いたかったのすがM570に満足しているのに買うのは微妙だと思っていたので丁度良かったです.M570はドラッグ動作をしない職場に回すことにしました. 買ったのは2018-02-28です. しばらく使ってみましたが

webpack 4でJavaScriptソースをビルドすると__dirnameが/になってしまう問題の解決法がわからない

やっていた作業 今書いているElectronアプリはmainプロセス側はBabelもTypeScriptもFlowも使っていない生JSで書かれていました. 生JSというのも問題ですが,rendererプロセス側ではBabelを使っていたので,mainプロセスとrendererプロセスでコードを共有できず,同じコードがコピペして増えるという悪夢が発生していました. 私はこれを解決すべく,mainプロセス側もBabelとwebpackを通すようにコードを変更していました. webpackの設定ファイルを2つに分けて,renderer側ではこれまでと引き続きwebpack-dev-serverを使い,main側ではwebpack --watchでdistにコンパイルしたコードを吐き出すようにして,起動自体はするようになりました. 問題 webpackでビルドすると,グローバル変数__dirnameが/になってしまう問題に遭遇しました. これのせいで__dirnameに依存する動作が全て動かなくなりました. 例えばDevtronのインストールや,ログファイルの書き出しのためのディレクトリ

Emacsのレジスタ機能を使って隔離された疑似クリップボード空間を手に入れました

Emacsのkill-region(カット)(デフォルトではC-wに割り当てられる)はクリップボードに文字列を追加します.いやカットがクリップボードに文字列を追加するのは当たり前ですね. Emacsはそれに追加してkill-line(行を削除する)コマンドやkill-word(単語を削除する)などもクリップボードに文字列を追加します. 行や単語をテキストファイルの中で移動させたいことはよくあるため,一々行を選択してカットする必要がなく,削除と同じコマンドでカット出来るのは便利です. 削除時にカットされないテキストエディタだと,領域の削除とカットを別コマンドで提供するか,領域を選択してから動作を聞く必要があります. しかし,各ファイルに定型的な文字列を挿入したいときとかは,削除時に先頭のクリップボードが書き換えられて不便です. 私はM-yにhelm-show-kill-ringを割り当てているので,過去のクリップボードも貼り付けることができますが,一々遡ってペーストするのは面倒です. 他のカット動作から隔離されたクリップボードが欲しいから作ろうかなと思ったのですが,調べてみたらそういうの

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にはタグを埋め込みで書いて閉じタグを明示的に書く方式も提供されています. <p>Paragraph <i>italic</i> end.のような感じですね. インデントで括られていない箇所はプレインテキストとして処理されて,タグやクラスの展開などは行われません. この形式は一見よくわからない挙動をして,例えば<img>の後ろに埋め込みで書くと本来閉じタグを書いてはいけない<img>の閉じタグが生じたりします.本来<img>の中にテキストがあることはありえないので,ありえ

JavaScriptで渡された配列引数をディープコピーする場合デフォルト引数を適当に使うより引数省略を検知してディープコピーを省略したほうが高速

とあるpull requestで.JavaScriptクラスのコンストラクタで.配列引数にundefinedが渡されていることをtypeof foo === 'undefined'によって検知して.引数が省略されている場合new Arrayして,引数が省略されていなかった場合配列のディープコピーを行っているのを見ました. 私は見た,思った,書いた.「それデフォルト引数設定すれば良くないですか?」 とすると「引数を省略した場合配列のディープコピーが生じるのでかなりの無駄になる」と返されました. 私はそんなことで大した差が生じるとは思えなかったので,とりあえず計測するコードを書きました. JavaScriptのベンチマークツールもっと良いのが知りたいです. const Benchmark = require('benchmark'); class DefaultArg { constructor(foo = (new Array(19 * 19)).fill(0)) { this.bar = [...foo]; } } class IfS

jest自体の動作確認は--no-cacheオプションを付けて行いましょう

ハマった順序 babel 7にプロジェクトのライブラリをアップデートしたらjestがbabelのビルドでコケるようになりました. 対応コードを色々書いてみて成功したので,本当に必要な記述だけを見極めるために変更を元に戻しました. そして失敗を確認するために再度テストを実行したら何故かテストが成功するようになりました. CircleCIでは失敗するのでそのリビジョンでは既に修正されていたということも無さそうです. 原因 キャッシュが原因でした. 私もキャッシュが原因だと疑ったのでgit clean -dxiしたり.yarn.lockを消したり.cacheと.local以下などのyarn関連ディレクトリを削除したり等色々行いました.しかし無駄でした. 色々調べた結果,jestは--no-cacheオプションを付けるとキャッシュを使わずに実行されるようです.これを実行したら無事テストビルドが失敗するようになりました. yarn jest --showConfigで設定を見たらjestはデフォルトでは/tmp/jest_rsにキャッシュを保存するようですね.そっちかー. babel

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開発環境とかについて軽くメモします.このメモは後々の私のためになります.設定を整理したり,後でどうしてこういう設定したのか見返せるので. なお私のEmacsの設定ファイルは全て以下のリポジトリにアップロードされています. ncaq/.emacs.d: Emacsの設定ディレクトリ editorconfig これを使えばIntelliJ派の人たちともコーディング設定を共有できます.共存可.設定不要. nodejs-repl NodeのREPLも手に馴染んだキーバインディングで使いたいですよ

:
アプリケーションのパスが変更された時に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にアクセスして欲しいところ,/foo/bar.pngを読みに行ってしまい404エラーになります. 私が休日の内に取られていた対策法 /${require('bar.png')}のように全てのrequireに/を追加していました.つらい. 設定を変更して解決 調べた結果webpack.config.jsのloadersにpublicPath: '/'を書けば自動的にルートにスラッシュが追加されることがわかりました. { test: /\.png$/, loader:

ReactにcomponentDidReceivePropsが欲しいと思ったけれど今回は無くても解決しました

React.Componentのライフサイクル関数には 新しいpropsを引数で受け取るcomponentWillReceiveProps 新しいpropsとstateを引数で受け取るcomponentWillUpdate propsとstateが更新された後に呼び出されるcomponentDidUpdate があります. ここでクラス内で複数propsを参照する処理を行っていると,propsを更新されてから処理を行いたい時があります. ReactのcomponentWillReceiveProps内ではまだpropsは反映されていない - 脳汁portal 例えばpropsの内容に合わせてWindowOrWorkerGlobalScope.setInterval()を行うときなどですね. componentWillReceivePropsで引数でpropsを渡されるのだからそれを参照すれば良いのでは?と思うかもしれません.しかしそれだとクラス内のpropsを参照するコードと引数のpropsをコードが同じことを行っているのにも関らず参照する先が分かれただけでコードが分かれてしまいま

親が自宅サーバを物理的に落としてくるのでTwitterで死活監視結果を送ってくれるUptime Robotを導入しました

今日の8時頃に母親が自宅サーバを棚から物理的に落とすということが発生しました. それによりこのサイト,メールなどのサービスが1時間ほど全て止まりました.落ちていることはTwitterでフォロワーさんに教えて貰いました.その後父親にSkypeで通話して復旧して貰いました. こういう事件は定期的に起きています. これの対策法は全くわかりません.場所を変えるというのは家の配線の都合上不可能で,親が線に物を引っ掛けてサーバを落とすという行為は再三注意していますが定期的に起きます.せめて落としたら電話してほしいのですが,別回線のWi-Fiが繋がってるからとかいう理由で連絡してきませんでした. とりあえず物理的に落とす行為への対策は置いておくことにします. せめて死活監視サービスを導入して落ちた時に通知して貰うことを考えたのですが.CloudWatchのようなツールはメールで通知してくるので,メールサーバを兼ねている自宅サーバを落とされると通知が不可能になるので使えません. 自分専用のSlackワークスペース作って,そこに通知するようにするかと考えたのですが流石に面倒くさい. Twitterで通知

PostgreSQLアンチパターン 自動採番される疑似キーを手動で入力する

SQL全般の話ではなくPostgreSQLの話です. IDリクワイアド Pseudokey Neat-Freak(疑似キー潔癖症) に関連するアンチパターン. 運用の問題なのでアンチパターンではないかもしれません. 問題 id bigint not null default nextval('foo_id_seq'::regclass) のような自動採番される人工キーに対して,自動採番のシステムを通さないで,id手動で指定してinsertで入力してしまうと,次のinsert時にIDがユニーク制約違反になってエラーになります. もちろんRDBMSにもよるのでしょう.今回発生したのはPostgreSQL上での話です. PostgreSQLでINSERT時に自動採番の主キーが重複してエラーが出る場合の対処法 -- ぺけみさお PostgreSQLは自動採番する時に自動採番用インデックスデータをインクリメントしてその値を使うので,自動採番システムを通さないでidを入力してしまうと次回の入力時にinsertがエラーになってしまうんですね. そしてシステムは止まり,決済は

Haskellでファイルの変更を監視

別プログラムがファイルにデータの書き出しを行うのを監視する必要があったため. hinotifyというinotify APIのHaskell向けバインディングを使います. 非Linux環境?…何もわからない. import Control.Concurrent import System.INotify main :: IO () main = do inotify <- initINotify watchDescriptor <- addWatch inotify [AllEvents] "foo.txt" (\e -> threadDelay (10 * 1000 * 1000) >> print e) print watchDescriptor _ <- getLine return () イベントリスナーは永続ですがメインスレッドが終了してしまうと何もかも終わるためgetLineなどの適切な関数で実行を待つ必要があります.

JavaScriptアンチパターン 関連するデータを別の変数に入れる

今日のJavaScriptアンチパターン. class Constant { static get kirby() { return 'kirby'; } static get kirbyColor() { return 'pink'; } static get metaknight() { return 'metaknight'; } static get metaknightColor() { return 'blue'; } } const input = '入力値が入る'; switch (input) { case Constant.kirby: console.log(Constant.kirbyColor) break; case Constant.metaknight: console.log(Co

Re:Haskellで書いてみたらC++の10倍遅かった 5倍程度になりました

10倍は遅すぎませんか? 本の虫: Haskellで書いてみたらC++の10倍遅かった を読みました. 10倍は差が出過ぎなのではないかと思いました. C++ソースコード まずC++のソースコードが完全なものではないので補完しました. #include <algorithm> #include <array> #include <iostream> #include <random> template <typename Random> bool coin_toss(const unsigned int try_count, const unsigned int length, Random &r) { unsigned int count{}; int prev{}; std::uniform_int_distribution<> d(0, 1); for (unsigned int i = 0; i != try_count; ++i) {

現在通信しているポートとプロセス名を確認するコマンド

数年前色々探った結果sudo netstat -aepWが便利だとわかりました. よく使うので,私は以下のエイリアスを設定しています. alias n='sudo netstat -aepW|less' サーバで実行すると以下のようになります.ソケット名は長いので省略.私のnginxにアクセスしているクライアントもリモートホストが開示されているので省略. ctive Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 0.0.0.0:59999 0.0.0.0:* LISTEN root 11496 323/sshd tcp 0 0 0.0.0.0:

HaskellのGHCによるビルドをLLVMのリンカーLLDで高速化することが出来なかった

リンクが遅い 現在SYAKERAKEをHaskellとYesodで書いています. ゲーム販売webアプリケーションSYAKERAKEを支える技術,HaskellとYesodで作られています - ncaq 開発上常に問題が発生していて,それはビルドに時間がかかるということです. コンパイルが必要になる時はまあ仕方がないです.本質的に時間がかかることに対してはハードウェアの更新で対応するしかないです. しかし,差分ビルドが有効になっていても,ちょっとした1つのファイルの変更でかなり時間がかかってしまうという問題が発生しています. どうもビルドの様子を見ていると,ファイルのコンパイル自体は1つのファイルなのでそんなに時間がかかっていませんが,リンクに時間がかかっているようです. ここで私は1つの記述を見つけました. GHC now tries to use the gold and lld linkers by default. These linkers are significantly faster than the BFD linker implementation that m

ゆうちょ銀行の銀行コードなどを確認する

今回Google アドセンスに支払い方法を追加する時に,Google アドセンスに銀行コードを要求されて困りました. ご丁寧にキャッシュカードの何処に書かれているのか画像が添付されているのですが,ゆうちょ銀行のキャッシュカードにはそれは載っていないようです. どうやるのかググって【Google AdSense】お支払い方法の設定(受取口座の追加)※ゆうちょ銀行にも対応! | はぴすぷというサイトを見つけたのですがリンク先のゆうちょ銀行のサイトがリンク切れになっています.新しいページも載ってないので非常に不便. 現在正しいリンク先を発見しました. 記号番号から振込用の店名・預金種目・口座番号を調べる-ゆうちょ銀行 ちなみに私の場合は以下のようになるので誰か試しに振り込んでみてください. 振込用の店名・預金種目・口座番号

Nintendo SwitchのJoy-Conの破損は保証期間内でも有償修理になるので気をつけましょう

2018-01-25日に,電車の中でJoy-Con(R)の故障に気が付きました. 故障の内容は,Nintendo SwitchのJoy-Conは本来,裏にある取り外すボタンを押しながらでないと本体から取り外せないはずですが,上にスライドさせようとするだけで取り外しされてしまう,というものです. 家に帰ってからJoy-Conグリップに接続して試してみたのですが,やはりボタンを押さなくても取り外しされてしまいます. よく見るとJoy-Conのプラスチックの部分がRはLに比べて摩耗しているように見えます. そんなに荒っぽい使い方はしていないはずで,強いて言うとゼルダの伝説をよく遊んでいたのでJoy-Conの取り外し動作を頻繁に行っていたことが影響しているのかもしれません. Joy-Conの認識自体は正常に行われるので,ゲームをすること自体に問題はありませんでした. しかし,携帯モードで遊ぶとき,普通に持った場合自重によりコントローラが取り外され落下してしまう可能性があるのが気がかりでした. なので,修理に出すことにしました. Proコントローラを所有していて,本体に問題は無かったので,本体は

:
デュアルブートしている環境でVirtualBoxでLinuxをホストOSとして別パーティションのWindowsをゲストOSとして起動

忘れると困るので自分用にメモします. 私のXPS 13 9360は買った直後にパーティションを切ってGentoo Linuxをインストールしています. その後Windowsは殆ど起動していなかったのですが,Windows環境を必要とする状況が出てきました. VirtualBoxで専用ディスクを生成しても良いのですが,せっかく別パーティションにWindowsが存在すること,vagrant upが何時まで経っても終わらないことから,この別パーティションのWindowsを有効活用するようにしました. まずgpasswdで自分をdisk, vboxusersグループに所属させて再起動します. そうしたら~/.VirtualBoxに移動します.存在しなかったらmkdirで作ってください. VBoxManage internalcommands createrawvmdk -filename "nvme0n1.vmdk" -rawdisk /dev/nvme0n1を実行します. 複数デバイスがある場合はVBoxManage internalcommands createrawv

spamcがベイジアンフィルタの学習データを認識しない問題はspamassassinコマンドを直接使ったら解決しました

spamassassinの精度が悪すぎることから調査してみたらspamcコマンドだとベイジアンフィルタの学習データを認識しないことがわかりました. spamcというのはspamdと組み合わせて使うspamassassin用のクライアントです. spamassassinを一々立ち上げていると初期化コストがかかるため,これを使えば軽量にスパムチェックが出来ることになっています. 例によって私もこれを使っていました. しかし,どうもspamassassinの精度が悪すぎることが長年の悩みでした. 全部のスパムメールを認識させて,スパムボックスに入っているスパムメールをspamc < ~/.maildir/.Junk/cur/1410731306.M649677P7004.sonoda,S=4769,W=4835:2,Saのように読み込ませてもスパムではないと判定します. それどころかブラックリストに入れたアドレスから来たメールすらスパムではないと判定しました. これは学習データを利用していないのではないかと疑いました. なんで認識しないんだろうかと思って探ってみた所,たまたまspama

GNU/LinuxでのCDのリッピングにはAudexがオススメです

最近CDをリッピングすることも少なくなってきましたが,GNU/LinuxでのCDのリッピングにはAudex - KDE UserBase Wikiがオススメです. audexでリッピングする前のメタ情報認識 5年前ぐらいに知って,ずっとこれを使っています. KDEのソフトウェアですが,もちろんKDE環境でなくても利用できます. おすすめポイントはMusicBrainzとfreedbの両方に対応していることで,どちらかの引っかかったデータを利用することが出来ます. データがない場合や間違っている場合に自分で入力するインターフェイスも良好で,ストレスが少なくリッピングすることが出来ます.アーティスト情報とタイトルが逆とか,そういうよくある間違いを修正するツールも揃っています. ただ,MusicBrainzの対応はKDEのライブラリを使用しているため,Gentoo環境ではpackage.useに kde-apps/libkcddb musicbrainz と書く必要があります. デフォルトでflacに対応していて,デフォルトでのファイル名つけなども自然なので,あまり設定をいじらずに使

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を参考にして簡単に追加できました. というわけで起動するところまではすんなりいきました.mikutter自身の最小要求と依存関係の最大要求からruby 2.3でしか動かないことを突き止めたりする必要などがありましたが,些細なことです. 問題は起動した後クラッシュしてしまうことで,クラッシュする場所のgit logを見るとa7666e13 * twitter-text 2.1.0を要求 refs #1130らしいです. なるほどportageのtwitter-textは1.14.7ですね.クラッシュするわけで

WebMoneyがつらい

電子マネーWebMoney(ウェブマネー)がつらい. 私はWebMoneyを個人顧客として使ったことはありません. 決済手段として導入しようとしていてとにかく仕様が地獄. 怒りのあまり文章が整ってないですし順序も支離滅裂です. 私の怒りを整理するために書いているのであまり参考にはならないかもしれません. 仕様書が簡単にアクセスできる場所にない 「問い合わせ」をしないと仕様書が見れません. 普通にweb上にパブリックに公開していません. 我々の場合,詳細な仕様書が来たのは契約後でした. なので私は契約する前にWebMoneyの仕様書を確認することが出来なかったので,契約することを止められませんでした. 仕様書がPDF WebなんだからHTMLで提供してほしい. コピーも難しいしコード例もとても見づらい. 動作確認環境が古すぎる Linux glibc2 (kernel 2.4/2.6)になっております. CGIの設置を要求してくる 今時本物のCGIです. FastCGIとかですらありません. ApacheかIISでしか動かないことになります.これは公式確認環境です. これが

私の誕生日なのでぜにぃ姫を使って親交のある人にBitZenyを配りましたが1ZNY配られると思ってたら10ZNY配られてしまい50人のつもりが5人になってしまいました

本当はスクリプトにして再実行できるような形で配布したかったのですが,忙しかったので適当に済ませました. 方法は雑すぎるので秘匿します.TwitterのAPI使いにくすぎる. 適当に親交のある人を取得してthanksで送りまくったら,ドキュメントに書いてある通り,1ZNY送信されると思ってたら,実際には10ZNY送信されて,50人に送信するつもりが5人にしか送信されませんでした.悲しいけどまあ良いや. 一応開発者にはTwitterでドキュメントのミスを報告しました. 額を気にするならthanksではなく他のAPIを使うべきでしたね.1ZNY固定になってると思ったので使ってしまいましたが.

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によるオーバーロードが可能なので,何も奇をてらう必要はありませんね. D言語のことをほとんど忘却してしまっていたので有効なDソースコードを書くのに少し時間がかかりました.

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を弄れば良い. しかしデフォルトだと1はIntegerに型つけられるのでみそスープにはならない. というわけでどうやってやるのか一瞬わからなくなりました. Haskellの1 == "x" が違法だなんて誰も言ってない! - QiitaでRebindableSyntaxを知りましたが.できれば拡張無しでやりたいですね. ググったらそういうのはdefault宣言で解決できるようですね. Haskell 98からあります. クラス Num における曖昧性はよくあることで

JavaScriptのexportはexport default以外禁止にしてしまった方が楽になる

相当遅ればせながらJavaScriptのモジュールについて調べて,自分なりの付き合い方をまとめました. 結論: export defaultのみを使おう,他のexportはやめよう. JavaScriptコードのimportがつらい状況になっている 本質的な問題ではないですが,以下のようなコードがあってつらい. import { actionFoo, actionBar, actionBaz, actionQux, } from '../redux/action'; 本物はもっとひどく,名前付きimportの名前が50行程度あります.これをまともな形式に修正したい.数個ならともかく,50個もimportするならそれを列挙するのはつらすぎる. JavaScript(Babel, ES2015)のモジュール機構に詳しくないのでどう修正すれば良いのかぱっと見わからない.どれが利用されるようになるかわからない状況なのでまともに学習していなかったので,JavaScriptのモジュールを未だ把握していないので,基礎的な知識がない.見に行きます. import

計算理論のテスト用ノート

決定性有限オートマトン \(K\) = 状態の集合 \(Σ\) = 入力の集合 \(δ\) = 現在の状態状態 -> 入力 -> 新たな状態 \(q_0\) = 初期状態 \(F\) = 受理状態の集合 非決定性有限オートマトンは\(δ = K -> Σ -> \{K\}\)となっている.ε付きは入力が空白の入力を受け付ける. 正規言語 列の長さ: その列に含まれる記号の個数,列xの長さを|x|と書く.また長さ0の列を空列と呼び,εで表す. 列xとyの連接とは,列xの後ろにyをつなげた列のことでxyと書く.またxxを\(x^2\)と書くこともある. 列xの逆あるいは逆語とは,列xを逆から並べた列のことで,\(x^R\)と書く.例えば\(x = 110\)のとき,\(x^R = 011\)である. \(L = \{a, bb\}\)のとき,\(L^* = \{ε, a, bb, aa, bbbb, abb, bba, aaa, bbbbbb, aabb, abbbb, …\}\)である. チューリング機械 \(Q\) = 入力記号 \(Σ\)

アルゴリズムとデータ構造2のテスト用ノート

B木 各ノードは最大m本の枝を持つ, 恨と葉以外のすべてのノードはm/2以上の枝を持つ, 挿入時ノードの要素数がm-1を超える場合は真ん中の要素を親として2分割して部分木を作り,親のノードの枝の位置に挿入する,それを繰り返す, ノードの中間の要素を消す時は,子の最大の要素をそこに挿入する,葉がなくなってしまう場合は隣から貰ってくる,隣にも存在しない場合,子の要素2つを合体して新たな子とし,枝の数を減らす, 高さは0オリジン,全てのノードに要素を詰めた場合,要素数は\(高さ*次数^0 + 高さ*次数^1 + … + 高さ*次数^{高さ}\)となる ホーナー法 \(a_0 + a_{1}x + a_{2}x^2 + … + a_{n}x^n = a_0 + x(a_1 + x(a_2 + … x(a_{n - 1} + a_{n}x)))\) RSA暗号 e = 正の整数, P, Q = 素数, N = P * Q, m = 暗号文, M = 平文, \(ed = k*(P‐1)*(Q‐1)+1\), \(m = M^e mod N\), \(M = m^d mod N\) ソート ヒープ

アルゴリズムとデータ構造2(テスト返却)

私のテスト結果は100点満点中68点でした.平均点は64.7,最高点は92点だそうです. 手計算が多くて全然駄目だと思っていたのですが,意外とそこそこ出来ていたそうです. 紙上でアルゴリズムの計算過程を書くよりも,プログラミング言語で書いて出すという形式の方が良かったと思いました.まあ自分が有利になるからそう思っているだけで,全体で良い講義になるという確証があるわけではないのですが. 間違えた答えについては,計算用紙を提出してしまったのでなんでこんな答えが出てきたのかわからなくなってしまいました. 木構造 挿入した後のB木の構造正解した人5人だけらしいですね.なんで私は正解していたんだ…?完璧に正解しているじゃないですか. ハッシュ 文字列"aoba"を整数値として読み込み83でmodを取りハッシュ化したハッシュ値の計算. 私は手計算で71という値を出しましたが誤っていたようですね. 私は上から\(c * 256^{index}\)で文字に数値をかけていくと思ったのですが,indexの向きが逆で,降順だったようです. しかしその方式で計算してみたとしても Pr

mmapというファイルやデバイスをメモリーにマップするシステムコールの解説

選択3: mmap mmapについて説明しなさい。その際に必ずanonymous メモリーについて言及すること。 概要 mmapとは,ファイルやデバイスをメモリーにマップするシステムコールです. 一応mmapはPOSIXに含まれているシステムコールです.しかし,POSIXに定義されている動作はごく一部で,特にflags引数に指定できるのはMAP_FIXED, MAP_PRIVATE, MAP_SHAREDの3つしかなく,無名ページもサポートしていません.それぞれのUNIXが独自に拡張しており,ゆるい共通APIを持っていますが厳格な規格にはなっていないようです. mmapの引数 mmapの引数を軽く説明します. void* addr: カーネルがメモリのどの位置にアドレスを配置するかヒントを設定できる,通常NULLで動かす size_t length: 確保するページのサイズ int prot: ページが実行可能,書き込み可能,読み込み可能かを論理和でモード指定する int flags: 色々な設定を論理和で行う int fd: ファイルディスクリプタ off_t offse

UNIX(NeXTSTEP)

寝坊して20分遅刻したので最初何喋っていたのか全く把握してませんでした. スティーブ・ジョブズのNeXTのプレゼンがキャノンの日本語字幕付きでしか動画が残っていないらしい.ウケる. NeXTのアーキテクチャってメインフレームを参考にしてたんですね.メインフレームのアーキテクチャをワンボードに載せるという. コンパックとか懐かしい名前が出てきますが,HPは現役でIBMはPCをLenovoに売り渡して時代を感じます. Mach Kernelの話.ダイナミックローディングが出来るのは当時としては珍しかったらしい.Linuxに動的モジュールが入ったのって何年ぐらいでしょう.正確な年はわかりませんでしたがmodprobeのmanページの著作権表示が2002年だったのでそのあたり?スレッドシステムは当時としても珍しいものだったのでしょうか?Machにスレッドシステムが入ったのは1988年らしいですが. NeXTSTEP由来のNSStringとNetScape由来のnsStringの2つがあってややこしいという問題があります.FirefoxのMac対応とか担当してる人とかよく混乱してそう(想像).

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でのベンチマークもするべきなのでしょうが,普段使いのPCなので環境が構築するのが大変面倒なのでやれません. 一応公称値としてはSM961はシーケンシャル:読み出し3,100MB/s、書き込み1,400MB/sらしいです. hdparm -Ttを使った簡易的なSSD,HDD,bcacheデバイスのベンチマークも載せておきます. 2018-01-18T02:00:11 ncaq@strawberry/pts/0(0) ~/Documents/archive/2018-01 % sudo hdparm -Tt /dev/n

Linuxでは何故SSD向けのキャッシュ機構をZFSのようにファイルシステムに依存せずにbcacheのような形で提供しているのか考察

選択2: SSD向けのキャッシュ機構 SSD向けのキャッシュ機構bcache Linuxカーネル3.10ではSSD向けのキャッシュ機構bcacheが新たにサポートされた。ファイルシステムZFSなどではSSDをキャッシュとして使うメカニズムを持っているが、bcacheはファイルシステムなどに依存しない独立した形で提供されている。Linuxのアプローチではファイルシステムにも依存しないアプローチを採用するのは何故か論じなさい。 ZFSのメインターゲットであるSolarisにもDCD -- Disk Caching Diskというbcacheに似たようなソフトウェアが存在するようです.しかし,殆ど実用されていないようなので例外として無視します. Linuxのファイルシステムは多彩である Linuxのファイルシステムは多彩です. Linuxカーネル4.12.12でmake menuconfigして確かめてみると,Miscellaneousではないメジャーなファイルシステムだけでも, ext3 ext4 Reiserfs JFS XFS GFS2 Btrfs NILFS2 F2FS と

科学論・科学史102(元素合成)

電子には重さはあるけれど,大きさは点で無い.電子の大きさはめっちゃ小さいとかではなく,極限で0に近づく. ただ点だけれど電子には重さがあり,0.5MeVの重さを持っている. 原子核はもっと重たい. 太陽が石油の塊だとすると,あのエネルギーの放射では100年ほどでエネルギーが尽きてしまう.核融合のエネルギーが太陽を光らせている.核反応と化学反応には相当の違いがある. 太陽では小さいものから大きいものを作る核融合を使っている. 人間は核融合に未だ成功してない. 私「ロシアでは核融合炉出来ていると聞きますがどうなんですか」核融合炉自体は出来ているけれど,インプットしたエネルギーに対してアウトプットが見合ってないので成功とは言えない. 太陽ほどの大きさがあれば核融合が出来る. p = proton = 初子(陽子) n = neutron = 中性子(中子) d = p * n 核融合でヘリウム3を作る話.そう言えば月にはろくな資源がないと思っていたけれど,ヘリウム3は結構あるらしいですね. 太陽の核反応は主にppチェイン.

systemdを使ってサーバーで優先度を低くしてBitZenyを採掘する方法

手元のwebサーバ兼ルータもCeleronですが,一応CPUが存在していて,BitZenyはCPUでもそこそこ掘れるので設定してみました. しかしこのサーバの本懐はマイニングではないので,あくまでCPUが空いている時にのみ動かしたい. 普通にsystemdのユニットファイルのNice値を設定することで可能のようでした. [Unit] After=network.service [Service] ExecStart=/home/ncaq/.local/bin/minerd 省略 Nice=19 [Install] WantedBy=multi-user.target 一応これで他のプロセスに譲ることは行っているようです. しかし,Nice値を調整して他のプログラムを動かしていてもCPUは普通に使うし,他のプロセスにも影響があるようなので,やはりこのサービスを動かすのはやめました. 採掘量もデスクトップPCが10khash/sに対してサーバは1khash/sぐらいしか稼げませんし. もっとサーバのアイドル時間が長い,例えば録画サーバなどだったら使っていたかもしれませんが… あとC

Gentooでccminerをビルドしてmonacoinを掘る

どうもmonacoinを1モナ2000円で掴んだ負け組です. 今回はせっかく高級なGPUがあるんだからccminerでmonacoinを掘る環境を整えました. それまでもGPUだけはあったんですが,電源の能力が不足していたのでGPUマイニングは行っていませんでした. それが電源が変わって負荷に耐えられるようになったのでマイニングを行ってみることにします. PCの電源を750WのFSP RAIDER RA-750から1000WのCorsair RM1000iに乗り換えたらGPUが安定駆動するようになりました - ncaq まずnvidia-cuda-sdkをなんとかしてインストールします. nvidia-cuda-sdk-9.0.176がglibc-2.26-r5でビルドできない問題の解決方法 - ncaq ccminerはデフォルトでcudaの位置を/usr/local以下だと思っているので環境に合わせて以下のように修正します. ビルドスレッドも書き換えればビルドが早く終わってよい. diff --git a/build.sh b/build.sh index 17935f3..6d6

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 のようなビルドエラーになります. これを正攻法で解決するのは無理そうだったので,/usr/include/bits/floatn.hの冒頭に書いてある #if (defined __x86_64__ \ ? __GNUC_PREREQ (4, 3) \ : (defined __GNU__ ? __GNUC_PREREQ (4, 5) : __GNUC_PREREQ (4, 4))) # define __HAVE_FLOAT128 1 #else # define __HAVE_FLOAT1

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で足りるはずなのですが,症状がどう見ても電源容量の不足のため,変更しました. 変更したらストレステストは問題なく動くようになりました. RA-750は2014年に買った電源だったので,老朽化して最大のパフォーマンスが出せなくなってしまったのかもしれませんね. RM1000iはもうギリギリを走るのは面倒だったので1000Wで動いて,電気代は私持ちじゃないので適当に安い電源を探した結果です. 終息品だったので大丈夫かなと思ったのですが,問題なく動いてくれているようです. マザーボードのUSBソケットが足りなかったのでCorsair Linkが使えなかった CPUのクーラーのファンを一度取り外したら4つのネジのうち1

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の作成は確か初期のHaskellだとそもそもできなかったはずですhttps://t.co/h18PSF0vpv — エヌユル (@ncaq) 2018年1月12日 あと,現実的な対処としてPrelude> Just 1 == pure 1TruePrelude> Right 1 == pure 1Trueのようなことが可能でなので別に分解が統一されてなくても問題がないですHaskell使いはコンテナ(?)に包む方式を共通して作りはしますが,分解はパターンを網羅でき

UNIX(UNIXとIoT時代のセキュリティ)

Meltdownの時事ネタ. 最近の組み込み機器はLinuxが動いているという話.そう言えばIntelの組み込み機器死にましたね.Intel、「Galileo」「Edison」「Joule」の提供終了へ - ITmedia NEWS 下手な安いラップトップは物理コア数2ですよね.というか私が今使ってるXPS 13 9360もi7-7500Uなので物理コア数2.スマートフォンに載ってるARM系の物理コアが8(実働は4)が当たり前なのでスマートフォンの方がコア数多いことが普通に多いという.Intelでも第8世代Core i7にすると物理コア4スレッド数8になるからやっとラップトップの方が上になるのか. RISC-Vの話を学校で聞くとは思いませんでした. 首都大学東京の個人情報漏れが連帯責任というのはどうなんでしょう.教員はまあ仕方ないと思いますけど学生はどうしようもない.私も専修大学ポータルのTLS暗号が弱いことをメールで伝えたけど3年間何も返事がないので.学生側に責任を求められても困る. 東京工科大学の学校説明をしてた人に「学内システムに脆弱性があった場合はどうしますか?」と聞いたら「学

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/Linux % sudo lshw -short H/W path Device Class Description ========================================================= system MS-7B09 (To be filled by O.E.M.) /0

Threadripper 1950Xに対してメモリが足りなかったので16GBから32GBに増設しました

16コア32スレッドのThreadripper 1950Xを購入して,これで並列ビルドも楽々!clangやchromiumのビルドも超速で終わるようになる! と思っていたのですが,1つ誤算がありました. メモリが足りない. 最近のメモリの高騰から,メモリは送られた16GBのものを使っていたのですが,これでは到底32スレッドを活かすビルドができないことが判明しました. atopで見ればわかるのですが,cc1plusは1プロセスにつき700MB程度のReal Sizeメモリを消費して,これが32個起動すると,16GBではスラッシングが発生してまともに動かなくなります. じゃあswapを無効化すれば良いのかと言うと,当然OOM-Killerさんがプロセスを殺しに来ます. この問題を解決するにはどうすれば良いのか,当然メモリを買うしかありません. というわけでメモリを買い足しました. 同じやつなら同時に設置しても問題ないかなと思って,価格的にもちょうどよかったので同じものを買いました. Amazon価格を調べてみるとDDR4-2666MHzのCMK16GX4M2A2666C16が¥23,465

情報リスク管理(総まとめ)

試験の話.持込禁止. 現代社会がバランスが崩れているというか,常に人間にモラルなんてない気がします. サイバーセキュリティ人材が不足しているという話本当だろうか…私は相手にもされなかったので懐疑的,私個人の問題と言えばそれはそう. 清掃員とサイバーセキュリティのエンジニアを並べられて強みは?と言われても困る. 情報リスク管理ということで実際の情報漏洩事案などをもっとバンバン知れるものだと思ってたのですが,そういうのがあまり無くて残念でした.

科学論・科学史102(量子力学の世界,小テスト)

蜜柑の色は橙色だが,黒体放射している橙色の物体と温度が異なるのは何故か 蜜柑は黒体ではないため,反射光があるだけ.光源を消去したら蜜柑の色も異なる.と回答しました 合ってるっぽいですね. プランクが導入した量子が実際に存在することを示したのは誰か,またその人は量子をどのようなものだとしたか アインシュタイン.電子を量子だとした.と回答しました.わからなかったのでダメ元でした. 正解はエネルギーを割って割って割れなくなったものでした.間違えました.

サービス情報システム(C言語には関数が存在しないという迷言)

早々に「C言語には関数の定義はない」「getcharは関数ではない」という発言が飛び出してきました.一体何を言っているのかわからない.もうこの講義についていける気がしません. 7.21.7.6 The getchar function と思いっきりC11(N1548)に書いてるんですよね. 「HTTPのプロトコルは何を送っても良い」????? 授業後に「C言語には関数の定義はない」という言葉の真偽を聞くために,C言語規格にgetchar関数が定義されていることを示したら,「C言語に関数はない」と繰り返し述べて,私の言うことを間違っていると言ってきました. 「私はISOとJISの規格を参照してgetcharが関数であると述べているのですが,そちらの根拠は何ですか?」と聞いたら「K&R」という返事が帰ってきました. 私がmanにもgetcharはPOSIX.1-2001, POSIX.1-2008, C89, C99.と書いてあるのでC言語の一部だと根拠を示したら,「manの2と3の違いわかる?わからないとダメだよ」と関係のないことを返してきました.確かに私はmanの番号の意味

スクリーンショット環境をimport(ImageMagick)からgnome-screenshotに移行できなかったので,PyGObjectで「最近開いたファイル」を追加するスクリプトを書きました

最近スクリーンショットを撮ることが増えたので,gnome-screenshotに移行しようとしました. importの不便な点は,スクリーンショットが「最近開いたファイル」に表示されないため,選択するのが面倒ということです. 当初はimportで取得したファイルをどうにかして「最近開いたファイル」に登録することを考えていましたが,gnome-screenshotを使えば自動登録されるのでそれで良いことに気がつきました. 以前のスクリーンショット取得関数は以下です.これをxmonadで呼び出していました. takeScreenShot :: X () takeScreenShot = do home <- liftIO getHomeDirectory time <- liftIO $ formatTime defaultTimeLocale "%Y-%m-%d-%H-%M-%S" <$> getZonedTime let path = concat [home, "/Pictures/",

alias pa='ps aux|ag'をag自身が見えないようにfunctionに変更して同期させましたがスマートな書き方ではない気がします

私は数年前から以下のzsh aliasを使用していました. alias pa='ps aux|ag' これを定義していると現在mozcが実行されているか調べる時にpa mozcと入力するだけで良いので便利です. しかしこのaliasには1つの問題がありました. agがps auxと同時に起動されてしまい,引数に検索キーワードが含まれるので検索にag自身が引っかかってしまいます. これまでまあ別に良いやと思って数年過ごしてきましたが,突如修正したくなったので修正しました. aliasではなくfunctionとして書き直しました. pa() { readonly local ps_result=$(ps aux) echo $ps_result|ag $@ } これでps auxの実行を文字列変数に同期入力するため,agのプロセスは含まれなくなります. しかしこれで良いのかどうにもわかりません.シェルスクリプトの書き方は色々ありすぎて意味不明です.これもfunctionではなく手軽に同期するパイプ文法があるのではないかと思って調べてみましたが見つから

certbot renewが今は使っていない削除したサブドメインのせいで成功しないのは誤ってSubjectに追加してしまっていたからでした

Let's Encryptから「そろそろ証明書の期限が切れるよ」というメールが来たので,更新しようとした所,更新ができない. 以下のようなエラーが出ました. 2017-12-29T23:24:36 ncaq@sonoda/pts/0(0) ~ % sudo certbot renew Saving debug log to /var/log/letsencrypt/letsencrypt.log ------------------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/www.ncaq.net.conf ------------------------------------------------------------------------------- Cert is due for renewal, auto-renewing... Plugins selected: Authenticator standalone,

Linux版CS:GOで日本語が豆腐になり,解決できませんでした

Linux版CS:GOをGPUのテスト用に動かしてみたら,日本語化したくなってきたので頑張ってみましたが無理でした. CS:GOのLinux版はSteamのインターフェイスを日本語にしていても日本語で起動しないので起動オプションで-language japaneseを指定して起動する必要があります. これでゲームの前のインターフェイスは日本語化されます. しかし,ゲーム内のインターフェイスは豆腐文字になってしまいます. フォントが入ってないのかなと思ってフォントを変えてみようと思いました. http://fonts.spddl.de/というサイトではCS:GOのフォントをリソースと設定をバンドルして配布しています. その中にNoto Sans CJK SCがあるので,これを使えば漢字は表示できそうだと思いました.しかし,SCは簡体字の意味で,日本語ではないので,これを使いたくはないです.というか試しに適用しても表示されませんでした. Steam コミュニティ :: ガイド :: How To: ANY FONT IN CS:GO (not only from fonts.spddl.d

Threadripper 1950XとGTX 1080 Tiで新しいPCを組みました,詰まったところなどメモ

買い物メモ. Ryzen Threadripper 1950X, GTX 1080 TiなどのPCパーツを購入して30万円ほど貯金を吹き飛ばしました - ncaq 旧 CPU: Intel Core i5-3570 4-Core capacity: 3800MHz CPUクーラー: Intelの付属品 マザーボード: Gigabyte H77-DS3H メモリ: DIMM DDR3 Synchronous 1600 MHz 4GiB の2枚で8GiB SSD: Intel SSDSC2CW12(111GiBでLinuxに回していたのは34GiB) GPU: GTX-480 リファレンスモデル 新 CPU: AMD Ryzen Threadripper 1950X 16-Core capacity: 4200MHz CPUクーラー: Corsair H80i V2 マザーボード: MSI X399 SLI PLUS メモリ: CORSAIR DDR4 8GB×2枚キット SSD: サムスン PM961 1TB NVMe M.2 SSD PCI Express GEN3 x4 MZV

Stackの並列ビルド数は--jobsを指定しないデフォルトの場合CPUのコア数と等しくなります

Stackは--jobsオプションを指定することで,依存関係が独立したパッケージを並列にビルドすることが可能です. これはデフォルトで有効になっている機能です.CPUコア数とメモリのバランスが取れてない場合並列ビルドにメモリが耐えきれずにビルドが落ちてしまうので--jobs 1を指定する必要がありました.なので,デフォルトで有効だとはわかっていました. これのデフォルト並列数が気になったので調べてみました. stack/Config.hs at dd01d0a9e20b440d6f4ebc0f49a585a3b33d34b2 · commercialhaskell/stackにたどり着きました. 書いてあるとおり,指定されないNothingの場合はGHC.Conc.getNumProcessorsの値が使用されます. ちなみに,この関数の結果は私が所有しているラップトップのIntel(R) Core(TM) i7-7500U CPU @ 2.70GHzだと4,デスクトップのAMD Ryzen Threadripper 1950X 16-Core Processorだと32の値になります

Dell製のPC(XPS 13 9360)のIntel MEの脆弱性修正アップデートは手動で適用する必要があります

Intel Management Engineの脆弱性を修正しようと色々やりましたがDell XPS 13 9360向けの修正アップデートは2017年12月10日に来ることを知りました - ncaqに書いていたとおり,Intel MEの脆弱性への修正アップデートはXPS 13 9360では2017-12-10に来ることになっていました. しかし,WindowsでDell Updateを実行しても実行しても最新ですと表示されて,BIOSの更新もIntel MEの更新も行われません.配布が遅れるのかなあと思って放置していたのですが,いくらなんでも遅すぎます. ドライバ配布のページXPS 13 9360のサポート | ドライバおよびダウンロード | Dell 日本を見ても,実際アップデートはありません. しかし,Intel ME/Dell Client ステートメントに txe アドバイザリ (Intel- sa-00086) 。 | Dell 日本という脆弱性を告知しているページを見てみると,最新のBIOSとIntel MEドライバを入手することが出来ました. これにて最新版になりました.

アルゴリズムとデータ構造2(AI,UI)

基本的に試験の話. 強いAIと弱いAIの話定期. AIの基礎トピックは探索と推論. なのでこれまで取り扱ってきた探索もAIだと言えるけど,当たり前になった技術はAIと呼ばれない.文字列探索も探索だし,将棋などのパターンの探索も探索. 推論.ソクラテス殿がまた死んでおられるぞ.ルールを書きまくるエキスパートシステムの話.インプットが大変.他のAIの話する人と違って,ちゃんと課題点を言ってくれるから安心する…知識をとにかく入力して分岐するだけのシステムだとフレーム問題にぶち当たる.ディープラーニングでフレーム問題はなんとか…できない. UIはシステムとユーザーの境界. AIとUIとアルゴリズムとデータ構造.システム全体でデータを処理する. 講義振り返り.B木,ソート,文字列探索,グラフなどの知識が曖昧だったため,ちゃんとインプットし直せて良かった.

UNIX(セキュリティ)

IoT機材がDDoSノードに使われているという話.PCに比べて常にネットワークに繋がっているし,機器は多いので脅威ですよね. Mirai亜種が国内の最大2万4000ホストに感染、ロジテック製Wi-Fiルーターの脆弱性を悪用 -INTERNET Watch時事ネタでしたね. ネットワークカメラは元々回線が太いから脅威という話.ネットワークカメラもルータもネットワーク回線が太いことが前提なので,乗っ取られると脅威ですよね. 組み込みLinux開発者のセキュリティ意識が低いという話は確かにそうかもしれない.これまではネットワークに接続してなかったので気にする必要がなかった. 管理者権限のパスワードが初期設定なの本当によくありますよね.管理者権限ユーザのパスワードがデフォルト設定になっていることがルーターですらよくある. Mirai-Source-Code/scanner.c at 6a5941be681b839eeff8ece1de8b245bcd5ffb02 · jgamblin/Mirai-Source-Codeの話.というかこのコード群よくGitHubにBANされないですね…GGCはす

計算理論(試験準備)

NPの中でも一番難しい問題を作ろうとしてNP完全問題という概念が生まれたが,実はNPな問題の多くはNP完全であることがわかってきた. クラスNPの問題を多項式時間で還元してNP完全にすれば良いのでクラスNPの問題は全てNP完全な気がしますけど,証明はされてないっぽい. NP完全な問題の1例として,3SAT問題が挙げられる. HAMPATH問題もNPに属することを説明したが,実はNP完全. 試験解説 今日は試験の解説が主でした. 以下の形式で問題を出す. 好きな言語を指定し,それを受理するTuring機械の状態遷移図を示せ. NP完全問題の例を1つ挙げよ.問題を説明し,例を挙げること,NP完全問題であることを証明する必要はない. 持ち込みシートには表裏書いていいということなので,私の場合A4表裏に印刷することになります.私はB4ではなくA4を使うことになりますが,印刷して良いというアドバンテージを認めてもらっているのでこれぐらいは問題ないですね. 持ち込みシートは提出して,裏は半分レポートのような形で提出することになるそうです.

情報リスク管理(クラウドコンピューティング)

クラウドがちゃんとバズワードであること,既存の技術の組み合わせで構成されていることを解説していて良い. 地震でサーバが倒れる話,思い出すシリーズだ. 出た,コミュニケーション能力とかいう情報を伝えようという意志を感じない言葉. 経団連の調査で,企業が新卒に対して選考時に重視する要素として「コミュニケーション能力」がトップだったからと言って,現代でコミュニケーション能力が必要とされていると判断するのは早計だと思います.いくら新卒相手とは言え,現在の能力を考慮しないアンケートに意味があるとは思わない.適当に答えているだけでは?本音では絶対学歴の方を重視してますよね.このアンケートを真面目に答えたところで企業側にメリットはないですし… そもそもコミュニケーション能力という言葉の定義も定まっていません.厳密に情報を交換して仕様などをちゃんと策定できる能力なのか,忖度を行える能力なのか全くわかりません. JavaがJAVAと表記されたポンチ絵が出てきて気分が悪くなりました. コミュニケーションはスキルだから論理やメソッドで標準化出来るとして出てきたのが心理学なので微妙.基本的に心理学は信用できな

科学論・科学史102(原子の構造)

CTやMRIは聞いたことありますし,MRIはこの間受けましたが,PETと言うのは聞いたことなかったですね. 光の強度が強いと高温. 量子はエネルギーにおける原子,これ以上分割出来ない単位.(素粒子の話は置いておこう)プランクは量子の概念を用いてプランクの法則を作って黒体放射の波長を分布した.しかし,量子の存在はあくまで数学的テクニックだった.アインシュタインは量子が実在することを示した. 原子の実在は1922年(ペラン)頃に認められたが,電子の実在は1897年(J・J・トムソン)頃に認められていた.電子のほうが小さいのに電子のほうが認められるのが早かった. 物質は何故光るのか?反射光ではなく放射光の話.温度のある物質内では電子がぶつかりあって外に放射される.可視光線は電磁波なので,それによって光が発生する. 温度が変化すると物体の色が変わる理由.色は電磁波の波長で決まっている.温度が上昇すると電子の回転スピードが速くなるので電磁波の波長が変化する.

サービス情報システム(Amazon, Google, Microsoft)

学年を調べるのに手を挙げろと言われたので4年生で手を上げたら「じゃあ就職決まってるんだ」と言われた.「決まっていない」と言ったら「もう終わりじゃん」と言われた… 「Microsoftは受託開発していない」という発言をしてますが,巨大化するグーグル、マイクロソフト、アップル--何で儲けているのか - ZDNet Japanを見たり,Microsoftの導入事例を見るにやってるのでは…と思ったけど確たるソースは出てきませんね,やってないのかな?というかAzureの割合高いな,2016年の記事みたいですが,2017年は更に増えているようで. 「Googleの収益の殆どは広告」というのはそうみたいですよね.Google vs. Facebook! 出揃った巨人2社の決算を比較:ヒートアップするネット広告2強時代 | DIGIDAY[日本版]を見てもそんな感じ.GCPってあんまり儲かってないのかな? 「諸君はLINEを使ってるじゃないですか」ないです.Slackとチャートワークなら使ってますが. 「日本人は民族的にリスクを取らない」って言ってますけど本当かなあ,日本人論に囚われてませんか?と思っ

Haskellによるwebスクレイピングの方法をdic-nico-intersection-pixivを例に書く

Webスクレイピング Advent Calendar 2017 - Adventarの19日目の記事です. この記事では実際のwebスクレイピングの成果である,ncaq/dic-nico-intersection-pixiv: ニコニコ大百科とピクシブ百科事典の共通部分の辞書で書いた時の思考のログから,Haskellでwebスクレイピングを行う時の知見を抽出していきます. コアのソースコードはdic-nico-intersection-pixiv/Main.hs at master · ncaq/dic-nico-intersection-pixivの1ファイルにまとまっています. なぜHaskell? webスクレイピングに絡んだ特別な理由はないです.単に私の1番得意な言語がHaskellだからというだけの選択ですね. map, filter, foldのような高階関数が強く,簡潔にデータ処理が出来て,それでいて型によるコードチェックが入るという優位点はあります.しかし,webスクレイピング限定ではないですね. dic-nico-intersection-pixivとは 既存の

既存のプロジェクトのファイルにEmacsでインデントをかけていくスクリプトを書きました,しかしESLintのインデントルールとEmacsのモードが異なっていたので不採用

既存のプロジェクトのファイルが自動インデント規則に従ってない場合,全てに自動インデントをかけたいことがあります. JavaScriptとかならESLintである程度は抑制できるのかもしれませんが,どうもESLintはコードフォーマッティングツールとしてはあまり優秀ではないみたいです.prettier/prettier: Prettier is an opinionated code formatter.というのがあるらしいです.しかしこういうものはプロジェクト全体に導入する必要があるじゃあないですか,とりあえずインデントを揃えたいだけなので今回は見送ります. そしてHTMLとCSSには簡単に導入できるそういったツールはない.SASSにはsass-convertがありますが… というわけで,Emacsでインデント揃えたいです..editorconfigの設定をちゃんと適用できるエディタ環境で揃えないといけないという事情があり,そういったエディタでスクリプトを回せるのはEmacsとVimぐらいでしょう. 以下のような手順で出来るでしょう. プロジェクトのGitで管理しているファイルを全て

Gentooのプロファイルが更新されて,GCCがデフォルトPIE有効になったので,Stackのビルドが壊れました,ビルドオプションを手で修正したらビルドできました,issueに報告しました

Gentooの新しいプロファイル17.0が先日リリースされました.New 17.0 profiles in the Gentoo repository – Gentoo Linux これに遅ればせながら気がついて,適用してみました. 新しいプロファイルではPIEがデフォルトで有効になっているようですね. eixとequery uの出力に違いがある. とりあえず寝ている間に全更新をかけたのですが,奇妙なことが発生しました. eixでgccを見ると,以下のようになります. 2017-12-15T13:25:09 ncaq@karen/pts/4(0) ~ % eix -e gcc [I] sys-devel/gcc Available versions: (2.95.3) [M]~*2.95.3-r10^s (3.3.6) [M](~)3.3.6-r1^s (3.4.6) [M]3.4.6-r2^s (4.0.4) [M]**4.0.4^s (4.1.2) [M]4.1.2^s (4.2.4) [M](~)4.2.4-

アルゴリズムとデータ構造2(グラフ)

テスト用ノートが手書きのみということだったので,学習障害で手書きがひどく苦痛であることを伝えたら,私1人だけ印刷でも良いことになりました.良かった. グラフと隣接リストと隣接行列を描く例で,何も思いつかなかったのでポケモンのタマゴグループの繋がりを書きました.例題なのに7個もノードが作られてしまったので,リストはともかく行列は書くのが面倒でした.失敗. タマゴグループ 一生私はダイクストラ法を忘れては思い出すのを繰り返している気がします.今年も去年もやったはずなのに方法を忘却しています… アルゴリズムの授業があるたびに違う方法でダイクストラ法を覚えなおしている気がします.無限探索に入った. 未確定ノードのうち最短のノードを確定させ,確定しているノードと連結しているノードの仮距離を更新する.というのを繰り返せば良いと理解しました.多分明日には忘れています.

UNIX(TCP/IP)

TCP/IP - UnixClassWiki TCP/IPの話から入るの良いですね,何故か関係ない通信プロトコルであるOSIの話をする人が多すぎる. KA9Qなんて初めて聞いたプロトコルですね.と思ったら違った,TCP/IPの初期の実装がKA9Qなんですね. TCP/IPがUNIX上なのにファイルでアクセスできない問題,QUICとかを利用することを考えるともうずっとファイルでアクセスする方法にはシフトしなさそうですね.HTTPSみたいな暗号化してる通信をファイルでアクセスして何か嬉しいか?という問題も思いつきます.いや暗号化は透過的に実装しておけばユーザはテキストで読み書きできるんですかね.同様にHTTP/2がバイナリである問題も透過的に処理すれば良い.読みはGETリクエストの結果の生レスポンスで良いとして,書きは何に相当するべきなんでしょう,POST?しかし,やはり,TCP通信をファイルで行えて何か嬉しいのかは謎ですね. Googleがインターネットを破壊した話,思い出すシリーズだ. BSDの細かいバグがWindowsでも再現した話,前回も聞きましたけど,ライセンス問題とかに発展しな

Qoo10というサイトでGTX-1080 Tiを注文したら,株式会社YAYAYOからCanon PowerShot G9X Mark Ⅱが届きました,現在返品申請中

Ryzen Threadripper 1950X, GTX 1080 TiなどのPCパーツを購入して30万円ほど貯金を吹き飛ばしました - ncaqに書いている通り,GTX 1080 Tiを購入しました. そうしたら違う商品が届きました. Qoo10.jp - お得で楽しいショッピングというサイトがあり,価格.com - MSI GTX 1080 Ti ARMOR 11G OC [PCIExp 11GB] 価格比較で最安値だったためそこで注文をしました. そしたらCanon PowerShot G9X Mark Ⅱが届きました. ありえん… この時Amazonで私に何か送ったと言っている人が複数居たので,プレゼントだと思ってぬか喜びしたじゃないですか!!! 同時に入っている紙を見てあれっGTX 1080 Tiって書いてるぞおかしいなと気がついたから良いものの,本気で勘違いする可能性がありましたよ. とりあえずQoo10に電話したら,17時でも電話対応を受け付けていました.それは良いんですが,電話では「交換をご希望ですね?」と交換に誘導する感じのことを言っておきながら,サイトには

計算理論(P vs NP問題,NP完全性)

P vs NP問題 これまでにPはその言語に属しているかどうかを多項式時間で判定できる言語のクラス,NPはその言語に属してことを多項式時間で検証できる言語のクラスだと学んできた. P ≠ NPだと多くの人が県警から信じているが,実際にPに属していないNPの言語は見つかっていない.多項式時間で判定できないことを証明するのは難しい.もしかしたら良いアルゴリズムが存在するかもしれない. NP完全性 NPに属する問題の中で最も難しい問題を見つけようというアプローチ.この最も難しい問題をNP完全問題と呼ぶ. NP完全問題は最も難しい問題なのでPに属さないことを証明するのが比較的容易なはず.逆に,最も難しい問題であるNP完全問題がPに属すればP = NPとなることがわかる. 多項式時間帰着可能性 問題Aへの入力を問題Bへの入力に変換することを考える.この変換(帰着という)が存在するならば,問題Bを解くアルゴリズムを用いて,問題Aも解けることになる.Aへの任意の入力を帰着を用いてBへの入力へと変換し,Bを解くアルゴリズムに入力すれば問題を解くことが可能. 例えば,長方形の面積を求める問題は

情報リスク管理(働き方改革と事業継続)

「Windowsではメモリの内容をHDDにページングしているから電源を切っても消去されない」ってマジですか?スリープやハイバネーションではなくて?それともスワップファイルに重要情報が入ってしまうという話でしょうか. ググっても出てこなかったんですが,確かに停電した時再起動したら,アプリケーションの状態が復元されたことがあるので,そういう機能があるのかもしれません. HDDを物理的に壊すセキュリティ施策を聞いて,家宅捜査の直前にドリルでHDDを破壊したドリル姫こと小渕優子衆議院議員のことを思い出しました.ドリルでHDD破壊…検察を本気にさせた小渕優子氏|政治|ニュース|日刊ゲンダイDIGITAL BYODできない職場って環境作るのつらそう… Ustreamが存在してたりTwitterやGoogleのロゴが古かったりして時代を感じます. NTTデータの動画でIoT時代に備えるデータセンターとか出てきたんですが,IoTとデータセンター何か関係あるんですかね.非常用発電機で72時間稼働できるのはすごいな.セキュリティに何が関連してくるのかわからないけれど… BCPの優先順位で通信意外と優先順位

科学論・科学史102(黒体輻射と量子)

黒体とは光を反射しない物体のこと.反射しないので普通は黒色になる.しかし太陽も黒体. プランクはレイリー・ジーンズの法則とボルツマンの法則に矛盾が存在することを発見して,法則をハックしてプランクの法則を導出した.プランクの法則は量子を仮定しているが,プランク自身は量子に懐疑的だった.これは数学的なテクニックだと考えていた. アインシュタインは光は量子=光子の集まりだと考えた.光子を金属に当てて電子をビリヤードのように飛び出させる光電効果を光量子仮説で説明した. リンゴの色が本当に赤色かどうかという話を聞いて,クオリアの話だと思ったら違いました.リンゴの色が赤いのは赤を多く反射するから赤い.光源が無いと人間には黒く見える,というか見えないが,リンゴにも温度があり,エネルギーがある以上少量の発光をしている.

サービス情報システム(DRM)

「スカパーやWOWOWなどの有料CS放送はどうやって契約してない人に見せないようにしてる?」という質問をして,とある学生が「B-CASでユーザー識別をしてる」と答えたんですが,「それは違う」とのこと.正確にはB-CASのキーで復号をしてますが,合ってると思うんですけどね…その後B-CASカードに暗号キーが含まれているとか言っていて,やっぱり合ってるじゃないですか. なんでこの人生徒の答えがこれから話す内容と同じ場合も否定するわけ?頭スティーブ・ジョブズかよ. 「NOTTVが倒産した」という話をしていたので,「NOTTVってNTTドコモのサービスじゃなかったっけ?と思ったら株式会社mmbiが運営してて,NTTドコモが吸収して解散したようですね.6月終了のNOTTV。ネット業界なら日本の歴史上最大の累損1,166億円でドコモに吸収合併・解散へ 量産品は強いという話.「特殊な演算独自チップは廃れて,量産できるGPUがゲームの影響で強くなった」と.まあ一理はありますけど,HPCは独自チップが強いですし.,最近TPUでGoogle/DeepMindがぶいぶい言わせてるので本当にそうなのかなーと思

Ryzen Threadripper 1950X, GTX 1080 TiなどのPCパーツを購入して30万円ほど貯金を吹き飛ばしました

PCパーツを購入しました. 今使っているデスクトップPCは2013年に組んだもので,そろそろ新調したかったのです. 学生の今年のうちに新調しないと,Windowsのライセンスが更新できないかもしれないという懸念があったため,年内に新調を済ませたかったという事情がありました.そこに丁度サイバーマンデーが来たので,PCパーツを買うことにしました.しかし,サイバーマンデーの影響は殆ど無かったどころか,早く買ったほうが全体的に得でした.サイバーマンデー待たなければ良かった… メモリ 少し前に,reotaso-san(@reotasoda)さん | Twitterから,Amazonのほしい物リスト経由でCORSAIR DDR4 デスクトップPC用 メモリモジュール VENGEANCE LPX Series 8GB×2枚キット CMK16GX4M2A2666C16(¥22355)をプレゼントしてもらいました.なので買ってないです. taosero07(@reotasoda)さんからプレゼント,新しい自作PCを組もうと思います,Nexus 6Pが早期シャットダウンする問題が未解決,HUAWEI P

Windowsをアップデートしたら勝手にパーティションを作ってまたGRUBがrescueモードになってしまったのでSystemRescueCdでchrootしてfstabを書き換えてgrub-mkconfigをやり直したら治りました

Delphiコードをビルドするために,Windows環境が必要になるかもしれなくなりました.なので,ラップトップPCの放置していたWindowsを最低限使えるように,最新版にアップデートしていたら,GRUBが壊れてgrub rescueを出すようになりました. あああああー!明日使うのに! pic.twitter.com/EasM8Mkm56 — エヌユル (@ncaq) 2017年12月8日 なんか前にも同じことが起きて無かったっけ?と思ってツイートを検索してみたら,1年前にも同じようなことが起きていたようですね. この記事のとおりにgrub rescueで操作すればboot可能,set rootだけだとダメ / “Linux 上の GRUB 2 がブートできなくなったときの対処方法” https://t.co/ve3Y5kK6jR — エヌユル (@ncaq) 2016年9月26日 おのれWindows. Linux 上の GRUB 2 がブートできなくなったときの対処方法を参考にします.これはそのままだとバージョンが違うのか違う挙動を示しますが,コアの部分は一緒で

アルゴリズムとデータ構造2(動的計画法),Haskellで総当たりでナップザック問題を解く

アルゴリズムとデータ構造2 - 専修大学 今回寝坊して,起きたら12時で,行けませんでした! 講義資料は配布してあるのでそれを見ると,授業内課題でナップザック問題が出たようですね. 問題内容 13kgの容量のナップザックに 品名 重さ 価格 A 4 450 B 5 570 C 2 225 D 1 110 E 6 670 の商品を詰めて,価格を最大化します この問題では,同じ商品を複数個詰めても良いことになっています. 私が電卓だけ使って解いたらB,B,C,Dになりました. しかしこれを学内システムに入力したら間違いになりました. じゃあWolframで検算してみようと思い,KnapsackSolve—Wolfram言語ドキュメントを見て入力してみましたが,何故かサンプルの入力すら通りません.諦めました. Maximaは暫く使ってないですし,0|1の場合のナップザック問題ぐらいしか解いたことがありません.複数個取っていい場合はどうやって書くんでしょうね. なのでHaskellで自分で書くことにしました. Haskellで解く方法 まず,商品の選択

:
Google 認証システムの端末移行に失敗しました,Authyを推奨します

Google 認証システムはGoogle以外のサイトでも利用することが出来ます. 私はStripeとZaifで有効にしていました. しかし引き継ぎに失敗しました.私はこの認証システムはGoogleアカウントに紐付いていて,GoogleにログインしているAndroid端末なら全てで利用できると思っていました.しかしそれは間違いでした.端末ごとに管理されていたようです. Googleアカウントの2段階認証は正常に移行できたので,これで問題ないと思っていました. しかしそれぞれのサービスで移行をする必要があったようですね. だがGoogle認証システムの場合、バックアップから復元しても、登録しておいたはずのサービス/アカウントが消えてしまう。つまりバックアップからの復元では移行できない。そのため、移行するには前述のように登録し直しの作業が必要となる。 Tech TIPS:iPhone/Androidで使っているGoogle Authenticator(認証システム)を別の端末に移行させる - @IT SMSの2段階認証よりこっちが良いと思ってたんですがGoogleの2段階認証もクソですね

HakyllサイトのHTML特殊文字が二重エスケープされてしまうのを正規表現によって解決

このサイトのdescriptionやteaserといったものは teaserFieldByResource :: Int -> String -> Snapshot -> Context String teaserFieldByResource l key snapshot = field key $ \item -> escapeHtml . take l . stripTags . itemBody <$> loadSnapshot (itemIdentifier item) snapshot によって作られているのですが,snapshotが既に特殊文字エスケープされているにもかかわらず,escapeHtmlを実行してしまっているため,&が二重にエスケープされていました.その結果,<が&amp;gt;になってしまったり問題が生じていました. かと言ってescapeHtmlを外せば良いというわけではなく,takeによってHTMLがぶつ切りに切断されているため,外すと&lt;が途中の;が無く切られてしまい,t

計算理論(時間の複雑さの議論)

前回のおさらい 全ての整数\(n >= n_0\)に対してある正の整数\(c\)と\(n_0\)が存在して\(f(n) <= cg(n)\).という言い回しなんか直感的じゃない気がします. 一階述語論理で書けば一見\(∀n(∃c ∈ N^+(∃n_0(n >= n_0 ∧ f(n) <= cg(n))))\)のように見えて,実は\(∃c ∈ N^+(∃n_0(∀n(n >= n_0 → f(n) <= cg(n))))\)なんですね.日本語の順序と論理式の順序が違うからわかりにくい. クラスP 前回関数の計算時間を分類する方法を学んだ. 動作時間が多項式時間は計算可能,指数時間は計算困難. 多項式は\(n, n^2, n^3, …\)のように,\(n^a\)で\(a\)は定数のようなもの. 指数関数は\(2^n, 3^n, …\)のようなもの. 階乗はStirlingの公式より\(n! ≒ \sqrt{2πn}\frac{n}{e}^n\)なので指数関数より速く増加する. クラスPを(決定戦単一テープ)Turing機械によって多項式時間で判定で

情報リスク管理(先輩SEの仕事,運用管理リスク)

先輩SEの仕事 客先常駐SEの話が来てこれはヤバいと思いましたが,システムエンジニアというのが和製英語だと認識していました. 1日のスケジュールか.09:55時出社で19:30帰宅はきつすぎる…まあ若手時代だし?次のページの最近のスケジュール見たら08:30分出社で19:30帰宅になって悪化してるじゃないですかー!ヤダー! 定時で帰れる日がないとか嫌すぎる… 1日のスケジュールでプログラミングやってる時間がない… 絶対システムエンジニアにはならないぞと固く決意した.私はプログラマであり,システムエンジニアではない. 一度も自社で働いたことがないとかそれ完全に人売りIT企業じゃないですか… 情報セキュリティというか単に被差別階級に居てデータに触れられないだけに思えるんですが. 質問タイムがありますが私はシステムエンジニアになる気は全く無いので質問することがないですね… ちょっと待って,就職活動の話はやめてくれ.100社受けたとか言うな,就活のトラウマが蘇るだろ.精神が汚染される.呪いの言葉を吐かないでください.就活と嘘はクリティカルに私に刺さってくるのでやめろ.AIの話やめろ. AWS

科学論・科学史102(小テスト(原子論,X線))

原子論を受け入れる時に障害になったものは何か 私の回答 4大元素などの固定観念 目に見えるものでは無かったこと ブラウン運動の説明は他のものでも出来そうに思えること 模範回答 目に見えないものを証明するのが困難. 実証主義に縛られすぎていた.原子が顕微鏡などで目に見えない時代では実証できないので受け付けられなかった.証拠を求める姿勢がむしろ足かせになってしまっていた. X線の発見は即座に認められた,原子論に比べてこれは何故か 私の回答 骨が見えてわかりやすい 手順を特許も取らずにオープンにした X線のようなものは複数の人が探していた(陰極線) 既存の理論と矛盾しない 模範回答 骨が透けて見えるということが実証主義に受けた 再現性があった 私が書いた,X線のようなものは複数の人が探していたというのは間違いでした.陰極線を研究している人が多かったからそう思ったんですが,講義の後に聞いてみたらX線の存在の発見は偶然によるもので,予想もされてなかったようです.完全に間違いでした.

サービス情報システム(圧縮)

「インターネットでは相手のコンピュータが動いているかわからない場合が多い」と言っていたので,そうか?TCPだとハンドシェイクするのでは?と思ったけれど,「経路が切れているかコンピュータが落ちているかわからない」という意図だったのでそれならまあ納得ですね. aがUTF-8では1バイトではないと言っていたのでそれはUTF-16では?と突っ込んでしまいました. aを1万文字送る場合の圧縮方法を聞かれたんですが,とっさに答えられませんでした.よく使われるハフマン符号はこの場合使えませんし…a10000のように書けば変換できますが,具体的な符号方式がわからない.実際xz圧縮すると圧縮出来ますが,どういう圧縮方法を用いているんでしょう.xzの圧縮方法であるLZMAを参照してみましたが,辞書式しか書いてない.反復の圧縮がわからない.いや,勘違いしていました,辞書式でも十分反復は圧縮ですね.例えば10000文字の圧縮なら100文字入れた辞書を持っておいてそれを100回参照すれば良いわけですし.普通に辞書式圧縮で繰り返しも圧縮できますね.終わり. ソート知ってる?と聞かれたので,クイックソートぐらいなら

MELPAに自作のEmacs Lispパッケージauto-sudoedit, recentf-remove-sudo-tramp-prefix, symbolword-modeを登録するpull requestを送信しました

Emacs Advent Calendar 2017 - Qiitaの5日目の記事です. 私の.emacs.d/mineには自作の5つのパッケージがあり,自前で読み込んでいます. 作ったのは大体2014~2015年で,ずっと放置していました. 自分で使う分には全くこれで問題ないのですが,せっかく作ったのだから公開して普通に使えるようにするべきだと思ったので,アドベントカレンダーを機にmelpaに登録してみようと思います. ncaq/eww-goto-alcは英辞郎on the webのログイン必須の上ログインにJavaScript実行が必須という仕様変更に耐えきれなかったので消去しました.サヨナラ. ncaq/ncaq-emacs-utilsは本当に自分用の雑多なユーソリティなのでmelpaには多分登録しません.するとしても切り出して機能別に分割します. MELPAへのパッケージの登録の仕方 - syohex’s diary MELPAにレシピを投稿するには - Qiita と原文を読みつつ書いていきます. レシピの追加自体はたったの1ファイルなので簡単でした. 問題なのはパッケー

Stackage Serverのちょっとした便利な使い方,Hoogleをブラウザのカスタム検索エンジンに追加しましょう,よく使うパッケージをブックマークする時はPackageRのURLにしましょう

Haskell (その3) Advent Calendar 2017 - Qiitaの4日目の記事です. 前回ゲーム販売webアプリケーションSYAKERAKEを支える技術,HaskellとYesodで作られています - ncaqはかなりの長記事になりましたが,今回はちょっとした小ネタです.Stackage Serverのちょっとした便利な使い方を紹介します. Hoogleをブラウザのカスタム検索エンジンに追加しましょう Haskellは関数が独立しているので,OOPLなどのメソッドと違い,関数の名前で検索をかけることが容易です.というわけで, Hoogle Hayoo! Haskell API Search Hoogle Search :: Stackage Server と言ったHaskellの関数を検索するサービスが複数ありますが,私は今はStackage Serverに付属のHoogleを使っています.HackageよりStackageの方がHaddock生成が早かったり,デザインが優れている所を気に入っています. さて,Stackage ServerのHoogleはトッ

J:COM回線が繋がらなくなったのでUCOMに戻してみたらレイテンシが超改善されました,しかし自作ルータは不安定なのでどうにかしたい

jcomの 回線遅く 不満持ち サポートに連絡したら改善 したけどやはり遅くて不満 - ncaqに書いているとおり,マンションの回線はUCOMからJ:COMに切り替わっていました. 今日何気なくリビングで親と世間話をしていたところ,Wi-Fi経由でインターネットに繋がらなくなりました.あれっと思って有線で接続確認してみましたが繋がりません. ルータかモデムに不具合が生じたのかと思い,一度全ての電源を切断して数秒待ち,再接続してみましたが,ルータの管理画面は開けますが,WAN側に繋がりません.ルータの設定に不具合が生じているのかと思い初期設定に戻してみましたがやはり繋がりません.障害情報はネット上にありませんが,とにかく繋がりません. ルータまでの範囲なら私も知っているけれどその先は全然わからないので,流石に対処不可能だと判断してJ:COMのサポートに電話してみましたが,サポートは9:00~18:00までの対応で連絡がつきませんでした. これはたまらんと思い,何故か未だに繋がるUCOM回線に繋がる自宅サーバのルータ機能を復活させてUCOM回線に繋げるようにしてみました. 契約終了に伴って

ゲーム販売webアプリケーションSYAKERAKEを支える技術,HaskellとYesodで作られています

Haskell (その3) Advent Calendar 2017 - Qiitaの3日目の記事です. この前「Haskellで書かれたwebサービスって何がある?」と聞かれて,HackageとかStackageのようなHaskellに関連したサービスぐらいしかパッと出せませんでした. なので,webアプリケーションであるSYAKERAKEがHaskell製であることと,これを構成するライブラリなどを書いていこうと思います.SYAKERAKEがどういうサービスかはサイトを見ていってください.半分このサービスの宣伝です.お許しください. この記事を読むことで,小規模ながらもプロダクションレベルのwebアプリケーションがHaskellで作れるということがわかっていただけると幸いです.特に実際の周辺環境を書いた記事はあまり無いと思います. ただ,SYAKERAKEはクローズドソースなので,現在ソースコードを全公開することは出来ません.我々してはOSSを推進していて,実際切り出して公開したOSSは存在するのですが,雑に作っていった結果公開できない範囲をリポジトリに含んでしまったので全公開は出

jQueryが必要とされなくなってきたのは,Reactなどの他のフレームワークが登場したせいではなく,標準DOM APIが進歩したおかげです

JavaScript Advent Calendar 2017 - Qiitaの2日目の記事です. 何故この記事を書こうと思ったか JavaScriptの定番ライブラリであるjQueryは,最近以前と比べて必要とされなくなってきました.その理由はよく,Reactなどの他のフレームワークが登場したせいだと勘違いされています.しかし,jQueryが必要とされなくなってきた理由は標準DOM APIの進歩によるものです.この記事ではそれを書いていきます. なお,この記事ではReact Nativeについて触れる必要がないため,React DOMのことも一緒くたにReactと記述します. また,私がweb開発を開始したのは3年前ぐらいからなので,昔のことは調べて書いています.間違っているならば指摘をお願いします. 先行した記事 この記事は2年ぐらい前から書こうと思っていたのですが,アドベントカレンダーに登録してから調べてみたら割と記事がありました. jQuery不要論について考える You Don't Need jQuery - Qiita jQueryは有害なのか | プログラミング

私のHaskellコーディングスタイルガイド,改行出来るポイントを紹介

Haskell (その3) Advent Calendar 2017 - Qiitaの2日目の記事です. Haskellは各構文を文ではなく式として扱えるため,適当に書いていくと,どんどん一行が長くなっていきます.その結果,ワンライナーのようなコードが作られることがよくあります. この目のチカチカを避けるためか、どうか、出来るだけ間隙を狭くするために、Haskellプログラマーは無意識にワンライナーになります。例えば上の例だと 2 のケースをだらだらーと一行に書きたがるのですね。その結果、一行500文字の Haskellコードなどが産み出されるのです。私は出来るだけ長くプログラム書くキャリアを続けたいんで、フォントは大きいんですよ。何ポイントか知らないけど、30inch のモニタでウィンドウいっぱいいっぱいにして190文字位しか一行に出せないんです。500文字のためには30inchモニタが三枚必要なんです。あなたは金を出してくれるんですか?ってことです。さすがに Haskell プログラマも一行が長すぎるとやはり気が咎めるらしいのですが、それでやる事と言えば、変数名の長さをケチるので

アルゴリズムとデータ構造2(探索)

BM法の一致サフィックスの話細かいのでスルーされてしまった.まあ地味なところだから仕方がないですね. この学部に声優居たんですね…どうもサイトを見ても専修大学出身という情報が出ていないので真偽は不明ですが. 「"声優名" "専修大学"」で検索しても23件しか出てこないんですが,隠してるんですかね…? 8クイーン問題ですね,Prologの出番か.と思ったんですが,Prologはアルゴリズムをあまり考えなくて済むようになってしまうのでこの講義の趣旨には適しませんね. 4クイーン問題を手で解く問題ですか. ..Q. Q... ...Q .Q.. まるで将棋だな.

UNIX(プロセス間通信,ネットワーク通信)

プロセス間通信 - UnixClassWiki 現状私が自分用にホストしているTiny Tiny RSSはnginxとPHPを接続する時にfastcgi_pass unix:/run/php-fpm/php-fpm.sock;と書いて,UNIXソケットを使っています.しかし,デフォルトでTCPが使われていて,設定を変更するのも面倒ですし,そんなにパフォーマンスを気にしているわけでもないので,次にサーバをリプレースする時はTCPを使うようにしておきましょう. Wnnの話懐かしいですね.Android初期はよく使われていましたね.今ではグローバル端末は基本みんなGoogle日本語入力をデフォルトで提供していて,Wnnが使われることは殆どなくなってきましたね.私もGoogle日本語入力/Mozc向けに辞書を作るぐらいですし. libkkcはこの先どうなっているんでしょうか. Google日本語入力を最初に見た時,UIプロセスと変換プログラムのプロセスを分離したのが画期的だと宣伝されていました.しかし,今Wnnを見返してみると,1985年のWnnの時代からUIプロセスと変換プロセスは分かれてた

HaskellのStateの必要性が,プログラミング言語の処理系を書いた時にわかったので,Stateの良さを語ります

Haskell (その3) Advent Calendar 2017 - Qiitaの1日目の記事です. Haskell初心者の頃はStateが何故必要なのかわからなかった 私はHaskellを書き始めてから2年ぐらいはStateの存在意義がわかりませんでした. こんなものは無くて良いと考えていました. Haskellは純粋関数でシステムを構成して,引数と返り値だけでものごとを構成しています.私はそこに魅力を感じてHaskellを学びました.そこで,Stateのような変数をエミュレートするような仕組みを導入したら,せっかく変数なしにシステムを構築してるのが台無しになってしまうと考えていました. つまり,Haskell初心者の頃の私は,常にa -> Worldのような関数を使って,Stateのようなものは使わないのが美しいと考えていたわけです. 変数のようなインターフェイスは結局必要である Haskellで実用的なプログラムを書くようになって,薄々この考えが間違っていることには気が付き始めていました.Haskell歴3年目ぐらいで,プログラミング言語処理系を実装してみた時,こ

ストラテラとコンサータの作用と副作用についての個人の感想

ADHD Advent Calendar 2017 - Adventarの1日目の記事です. 私は高校1年(2011年)の頃から発達障害の診断を受けていて,ADHD向けの薬を飲んでいます. 精神障害者保健福祉手帳3級も取得しています. この記事では,私が服用したADHD向けの薬について感想を書いていこうと思います. 私は強迫性障害向けの薬や睡眠薬も飲んでいますが,この記事では扱いません. この記事は医学的な知識を持たない人が書いた,ただの感想です,鵜呑みにしないでください. ストラテラ 今年4月ぐらいまでストラテラを飲んでいました.私はストラテラとコンサータを両方処方されていて,今はコンサータだけに切り替わっています. これを飲み始めたのは2012年の頃なので,これの作用はもはやわかりません.日常になってしまっていました.すみません,レポートできません. ただ,副作用だけははっきり言うことができます. この薬は食欲がものすごくなくなります. あまりにも食欲がなくなり,体重が50kg程度になって,BMIが「痩せすぎ」になりました. 食わなかったら死ぬので,無理やり食って,稀に食欲がある

情報リスク管理(情報セキュリティ基礎技術まとめ)

プレゼンにWikipediaからの引用載せるのは良いんでしょうか…いや,私は全く気にしませんけど,既に読んだというのは感じますね. nmapと言えばzmapって今はどうなんだろうなと思って使ってみましたがnmapと違って詳細なログを出力したりしないし,完全に用途が異なるんでしょうね. ウォー・ゲーム (映画) - Wikipediaにも人工知能の名前がウォーパーで,ホストコンピュータの名前がジョシュアと書かれてますが,ウォーパーはシミュレータソフトウェアで,人工知能はジョシュアじゃないんですかね?授業のために90分細切れで見たので,私の見解が正しいのかわかりませんが. シンギュラリティの話をしていて,「コンピューターで「脳」がつくれるか」を専修大学図書館に私が発注したことを思い出したのですが,未だに借りられていません. いつも貸出中です.まあ予約すれば良いんですけど,今読めるかどうかもわからない忙しい状態で予約するのは誠実じゃないかなと思ってしまいます. なんで情報セキュリティの講義でまで人工知能とかAIとかシンギュラリティとかの話を聞かないといけないんだ…と思ってしまう.もう人工

ASKfmからのメールなど,Dateヘッダフィールドを設定していない規格違反のメールがトップにソートされてしまう問題を,ThunderbirdとK-9 Mailで解決する方法

ASKfmなど,メールのヘッダフィールドに発信日付であるDate:を設定していないメールがあります. ASKfmから来るメールのヘッダー このメールはおそらく規格違反です. 必須のヘッダフィールドは発信日付(origination date)フィールドと発信元アドレス(originator address)フィールドだけである。それ以外のすべてのヘッダフィールドは文法的にはオプションである。さらなる情報はこの定義の後の表に含まれている。 RFC5322(Internet Message Format) 発信日付は必須のヘッダフィールドです.規格違反なのですが,規格違反が存在するのは仕方がありません. この規格違反のメールにはメールクライアントが適当に日付を推測して,IMAPで受信した日付にメールの日時を設定してしまいます.Received:から日時を推測するなんて高級な機能はついていません.そして,大抵のメールクライアントは日付でメールをソートします.なので,私はデスクトップPCとラップトップPCを使っているのですが,どちらかのThunderbirdを開くたびに,既に読んだAS

スパムメールの学習コマンドsa-learnの実行をsystemd.timerで自動化しました

SpamAssassinのメール学習を行うコマンドラインプログラムであるsa-learnをこれまで手動で実行していました. alias sa-learn-maildir='sa-learn --ham ~/.maildir/cur --spam ~/.maildir/.Junk/cur --progress' というaliasを書いて,時々実行していました. あまり迷惑メールは来てませんでしたし,分類する前に学習してしまうのも嫌でした. しかし,最近迷惑メールが結構来るので,1日1回学習プログラムを動かしておくことにしました. 最初はuser内部のメールや学習ファイルを扱うため,systemd --userで管理するuserのunitを作ろうと思いました.しかし,これはデスクトップなど,使っている時は常にユーザがログインしているコンピュータ向けの仕組みなので,サーバのタイマ向けには不向きなので,やめました. /etc/systemd/system/sa-learn.serviceに以下を設置します.ユーザ権限で動かすことでユーザ権限で学習ファイルが書き込まれます.

科学論・科学史102(X線の発見)

1895年にレントゲンによりX線の発見が行われ,1901年にノーベル賞が贈られた.どうしてこんなに早く受賞が行われたかと言うと,発見が素晴らしかったため.再現性とインパクトが優れている.書かれたとおりに装置を作れば骨が見える.素晴らしい. ペランの原子の発見などは理論的なもので,ブラウン運動を見てもあまりインパクトがない.X線の発見は骨が見えるというインパクトが強い.目に見える驚きがある. レントゲンは誰もが知っているが,あまり偉くならなかった.対して電子の発見をしたJ.J.トムソンなどはあまり一般には知られていないが,偉くなった. ヴィルヘルム・レントゲンは超一流大学で研究をしているわけではなかった.このようなあまりランクの高くない大学でも画期的発見がなされることがある.だから専修大学にも研究費を分配するべきだ. 教訓: 見える成果が大事.

サービス情報システム(メディア)

「なぜ皆タブレットではなくコンピュータを使うのだろう」と言ってますが,タブレットPCも立派なコンピュータなのでは… 「2 in 1はタブレットですかPCですか」という質問をしてみたんですが,「わからない」とのこと.「タブレットとPCの区別の定義はわからない」と言ってますが,それで「PCで無ければいけない理由は?」と言われても答えようがない… 誰も答えないので「いわゆるタブレット用OSであるiOSやAndroidではアプリ制を採用しているためプログラムを組み合わせるのが難しい,要するにプログラミングがやりにくい」と答えたら,「JavaScriptは動くじゃん」などと言われたので,「JavaScriptは動きますがJavaScriptを書くのはAndroidでは困難でしょう,node.jsも動かない」と答えたら,「動くように環境を作ればいい」などと言われました. 「ソフトにはお金を払いますが,サービスにはお金を払わない,みんなYouTubeにお金払わないでしょ」と述べていますが,私はニコニコ動画プレミアム会員です. 「コンピュータは集約した方がコストが良い」と繰り返し述べていますが根拠がな

WebMoneyのCamelCaseどうするの問題にぶちあたったので便宜的にWebmoneyという表記を使うことにしました

電子マネーWebMoney(ウェブマネー)という決済システムがあります. 今回語る内容はこれの決済システムなどには一切関係しません.名前の話です.いわゆるiOS問題(いわゆるのか?)ですね. これの正式名称はWebMoneyです.Web Moneyでもwebmoneyでもありません. もちろんユーザに表示するテキストはWebMoneyと表記すれば良いのですが, コード上には混乱をもたらしました. HaskellやJavaScriptのコード上ではCamelCaseで名前を付けます. よって素直にHaskellでWebMoney関連の型名をつけるならWebMoneyFooとかそんな感じになります. さて,CamelCaseではそれで良いと決めるとHTMLやCSSでこれを取り扱う時に悩むことになります.CamelCaseで大文字によって作られていた区切りはkebab-caseではハイフンで区切られることになります. WebMoneyFooはweb-money-fooと区切られるわけですね. しかし,これはおかしい.WebMoneyは1語であって,区切られてはいけません. 悩んだ結果,Web

Amazon EC2上のUbuntuでGentooのeix --selectedに相当する,初期パッケージに含まれていない手動でインストールしたパッケージ一覧を表示する方法

需要と模索 プロダクション環境のUbuntu Serverでアプリケーションの構成の変化で不要になったパッケージを消滅させたくなりました. EBS容量を20GB取っていないため,一応容量を節約したいということと,不要なパッケージは存在するとセキュリティ上の不安が高まる問題があるため,削除したいですね. apt-getとapt-cacheは今のUbuntuでは標準ではなく,全てaptコマンドに統一されました. 他のライブラリに依存されているパッケージはapt autoremoveで消滅しますが,自分が明示的に入れたパッケージはこれでは消滅しません.当たり前ですね.消えたらむしろ困ります. apt - Ubuntu入門によると,インストールされているパッケージの一覧を表示するにはapt list --installedを使えば良いそうです.しかし,私が求めているのはそういうことではなく,Gentooでのeix --worldのように明示的にインストールしたパッケージを出したいんですよね.後,元々インストールされていたGentooで言うSystemに相当するパッケージを消すつもりはないので

Intel Management Engineの脆弱性を修正しようと色々やりましたがDell XPS 13 9360向けの修正アップデートは2017年12月10日に来ることを知りました

Intel Management Engineなどに8個の脆弱性が発見 ~第6世代Core以降が影響、ThinkPadなどがすでに対策開始 - PC Watchなどで報道されてる通り,Intel Management Engineの脆弱性が発見されましたね. 私のDell XPS 13 9360もこの脆弱性に当てはまるので,修正しようとしましたが,最終的にアップデートが2017年12月10日に来るので今何やっても無駄ということを知りました. Intel ME/Dell Client ステートメントに txe アドバイザリ (Intel- sa-00086) 。 | Dell 日本 ただ,色々やったのでやったことを書き残しておこうと思います. Intelの脆弱性診断ツールを使用する Gentoo Linuxではおそらく事前にLinux KernelのIntel MEのドライバを有効化しておくことが必要です. IntelはLinux向けにも脆弱性診断ツールを配布しているので,Download Intel-SA-00086 Detection Toolからダウンロードします. 内部に入って

アルゴリズムとデータ構造2(文字列探索(2))

前回のおさらい KMP法のnext配列生成の方法を全く記憶できていません. 難しいというのも理由の1つですが,BM法の方が高速なのにKMP法のアルゴリズムをちゃんと覚える気にならないということもあります. BF法とKMP法とBM法 BF法による比較回数の数え上げがあまりにも面倒臭くてついRustでコードを書いてしまったのですが, fn bf(source: &[char], word: &[char]) -> Option<usize> { let mut counter = 0; // 比較回数 for i in 0..source.len() { for j in 0..word.len() { counter += 1; if source[i + j] == word[j] { if j == word.len() - 1 { println!("counter:

UNIX(ユーザ権限とアクセス制御)

ユーザ権限とアクセス制御 - UnixClassWiki アプリケーションプログラマは権限何もわからない.雰囲気でユーザ権限をやっている. 「MacにNetInfoって今存在してるっけ?」という話があったので調べたらもう死んでました.OS X ハッキング! (251) Leopard解体新書(2) ~さようならNetInfo~ | マイナビニュースApple Open Directory - Wikipediaというのが使われるようになったらしいですね. 実はACLの仕組みよくわかっていなかった,グループより柔軟で良いですね.柔軟な分複雑で即座に読むのは難しいですが…

計算理論(時間計算量)

前回の復習 \(\{w2w | w ∈ \{0, 1\}^*\}\)ってどういう意味かと思ってたけど,\(w\)をスター演算の結果の一例として,\(2\)の両隣に同じ記号列があるということだったんですね. big-O記法 時間計算量って高級言語だと,どの式や文がステップを消費してどの行為がステップを消費しないのか今ひとつわかりませんでしたが,チューリングマシンだと1ステップがハッキリしていて良いですね. アルゴリズムの計算量は通常複雑な式になる.漸近的解析と呼ばれる方法を用いて簡略化する.最高次の項だけを考え,その項の係数やより低い次数の項を無視する. \[f(n) = 7n^4 + 2n^2 + 10n + 5\]なら\[f(n) = O(n^4)\]にする. \(n = 1\)の時,前者は\(24\),後者は\(1\)になるが,\(n = 10\)の時,前者は\(70305\),後者は\(10000\)で,\(n\)を増やしていくと差がなくなっていく. \(f\)と\(g\)を2つの関数\(f: N → R^+\)とする.全ての整数\(n >= n_0\)に対して正の整

情報リスク管理(映画に学ぶ情報セキュリティ基礎技術)

20 CENTURY FOX「デデーン」 ウォー・ゲーム(WarGames)という映画を見て,映画の中で使われていたクラッキング技術を記述することになりました. 公開日時は1983年…1984年の1年前ですね. 適性検査とかAIによる制御とかSCP財団みたいですね. 核兵器の発射をAIに任せるとか正気かな?しかも30日で作り変えるとは…「コンピュータをそこまで信用できない」って言ってる人が居たけど正論すぎる… おっパスワードを付箋に書いてて読み取っていますね.これはソーシャルエンジニアリングで良いんだろうか? 学校のホストコンピュータに家の端末からアクセスできるのか…その時点でセキュリティも何もあったもんじゃ無い気しかしない… パスワードが定期変更されてますが最新のを見てますね,この時代から定期変更は無意味だとわかっていたのに何故滅びない… 端末のUIやたらと豪華ですね.テキストを直接書き換えできるとは… 電話のタダかけはこの時代のクラッキングの代名詞みたいなものですね… 端末に正常にログインしてシステム弄ってるしクラッキングも何もなくない?と思ってしまいました. 大学生のジムの見た目

サービス情報システム(クラウド)

専修大学Web講義要項 サービス情報システム ネットワーク情報学部 兼任講師 北川 和裕 Macの源流 「Macの源流は1990年代」という話を聞いて,「Macの源流は1973年のAltoじゃないですか?」って言ったら全否定されました.ええ…ウィンドウシステムとかマウスとかの源流なのに…「OSが違う」とか全否定されました.NeXTにしたって1988年だし1990年代ではないのでは? メモリ上で演算が出来るか 「メモリ上では数値計算や条件分岐が出来るがハードディスクでは出来ない」ということを言っていたので「計算や分岐が出来るのはレジスタ上では?メモリは計算後に計算したものを保存する先では?」と質問してみたら「全然違う,メモリは直接実行できる」と答えられました.私が間違ってるのか? — エヌユル (@ncaq) 2017年11月21日 「メインメモリとハードディスクの違いは何か?」と聞いてたので「速度とランダムアクセス可能かどうか」と答えたら「全然違う」と言って後で「速度が違う」と言い出しました.合ってるじゃないですか.何を言っても全然違うって答えるからこの講義で質問されても

今度こそ画像のアスペクト比を4:3に指定してCSSで内接リサイズしました

画像のアスペクト比を4:3に指定してCSSで内接リサイズしました - ncaq で行っていた内接リサイズは,画像が縦長の状態を全く考慮していませんでした. 縦長のはそのままになってしまいました… そこでもう諦めてwidthはpx指定してheightはheight: calc(200px * (3 / 4));したのですが,この場合モバイル環境で縦いっぱいに表示されないんですね. CSSでcalcを使って処理できないかなあと思いましたが無理っぽいですね.CSS Variablesを使えば処理できるかなあと思ったのですが実装が…普及してないだろうなあと思ってCan I useを見てみたらIE以外はサポートしていました.使えるじゃん.でもCSS Variablesを使っても解決出来なさそうですね… 結局画像でもCSSだけでアスペクト比を固定するテク - Qiitaを参考にするのが必要でした. 画像だからこういうテクニックは要らないと思っていたのが間違いでした. つまり以下のようにします. .thumbnail-wrapper { position: relative; wid

アルゴリズムとデータ構造2(文字列探索(1)),またクイックソートの実装をしました

クイックソート 文字のデータ列のクイックソート. き,い,お,あ,え,う,か か,い,お,あ,え,う,き (か,い,お,あ,え,う),き (う,い,お,あ,え,か),き ((う,い,お,あ,え),か),き ((あ,い,お,う,え),か),き (((あ,い),(お,う,え)),か),き (((あ,い),(う,お,え)),か),き (((あ,い),(う,え,お)),か),き あ,い,う,え,お,か,き クイックソートをプログラミングで実装することは多分出来たはずなんですが,どうしても動きが思い出せない. もう一度プログラミングして見るべきですね. 昔実装したものを見てみました.c++によるマージソートの自前実装 - ncaq 私のクイックソートは他に配列を確保していました. 内部ソートになってないじゃん…「クイックソートもどき」でした. 知識が不足していましたね. 正しくクイックソートを実装しようとしているのですが,なかなかうまくいきません.cgdbでデバッグしてます. 前回と前々回のクイックソートでは適当に最初かその次の領域を選んでたんですが,どうもこの場合停止しないことがあるよう

UNIX(ファイルシステム)

ファイルシステム - UnixClassWiki むかしのUNIXではディレクトリは特殊なファイルで、catをすると本当に中身を表示できました。 マジですか,昔のUNIXを動かしてみたらわかるかな… 今のUbuntuってインストール時にワンタップでLVMを使うことを選択できるんですね…Ubuntu 16.04: LVMでファイルシステムを拡張・縮小する - Narrow Escape Linuxの好きな所にボリュームをマウントする機能,便利は便利なんですけどあまり活用することが無いような気もします.サーバを自前で作る場合も逆にRAIDでボリュームをまとめてルートディレクトリに入れてしまうことの方が多そうですね. いやまあ,この特徴のおかげでUSBブートしてSSDに入ってるGentooをマウントしてchroot出来たりするので,役には立っているのですが. 先生M.2のSSD持ってるんだ羨ましいなー,私も買おうかな. BtrfsやXFSにもinodeはあるみたいですけど,ファイルシステムソムリエになる話 - Gentoo metaloginodeの無いLinuxファイルシステムとか存在

障害年金の給付が行われることになりました日本生きろ

今日の夜,急に父親に「話があるからリビングに来なさい」と言われて「また1人でお菓子食べすぎたかな…」と思いながら行ったらこれを渡されました. 年金証書 国民年金法に基づく障害年金の給付が行われることになりました! バンザーイ! 就活の影響で今年の4月頃に倒れてしまい,私はまともに働けないのではないかと思って,障害年金の申請をお願いしていました. 広汎性発達障害で障害基礎年金2級を取得、年間約80万円を受給できたケース | 千葉障害年金相談センターを見て,大学に通っていても障害年金は受給できるんだと知ったことも一因です. 医師からは「あなたの症状では降りないと思う」と言われましたが,ダメで元々で申請を行ったら受給することが出来ました! 私は学習障害で多くの字が書けないため,書類審査は両親に丸投げしていました.「私達は親が変わりに書いているから良いけれど,こんな複雑な書類を書ける人は障害者じゃないでしょう」と言いながら申請書類を書いてくれたお父さんお母さんありがとう! 私の主な症状は強迫性障害と発達障害で,精神障害者保健福祉手帳の等級は3級で,所属は大学生です. 障害年金の等級は2級,

Amazon Music Unlimitedの30日間無料体験をオススメするのがオススメです

Amazon Music Unlimitedが始まりましたね. Amazonのサービスによくあることですが,30日間無料体験をすることが出来ます. 私自身はまだSpotifyの無料体験期間が残っているので,Spotifyの無料体験期間を使い切った12月頃に試してみようと思っています.なので,Amazon Music Unlimitedの使い勝手については殆ど述べることが出来ません. 精々,プライム会員だとお得だとか,ファミリープランを使えば複数人登録する時にお得だとか,Amazonの既存の売っている曲が多いからかSpotifyに比べてゲームミュージックの揃いが良さそうに思えるぐらいですかね. Bad Apple!!多すぎませんか? Google Play Musicもセール期間に試してみましたが,Amazon Music UnlimitedはSpotifyとGoogleと比べてもアルバムの揃いが良いような気がします. それより,Amazon アソシエイトの「Amazon Music Unlimited」メンバー紹介プログラムの割が良いことに驚いています. この前何の気なしにした

動的モデルの単位を自主的に諦めることにしました

散々このサイトで「わからない」「難しい」と書いていた動的モデルですが,中間試験が全然出来なかったことを受けて単位を諦めることにしました. 動的モデル(中間試験),試験爆死しました - ncaq 本当は今日は一応行って中間試験の点数を確かめてから諦めようと思っていたのですが,今日起きたのが11時で講義に間に合わないことが発覚したので早めに諦めることにしました. 履修中止期間は過ぎてしまったので,単に欠席を続けるということになります. 履修中止期間,考えた時には既に過ぎてしまっていると思いこんでいたのですが.今調べたところ2017年11月1日までは受け付けてたんですね…履修中止申請 | 専修大学最終的にこうなってしまうのならば,早めに履修中止すれば良かったです.過ぎてしまっていると思いこんでしまったのが敗因ですね. 履修をちゃんと中止するならともかく,履修自体はあるのに出席をやめるのはまるで無断欠席を続けているかのようで,罪悪感があります.これまで大学の講義にはほぼ出席していたので,なおさらです. また,大学の成績はあまり気にしてないのですが,成績にFがついてしまうのはやはり少し気になって

計算理論(チューリング機械)

ついに有限オートマトンからチューリングマシンに入りました.アラン・チューリングはよく計算機のない時代にチューリングマシンなんて思いつきましたね.天才か?(天才です) 計算機で解ける問題はチューリングマシンで解ける. チューリングマシンと有限オートマトンの違い チューリングマシンはテープに対し書き込みと読み出しのどちらも可能 ヘッドは左右どちらにも動くことが出来る テープの長さは無限である チューリングマシンは,停止状態に入ると直ちに停止する 真面目に有限オートマトンとチューリングマシンを対比させて考えたことが無かったですが,そう言えば有限オートマトンの入力はチューリングマシンのテープとして考えることもできますね. チューリングマシンのテープの記述が非常に面倒くさい.手書きだと前のテープのコピーを書けないので特に面倒くさいですね.チューリングマシンはテープの一部を変更するのに,紙に手書きだと他の変更されていないテープを一々全部書く必要があって面倒です.私の書き方がおかしい気がします.差分を書くだけで十分な記法を考えるべきですね… 今回のチューリングマシンは遷移関数が\(Q * Γ →

情報リスク管理(Webアプリケーションへの脅威)

WebがwebではなくWebなのが気になる,webはもはや固有名詞ではないので小文字にするのが今の私のポリシーなので.「Internet」と「Web」が終了 – Dan高橋のIT散歩 TwitterのXSS懐かしいですね.XSS対策としてはCSPがかなり有効なんですが,広告を配信してるとなかなかCSPを使えないのが困りものですね… そもそもフレームワークがCSPを考慮してくれないことも多い. webアプリケーションの脆弱性突いたら不正アクセス禁止法に接触する恐れあるの本当にアレですよね.webアプリケーションの脆弱性なんて実際に試してみないとわからないのに.実害が無ければ罪に問わないことを明確にして欲しい. SQLインジェクション,静的プレースホルダさえ使っていればほぼ対策できるのになんで皆使わないんでしょうね… XSSとかCSRFも問題ですが,ユーザーからの入力を信用してはいけない場所でユーザの入力をそのまま使っているアプリケーションどうにかならないんですかね.要するにuser_idをユーザから受け取っているサイトとか.信じられないかもしれませんが,Ruby on Railsを触り始

科学論・科学史102(原子の実在)

第3章である「原子の実在と放射線の発見」に入ってきました. これまで触れてきたミクロの視点の根源は原子にある. 科学が発展していない時代,多くの人は地動説ではなく天動説を信じていた.それは動いているように見えるのは太陽だから.科学的観測結果をもって,天動説から地動説に移り変わっていった. 原子の実在はコペルニクス的転回ほど衝撃的なことだった. 原子の概念は古代ギリシャから考えられていた.デモクリトスが原子論を開始し始めた. ルネサンスの古代ギリシャ復興的な考えは地動説には触れたが,原子論にはあまり興味を持たなかった.だが,錬金術が原子論への関心を集めるきっかけになった. 錬金術が次第に化学に変化していった. ラヴォアジエが化学の基礎を作り,ドルトンが原子論を提唱し,ボルツマンが統計力学を開始した. 1827年植物学者ブラウンは花粉がフラフラと動くブラウン運動を発見した.後年これは原子論によって説明できることがわかった. ボルツマンは自殺してしまったが,アインシュタインが理論を作り,ペランが実験で原子の実在を検証した. 若い世代が新しい考えである原子論を受け入れたと書いていましたが,本当

サービス情報システム(テナント)

前半30分遅刻したので聞いてませんでした. 【シングルテナント】 IT の分野でシングルテナントというと、クラウドコンピューティングなどのサービスで、ひとつのシステムやサービスを 1社で利用している状態のこと。一方、同じシステムやサービスを複数の企業が共有している状態をマルチテナントという。 用語解説辞典|【公式】NTTPC CPUが高速化してきて,CPUの使用率がそんなに多くない,基本的にアイドルしてる,だからマルチテナントの世の中になってきた.という話を聞いて,昔はタイムシェアリングシステムなんて使ってたわけで,今,CPUが速いからマルチテナントになったとはあまり言えないんじゃないかと思ってしまいました. Amazonがシングルテナントで楽天がマルチテナント,Amazonにも例外がある,という話を聞いて,AmazonのマーケットプレイスとAWSの比重は高いと思ってたので,その考えには違和感を抱いてしまいました. AWSみたいなクラウドサービスは1妙いくらで課金しているという話.クラウドサービスが秒課金始めたのって最近の話ですね. またコンピュータは集約したほうが良いと言ってます

画像のアスペクト比を4:3に指定してCSSで内接リサイズしました

内接リサイズと外接リサイズが逆に伝えられてきました 画像を内接リサイズするという話があって,それには賛成したんですけど.実際コードを見てみるとobject-fit: cover;していたので外接リサイズにしているように見える問題がありました. 余白を無くしたいという話だったので外接リサイズしたいのかもしれませんが,外接リサイズには反対です.Twitterの投稿画像のサムネイルなどは外接リサイズされていますが(公式アプリの場合),ああいうのはクリックしてすぐにポップアップで本物のフルサイズの画像が出るから切り取られても許されるのです.今回のような画像がポップアップしてくるわけでもないケースで外接リサイズするのはよろしくないという話をしました. 実際やりたかったことは外接リサイズのようでした.説得に成功して内接リサイズすることにしました. 内接リサイズと外接リサイズ,ややこしいですよね.内積と外積ぐらいややこしい.(どちらも忘れたけど) 見栄えは大切ですが,画像がサイトの事情で途中で切れてしまうというのは大変見栄えが悪いです.それならば,内接リサイズで余白を足してしまったほうがマシですよ

xmonadとPulseAudioを使ってキーボードで音量ミュートをトグルする方法

私はウィンドウマネージャにはxmonad,オーディオ管理にはPulseAudioを使っています. ラップトップPCを使う時,時たまスピーカーで音楽を聞きたいことがありますが,普段は通知音などはミュートにしておかなければなりません. そういう時,今まで私は,ミュートをトグルするために一々pavucontrolを起動して切り替えていました. xmonadからPulseAudioを操作してミュートをトグルするスマートな方法がわからなかったためです. xmonadでミュートキーを受け取る方法はわかる.PulseAudioを操作するCLIがpactlなのもわかる.しかし,現在再生に使っているソースのインデックスを取得する方法がわかりませんでした. しかし,今日なんとなく調べ直してみたら,あっさり方法が見つかりました. ヒント: デフォルトのソースは、コマンド内で @DEFAULT_SOURCE@ として参照できます。たとえば: $ pactl set-source-mute @DEFAULT_SOURCE@ toggle。 PulseAudio/サンプル - ArchWiki 後はこれを実行

アルゴリズムとデータ構造2(ソート(2))

ヒープの表現ってノード要素とポインタで表すのと,配列で表現するのとどっちが良いんでしょうね. まあ,どっちが絶対的に良いとかはなく,挿入や削除が多ければポインタが良くて,あまり変わらず閲覧するだけなら配列が良いのでしょうが.実際どれぐらい挿入することがあれば配列ではなくポインタが良くなるのでしょう.何も考えずに配列の方が優位ってことが多すぎるんですよね. 実装の楽さはGCが無ければ配列のほうが楽で,GCがあればポインタの方が楽ですね.永続性や普遍性を考えるとポインタのほうが圧倒的に楽. 挿入ソート,シェルソートの何が速いのかよくわからない,データが整列されたとき限定のアルゴリズムってことで良いんでしょうか. 計算量の比較が今ひとつわからない,\(O(n)\)と\(O(n \log n)\)は具体的にどういう風に違うのかパッとわからない. wolframでグラフ描画してもらおうと思いました. 2つのグラフを描くにはplot n, n * log(n)と入力すれば良いことはわかりましたが,これを範囲指定する方法がわからない.plot n + 1, n * log(n), n = 0 to

GNU/Linux環境の作成,Gentooの魅力とインストール方法

この記事はUNIXという講義で出た「GNU/Linux環境の作成」という課題のレポートを流用しています. 既にレポートは提出しました.せっかく書いた文章が勿体ないため多少改変して,サイトでも公開します. ディストリビューションの選択とGentooの解説 Gentoo Linuxを選択しています. 昔はUbuntuやLinux Mintを使っていましたが,高校3年の頃にGentooに落ち着きました. Gentooはソフトウェアをインストールする時に,原則自分のマシンでソースコードをコンパイルする,というのが特徴のディストリビューションです.(ただし,LibreOfficeなどのコンパイルに長大な時間がかかるソフトウェアは実行バイナリも配布されています) パッケージ管理システムがコンパイルするという特徴により,gccの-march=nativeによるCPU最適化が期待できます. また,コンパイル時にしか設定できないオプションを変更する(例えば,Emacsがlibxmlを使うか選択する)ために,他のディストリビューションではパッケージ管理システムを逃れてソースコードを野良ビルドする必要があ

UNIX(デバイススペシャルファイル)

テープデバイスが最近はほぼ使われていないという話.ちょっと前まではバックアップに使われていたことが多いですが,最近はパブリッククラウドに載せてしまってそのクラウドのバックボーンはHDDだったりしますし本当にそうですよね. テープの寿命性は高いですが,自前で分散管理するのは大変なので分散して置いたほうが良さそうに思えてしまいます. IBM AIX使ったことないんですよね,AIXプラットフォーム使うにしてもLinux使った方が楽そうに思えてしまいますが,実際使ってみたら違うものなんでしょうか. ちょっと前まではfstabにmountするパーティションの指定にはUUIDを使っていたのですが,systemdが実際にはmountに成功しているのにも関らず失敗したというエラーをだしてくるのが鬱陶しかったですね.だから,昔ながらのsda1と言った指定方法に戻してしまいました. USBメモリもパーティションを再作成してしまうとUUIDが再生成されてしまうので昔ながらの方法の方が楽だったりします. LinuxのIOスケジューラで知っているのは Deadline CFQ No-op ぐらいでAntic

dic-nico-intersection-pixivの直リンクを見て意味わからないと言われてしまったのでファイルにコメントを追加しました

今までで最も意味わからないサイトhttps://t.co/qiQSFKqozQ — KOKOTI (@titose_2004) 2017年11月8日 そうですね…辞書本体のテキストファイルを見るだけだったら意味がわからないと言うのは当然だと思います. というわけで,生成する辞書にコメントを追加しておこうと思います. 今まで雰囲気で辞書を生成していましたが,まず辞書のコメントの文法はどうなっているんでしょう.それがまずわからない. 参考にするためにnicoimeのmsimeを見てみたら!以下をコメントとして扱っているようですが,制御文法も多少はあるみたいですね. この辺の仕様はmozcでは多分異なるだろうので,主にmozc/google日本語入力向けとして辞書を生成している私はそのままではダメでしょうね. google/mozc: Mozc - a Japanese Input Method Editor designed for multi-platformを見てみたけど規格とか仕様とか無さそうですね.雰囲気でやっていくいくしかない. と思って雰囲気で!を先頭に置いたらコメント

動的モデル(中間試験),試験爆死しました

動的モデルの中間試験がありました. 試験内容 予想通り爆死しました. 他の人はみんな時間内に提出して,チャイムが鳴るまで解いていたのは私だけでした. ε-δ論法 ε-δ論法は教えられた当初から意味がわからず,しかも出るかもしれないと思ってなかったので何も復習しなかったので,全く意味がわからなくて何も書けませんでした. 導関数の定義 これは自分では出来たと思ったのですが,これでちゃんと証明と認めてもらえるかはわかりません. 関数の接線 積の微分\[\{f(x)g(x)\}' = f'(x)g(x) + f(x)g'(x)\]の\(+\)を何故か\(±\)だと思って書いてました. 接線の方程式がわからず適当に書きましたが,それ以前に積の微分をちゃんと出来ていなかったので全てダメです. 導関数 自分では出来たと思っていたのですが,(1)をwolframに打ち込んでみたところ全然違う式が帰ってきたので間違っていたっぽいですね. (2)は多分出来ました. 不定積分 (1)は自分なりにちゃんと書いて,(2)は途中で√の消し方がわからなくて詰みました.

Nexus 6PからHuawei P10 liteに乗り換えました,オススメのスマートフォンです

taosero07(@reotasoda)さんからプレゼント,新しい自作PCを組もうと思います,Nexus 6Pが早期シャットダウンする問題が未解決,HUAWEI P10 liteを購入しました - ncaqに書いたように,私の持っているNexus 6Pには早期シャットダウン問題が発生してしまいました. 症状はNexus 6P 早期シャットダウン問題(と対処法) - ブログの方と同じような感じです.私の場合バッテリーが25%になるとシャットダウンしてしまっていました. バッテリー問題さえなければ,Nexus 6Pに不満は無かったのですが,丁度帰りの電車あたりでバッテリーが切れてしまうので,どうしてもこれは不満に思ってしまいました.そこで,新しいスマートフォンであるHuawei P10 liteを購入しました. 私の購入時は¥26300でした. もっと高いスマートフォンを買うという選択肢もありました.しかし,私はスマートフォンでゲームはせず,ゲームはコンソールやPCでやります. なので,お金はPCにつぎ込むため,スマートフォンにそんなにハイエンドなものは必要としないという判断で,コス

計算理論(正規表現と有限オートマトン)

前回の復習 列\(x\)の長さを\(|x|\)と書く.普通に受け取ってしまったけど,そう言えばなんで絶対値記号を使うんでしょうね,absとlengthに同じ記号を使うのはおかしいのでは? スター演算\(a^*\)ってプログラミング言語で言う正規表現の何に値するんだ?と思ったけど,よく考えたらそのまま*ですね. 言語\(L\)が正規表現で表現されるなら,\(L\)を識別するε入力付非決定性有限オートマトンが存在する. どのような正規表現であっても,元々の記号から 連接 和集合 スター演算 いずれかを複数回使って表現されている. つまり data Regex = RegexSymbol String | RegexConjunction [Regex] | RegexUnion [Regex] | RegexStar Regex ということですね. 資料のオートマトンの図が冗長に思えたので質問してみたら本当に冗長でした. grepの名前の由来が「get regular expression」という話が出てきたのでググったら,edのg/re/pコマンドが元ネタになっていて,後か

情報リスク管理(ネットワークへの脅威)

ロールベースのアクセス権限はUNIXのグループとどう違うか,UNIXグループではrootユーザーに全てを割り当てるが,ロールベースのアクセス制御はもっと細かく実行権限を割り当てる. 例えば,passwdを実行するユーザにはそれだけできるグループを与える. ということは,UNIXグループでもファイルの実行権限を細かく割り当てればロールベースのアクセス制御になるんでしょうか?今でもdisk, audio, video, plugdevと言った細かいグループがあります. 聞いてみたら既存のUNIXのグループでも出来ないことはないということです. 配布スライドを作った時が古いのか,セキュリティ関連のメールやページなのにhttpへのリンクが貼られていて,いま見ると全部偽に見えてしまう. ZIP圧縮の自己解凍形式を装った実行ファイルが感染源という話を聞いて,やはり秘文は悪い文明,自己解凍形式を撲滅しないといけないという気分になりました.

mozcをアップデートしたらmarkdown-mode限定で変換前文字列が赤くなってしまいます

mozcをアップデートしたらmozc.elもアップデートされたようなのですが,これが変換前文字列の背景を真っ赤にしてきて非常にうるさく感じるようになりました. ひじょうにうるさい 変換前に色を変えるのはちょっと鬱陶しいけれど問題ないのですが,その替える先がこんな真っ赤な色では流石に目ざわりです. まあ,変更すれば問題ないだろうと思って,brownを指定しているコードを探して, (set-face-background 'mozc-preedit-selected-face "#268bd2") と書いておとなしい色になったので一見落着したと思ったのですが,何故かmarkdown-modeでだけ変換前に赤いままで困りました. と言うより,加えた設定を切ってみてわかったのですが,普通のモードの場合は変換前の入力はデフォルトで背景が透明で,変換開始すると色が変わります.しかし,markdown-modeだけ変換前に赤くなってしまうんですね. 何故か途中にコードブロックを挟むと,それ以下のカーソルではこの現象は発生しなくなります. コードブロック前 コ

サイトのURL設計を変更しました

何故変更が必要なのか? これまでこのサイトのエントリーはwww.ncaq.net/2017/11/07/のように,日付だけを含んでいました. 主にクールなURIは変わらない -- Style Guide for Online Hypertextを参考にした結果です. これには問題があり,1日に複数のエントリーを投稿しようとしたら1つのページに複数の投稿が混ざってしまいます. このサイトを作った当初は,興味深い特筆すべきことだけを記述していたので,1日に複数の投稿をすることは想定していませんでした. しかし,だんだんこのブログは日記と化していき,1日のあったことをひたすらログしていったので,1日の記事に複数の項が含むことが多くなっていました. これは非常に検索性が悪いですし,後から見返すのも大変です. 当初はこのサイトにも広告はありませんでしたし,自分の書き捨てる先みたいな扱いだったので,あまり可読性は気にしていませんでした.しかし,後から自分のメモを見返すことも多くなってきて,この状態だと参照性が非常に悪くて困っています.あと,広告を貼るようになって少し欲が出てきました. なので,U

科学論・科学史102(エントロピーと時間の小テスト)

熱力学の第二法則を表すような例を挙げよ 私はインクを水に混ぜた例を挙げました.インクが混ざることがあっても,インクだけが集合することはない. エントロピーが高いという状態をインクが混ざっているような状態と思っていて,それは正しかったのですが,これを秩序だっているという状態だと思っていました.エントロピーが高いのは乱雑な状態です.逆に覚えていました. 新幹線モデルを使ってエントロピーの性質から安全性と経済性が両立しないことを説明せよ 部品の摩耗や破損をエントロピーの増大と称して,これを低くするには修理や取り替えでエントロピーを外に渡すしかなく,そのためにお金がかかるので安全性と経済性が両立しないという説明を書きました. 後の説明で修理などを挙げてエントロピーを外に出すと言っていたのでこの説明で良さそうですね.モデルの話がよくわからなかったけれど正解したようなので良かったです.

サービス情報システム(ECサイト)

ECサイトで買われるものとして辞書を挙げてたけどみんな辞書を持ってなかったから話が成り立ってませんでした. 私も紙の辞書は持っていません.NetBSDを載せている紙の辞書を見たことがありません.私の用途では紙の辞書は英辞郎に比べて単語数が貧弱すぎて全く役に立ちません.いわゆる電子辞書も紙の辞書をソースにしているから同様です. IDの正式名称は「identification data」らしいのでそう言ったのですが,「Identifierです,その辞書が間違っている」と言われてしまいました. 「コンピュータにデータを入れる時は必ず識別子が入る」と言っていたので「別にRDBの設計次第ではIDもユニーク制約もないテーブルはあるんじゃないですか?」と聞いてみたけど「検索できないからない」と言われてしまいました.ええ…IDもユニーク制約もないテーブルとか,もっと言うと配列とかあるのでは…? 「ユニークなIDを挙げてみて」と言ってて「DNA」とか「指紋」とか言ってたので,「後UUIDとか」と言ってみたら「UUIDは衝突するのでユニークじゃない」という返答.「UUIDが衝突するからユニークじゃないなら

ファイルは月別に分けて~/Documentsに置いてgitで管理しています

私のファイルの管理方法ですが,4年ほど前から,リポジトリのようにはっきりしないものは,基本的に月別に~/Documentsに入れてgitで管理しています. 大学の配布資料やレポートなどもここに入れています. メモや残す意義がなさそうな書き捨てのプログラムでも,変更履歴を後から見返すことが出来るから便利です. 2017-11-06T16:34:23 ncaq@akaza/pts/0(0) ~/Documents % ll 合計 92K drwxr-xr-x 10 ncaq ncaq 4.0K 11月 6 16:22 ./ drwxrwxr-x 24 ncaq ncaq 4.0K 10月 16 02:35 ../ drwxr-xr-x 7 ncaq ncaq 4.0K 11月 6 16:26 .git/ drwxr-xr-x 3 ncaq ncaq 4.0K 2月 20 2016 Banished/ drwxr-xr-x 3 ncaq ncaq 4.0K 2月 20 2016 Bioshock/ drwxr-xr-x 3 ncaq ncaq 4.0K 2月

Haskellのregex-compatはUnicode文字に対応していないのでregex-compat-tdfaを使いましょう

タイトルにwbr要素を使ってカンマの後に改行を行ってもらうようにしましたで titleWbr = field "title_wbr" (\item -> (\mTitle -> R.subRegex (R.mkRegex ",") (fromJust mTitle) ",<wbr>") <$> getMetadataField (itemIdentifier item) "title") のように<wbr>をカンマの後に挿入するようにしたのですが,カンマの存在しない場所に何故かカンマが挿入されてしまったり,一部の文字が削除されてしまっていることに気がつきました. 何故だろうと思い,他の正規表現パッケージを見てみることにしました. regex-compat-tdfa :: Stackage Serverによると, regex-compat can't use Unicode characters correctly because

GNU/Linuxの端末エミュレータはLilyTermがオススメです

GNU/Linuxの端末エミュレータはLilyTermがオススメです. 端末エミュレータではGnome TerminalやKonsoleなどが有名です. 私がオススメするのはLilyTermです. LilyTermはGNOME 端末と同じくlibvteを使っているので,ほとんど動作はGnome 端末と同じです. シンプルな端末エミュレータです. UIが素直でシンプルです.Gnome 端末のようにおしゃれではなく,素朴です. 設定がわかりやすいです.Gnome 端末はプロファイルを強調して設定画面を出したりするのでわかりづらいですが,LilyTermはあまりそういうことを考えない素朴なデザインをしています.また,設定が1ファイルに収まるため,他のマシンへの移行も簡単です. Gnome 端末と違ってCtrl+Tabをタブ切り換えに使えます.Gnome 端末はタブキーをタブの切り換えに使うことができません. Using Ctrl-Tab to switch between tabs in gnome-terminal - Super User keyboard shortcut gnome

タイトルにwbr要素を使ってカンマの後に改行を行ってもらうようにしました,Googleアナリティクスの実装をanalytics.jsからgtag.jsに移行しました

タイトルにwbr要素を使ってカンマの後に改行を行ってもらうようにしました 日記の一覧表示のタイトルの改行がよく以下のようになっていて気持ちが悪かった. 改善前 改行制御する文字は無いかなあとか,カンマの後にスペースを入れるとか,CJK以外の文字でも改行するようにするとか,カンマの後に全て改行を入れてしまうとか,ゼロ幅スペースを入れるとか,考えました. 最終的に,wbr 要素という,ここで改行して良い要素というものを見つけて,これを使うことにしました.ゼロ幅スペースと違ってテキストのコピーに影響しないのでこちらの方が良さそうですね. これを使うとなるべくカンマの後に改行されるようになって気持ちが良い. 改善後 Internet Explorerは実装していないようですが,どうせ画面幅に影響される動作なので,一部動かなくても問題はないですね. 実装はフロントエンドでやるのが開発コストだけ考えれば楽そうでしたが,初回表示に関わる部分ですし,ちょっとやる気を出してバックエンドでやることにしました. Hakyllのtitleフィールドを取得して,title_wbrという別のフィールドを

manページはEmacsでhelm-man-womanを使って見るのがオススメです

みなさんはUnix向けのmanページをどうやって見ていますか? 私はEmacsとhelmを使って,helm-man-womanを使ってmanページを見ています.オススメです. Emacsでmanのmanページを表示している様子 Emacsでmanページを見るための方法 Emacsにhelmをインストールして,以下のような設定をします. (global-set-key (kbd "<help> w") 'helm-man-woman) こうすることで,helpキー(私はM-cに設定しています)の後にwを押すことで,helm-man-womanが立ち上がります. 簡単に検索できる helm-man-womanを使うとhelmでmanのページを選択することが可能です. helm-man-womanを起動してmanと打ち込む これによりコマンド名がうろ覚えでも検索できますし,コマンドに関連した他のmanページの存在を知ることが可能です. バージョンを選択できる 同じ名前のmanページでも,日本語環境をインストールしているなら,日本語

計算理論(正規言語と有限オートマトン)

形式言語における言葉の定義 アルファベットΣ上の文章: Σの記号を重複を許して並べたもの.記号列や列とも呼ぶ. 列の長さ: その列に含まれる記号の個数,列xの長さを|x|と書く.また長さ0の列を空列と呼び,εで表す. 列xとyの連接とは,列xの後ろにyをつなげた列のことでxyと書く.またxxを\(x^2\)と書くこともある. 列xの逆あるいは逆語とは,列xを逆から並べた列のことで,\(x^R\)と書く.例えば\(x = 110\)のとき,\(x^R = 011\)である. 言語と言語の連接 集合の直積. スター演算 \(L = \{a\}\)のとき,\(L^* = L^0 ∪ L^1 ∪ … = \{ε, a, aa, aaa, aaaa, …\}\)である. \(L = \{a, bb\}\)のとき,\(L^* = \{ε, a, bb, aa, bbbb, abb, bba, aaa, bbbbbb, aabb, abbbb, …\}\)である. 正規表現 コンピュータで使われる正規表現とは異なる. \(0\) \(ε\) \(Σ\)に関する\(α\) \(R_

サービス情報システム(ECサイトの要素),科学論・科学史102(エントロピーと時間の流れ),Spotifyを使い始めました,情報リスク管理(認証とアクセス制御)

サービス情報システム(ECサイトの要素) 「スマートフォンは日本向けはハイエンド,インドとかのは5000円ぐらいで売ってるローエンド」という発言がありましたが,Pixelシリーズは日本では売ってなくて,インドでは売ってるんですよね… もはやハイエンドは日本ではなくインド向けに作られていると言っても過言…ではありますか,一例ですし. 「クラウドサービスと言えばIBMとGoogleの2社」という発言が出てきたので,「普通クラウドサービスと言えばAmazonが真っ先に出てくるのでは?AWS, GCP, Microsoft Azureの3社で独占しているイメージがあります」と質問しましたが,講師の認識ではAmazonはトップではないらしいです.IBMがトップだそうなんですよね.私はパブリッククラウド畑で暮らしているので感覚が違うのかな? 科学論・科学史102(エントロピーと時間の流れ) エントロピーとは? 水にインクを垂らした時にインクが散らばっていくのは熱運動によって水の分子がインクにぶつかっていくから,時間が経つにつれてどんどん分子がぶつかっていって散らばっていく. 機械の故障と生物

マークアップとスタイルシートをシンプルにしたくてデザインを多少破壊したら困られました

前回bootstrapのcard使えば改行がされてバンザイと思ってそれ以降の調査はしていませんでしたが,真面目に調べてみたらword-wrap: break-wordの効果で改行がされるようになったようですね. .cardをそのまま使ったデザインは気に入らないらしく,これ.card使わなくても良いじゃんって感じにcssが上書きされたものが出てきました.これなら自前で全て書いたほうがメンテナンス性まだ良いなと思ったので,そのように書き換えようと思います. sass-convertで修正できるレベルのスタイルがおかしなscssが出てきたので,手で適用して修正しました.うーん,人間が書いているので,出てくるのは仕方がないですが(私はパラノイアなのでスタイルをやたら気にしますが),一々出てくるたびにチェックして修正するのは面倒ですね.Travis CIにスタイルチェックを任せられないでしょうか.sass-convertにスタイルが異なっていたらエラーを返すオプションが無いし,簡単に行うのは難しそうですね…今手を付けているscssファイルは1つなので,出力後を比較すれば可能ですが,割と面倒くさい

RSSリーダーにはTiny Tiny RSSを使うのがオススメです

Live Dwango Readerの終了がニュースになってから結構経って今更感がありますが. RSSリーダーにはTiny Tiny RSSを使うのがオススメです. 私は最初のRSSリーダーにはOpera(Presto時代)を使い,そこからGoogle Readerに移行しましたが終了して,Feedlyなどを使ってみましたが満足できませんでした.しかし,4年ほど前にTiny Tiny RSSを使いだして満足しています. Tiny Tiny RSSとは? オープンソースのweb上で動作するRSSリーダーです. PHPとPostgreSQL(MySQL)を使って動作します. これは,自分のサーバにインストールして動かす必要があります. インストール方法については解説しているページがいくつもあるので,ここでは解説せずに,Tiny Tiny RSSの魅力について語っていこうと思います. web上で動作するので複数のデバイスから利用できる ローカルで動作するRSSリーダーは,複数のデバイスでの同期が大変です. その点,Tiny Tiny RSSはwebをインターフェイスにして1つのサーバ上

taosero07(@reotasoda)さんからプレゼント,新しい自作PCを組もうと思います,Nexus 6Pが早期シャットダウンする問題が未解決,HUAWEI P10 liteを購入しました

taosero07(@reotasoda)さんからプレゼントしてもらいました taosero07(@reotasoda)さんから色々プレゼントしてもらいました 梅酒,本,本,メモリ ガム ありがとうございます. 私にものを送りたい人は,http://amzn.to/2gPm1nLを参照してください.フッターにもAmazonアカウントへのリンクが貼られています.何かネタで送りつけたいということがあればTwitterなどで気軽に言ってください,追加します. いい加減新しい自作PCを組もうと思います せっかくDDR4メモリを貰ったので,自作PCをマザーボードごと更新する必要がありますね.今のマザーボードはDDR3メモリを使っているので,せっかく貰ったこれを活かせません.Windows 10のライセンスのことも考えると,自作PCは在学中に更新する必要があったので,どうせ買う必要があって,いつ買うかの問題になっていました.CPUとGPUとSSDとマザーボードを買おうと思います. CPUはゲームのことだけを考えると,シングルスレッドのコストパフォーマンスに優れるIntel Core

UNIX(記憶管理),間違ったリポジトリ名を変更しました,WebMoneyのAPIがCGI必須になっててつらい,アルゴリズムとデータ構造2(ソート(1))

UNIX(記憶管理) 記憶管理 - UnixClassWiki MMUの話. 今はCPUに内蔵されていることが多い. 家庭向けのMMUのページサイズは8KBぐらいだけど,HPU向けには増やしてあったりする. 本来の意味でのスワッピングとは,プロセスの使っているメモリをまるごと外部記憶領域に移動することを指す.Linuxはページングのことをスワッピングと言っている. 「スワップの意味が変化したと考えられませんか?」「スワップは技術用語なので,変化してはいけない,俗語としてスワップを使うことは別に良いですけど」 プログラムには局所参照性があり,同じ場所あたりにアクセスを繰り返す性質を持つ場合が多い.だからページングが成り立つ. LinuxのページアウトのポリシーにはLeast Recently Usedが使われている. かねてから気になっていた間違ったリポジトリ名を変更しました 私は今関わっているシステムのリポジトリ名をつけ間違えました. railsで開発されていた前のシステムをほぼ放棄する形でスタートしたため,application-yesodのようにリポジトリ名にyesodという

動的モデル(定積分)

定積分 関数\(f(x)\)が\([a, b]\)間の任意の\(x\)について,\(|f(x)| < M\)を満たす定数\(M\)が存在するとき,\(f(x)\)は\([a, b]\)で有界である. \([a, b]\)で有界な関数\(f(x)\)について\([a, b]\)を\(n\)個の小区間に分割する.この分割を\[Δ: a = x_0 < x_1 < … < x_n = b\]とする. \(Δ\)に対して,各小区間の幅を\[Δx_k = x_k - x_{k - 1} (K = 1, 2. … n)\]とし,\[|Δ| = \max_{1 <= K <= n} Δx_k\]小区間の幅の最大値を分割の幅とよぶ. 各小区間\([x_{k-1}, x_k]\)から任意の点\(c_k\)をとり,次の和を考える. \[s(Δ) = \sum_{k = 1}^n f(c_k)Δx_k = f(c_1)Δx_1 + f(c_2)Δx_2 + … + f(c_n)Δx_n\] この\(s(Δ)\)を分割\(Δ\)(および\(c_k)\)に関するリーマン和と

Travis CIのキャッシュ異常の解決,chromeでoverflow-wrapが効かないのを解決,計算理論のバケツの状態遷移図を公開,計算理論(オートマトンの計算能力の等しさ)

Travis CIのキャッシュ異常の解決 科学論・科学史102(エントロピー),微分積分の演習問題が出来る気がしない,情報リスク管理(OSにおけるセキュリティ),travisのキャッシュ更新が失敗していたのでtimeoutを変更しました - ncaqに書いたTravis CIのキャッシュ更新の失敗は,travis.ymlに cache: timeout: 1000 yarn: true directories: - $HOME/.local - $HOME/.stack と記述することで解決しました. 時間のかかるテストを削除して,キャッシュが正常化されて,毎回ビルドが必要になるのはstackのextra-depsに指定されたパッケージだけになったことで,自動テストにかかる時間はおよそ60分からおよそ10分に短縮されました.extra-depsのビルドに半分ぐらいの時間を使っているので,stackageのltsがアップデートしてextra-depsが消滅すれば,さらに5分ほどに短縮されることでしょう. 短縮した後に気がついたんですけど,私の報酬って成果

科学論・科学史102(エントロピー),微分積分の演習問題が出来る気がしない,情報リスク管理(OSにおけるセキュリティ),travisのキャッシュ更新が失敗していたのでtimeoutを変更しました

科学論・科学史102(エントロピー) エントロピーとは何か? 分子の移動速度の位置分布が異なるものがあるが,統計上同じ温度になる.同じ温度になると区別がつかない.そこでエントロピーを使う. エントロピーは秩序の度合. 「計算はどうやってやるんですか?」「高校の数学の組み合わせのように,袋の中のボールを取り出すように計算する,組み合わせが多いとエントロピーが大きい,同じ動きをしている球は同じ色みたいな感じ,細かくやると時間がなくなる」 綺麗に揃ったヘアピンは買った時は揃っているけれど,次第に部屋の中に散らばっていく. 水にインクを垂らすとだんだん広がっていく.温度はエントロピーの上がり方をコントロールする.インクが混ざる速度も水の温度が高いと速くなる. 熱力学の第2法則,エントロピーは常に増大する. 人は時間の経過を見る時にエントロピーを見て時間を見ている. 自分で考えた例.電池は放置していると使わなくても空になる. 動的モデルの課題をやり,微分積分の演習問題をやることにしましたが出来る気がしない 何もわからなくなってしまい,仕方がなく,教えてもらった答えの通りに写していきましたが

広告の追加,デッドロックの原因はcall stackを取っても不明,自動テストに1時間かかるので一部削除,object-fitにはwidth設定が必要

広告の追加 自分のサイトで一番下の広告が唯一有効だったことからシステムにも一番下に広告を配置してみました. yesodアプリケーションのデッドロック問題の原因はcall stackを取っても相変わらず不明 デッドロック問題は今のrunDB内部でのrunDBを減らしたのを取り込むことにしました. しかしやはり気になるため,callStackを見るためにステージング環境でstack build --profileしてみましょう. プロファイルを有効にしてビルドするとaesonのビルドが全く終わらないことがわかってきました. topをして見てみようとしたら-bash: fork: Cannot allocate memoryとか出てきました.こんな表示初めて見ました.プロファイル付きビルドは物凄いメモリを食うみたいですね. そう言えばプロファイル付きビルドをすると2回ビルドするんでした,そりゃ重いわけです. いつまでもビルド終わらないし反応もないので,仕方がないので一度EC2のインスタンスを終了して,一時的にインスタンスタイプをアップグレードしてみることにしました. AWSの課金が秒単

2017衆院選に投票してきました,@tk1024_botさんと会ってきました

2017衆院選に投票してきました 埼玉1区で投票してきました小選挙区は極めて遺憾ですが希望の党のたけまさ公一に投票してきました,どうせ死票だし比例区は立憲民主党,民の字を書き間違えて二重線で訂正したので無効票になってないか不安裁判官審査は何も書かないと信任になることへの抗議で全部✗ — エヌユル (@ncaq) 2017年10月22日 小選挙区で希望の党に投票した言い訳をします. 私は「子供の発達障害の原因は幼児期に親の愛情が足りないからだ」などと主張する親学推進議員連盟とは不倶戴天の敵にあって,この連盟の会長をしている安部晋三が総裁のうちは,自民党に投票することはけして出来ません. 埼玉1区の小選挙区に立候補していたのは 自民党 希望の党 共産党 維新の会 の4党の候補で,私は共産党候補に投票することもできたのですが,共産党候補の「鳥羽恵」氏は自分よりTwitterのフォロワー少ないし,過去の埼玉県第1区のデータを見ても共産党候補が勝つ見込みは無かったので,仕方なく自民党に勝つ可能性が少しでもある希望の党の候補に投票しました. 自民党が倒れたとしても,それより極右の希望

KeePassクライアントをKeePassXからKeePassXCに移行しました,みんなもパスワード管理にはKeePassを使いましょう

KeePassの紹介 みなさんパスワード管理には何を使っていますか?1Passwordとか,LastPassとか色々ありますよね. 私はKeePassというものを使っています. KeePassはフリーソフトウェア(GPL-2)で,完全に無料かつローカルで動くのが特徴です.1PasswordやLastPassと違って,「お金を払う」ことや「サービス提供元がクラックされることを心配する」必要はありません. 「ローカルで動くのなら複数端末で同期できないじゃん」と思うかもしれません.しかし,KeePassはkdbxという形式の単一のファイルにデータを全て記録するので,それをGoogleDriveやDropboxに置いておけば複数の端末で使えます. 「GoogleDriveに置いたらGoogleアカウントがクラックされたときにパスワードが全てバレてしまう」と思うかもしれません.しかし,KeePassは「キーファイル」という仕組みを導入しており,キーファイルを読み込ませなければ,kbdxデータベースを開けないようにすることが可能です.kbdxデータベースはAES暗号化(デフォルト)されています.

UNIX(プロセス管理),アルゴリズムとデータ構造2(再帰),yesodアプリケーションのデッドロックの根本的原因がわからない

UNIX プロセス管理 - UnixClassWiki 物理的リソースとしてのCPU数 < 仮想的な計算リソースとしてのCPU数 と書かれてて,普通の場合はまあその通りだろうと思ったのですが,最近はハイパースレッドとかあるので,物理的なCPU数という概念が曖昧になってきていますよね.なので,捉え方によっては逆になることもあるのではないかとか思ってしまいました.例えばNUMA構成のCPUをNUMA無効にしたら仮想CPU数をが半減したりするので逆転してしまう可能性があるのではないかとか. C言語の生のforkの例初めてみたかも知れない.こういう動きをするんだな…pthreadとかなら少し使ったことありますが,実はC言語でforkは使ったことがない.シェルスクリプトでならありますけど. 調べてみよう コマンドuptimeのマニュアルを調べてみよう。またロードアベレージの意味も調べてみよう。 現在時刻、システム起動からの時間、システム上にいるユーザ数、および直近1、5、15分間の実行キューに存在するジョブの平均数を表示します。 調べてみよう プロセスの状態を表しているSTAT

動的モデル(置換積分法)

中間試験が持ち込みありの場合難しくなるという話があり,暗記力が無いので持ち込みはあった方が出来るのかな…という思いと,高度な数学の問題を解けるかわからないという思いがあり,持ち込みありかなしかの投票に手を挙げられませんでした. 「中間試験の点数が悪かったらその先の授業についていくのは絶望的になる」という絶望的な宣言がなされました. 「中間試験にε-δ論法は出ますか?」「出ないとは言えない,でも出すとしても初歩的なもの」 置換積分法 合成関数\(y = f(x), x = φ(t) (x = φ(t)は微分可能)\)について, \[\int f(x) dx = \int f(φ(t))φ'(t) dt\]が成り立つ. 証明 \(F(x)\)を\(f(x)\)の原始関数とすると,\(F(x) + C = \int f(x) dx\) \(x = φ(t)\)を\(F(x)\)に代入して,\(t\)で微分すると,\[\frac{d}{dt}F(φ(t))\\ = \frac{dF(x)}{dx} * \frac{dx}{dt}\\ = f(x)φ'(t)\\ = f(φ(

計算理論(非決定性有限オートマトン,ε入力付非決定性有限オートマトン)

非決定性有限オートマトン 決定性オートマトンは遷移先が1つに決定されていたが,非決定性オートマトンは入力に対して複数の遷移先がある. 非決定性有限オートマトンの遷移関数は集合を返すので空集合を返すことがある. 非決定性有限オートマトンは受理するために都合の良い遷移を選んで良い. 「どっちを選んでも受理されるような入力が来た時はどっちを選ぶんですか?」「どっちを選ぶかは重要ではなくて,受理されるのかが重要」 prologを思い出しました. 最終的に空集合を返すような遷移できないパターンも受理されたとは見做さない. どの非決定性有限オートマトンにも等価な決定性有限オートマトンが存在する. ε入力付非決定性有限オートマトン 入力を読まないという動作が追加された非決定性有限オートマトン.入力を読まないという動作は入力εとして表す. 元の入力\(Σ\)と\(\{ε\}\)の直和\(Σ ∪ \{ε\}\)が入力になる.当初先生は直積と言っていてまた頭の中で直和∪と直積∩がまた頭の中でごっちゃになってきてしまいました.やっぱり直和が正しいみたい.資料に書かれているのも和集合ですし.直和という訂

サービス情報システム(ワークフロー),科学論・科学史102(電流の小テスト),情報リスク管理(webサーバーリスク)

サービス情報システム サービスと違ってExcelみたいなツールは単機能という話で「ゴジラは空を飛ばない」ということを言われたので,「え,ゴジラって放射線発射して空飛んでませんでした?」と言ってしまいました.やっぱりゴジラ対ヘドラで飛んでいたらしいですね. 「命令セットの数は300ぐらい」という発言があったので,amd64/x64の命令数は実際いくつなんだろうと思って調べようと思ったけど全然出てこない.coder64 edition | X86 Opcode and Instruction Reference 1.12によると無効なものを含めると254なのかな?オペコードの数から考えるとそうなるのかな. またAIの話してる… 「シュガーコーティング」という言葉が出てきたので「糖衣構文のことですか?」と聞いてみたら「糖衣構文なんて知らない」という答えが帰ってきました.全然関係ないらしい.そういえば糖衣構文の英語はsyntactic sugarで,シュガーコーティングとは何も関係なかった… 「suicaが初乗り運賃分無いと入場できないのは法律で決まっているから」という話がありました.鉄道営

:
GitHubで他人のプルリクエストに対しコンフリクト解消や追加の修正を行いつつマージするもう1つの方法

単純なコマンドラインでmergeする方法が使えない時 本の虫: GitHubで他人のプルリクエストに対しコンフリクト解消や追加の修正を行いつつマージする方法を読んで,そう言えば私もバイトで最初にチーム(私と社長で2人)で作業を行うときに戸惑ったなあと思い出しました. なので,今のバイト先の社長から教えてもらった,もう1つの方法を紹介します. 江添さんの述べた方法は,シンプルでわかりやすいですが,我々のチームでは使えません. 何故ならば,我々のリポジトリにはTravis CIによる自動テストが導入されているからです.そして,コードレビューで承認を貰い,自動テストが成功していない限り,原則masterにはそのpull requestをmergeしてはいけないというルールがあります. なので,社長が作ったpull requestが気に入らなくて私が修正をしたい場合も,ローカルでcommitするだけではなく,pull requestが作られたブランチにpushして,Travis CIによる自動テストをかける必要があります. ちなみに,何故我々のリポジトリが組織リポジトリに属さずに私個人アカウ

GNU/Linuxにおけるゴミ箱は.Trash/$uid/と.Trash-$uid/のどちらが正しいのか調べてtrash-cliにissueを開いたらSpecを読み間違えていることを教えてもらいました

前半の文章は間違っているので,正しい情報を得たい人は最後までスクロールするか,Re:GNU/Linuxにおけるゴミ箱ディレクトリは.Trash/$uid/と.Trash-$uid/のどちらが正しいのか - Qiitaを参照してください. 通常,GNU/Linux環境,というかFreeDesktop環境での「ゴミ箱」に相当するディレクトリは~/.local/share/Trash/です. しかし,ルートのファイルシステムに属しないディレクトリ,例えばUSBストレージなどの上でファイルをゴミ箱に移動する時があります.ゴミ箱の仕様を考えると,同じファイルシステム上で移動をしないといけないので,その場合,ディレクトリのトップレベルに.Trash-1000/のようなディレクトリが作られて,その中にファイルは移動されます. 問題は,そのゴミ箱のディレクトリに2つの形式のフォーマットが採用されていることです..Trash/$uid/と.Trash-$uid/ですね.$uidというのはユーザのIDのことです.シングルユーザの場合は通常1000でしょう.rootの場合0になります. Trashを使用して

第6回Haskell-jpもくもく会@朝日ネットに参加してきました,overloaded-recordsライブラリを読みました

(学生は懇親会無料!)第6回Haskell-jpもくもく会 @ 朝日ネット - connpass 開場は12:50なのだからその時に到着するようにすればよかったですね.開催時間の13:00に合わせてしまいました. なので自己紹介の時間を逃したと思っていたのですが,13:45分ほどに始まったので良かったです. 今回はGenericやTemplate Haskellを使ったことがないので,それでボイラープレートのコードを自動的に生成するという試みをしてみようと思っています.具体的には重複したフィールドラベル - あどけない話に書かれているようなIsLabelのinstanceの定義の生成をやりたい.既に行われているかもしれませんが… と思ってあらためて調べなおしてみたらoverloaded-records :: Stackage Serverの,Data.OverloadedRecordsに考えているようなものが存在していることがわかりました.この前に調べた時は見つけられませんでした. 私が考えているのはDuplicateRecordFieldsを前提とするものなので,少し違うような気がし

UNIX,アルゴリズムとデータ構造2

UNIX カーネルの構造と機能 - UnixClassWiki プロセス管理 - UnixClassWiki デバイススペシャルファイル - UnixClassWiki ファイルシステム - UnixClassWiki 今使っているLinuxにはおおよそいくつのシステムコールが用意されているのが調べてみよう。 /usr/share/man/man2に492個のファイルがあったので,およそ500個でしょう. 次に、既に使われなくなりなくなったシステムコールと、互換性のために残してあるが使用するのに推奨されていないシステムコールを1つ以上みつけてみよう。 create_module(2)は既に存在しません.bdflush(2)は非推奨となって何も行わなくなっています. カーネル空間の話.カーネル空間でhttpを処理するkhttpdの話.khttpdのことは初めて知りました. ext4をext3の少々の改変だと思っていたのですが,講師の人が「ext4はext3とは別物になっている」と述べたので,調べなおしてみたら本当にそのようでした.ext4が拡張機能を使って無ければext3と

動的モデル 原始関数,不定積分,部分積分法

原始関数 与えられた関数\(f(x)\)について,\(f(x)\)を導関数とする関数\(F(x)\)を\(f(x)\)の原始関数とよぶ.すなわち,\[F'(x) = f(x)\] \(f(x)\)から原始関数\(F(x)\)を求めることを積分するという.また,\(f(x)\)は\(F(x)\)の被積分関数とよばれる. \(F(x)\)が\(f(x)\)の原始関数であるとき,任意の定数\(C\)について,\(F(x) + C\)は\(f(x)\)の原始関数である. 不定積分 関数\(f(x)\)の原始関数全体を\(f(x)\)の不定積分とよび,\(\int f(x) dx\)と表す. 例 \(y = x^2\)の原始関数は\[\int x^2 dx = \frac{1}{3}x^3 + C (Cは積分定数)\] 積分の基本公式 \(\int (f(x) ± g(x)) dx\\ = \int f(x) dx ± \int g(x) dx\) \(\int kf(x) dx = k\int f(x) dx\) 基本関数の積分 \(\int x^α dx =

portageのバグ報告ガイドが読めないのでメンテナのTwitterにリプライを送ってしまいました,計算理論,plantumlでオートマトンを描きました,ゲームセンターで初めて音楽ゲームを遊びました

portageのagの最新版がビルドできない問題は既に報告されていました agことsys-apps/the_silver_searcher-2.1.0がビルドできないのでバグ報告するべきかと思ったら既に報告があるみたいですね.629488 – sys-apps/the_silver_searcher-2.1.0[-lzma] emerge failed error: unknown type name ‘lzma_stream’ 随分前に報告されてますが…,確認済みらしいのでそのうち直るでしょう.安定版は普通にビルドできるので特に困っていませんし. portageのsbclの最新版がビルドできない問題は既に報告されていました 昨日maximaのためのdev-lisp/sbcl-1.4.0がビルドできなかったので報告するべきかと思いましたがこれも既に報告がありました.632670 – dev-lisp/sbcl-1.4.0 fails to build: CORRUPTION WARNING in SBCL: Memory fault - The integrity of this

サービス情報システム,科学論・科学史102,googleアドセンスの審査が通りました,zenbackが混在コンテンツを注入してしまう,disqusを削除しました,情報リスク管理に無限にツッコミが入れられそう

サービス情報システム モンスターハンターに集中していたら電車を乗り逃して5分ぐらい遅刻してしまいました. 着いたらアイスブレイキングの話をしていました. 試験は「何でも持ち込み可」ということを聞いたので,ん?人もOK?と思ったけど「人に聞くのはダメ」ということでした. コンピュータは持ち込んでも良いそうですね. 「パクったのは読めば簡単にわかる」という話をしていたので,「それはパクったわかった奴だけわかったということになっているだけでは?」と聞いてみたら「だいたいだから」という返答でした. 「レポートを起承転結で書いて」という話をしていたので,レポートは初めから結論を書く形式なので起承転結の構成ではないのでは…?と思いました.というわけで「レポートや論文は起承転結にするべきではないのでは?」と質問しましたが,何故か「私の論文の読み方」という話をされて質問が有耶無耶になりました. 有耶無耶になったのでもう一度「レポートは起承転結にするべきではないのでは?レポートに転があってはいけないのでは?」ともう一度質問をしたら「レポートや論文には人を驚かせるような転が必要」と返されました.うーん,

今関わっているシステムにGoogleアドセンスを導入しました

今関わっているシステムにGoogleアドセンスの配置をしています.このサイトではないです. と言っても審査とかpull requestとかしたのは別の人なので,私はたいした作業を行っていないのですが. デフォルトで表示されているコードが<script>の読み込みありで,<head>で既に読み込んでいるのにこれ要るのか?という感じになっているのでとりあえずステージング環境で外して確かめてみようということにしました. 対象のブランチがpull requestのブランチでoriginリモートのブランチではないのでgit checkoutの候補に出なかったので困惑して基礎的な所をググり直してます. git fetchで対象のremoteを明示的に選択すれば問題ありませんでした.git fetch -paしてたからこれで良いのかと思っていました.man見たらgit fetchの-aオプションは--appendのショートカットで--allのショートカットではなかった,なるほど. ステージング環境を少しの間使っていなかったのでlts-9.5のビルドに多少時間がかかることになり

disqusを復活させました,zenbackを導入しました,安達太良山に登ってきました

disqusを復活させました disqusは静的webサイトに付きもののコメント埋め込みシステムなのですが,私のサイトには全くコメントがされませんでした. それだけなら放置するだけだったのですが,一時的にバズった結果トップサイトに認定されて,ものすごく大きい広告が貼られるようになったので取り外していました. 当時の自分のバズり方が半分炎上しているようなものだったので,炎上商法で広告収入を狙っていると思われるのが嫌だったというのがあります.ちなみにGoogleアドセンスは審査落ちましたし,AmazonアソシエイトはAmazonへのリンクを普通に貼っていただけだったのに何故か資格が剥奪されました. しかし,記事へのツッコミや訂正はやはり欲しいので,トップサイト認定はもうそろそろ外れただろうと思って復活させました. 別にTwitterでも良いのですが,ツッコミがあればコメントするほうが手っ取り早いと思うのですよね. zenbackを導入しました zenbackを導入してみました. 他サイトからの流入などはどうでも良いのですが,関連記事自動生成機能が魅力的でした.自分でリンクを貼るのは面

Haskellを書くときはstylish-haskellとhlintを使って労せずして綺麗なコードを書きましょう

3年前ぐらいからHaskellを書くときには,stylish-haskellとhlintを使ってコードを書いています. これらを使うと,私のように,ツールに頼ってコードを書いているだけでも「コードが綺麗」と褒めてくれるようになります.しめしめ. 他にHaskellを書く時に良いツールがあれば是非教えてください. stylish-haskell jaspervdj/stylish-haskell: Haskell code prettifier stack install stylish-haskellでインストール可能です. stylish-haskellはコード整形ツールです.このツールは importの揃え プラグマの揃え,及び不要なプラグマの削除 無意味な空白の削除 レコードの縦揃え パターンマッチの揃え などをしてくれます. 詳しくは公式サイトを見るのが良いと思います.この記事いる? この中でもimportの揃えは特異で,単純に行を辞書順に揃えるのではなく,qualifiedが無いimportにもqualified文の空白を入れて,ちゃんとqualifiedを無視したモジ

UNIX,Emacsのチュートリアルを翻訳したのがこの先生でした,IPAの脆弱性報告メールに返信しました,動的モデルの演習課題をしました,アルゴリズムとデータ構造2,暗算

UNIX システムとは何か. 「見せているスライドが見つからない」という質問をしたらパワーポイントバージョンはあってもPDFが無かった.アップロードしてもらいました. 先生が「Unity vs Gnome Shell」という動画を流し始めたので「Unity負けて死んだじゃん…」という気分になりました. 「AndroidがGNU/Linux」という話が出てきたので,「Androidはlibcにglibcではなくbionicを使っているのでLinuxではありますがGNU/Linuxではないのでは?」と思って質問しましたが適当に流されました. AOSPもlibcにbionicを使っているようですし.libc - platform/bionic.git - Git at Google 死んだDalvikが資料上で死霊とならずに登場してきました. Debian/Hurdの話を聞いてGentoo/FreeBSDを思い出してググってみたらGentoo FreeBSD - Gentoo Wiki「is no longer maintained」とgentoo wikiに書いてありました.そうなのか…

動的モデル 2階道関数・逆関数の導関数

2階導関数 関数\(y = f(x)\)の導関数\(y' = f'(x)\)について,\(f'(x)\)が微分可能であったとする.このとき,\(f(x)\)は2階微分可能微分可能である. また,\(f'(x)\)の導関数を\(f(x)\)の2階導関数と呼び,\(f''(x)\)で表す. すなわち,\(f''(x) = \lim_{Δx → 0} \frac{f'(x + Δx) - f'(x)}{Δx}\) 例: \(y = \sin x\)の導関数は\(y' = \cos x\) \(y = \sin x\)の2階導関数は\(y'' = -\sin x\) n階導関数 同様に,\(f(x)\)がn階微分可能であるとき\(f(x)\)のn階導関数が定義される.\(f'''(x) = f^{(3)}(x)\) 逆関数 \(y = \sin x\)の導関数は\(y' = \cos x\)\(y = \sin x\)の2階導関数は\(y'

他の方のRustのFizzBuzzを多少最適化しました,計算理論

他の方のRustのFizzBuzzを多少最適化しましたが素直な解決策がありました 昨日FizzBuzz を無駄にベンチマークしてみた By Nim、golang、Rust、Crystal、その他 - 強まっていこうを読みました. 私はアセンブリ言語を除けばRustが最速の言語であると思っていたので,この結果は衝撃的でした. しかし,ベンチマークコードを見てみると,どうもこのベンチマークは\nを手動挿入している言語が速いような気がしました.C++のstd::endlがバッファをフラッシュするので遅いことは有名です.CrystalやGo言語なども同じ理由で遅い気がします.そこで,とりあえず文字列を全結合してprint!による標準出力を一回にしてみました. こちらの環境では2倍ほどの速度になったので,ブログの著者に試してみてもらったところ,C言語の結果を超えるトップの速度になったようです.私の思考が間違いではないことがわかり,安心しました.ブログにもちゃんと追記してもらいました. 自然言語で書かれた評論に反論したりしても水掛け論になりがちですが,プログラマはコードで公平に語れるのが良いと

サービス情報システム,portageのmozc-2.20.2673.102のバグは既に修正済みでした,科学論・科学史102,情報リスク管理

サービス情報システム シラバス 初回が休講だったので今回はガイダンスです. カバンを机の上に置いたり講義中に帽子を被るのは禁止という話がありました.自分は元々カバンは床に置いてますし帽子は登山用のものしか持ってすらいないので声を上げませんでした. 飲食は良いらしい,笑う. パワーポイントで資料を作ると学習効率が良くないのであえて黒板に手書きするという話がありました.実際どうなんでしょうか. 出席取らないとか言ってるけど大丈夫なのだろうか… 皆に質問をしていくという話. 数学科だけど証明を板書を写しているだけで何も分かっていなかった話,私は数学科ではないけど証明を写しているだけで何もわからなかった話はわかります. 「みんなLINE使ってるでしょ,使っている人手を挙げて」という話があったので手を挙げてなかったらスルーされてみんな使っていることになりました.悲しい. 「研究者になりたい人」という問に手を挙げることが出来なかった.大学院に行きたかった.悲しい. サービス情報システムのシラバスでMVCとかREST APIのことが書いてあったのでプログラムに関する講義だと思って受けたんですが,結

bootstrap 4 alphaからbetaへの移行を行いました

気分が落ち込んでいてかなりやる気がない. 落ちる問題やデータベースの設計がまずい問題がある程度解決したので何か別のことをやろうと思ってissueを見ます. yesod develがwebpack --watch呼び出しでstack buildを再起動してしまう問題,今やってみたら再現しませんでした.謎です. bootstrap 4 betaへの移行 bootstrap 4がbetaになったのでそれにシステムを移行させようと思います.私の個人サイトは既に雑に移行させましたが,今書いているシステムはそこそこbootstrapのデフォルトを弄っていることと,個人サイトと違って壊さないように真面目にやらなければいけないので,まずはリリースノートの内容を把握しようと思います. というわけでRelease v4.0.0-beta · twbs/bootstrapの内容を翻訳してみようと思いましたが,Google翻訳に突っ込んでみたら殆ど意味の通る文章が出てきてくれたので,私が英語を読む必要はありませんでした.しかし,結構な破壊的変更があるのにそれについて「変更しました」ぐらいの情報しか無いので,

UNIX課題 ファイルとしてのインタフェース

/proc/以下のようにシステムに作用させるインタフェースなのにファイルのように見せているインタフェースを用意している。一方でファイルにアクセスする形式ではなくWindowsプログラミングAPIのように関数へのインタフェースに統一するアプローチもある。自分なりに考えて前者の利点、後者の利点を説明せよ。 ファイルのように見せているインタフェースの利点 どの言語でも容易にアクセスが可能 ファイルを読み込めればアクセスが可能となるため,ファイルをopen, read, writeすることさえできれば,複雑なシステムコールを取り扱ったり,関数をラップする必要がありません. LinuxカーネルはC言語で書かれていますし,多くのツールもC言語で書かれてきましたが,後年パフォーマンスを必要としない動作には, bash, sed, awk, perl, python, rubyなどの多種多様なプログラミング言語が利用されてきました. 茸のように増えていくプログラミング言語全てにインターフェイスを提供するのは大変ですし,C言語関数を呼び出すのも面倒です. そこでファイルとしてインターフェイスを提

動的モデル演習課題 導関数の定義と色々な導関数

他の皆さんは授業中に演習課題を楽々出してましたが,私は当然後から多大な時間を使って提出します. \(y = x^3\)について,\(x = a\)における微分係数を定義にしたがって求めよ \(\begin{aligned} & \lim_{Δx →0} \frac{(a + Δx)^3 - a^3}{Δx}\\ &= \lim_{Δx → 0} \frac{a^3 + 3aΔx^2 + 3a^2Δx + Δx^3 - a^3}{Δx}\\ &= \lim_{Δx → 0} \frac{3aΔx^2 + 3a^2Δx + Δx^3}{Δx}\\ &= \lim_{Δx → 0} 3aΔx + 3a^2 + Δx^2\\ &= 3a^2 \end{aligned}\) \((f(x) + g(x))' = f'(x) + g'(x)\)が成り立つことを導関数の定義にしたがって証明せよ 左辺\((f(x) + g(x))'\)は導関数の定義により\(\lim_{Δx → 0} \frac{f(x + Δx) + g

UNIX,アルゴリズムとデータ構造2,東京大学のスライドのタイトルが文字化けで膣になっていました

UNIX responの番号って毎週新しく発行されるのかなー?と思って「先生今週のresponの番号はなんですか?」と聞いてみたら「今作る」と返されました. 旧講義名「UNIXオペレーティングシステム」の方に間違えて登録した人が数人居たみたいで確認していました. responを開いたら「本日の授業の感想」が出てきたので「講義の最後に提出するということでしょうか?」と質問してみたら「暇な時に書いといて」ということです.しかし感想は最後にしか書けないのでは… 課題の説明をしながら引き続きWikipediaを「パソコン少年ゆうちゃんが編集している」とdisっててウケます.是非編集をして直して欲しいなあって思います. レポート1が選択1選択2課題3になっていたので課題3は必須なのかと思って質問したら課題3は選択3の単なるtypoでした. レポート2が「GNU/Linuxシステムのインストール」だったので「もう既にインストールしてここで動いているんですけど再インストールする必要はありますか」と聞いてみたところ,「その場合再インストールは必要ない」ということでした.しかし使っているのがGento

動的モデル,数学の知識がない人が大学で数学の知識を手にするにはどうすれば良いんでしょう

動的モデルの講義のノート. 今期はノートを取ることにしているのですが,ノートに書いていることがどういう意味なのかさっぱりわからなくなってきました.写しているだけで理解が全く出来ていない.基礎知識が足りない?やはり数3を受けていないと無理? 実際の初回の講義にして何を言っているのかわからなくなってきたので,単位を取るのは絶望的なことがわかってきました.しかし,せめて微分積分の知識は得たいのですが,先生が何を言っているのかわからなくて厳しいです. 黒板に書いてない先生の話もノートに取ろうかと思いましたが書かれてないと文章を把握できなくて写すのが困難であることがわかってきました. 平均変化率 関数y = f(x)の点x = aにおいてxの増分Δxに対するyの増分Δyの比,すなわち,\(\frac{Δy}{Δx} = \frac{f(a + Δx) - f(a)}{Δx}\)をaがa + Δxに変わるまでの平均変化率とよぶ. 「Δxってなんですか?なんでΔなんですか?」「別になんでもいい,Δを使っているのは慣習」 微分係数 関数y = f(x)の点x = aにおいて,Δxを限りなく0に近

計算理論,ナップザック問題,鳩の巣原理と格子点,StripeからSMSを使わずに認証を手動で有効化すると返信が来ました

計算理論 オートマトン,正規言語,P vs NP問題とかの話をする講義. 単位取得できないかもなあと思いつつ,ふんわりとしかそのへんの話を理解できていないので是非講義は受けておきたかった.水曜日はこの講義しか無いスケジュールになってしまったけど,無理矢理受講しました.最悪単位は取れなくても良い,知識が欲しい. 試験が持ち込みありで,持ち込みテキストは手書きのみという話だったので,例によってダメ元で「印刷じゃダメですか?」と聞いてみました.学生に情報をまとめさせたいので,プリントのコピーを防止したいため,自分で打ち込む場合は良いらしいです.試験が近づいたら話そうという話になりました.なんとかなりそう?授業時間後に今一度聞きに行ったら何か学習障害かどうか診断を受けているか聞かれたので,精神障害者保健福祉手帳を見せたらすんなり納得してくれました.便利. 今日はガイダンスと,数学系の講義ではいつも繰り返されている証明や数の集合の話をするようですね. この講義は効率の良い方法を考えるようなアルゴリズム論を扱うものではない.計算理論では効率が良いとは何か,どんな解法を用いても解けない問題とは何か

科学論・科学史102,データベース上のカラムの命名の間違いを意外とあっさり修正できました,haskellのレコード構文のスタイルを変更しました,情報リスク管理,StripeのSMS認証未解決

科学論・科学史102 前期の科学論・科学史101の評価はBでした. 後期最初の講義だから,前期から使っていた教科書を持ってくるのを忘れてしまいました.まあ完全に教科書に沿った授業をやっている講義ではないので良いんですが.どうせ初回はガイダンスでしょうし. 「小さすぎて見えないものを見る」 原子・分子・素粒子のミクロの世界. 講義で十分にわからない場合は教科書を読むなどして欲しい. テストなどの形式は前期に引き続き.シラバスに書いている通り,AとBがある.A方式は小テストでと期末試験で評価する.B方式は期末試験1回で評価する. B方式は就職活動などで講義に来れないことがある学生に配慮して小テストに点を付けない方式を提供するためのものです. 先生もA方式を選んで欲しいそうですね. 私は精神を病んで就職活動からドロップアウトしたためA方式を選ぶことになります. そう言えばカプコンが面接申し込みしてないのに突如面接日を火曜日に設定して提示して「受けるか辞退するかメール返して」と言ってきたことがありました.講義があるので素直に「辞退します」とメール返したら即座にお祈りメールを返信されたことがあ

stripe-haskellを最新のstackageに対応させたい,stripeのSMS2段階認証が出来ない,stack solverは深く探索しない,goofysのままのほうが良かったかも,SetはFunctorのinstanceにならなかった

stripe-haskellを最新のstackageに対応させたい stripe-haskell: Stripe API for Haskellというパッケージがあるのですが,これが新しいstackageのltsに登場しないので自分のソフトウェアのltsをアップデート出来なくて困っています. extra-depsに指定すれば良いのかなと思って色々やってみましたが,パッケージの依存関係がなんかダメでダメでした. OSSdmjio/stripe: Stripe APIなので,利用者が修正出来るはずなので,修正をやっていこうと思います. 元ソースだとNixOSに依存しているのかstack.yamlが存在せずにstack-head.yamlみたいなファイルがたくさんあって謎です.これだとビルドがまず出来ない… stackageの方だとaesonのバージョンに制限をかけていてビルドが出来ないらしいことがわかっているのでそこだけ直すのが良いんでしょうが,stackがセットアップされてないとテストすることも難しい… かと言ってstackのビルドオプション提供してないのはリポジトリ提供主の意志だろう

東京ゲームショウ2017に障害者手帳で100円で行ってきました,インディーゲームコーナーのレポートを書きます

東京ゲームショウ2017に行ってきました. 私は「ゲームの情報とかwebで仕入れれば良いじゃん」とか思っていて,当初あまり興味が無かったのですが,障害者手帳を持っていれば100円で入場できることを教えてもらったので,試しに行ってみることにしました. 通常前売り券の料金は1000円なのでこれは9割引きとなります,東京ゲームショウは神. 行ってみたら結構面白かったです. ほとんどインディーゲームブースに居て,そこがそんなに混んでなかったのでそこでひたすらゲームをしていました. ゲーセンが100円で15分ぐらいしか遊べないことを考えると劇的にコスパが良いと言えます. 去年身内がビジネスデイで出展してたのに,行かなかったのは勿体無かった.来年はまた行こう. 本ブースの方はあまり見なかったのですが,海外から出店していた所もそこそこあったのが印象的でした. もちろんインディゲームブースにも海外の方は多く居て,日本語化されていないゲームを遊んでみて遊び方がわからず「ええ…」ってなったこともありました. 関係ないけど,公式キャラクターの顔をじっと見つめてたらなんかだんだん怖くなってきました. 以下記憶

atoolを使えばtar, gzip, zip, 7zなどの複数のツールのコマンドラインオプションを覚える必要が無くなります

atoolというツールが便利です あなたは tar gzip bzip xz 7z zip rar などを取り扱うツールのコマンドラインオプションを覚えていますでしょうか.私は覚えられません. なので普段圧縮アーカイブを取り扱うときはatoolを使っています. gentooならemerge atoolでインストールできます. このツールはそれぞれのアーカイブへの操作をラップして,統一したコマンドラインを提供してくれます.なので,一々個別のツールの使い方を覚える必要が無くなります. tarにaオプションが付きましたが,それでもzipなどを取り扱うことは多いのでやはり便利です. 取り扱うファイルの拡張子などから使用するツールを自動で判定してくれるので,ツールを指定する必要もありません. これはあくまでラッパーなので,それぞれのツールは個別にインストールしておく必要があります. 以下私がよく使うコマンドを紹介します. aunpack アーカイブを展開してくれます.これの嬉しい所は,複数のファイルを含むアーカイブを展開するときは,サブディレクトリを自動で生成してその中にファイルを置い

UNIXの初回授業,汚した図書館の本を弁償したのですが買い取れなくて残念,アルゴリズムとデータ構造2の初回授業

UNIXの初回授業 講義UNIXの初回授業を受けます. 授業番号は163-438-812 (33136). responで出席を取るそうでした.しかし,前期に使っていた教員が居なかったので,responに登録していたんだけど現状アプリの設定を消していてしまっていたので,再設定する必要があります.しかし,教務webサービスにログイン出来るのは10時からなので「現状出席ができないんですがどうしましょう?」と聞いたら「それは君の個人的問題でしょ?なんで私が君の個人的設定の面倒を見ないといけないの?」と滅茶苦茶不機嫌そうに怒られました…現状を伝えたほうがスムーズに進むと思って質問しただけなのに,少し傷つきました. IDとパスワードを控えておけば良かった…出席は10時からになってしまうな…と思って~/.local/share/Trashを見てみたら存在していました.出席できました. 講義の情報は以下にあります.UNIXオペレーティングシステム - UnixClassWiki 今日はオペレーティングシステムとは何か - UnixClassWikiですね. 最初に記事オペレーティングシステム -

動的モデルの初回授業のε-δ論法がわからず早くも躓いています

動的モデルの初回授業 講義動的モデルの初回授業を受けます. 数学が致命的に出来ないのに何故履修登録してしまったんだ…この講義を履修する時はそのことに気がついてなかったから仕方がないんだけど. 1講義単位落としても卒業できるように専門科目限定の履修追加をしましたが,追加した講義が同じく数学である計算理論なので,両方を落として留年する可能性が出てきました. 先生も数3の知識が無いとこの講義は厳しいと言っていて死ぬ気配しか無い.私は数3をやっていない… 参考書として以下の3つが指定されました. 徹底攻略 常微分方程式 やさしく学べる微分方程式 自然現象から学ぶ微分方程式 あくまで参考書だから無くても単位は取れないことはないとか言ってましたがそんなのは私には無理. 2のやさしく学べる微分方程式の方が簡単らしいけど,演習問題は1の徹底攻略 常微分方程式から出るらしいので,1のamazonページを見たら在庫3つになっていたので買いました. しかし,この先生の同じ講義である幾何学概論を教科書をちゃんと買って,なおかつテストの点数が悪くて私は落としました.なので,参考書をいくら読んでも学習障害や

Yesodアプリケーションのクラッシュの原因はやはりデッドロックっぽい,PGPOOLSIZEを増やしてみたらクラッシュしなくなりました

ghciでforkして見てみたらBlockedOnMVarが発生してるのでやはりデッドロックっぽい ghciでYesodアプリケーションを動かしてみます. getApplicationReplがあるのでこれを使います. (port, foundation, app) <- getApplicationRepl t <- fork $ runSettings (warpSettings foundation) app と言った感じでYesodアプリケーションををghciで別スレッドで動かせます. さっそくクラッシュしました. クラッシュしたのは良いけれどご飯食べるから暫く放置してたら GET /favicon.ico Accept: image/webp,image/apng,image/*,*/*;q=0.8 Status: 200 OK 0.000318s GET /robots.txt Accept: */* Status: 200 OK 0.000223s が出てきて驚愕しました.なんでfaviconとrobotsへのアクセスが成功しているん

Yesodアプリケーションのデッドロックの検出のためにThreadScopeを使ってみましたが手掛かりにはなりませんでした

今日も引き続きyesod製のwebアプリケーションがクラッシュする問題を解決しようと試んでいます. とりあえず昨日他のブランチでcssやjsのcdnからの配信に切り替えたのでそれを矛盾なくmergeする作業を行います. gdbも試すけど,試してなかったThreadScopeを試してみようと思います.正直これで何かがわかるとはあまり思えないのですが… ThreadScopeのページで書かれているRTSオプションって-Nはコア数でわかるけど,-lsはどういう意味なんだろう. -l[flags] イベントをバイナリ形式でprogram.eventlogというファイルに記録する。flagsが指定されなかった場合、ThreadScopeなどのツールに適したデフォルトのイベント集合を記録する。 4.17. コンパイル済みプログラムを実行する まさにThreadScopeみたいなソフトウェア用のオプションだったんですね… ThreadScopeでeventlogを開いたら There was a problem loading the eventlog. findRunThreadTime fo

yesodとwebpackを協調させてTypeScriptをビルドする方法

yesodとwebpackを協調させてTypeScriptをビルドする方法 現在yesodとTypeScriptを併用していて,yesodがhaskellアプリケーションをビルドする前にwebpackでTypeScriptをJavaScriptにビルドするということを行っています. yesodのshakespeareのText.TypeScriptにはエラー表示が極めてわかりにくいとかグローバルにtscをインストールしないといけないとかそもそも何故か動かなくなる時があったので独自にwebpackを動かしています. package.yaml build-type: Custom package.yamlでもcabalでもいいですが,build-type: Customを指定しましょう.これでstack buildにhookをかますことが出来ます. Setup.hs import Distribution.PackageDescription import Distribution.Simple import Dist

haskellプログラムのimportの別名が多くなる問題にはclassy-preludeを使いましょう

classy-preludeというhaskellパッケージの紹介です. importの別名が多くなってしまう問題 haskellでは多くのデータ構造に対する関数がほぼ同じ意図を持っているのにも関わらず,違うモジュールで違う型で定義されています. lookup, insert, length, member, updateなどですね.データ構造に対する典型的な関数たちは多く被っています. 例えばlookup関数は単なる関数で,baseのData.Listでは,lookup :: Eq a => a -> [(a, b)] -> Maybe bと定義されています.unordered-containersのData.HashMap.Lazyではlookup :: (Eq k, Hashable k) => k -> HashMap k v -> Maybe vと定義されています. というわけで,Data.HashMapなどを使うときには,一般的にはimport qualifiedで別名を付ける必要が出てきます. いつ衝突する関数が増えるかわからないので,

テストを書いたら本体のバグが発覚しました,エラー時のレスポンスが捨てられてしまうのでhttpsJSONEitherは使わない,検索した内容をtwitterに投稿するものを作ろうと思います,string-transformの変換元にShow aを追加しました

テストを書いたら本体のバグが発覚しました hspecを使ってshouldThrowを使っているのだけど,意図した例外を送出してくれないのかdid not get expected exceptionエラーになって困りました. なんでだー???と思って調べたら本体コードがバグっていることがわかりました.非常に単純な変数の指定取り間違いでした…テストって大事ですね… エラー時のレスポンスが捨てられてしまうのでhttpsJSONEitherは使わない httpsJSONEitherを使うと,aesonで指定していないJSONのフィールドがレスポンスから省略されてしまうためエラー表示がわかりにくいので,あえてhttpsLBSでデータを取得してJSONのパースはdecodeで行うように変更しました. google検索した内容を「検索しました」とtwitterに投稿するwebアプリケーションを作ろうと思います 前から欲しいと思っていたwebサービスをいい加減実装するかと思ったけどそもそもwebサービスである必要性がわからなくなってきた.内容はgoogle検索した内容を「検索しました」とt

yesodアプリケーションがデッドロック状態になってしまうことがわかってきましたがそれ以外は何もわかりません

goofysを使わない新しい構成のシステムがちゃんと動くか確認するためにステージング環境を整えます. 構築方法はちゃんとメモしているのですが,流石に面倒くさくなってきた.ansibleとか使えば楽できるんでしょうか…環境構築なんか1回だけと思ってましたが,結構な数をこなしてきたので,いい加減導入を考えたほうが良いのかもしれません. しかしステージング環境と本番環境で埋め込む変数が異なったりするのですが,そのへんをansibleはどうやって処理するんだろう,と思ってググったら環境ごとにファイルを分けるのか…しかし,今回のデプロイは実験的なものが動くのか試しているわけで,ブランチがmasterじゃないわけだがそういうのどうするべきかなあと思って面倒臭くなった.数ステップで終了する単一のアプリケーションだし,ansibleを導入するほどの案件じゃないのかもしれない. 本番環境がt2.xlargeなのでステージング環境も同じくt2.xlargeにしてstack buildしてみたらビルドが高速でビックリした,手元のデスクトップPCもこれぐらいの環境を用意したくなってきますね. テストアップロー

コマンドラインツールの例外実装,string-transformとOverloadedStringsの相性が悪い,Multipart Upload

コマンドラインツールの例外実装 テストできるようにモジュールをlibraryとexecutablesに分けました. baseのexceptionを使うよりsafe-exceptionsを使うほうが良いそうなのでimport先だけ変えておきます.現在非同期例外を使うことはないのであまり恩恵は無いかなあ…と思いましたが,tryにたくさん型注釈をつけていたところをtryAnyにすることが出来ておおこれは便利. 昨日書いたstring-transform: simple and easy haskell string transformをこのプログラムにも使うことにしました.単純なモジュールですが,もっと広まって世の中のhaskellコードの可読性が上がって欲しい. プログラムをDuplicateRecordFieldsとOverloadedLabelsを前提に書き換えています.しかし,パターンマッチで取り出すことを前提にやっていると,同じスコープで重複したラベルを扱う時,結局はプレフィクスを付けてパターンマッチさせて重複させないということが必要なことがわかってきました. コマンドラインオプ

Amazon S3の問題はMultipart Uploadで解決しそう,haskellの文字列の変換をわかりやすくするstring-transformを公開しました

Amazon S3にファイルがアップロード出来ない問題はそもそもPutObjectが大容量のファイル向けじゃないからのようでした conduitのMonadResource mをIOに変換する方法がわからない - ncaqについて,@as_capablさんに助言を貰ったので,それについて調べてみました. なんかこのソース見ると ResourceT IO が渡せる奴があるっぽいです(http-client-conduitに詳しくないので見当外れだったらすいません) https://t.co/pR9vuzBuNx — アズなんとかさん@奴隷貿易反対 (@as_capabl) 2017年9月6日 と思ったら最新版で消えてるっぽいですね……Issueとか追いかけてみたら何か分かるかもです — アズなんとかさん@奴隷貿易反対 (@as_capabl) 2017年9月6日 昔あった関数をそのままコピーすることは簡単ですが,何か問題があって消えた関数かもしれないので,消えた経緯を調べてみます. http-conduit :: Stackage Serverにgithubへのリンクが

ゆうちょダイレクトのログインが不便,haskellの例外時処理に悩んだ,slackにそこそこの容量のファイルが送れない不具合が発生してしまった

鼻血が止まらない 数カ月前から風呂に入るたびに鼻血が出るし,寝てる間も自然と鼻血が出て迷惑しています.むかしから鼻血は出やすかったが,ここ数ヶ月のは特に多い.心療内科で血液検査を定期的に行っているため,血液の病気ではないでしょうが.耳鼻科に行くべきでしょうか…正直面倒くさい. 散髪に行きました 作業コアタイムに備えて起きたら今日は休みだった.忘れてた. 髪の毛がうざったくなってきたことを思い出しました.散髪に行きます. 自転車の鍵が所定の場所に無かった.そう言えばちょっと前に父親が自転車を使った.父親はよく自転車の鍵を所定の場所に戻してくれないので,鍵が行方不明になる.使うのは全然構わないけれど,鍵は元の場所に戻しておいてほしい.普通に使えなくてこまる.自転車を見てみたら鍵は刺さったままでした. テクノロジーの力で忘れることを防止できないかな,HoloLensみたいなのでメモを貼り付けるとか.とか考えていましたが,自転車の鍵を指紋認証にして鍵をなくすほうが楽そうですね. 散髪のバリカンが皮膚に触れる感触が好きです. モスカードを作りました これまでモスバーガーをよく使ってまし

conduitのMonadResource mをIOに変換する方法がわからない

前回出したpull requestに返信 awsパッケージは出来る子でした,大容量のファイルのS3へのアップロードが出来なくなりました,yesodにpull requestを出しました - ncaq 前回yesod develのstack buildの--fast消して欲しいというpull requestを提出しました.remove the --fast flag from stack build executed by yesod devel by ncaq · Pull Request #1442 · yesodweb/yesod これにレスがついていたので返信します.即座にレスポンスが帰ってきましたが,pull requestを開いた後寝たため1日経っての返信になります.時差を感じる. google翻訳で十分理解できる平易な英語で助かりました. そしてgoogle翻訳で返信を書く.SVOで完結するだけの文章ならともかく,ある程度複雑な文章になるとgoogle翻訳を使わないと全く書けない…文法というより語彙力の問題なのかな? 原文 レスポンスに感謝します. @psibi私は問題

awsパッケージは出来る子でした,大容量のファイルのS3へのアップロードが出来なくなりました,yesodにpull requestを出しました

バケット名にドットを付けていたのが全て悪かった,awsパッケージは出来る子でした AWSのS3にhaskellでアクセスするのに苦戦してます,flycheck-stackはもう不要になってました,optparse-applicativeがいい感じ - ncaqに書きましたが,aws :: Stackage Serverで上手くpre signed urlを生成できなかったので,s3-signer :: Stackage Serverを使ってみました. そしてAmazon S3のバケット名にドットを使ってしまいhttps通信が出来ない環境を作ってしまった,S3のダウンロードファイル名を指定できるライブラリがなくて困っている - ncaqに書きましたが,Amazon S3のバケット名にドットを付け加えるとhttpsなuriが生成できないことがわかったので,開発用のバケット名の区切りをドットからハイフンに書き換えました. それで,s3-signerはresponse-content-dispositionに対応していないので,s3-signerを改造するか,amazonka-s3 :: S

optparse-applicativeはいい感じでした,Data.ByteString.readFileは/dev/stdinを読み込めない,GitPythonを使いました,python好きになれない

だるすぎる だるすぎてやるべきことがあるのに,ずっと世界樹の迷宮IV 伝承の巨神をやっていました.最近これを再開して,ちょっと前にクリアしました. ソードマン/ルーンマスター ナイトシーカー/ミスティック メディック/ダンサー スナイパー/ミスティック ルーンマスター/メディック の構成でやっています. それで第六迷宮に潜っていたのですが,三頭飛南瓜が強すぎて1回勝ったけどもうひとつのグループに全滅させられ続けて作業をやりたくなってきました. 作業やってました. optparse-applicativeはいい感じでした optparse-applicative :: Stackage Serverを使ってhaskellコマンドラインツールを書いています,やっぱりいい感じでした. しかしこのParserはApplicativeですがMonadではないので,もちろんモナド変換子ではなく,基底でIOを実行できません.その不自由さがある分宣言的に記述することが可能なのですが. 私が書いてるコマンドラインツールは状態を設定ファイルで持つので,その設定ファイルが存在するかでコマンドライン

Amazon S3のバケット名にドットを使ってしまいhttps通信が出来ない環境を作ってしまった,S3のダウンロードファイル名を指定できるライブラリがなくて困っている

Amazon S3のバケット名にドットを使ってしまいました aws :: Stackage Serverパッケージでpre signed urlを作る方法はさっぱりわかりませんでした.そんな機能ないのかも. pre signed urlを作る機能だけにs3-signer :: Stackage Serverを使うことにしました. 作ってみたら上手く動かない,https証明書エラーが発生します.web上のドキュメントではみんな普通にhttpsアクセスできてるのになんでだろう…と思って調べてたらとんでもない失態を犯していることに気がついてしまいました. SSL と共に仮想ホスティング形式のバケットを使用した場合、SSL ワイルドカード証明書は、ピリオドを含まないバケットのみと一致します。この問題を回避するには、HTTP を使用するか、または独自の証明書検証ロジックを記述します。 バケット名にピリオド (「.」) は使用しないことをお勧めします。 バケットの制約と制限 - Amazon Simple Storage Service なるほどそれで我々のS3だけhttpsアクセス出来ない

AWSのS3にhaskellでアクセスするのに苦戦してます,flycheck-stackはもう不要になってました,optparse-applicativeがいい感じ

haskellのawsパッケージでS3にアクセス 今書いてるwebアプリケーションでは,S3上に置いているファイルへのアクセスにkahing/goofys: a high-performance, POSIX-ish Amazon S3 file system written in Goというファイルシステムにバケットをマウントできるものを使っています.s3fsの高速版です. しかし,アプリケーションサーバが大量のファイルを送信しているのが負荷になっているのではないかと思ってS3から直接ダウンロードさせるように書き換えようとしています. ライブラリにはaws :: Stackage Serverを使用しています. とりあえずダウンロードより先にアップロードを実装しないとデバッグも出来ないなと思ってアップロードを実装していました.本当はアップロードもブラウザが直接S3と通信する方が良さそうですが,その場合データベースとファイルの一貫性保証がかなり面倒くさいので,ひとまずアプリケーションサーバを経由してアップロードするように書いています. Aws.simpleAwsを使うとS3なのにht

yesodでprovideRepTypeの中でredirect出来ない時は型を明示しましょう

混乱メモ. yesodでコンテンツを直接配信するのではなくredirectでS3などのファイル保存場所のURLにリダイレクトするようにしようとしていました. とりあえず実際のAPIは作らずにundefinedで関数たちを置いておいて,ハンドラー側の呼び出し機構だけ書いておこうとしていました. しかし困っていました.ファイルを配信するハンドラーは2つあって,片方はそのままredirect出来るのですが,もう片方はselectRep,provideRepType typeJsonでjsonのリクエストにも対応できるようにしていて,ファイル送信はprovideRepType typeOctetにしているので,これをsendFileからredirectに切り替えると,型エラーになってコンパイルが通らなくなります. provideRepType typeHtmlにすれば良いのかなと思って切り替えてみましたが,• Could not deduce (ToContent a0) arising from a use of ‘provideRepType’という風に型が特定できないとコンパイルエラーが

emacsの自動補完をauto-completeからcompany-modeに移行しようとしましたがやめました

新しい言語の補完が大概company-modeにしか対応していないため,company-modeに移行しようとしましたがやめました. 設定ファイルは以下のような感じでした. ;; -*- lexical-binding: t -*- (require 'company) (require 'company-quickhelp) (global-company-mode t) (company-quickhelp-mode t) (custom-set-variables '(company-dabbrev-other-buffers 'all) '(company-dabbrev-code-other-buffers 'all) ) (define-key company-active-map (kbd "M-n") 'company-select-next) (define-key company-active-map (kbd "M-t") 'company-sel

dic-nico-intersection-pixivをpixivのサイトマップを使って生成するように変更しました

ncaq/dic-nico-intersection-pixiv: ニコニコ大百科とピクシブ百科事典の共通部分の辞書 東方天空璋が発売されたので,IME辞書を再生成しようと思いました. 軽量なネット用語辞書が欲しかったので,ニコニコ大百科とピクシブ百科事典の共通部分の辞書であるdic-nico-intersection-pixivを作りました - ncaqにも書いている通り,最後にサイトマップが存在することを指摘されました. なので,そのように書き直しました. pixivのsitemapを取得して高速化 · Issue #1 · ncaq/dic-nico-intersection-pixiv changed: pixivのsitemapを使用して取得高速化,単語増量 closed #1 · ncaq/dic-nico-intersection-pixiv@4fab1db サイトマップのスクレイピングにはhttp-conduit :: Stackage Serverとxml-conduit :: Stackage Serverを使ったのですが,xml-conduitの使い方が全然わ

大学院の入試に行って,教員に苦笑いされてきました

リクエストがあったので書きます.明日の面接の内容、日記にしてくれますか? | ask.fm/ncaq_ask 面接 今日面接がありました. 内容は以下の通りでした. そのままの内容ではありません. 面接は教員数人に学生1人というスタイルでした. 大学院を志望する動機は? コンピュータサイエンスをもっと学びたいと思ったのですが,私の所属する専修大学には情報系の大学院が存在しません.近くの国立大学を検索したところ,埼玉大学の大学院の研究室に興味のある分野が複数あったので,志望しました. 大学院に入ったらどのような研究をしたい? 自動推論 自動証明 プログラムの検証 学部で学んだ内容は? ネットワーク関連の学習を中心に行っていました. プログラミングは何時頃からやってましたか?何をやっていましか? 高校の頃からです. ゲームを作ったり,webサービスを作ったりしていました. 使っているプログラミング言語は? 一番使っているのはHaskellで,その次はC++で,その次はTypeScriptです.他にはRuby,Java,D言語,Prologなどを使っていました.

twitterでブロックしたアカウントを全てブロック解除するやりかた

私はtwitterでは適当にブロックを行って定期的にブロック全解除を行っていました. そのためにunblock.ioというまさにブロック全解除を行うためのwebサービス(個別のアカウントは解除しないなどのブラックリスト機能付き)を使っていましたが,サイトが閉鎖してしまいました. なので,同じ機能を持つwebサービスをelmの学習ついでに自分で作ろうとしていましたが,自分が使うだけならscriptを書けば十分だなと気が付きました. やりかた https://twitter.com/settings/blockedを開きます. Endを押し続けるなどの方法でブロックリストを全て読み込みます. 開発者ツールのコンソールで Array.from(document.querySelectorAll("button.unblock-text")).forEach(b => b.click()); を実行します. 注意 自分の環境でしかテストしていません.未保証です.twitter webの構造が変化したら動かなくなる可能性が高いです. わたしは129人からブ

論理式処理系を途中まで書きました

今日,院試の勉強をしていて,あまりにも何もかもがわからなくて,何故か論理式処理系を書いていました. 途中でよく考えたらCNFが元の真理値と等しいかQuickCheckで検証をする用途にパーサーを書く必要は無いと気が付きました. 中途半端なものですが,これ以上書き足す予定が無いので公開します. 未来にparsecの参考になるかもしれない. 以下のように使えます. λ> execPropForm "a -> !b" [("a", True), ("b", False)] True

「明利酒類 梅香 百年梅酒」と「『俺の妹がこんなに可愛いわけがない』とやり直す中学英語」をプレゼントしてもらいました

こんな大きなものAmazonで頼んでないなあと思ったら贈られててビックリしました名前は公開していいのかわからないので伏せますありがとうございます! pic.twitter.com/8D8uySYX31 — エヌユル (@ncaq) 2017年8月18日 ちなみに私のAmazonアカウントは公開はしていましたが,リンクは貼ってませんでした.これを機にフッターに書いておくことにしました. 明利酒類 梅香 百年梅酒 Amazon.co.jp: 明利酒類 梅香 百年梅酒 瓶 720ml: 食品・飲料・お酒 美味しいです.お勧めの飲み方がロックだったのでロックで飲んでいます. 前に初めて飲んだ梅酒と違い,なんだか濃厚ですね,それにブランデーを含んでいるのが味に変化を与えていますね. 飲みながら書いてるので酔ってきました. 俺の妹がこんなに可愛いわけがない』とやり直す中学英語 『俺の妹がこんなに可愛いわけがない』とやり直す中学英語 | 明慶 徹 |本 | 通販 | Amazon 以前薦められた時にほしい物リストに入れておいたので,プレゼントしてもらいました. これを機に中学英語をもう

就活したくない 仕事したくない 進学したくない 存在したくない 死にたい

愚痴. 今日は14:30頃に起床しました.何もやりたくなかったからゴロゴロしながらtwitterを見ていました. 精神障害者の就活ツイートを見て精神がやられた 16:00頃に流れてきたツイートを見ました. いま、生まれて初めて発達障害者として障害者枠の就活をしてるんだけど、健常者だった頃が信じられない程書類選考で落とされますね。契約社員すら受からない。本当にびっくりした。自分で言うのもアレだけど、それなりの学歴だし、障害者手帳の取得前はそれなりの企業に居たんですよ。 — にゃかがわりょうじ (@nyakagawa_r) 2017年8月16日 障害者雇用促進法では「企業は障害者を従業員全体の2%以上雇用しなければならない」と決まってるんですが、その「内訳」は自由なんですよね。だからどの企業も比較的障害の軽い身体障害者だけを採用するんです。「外国人の雇用が義務化されたので白人だけ雇用している」みたいなもんです。 — にゃかがわりょうじ (@nyakagawa_r) 2017年8月16日 このツイートを見て強く共感しました. 私の親含めて,周囲の人達は障害者枠の就活が楽だと

keterでデプロイした場合yesodアプリケーションが生成するURLがhttpsではなくhttpになってしまう問題を解決しました

yesodアプリのketerへの切り替えを試しましたが,icuライブラリのバージョンが一致せず,静的リンクもできなかったので,切り替えができませんでした - ncaqの続きです. 自分の問題解決のために時系列順に書き殴ったメモなので纏まっていません.ご了承下さい. httpsがhttpになってしまう harendra-kumar/unicode-transforms: Fast Unicode normalization in Haskellを使うことによってICUライブラリへの依存を消滅させました.なので,ubuntuにデプロイすることが出来るようになりました. そこで,デプロイしてみたのですが,何故かyesodのstaticファイルが全てhttpで配信されるようになってしまいました. アプリケーションはhttpsで配信されるので,混在コンテンツのエラーでscriptファイルが読み込まれなくなってしまいました. URLに直にアクセスすると応答するので,配信自体は上手く行っているのに,何故かscript srcのリンクがhttpsではなくhttpになってしまっているのが原因のようです

yesodアプリのketerへの切り替えを試しましたが,icuライブラリのバージョンが一致せず,静的リンクもできなかったので,切り替えができませんでした

問題解決を目指したログですが,問題は解決できませんでした. keterへの切り替えを試してみる 自作のyesodアプリケーションが度々落ちる状況にあり,これがとてもストレスになり,死にたい. haskell - Applications written by Yesod sometimes stop responding - Stack Overflow 試しにnginxとsystemdを使った構成からketerを使った自前ビルドをしない構成に切り替えを試してみることにしました. nginxを介さずにwarpが通信をすることで負荷が軽減されたり想定通りの動きになるかもしれません,期待します. そしてketerの環境を整えてstack exec -- yesod keterでデプロイしてみたらエラー.ログを見ると, /opt/keter/temp/application-2/dist/bin/application: error while loading shared libraries: libicuuc.so.58: cannot open shared object file:

Half-Life 2をクリアしました

Half-Life 2をプレイし始めました - ncaq プレイ時間 13時間. 環境 Steam(GNU/Linux). 難易度 設定: 簡単 体感: 難しい 感想 FPSって面白いですね. 武器を元に敵を倒していくことには爽快感があります. 何度か進行に詰まって攻略を見ることになってしまいましたが,それでも面白かったです. あまりにも劇中でストーリーの内容が語られなかったので,ストーリー進行がプレイ中にわからなかったのが難点ですね.もっと私の頭の回転が早ければ,すっと入ってきたのかもしれませんが…仕方がないのでニコニコ大百科などを見て補完しましたが. それでも十分面白かったので,続けてHalf-Life 2: Episode OneとHalf-Life 2: Episode Twoもプレイしようと思います.

映画『ジョジョの奇妙な冒険 ダイヤモンドは砕けない 第一章』を観てきました

映画『ジョジョの奇妙な冒険 ダイヤモンドは砕けない 第一章』公式サイト 一応ネタバレ注意. 気分が塞ぎこんでいたので,衝動的に映画を見に行こうと思ってその日のうちに出かけてきました. 爆アド手帳こと精神障害者保健福祉手帳による障害者割引で同伴者一名まで1000円になりますし.ちなみに私の手帳の色は水色です. 映画館はユナイテッド・シネマ浦和 | 浦和パルコ6F | 映画館 良かった点 スタンドのCGの出来は普通に良かった 場所が杜王町らしかった 各登場人物の外見特徴をそれなりに掴んで実写に落とし込んでいた 東方朋子,虹村形兆,虹村億泰がかなりそれらしかった 設定改変は主に尺の都合だったのでそんなに文句はない ジョジョを初めて観る人が混乱しないように上手く補完やぼかしをしている 悪かった点 CMが長すぎる 映画の内容とは関係ないのですが,CMが長すぎて,始まるのに15分もかかって辟易としました. 承太郎が年齢的に無理がある データ/年齢早見表/editor - ジョジョの疑問スレ まとめ Wiki*によると,4部時点での空条承太郎の年齢は28歳です. 41歳の伊勢谷友介

Half-Life 2をプレイし始めました

SteamによるセールでPortal2などとパックにされてたので購入しましたが,今まで遊ばずにずっと積みゲーになっていました. 積んでた理由は前作Half-Lifeをクリアするのが困難だったためです. 敵が強いとかそういうことが原因ではなく,道に迷って進めずにクリアできなかった.私は方向音痴なのです. その上Half-Lifeは精々NINTENDO64レベルのグラフィック精細しか持っていないため,これが何を引き起こすかというと,3D酔いが発生します. そういう訳で,前作Half-Lifeをクリアしていなかったため,Half-Life 2もプレイしていませんでした. しかしふと思い立ってプレイしてみたらこれが結構面白い.Soruce Engineによるグラフィックは酔いを発生させない程度には精細ですし,ゲーム内容も面白い. 別に前作をクリアしてなくてもあまり繋がりはないので問題はありませんでした. 時々進めなくなるので攻略を見たりしますが. 当初はGNU/Linuxで起動してもウインドウが表示されなかったのでWindowsでプレイしていましたが,xmonadとの相性問題でした.ArchW

JavaScriptのデータ通信,form,fetchとFormData

JavaScriptでデータ通信する時に最近考えることが多いのでメモしておこうかなと思います. formにデータを突っ込んでsubmitする formを取り出してsubmitメソッドを呼び出す方法. formに既に入っている情報で足りない時はinput要素をformに足してやります. const element = document.createElement("input"); element.name = name; element.value = value; form.appendChild(element); もともとフレームワークがformにCSRF対策のtokenとか入れてると面倒が少ない.formベースで作っておくとJavaScript使わない方式にも変えやすい. formの送信先がredirect先を指定している場合に自動でリダイレクトしてくれる. 送信後のページの再読み込みが自動で行われる. FormDataを生成してfetchする ページを最読み込みさせてはいけない場合(入力中の<textarea>の内容を保持したままにし

これからのHaskellプロジェクトではcabalではなくpackage.yaml(hpack)を使いましょう

sol/hpack: hpack: An alternative format for Haskell packages hpackとは hpackとは,cabalファイルを生成してくれるツールです. package.yamlファイルからcabalファイルを生成します. JavaScriptに対するAltJSのようなものです. hpackは何が良いのか yamlである hpackのフォーマットであるpackage.yamlはyamlフォーマットです. 独自のフォーマットを採用しているcabalとは違い,様々なエディタが普通に対応しており,プログラムからも扱いやすくなっています. ボイラープレートを自動生成してくれる default-language: Haskell2010のような現代では当たり前の記述を自動生成してくれるため,わざわざ書かなくて済むようになります. exposed-modulesを自動生成してくれる cabalではexportするモジュールを全てlibraryのexposed-modulesに書かなくてはいけませんでした. hpackでは librar

try-pandoc-with-fileという,markdownをPDFなどに変換するwebサービスを書きました

try pandoc with file pandoc PandocというHaskellで書かれたソフトウェアがあります. これはmarkdown・rst・HTML・Orgなどの豊富な入力を取り,HTML・PDF・Docxなどに変換出来るツールです. 参考:Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association 超便利で,いつも使っています. というか,このサイト自体Hakyllで作られているので,ガッツリpandocに依存しています. web さて,これをインストールせずにweb上から使えるサービスはあるのでしょうか,あります. Try pandoc! しかし,このTry pandoc!はHTMLや\(\LaTeX\)への変換はサポートしていますが,PDFやWordなどのテキストで表せないバイナリの出力はサポートしていません. pandocのインストールはstack install pandocで簡単にできるので,pandocのインストールに手間取るような人が\(\LaTeX\)のインストールが出来るとは到底思えず,こ

haskellプログラムがメモリを食いまくって落ちていたのはghcに-O0を指定していたからだった

テストコードでも-O0はやめよう. yesod-testがメモリを食いまくる 今,私はYesodでWebアプリケーションを書いていて,まだseleniumを導入してなかったので,yesod-testで大きいサイズ(100MBぐらい)のファイルを大量に投稿するというテストを書く必要がありました. しかし,そのテストを実行して,testプログラムがファイルを投稿すると,メモリを10GB以上余裕で消費して,20GB取ってるswapすら超越し,OOM killerが発動したり,segvしてしまい困っていました. ソースコードを追ってみると,yesod-testはファイルの中身をByteStringで保持しているようでした. しかし,確かに大型のファイルを投稿するのですが,ちゃんとリソースを開放していればファイルサイズ程度しかメモリを消費しないようになっているはずです. スリープを挟んでみたり,performGCを挟んでみましたが,ダメでした. プロファイリングを有効にしてビルド とりあえず測定してみるべきだと思ったので,stackを使った測定の方法を調べました. 普通にstack tes

入院を目標にTOEICのスコアを265から500に上げたいと思います

入院を目標にする あまりのTOEICの点数の悪さと,就職活動による欝就職活動で鬱病が悪化した - ncaqで大学院進学を一度は諦めましたが,躁転してなんかいけそうな気がしてきました. 躁転したまま入院したいと思います. 少なくとも修士は生涯年収的に採算が取れるはず 統計上修士は取ってる人のほうが生涯年収が高くなるそうです. まあ,元々の家庭環境の違いが関係してそうですが…これで「少なくとも修士は取らせてくれ」と親を説得してみました. 出来れば博士号を取りたい 博士号を取りたい. 私の能力で取れるか全く不明ですが,取りたいです. その能力の見極めをするために,まずは博士前期課程をこなす必要があるでしょう. モラトリアムを延長したい 就活というものに脳を破壊されたので社会に暫く近寄りたくないです. 無職よりは学生やってる方が多少マシな気がします. 狙う大学院 さいたま周辺(実家から通える) 国立で学費が安い この条件を満たす大学院にアタックしようと思っています. 詳細を書きたいところですが,就職活動のレポートを書いて怒られが発生した経験から学び,具体的にブログに書くこ

一体型PCであるiMac Proは本当にコスパが悪いのか?似た自作マシンで試算して検証してみた

この記事はiMac Proが発売するどころか詳細が発表される以前に書かれたものです.現在参照するのには適していません. iMac Proはコスパが悪いか? iMac Pro - Apple(日本)が発表されましたね. 私はGentoo GNU/Linuxユーザで,ラップトップはDellを使用して,デスクトップは組み立てる人です.MacはGNU/Linux向けのドライバが中々提供されないため基本的に使いません. しかし,学校などのコミュニティでMacユーザの手助けなどをしなければいけないため,Macの動向はきちんとチェックしておく必要があります. だから発表されたマシンを見ていたのですが,iMac Proには驚かされました.まさかMac Proを放置して,プロ向けの高級マシンを一体型で出してくるとは思いませんでした. 一体型には様々な問題がありますが,一番の問題点はコスパが悪いということです. しかし,はてなブックマークのコメントを見ていると,めちゃくちゃ安いという主張が行われていました. iMac Pro - Apple(日本) このスペックで、4999ドルか。めちゃくちゃ安いな

Nexus 6P(angler)にLineageOSをインストール

Pixelを買おうと思ってましたが,日本で発売されずに難民になっていました. 私の使っていたNexus 5は酷使されているため,バッテリーのヘタレ具合が酷く,ケーブル端子がバカになっていて接続が頻繁に切れ,メインメモリも足りないという状態で,不満だらけでした. そこでフォロワーさんがNexus 6Pを売ってくれる(大きすぎたらしい)という話があったので,これを機会に数年遅れで乗り換えることにしました. 使用するのは標準OSでも良いかなあと思いましたが,ボタンのカスタマイズが標準ROMでは出来なかったので,やはりLineageOSをインストールすることになりました. Install LineageOS on angler | LineageOS Wikiを参考にしました. adbで認識する必要があるわけですが,そこで躓きました.lsusbで認識される端末名はNexus 4ですし(そこはNexus 5も同じ),adb devicesでデバイス名が出ない. fastbootで認識されれば良いかと思って,通常の手順で標準OSを最低限セットアップして,開発者ツールを開き,OEMアンロックを許可し

南山まさかず(minamiyama1994)の話

要約と注意 この文章の主張内容の要約は わからないことがわからないままでつらい 友人の死を納得して受け入れられなかった 自殺者が居なかったことにされるのはつらい 自殺はやめてくれ ということです. 誰かを誹謗中傷したり,私がわからないことを邪推することを目的とするものではありません. 私は何もわかっていません. 南山まさかず 南山まさかずのブログを見ればわかる通り,C++とHaskellが好きなプログラマです. 今でもプログラミング関係で検索をすると彼のブログやminamiyama1994 - Qiitaがよくひっかかります. 大学に行ったり仕事をしたり仕事をやめたりしていたそうです. 2014年8月23日に西武新宿線で自殺しました. エヌユル 筆者です. 南山まさかずとは C++が好き Haskellが好き Yesodが好き TAPLが好き Twitterとはてなブックマークをしている 性格が似てる気がする などの共通点があり,Twitter上である程度絡みがありました. ネット以外で南山まさかずと会ったことはありません. 南山まさかずが自殺した時は大学が夏休みで,

systemd-233-r1にアップデートすると,systemd-hostnamedが,/var/tmpを/tmp/へのシンボリックリンクとしている場合,クラッシュします

systemd[12345]: Failed at step NAMESPACE spawning /usr/sbin/httpd: Permission denied このようなエラーが出ます. 5月 09 09:34:46 karen sudo[17421]: ncaq : TTY=pts/1 ; PWD=/usr/lib64/systemd/system ; USER=root ; COMMAND=/usr/bin/systemctl restart systemd-hostnamed.service 5月 09 09:34:46 karen sudo[17421]: pam_unix(sudo:session): session opened for user root by ncaq(uid=0) 5月 09 09:34:46 karen sudo[17421]: pam_systemd(sudo:session): Cannot create session: Already running in a session 5月 09 09:34:46 karen sys

ギークハウスZEROで人生へのアドバイスを受けてきました,面接を公開するのはやめよう

ドワンゴ1次面接に行ってきました,面接内容を書き起こして,反省も書きます - ncaq 普通の人間はリアルの会話というのは非公開だと思っているので,それを公開すると不快に思います.だから,面接を公開すると普通の人というものは不愉快に思うようです. 私は小学校にも中学校にも馴染めず,ずっとTwitterにハマっていたので,会話は公開情報という誤った認識を持っていました. 損害を与えるとか与えないとかそういう話ではなく,人を不快にさせるのはやめておいた方が良いです. 私は前例が無かったので怒られるか怒られないかは半々と言った所だと考えていましたが,以下の私の記事を元に作ったまとめサイトのコメントを見ると,大量の怒られが発生するようです. 就活生がドワンゴの1次面接内容をブログで公開 選考の「公平性」めぐり議論に | キャリコネニュース ドワンゴの面接内容を公開した就活生に物議! → 人事部長も釘を刺す事態に:はちま起稿 就活性がドワンゴの面接内容をブログで公開し物議! お前らどう思う? : オレ的ゲーム速報@刃 つぶやき一覧 | 就活生が面接内容公開、議論に | mixiニュース 前例

ドワンゴの選考に2次面接で落ちました,そろそろ就活を終わりにしたいです

ドワンゴ1次面接に行ってきました,面接内容を書き起こして,反省も書きます - ncaq ドワンゴの選考に2次面接で落ちました. 面接内容を口外しないことは誓ったのでそれ以外に言うことはありません. 以下は愚痴.読む価値はいつにも増してないです. 就活疲れた,そろそろ終わりにしたい 私は根がネガティブで普通に会話しててもナチュラルに「死にたい」とか「つらい」とか「私は何もできない」とか「人類が絶滅して欲しい」が混ざるタイプです. そういう人が面接で会話をするのは耐え難い苦痛があります. 私は嘘が嫌いです.苦痛です.聞かれなかったから言わなかった,なんてのも立派な嘘の1つだと思っています. 最初に自己紹介をしろという時点でもう無理です.頑張って普通な感じ(過去の面接記事みたいな)の自己紹介をしようとしていますが,本当は死にたいとか私はゴミだとか,そういう思考が頭の中を渦巻いています. たったの4社しか落ちてないのに限界になるなんて世の中の平均からすれば精神が軟弱すぎると思いますが,もはや限界です.面接をしたくない,よく思われようとする会話をしたくない. 障害年金がおりない 今の医師曰

エゴサーチのススメ

最近web上でボコボコに批判されることが多いのでエゴサーチにハマりました. Google アラート Google アラート - ウェブ上の面白い新着コンテンツをチェックに自分の名前を複数登録します. 私の場合は Haaaa_N ncaq エヌユル 実名 ですね,me on the webなんて欄があるあたりエゴサーチ推奨です. これで頻度を1週間に1度程度,ダイジェスト設定にすればメールで通知してくれます.しかしこれ,自分のサイトやはてなブックマークが引っかかるばかりであまり役に立ちません. Twitter twitterでの快適なエゴサーチ方法を書きます.意外と知らない人が多いようですね. まず自分のハンドルネームをORで区切って入力します.私の場合はncaq OR エヌユルですね. そのままだと名前欄も検索に引っかかってしまうので,-fromクエリを使って自分の発言を除外します.私の場合は-from:ncaqですね. 私宛のリプライも,既にtwitterの通知で見れるため,-toと-@を使って除外します.の場合は-to:ncaq -@ncaqですね. そして,ランダムに生

私は自己肯定感が殆どなく,それは致命的なことですが,社会に希望は持っているのかもしれない

私は 自己肯定感がない 自尊心がない 自分に自信がない 自己肯定感が無いことが就職活動で一番困難 私は自己肯定感が殆ど無い.私の私へつける評価は「東芝の経営陣よりはマシ」というぐらい. 本当は自分に問題があることなど,とっくに分かっています.それを鬱病状態のまま考えると,自殺したくなるから,防衛機制として攻撃に走っているだけです. だって,私がまともに落ちた会社はまだ3社しかない. それはそれとしてマクロで見ると,就活自殺者が年間100人以上も居るのはおかしいし,就活ビジネスは人の生き血を啜る殺人ビジネスだという考えは全く変わっていませんが. 私は仕事がしたくない 何故ならば,私と仕事をする人がかわいそう だって,私は無能なのだから こんなことを考えているのに,就職活動をするのは狂っています.狂った行為をし続けていれば,即ち狂人となり,精神を病み倒れるのも必然であろう. 加えて私は嘘をつくことに人より多く苦痛を感じるタイプのようです.これで嘘をつくことをなんとも思わなければ,会社から金を奪ってやるぜーという気持ちで何一つ罪悪感を覚えずに就職活動が出来たのですが. ドワンゴ

ドワンゴ1次面接に行ってきました,面接内容を書き起こして,反省も書きます

一応録音していた面接内容を書き起こし,していますが,かなりいい加減です.相槌などは混ぜるのが難しく,仕方ないので削除しています. 自分の発言文章がぐちゃぐちゃなのは,なるべくそのまま書き起こしを行っているからです.読みづらいでしょうが,ご了承ください. また,音質が悪いため,かなり聞き取れない部分があるので,そこにはunclearをつけています.伏せたいところもunclear. 録音していたスマートフォンを右ポケットに入れていた関係上,左側にいた方の発言はあんまり聞き取れなくなっています.そういう関係で,殆ど自分の発言の書き起こしのみになっています. 相手の発言は殆ど聞けないのでほぼ思い出し書きになっています.なので,不正確な点が数多く存在します. ちなみに録音許可も公開許可も取り忘れました. 面接官は2名で,およそ30分の面接でした. 面接内容 よろしくお願いします. よろしくお願いします. こんにちは,よろしくお願いします.unclearさんで間違いないですね.本日は株式会社ドワンゴのエンジニア採用の面接にお越しいただき,ありがとうございます.簡単に自己紹介だけさせてください.私

perl6の速度が現在どれぐらいなのか気になったのでマイクロベンチマークを取ってみました

perl6はまだまだ開発途上です.この記事はすぐに古くなるでしょう. 動機 googleがpython2からpython3に移行せずにpython2だけ対応したライブラリをリリースしやがる. Google「新しいDeepNet系のライブラリ出したで https://t.co/kEsEvS4kLy」俺「どうせまたPython2系のみ対応とかやろ?w」俺「…マジだった………」 — ばんくし (@vaaaaanquish) 2017年4月10日 python3に移行するだけでそこそこ速くなるのに勿体無いですね,いや,今後アップデートのない言語を使う事自体がまず論外なんですが… そんなことを考えていると,そう言えばperlの影響を受けたrubyの影響を受けたperl6があるじゃないか,python3を飛び越してperl6に移行すれば良いのでは?なんてアイデアが浮かんできました. そこで,とりあえずperl6って今現在の所,速度はどれぐらいなんだろうなあと思い,少し計測してみることにしました. あくまで簡易的でいい加減な計測であることを御容赦願いたい. レギュレーション 大量の整数

エビリファイを投与された結果アカシジアによって静座不能になり地獄に居ました

エビリファイのイラスト(いらすとやからの合成) エビリファイを飲んで,ちょっとでも変なことが起きたらすぐに病院に相談しなおしましょう.まず電話でも良いです. ちょっと前に起きたことを思い出しながら書いているので,いくつか間違いが存在するかもしれませんが,御容赦願います.自分のtwitterを見返せば日時がわかることに気がつきました,天才かな. 3月28日 心療内科に行って「最近死にたい死にたい言ってベッドで泣き叫んでいました」という話をしたら,エビリファイ5mgを処方されました. この時点で他に飲んでいた薬は以下です. フルボキサミン(ルボックス) スルピリド ストラテラ ユーロジン(エスタゾラム) この箇所において許容できない誤記(ユーロジンとロゼレムを書き間違える)がありました,お詫び申し上げます.ユーロジンとロゼレムは睡眠薬という点で一致しており,昔はロゼレムを処方されていたとので書き間違いを引き起こしたようです.おくすり手帳をきちんと確認するべきでした. 3月29日 その日には大学の履修ガイダンス・健康診断があったのですが,行きの電車でパニック障害のようなものが起

Rustは実行時オーバーヘッドを生じさせないという意味でやっと出てきたC++の後継言語です

RustをOCamlなどの仲間だと勘違いしている人は居るでしょうか.私がそうでした.しかしRustはC++の後継言語です. C++は言語レベルのGCを持ちません.つまり実行時オーバーヘッドはプログラマが選択しない限り発生しません. C++の問題点 C++の有名な問題点は,ポインタの寿命が把握できないことです. #include <iostream> #include <memory> #include <vector> int main() { std::vector<int> v = {0}; auto p = v.begin(); for(int i = 1; i < 100; ++i) { v.push_back(i); } std::cout << *p << std::endl; } このコードはおそらく0を出力してくれません.それはvectorがメモリ上で再確保されて…みなさん原理は知っていますよね. もちろんC++でもこの現象を回避す

死にたいほど痛い肩こりが帯状疱疹(ヘルペス)でした

帯状疱疹とは水痘ウイルスが体内で暴れ出して猛烈な痛みを伴う病気です. 知覚神経の走行に一致して、皮疹出現の数日前から違和感や疼痛が出現することが多い(皮疹と同時、或いは出現後の事もある)。その後一般に帯状に紅色丘疹・浮腫性紅斑・紅暈を伴う小水疱が列序性に出現し、疼痛やそう痒感を伴う。[5]。神経痛・神経障害のみで皮疹が出ないという病態(zoster sine herpete)もある。2週間以上治癒しない場合、免疫機能の異常が考えられる。 60歳代を中心に50歳代〜70歳代に多くみられるが、過労やストレスが引き金で若い人に発症することもある。年齢が若いから軽症ですむとはかぎらず、その患者の抵抗力により重症度が決定される。初期に軽症であっても、無理をすることでいくらでも重症化する疾患である。 帯状疱疹 - Wikipedia 寝込んでいたら痛みがやってきた 就職活動で鬱病が悪化した - ncaqを読んでくれればわかるように,私は鬱病でしばらく寝込んでいました. その後,ものすごい痛みが肩こりとして,頭痛や手のしびれを伴ってやって来ました. 接骨院などに行ってみました 最初は痛みも

newspicksと欝の波がヤバかったので,就職活動で鬱病が悪化した,へのコメント返しを書きました

就職活動で鬱病が悪化した - ncaqへのコメント返しです. 鬱が多少回復してきたと思ったら時間帯の影響かウオーってなってきて電車内で叫びたくなってきたので電車内で代わりに追記しました.途中から冷めてきましたが,電車内で殆ど書いたのでせっかくなので書きました. 具体的なコメントが思いつかないのは言及していませんが割と読んでいます. 記事に追記しようかと思いましたが,結構な分量になったので分けました. 電話 起きてて携帯のバッテリーが持ってたら出るので,どんどん電話してくれて構いませんよ. twitter 連絡してくださった方ありがとうございます.共に生きていきましょう.DMは公開しませんが,私も勇気づけられました. はてなブックマーク はてなブックマーク - 就職活動で鬱病が悪化したのでリクルートに乗り込んで社員をアレしたい netcraft3 私は就活を経験してないしメンヘラだけど何とかなってるし、就活はそんなに人生に重要じゃないよ。あと就活のデフォルト値は不採用。1回気分転換で旅に出てみるといいかも。 就活はそんなに人生に重要じゃないというのは頭に言い聞かせていて,も

私は密接なコミュニケーションで交換された情報の公開権限がハッキリしないことを理解出来ませんでした

Twitterなどの公開された場のコミュニケーションにのみのめり込み,私は密接なコミュニケーションで交換された情報の公開権限がハッキリしないことを理解出来ませんでした. また,当時私は鬱で倒れてから起き上がった直後の状態にあり,正常な判断が出来る状態にはありませんでした. 謝罪します.

就職活動で鬱病が悪化した

欝が悪化して起きていたくなくなった 就職活動 講義:数理計画法を49点で落とした そのせいでフル単を逃した 開発中のソフトウェアがうまく設計できなくてつらい 周りの人間との頭脳の差を見せつけられてつらい などの理由によって鬱病が急速に悪化しました. 2017-03-17から2017-03-20まで4日間起きていたくなくて,ずっと寝ていました.起きているとつらいという感覚が襲ってくるので,起きていたくないのです.途中から寝られなくなったので,睡眠薬を処方された量以上飲むという禁断の手段を使って睡眠を取りました.オーバードーズなんてまともな人間のやることではありません,メンヘラのやることです.はい,私はメンヘラです.次の診療でちゃんと言わなくてはいけませんね. 鬱病が進むと体調が悪くなくても 頭痛 吐き気 めまい 胸焼け 目の乾き 肩こり 激昂 憎悪 食欲の異様な減退 腹痛 ふらつき 思考能力の低下 言語機能の低下 と言った症状が出るのですね,初めて知りました.知りたくなかった. その後,この症状の一部は帯状疱疹だったことを知りました.死にたいほど痛い肩こりが帯状疱疹(ヘルペス)

Nexus5のデータが全て吹っ飛んだのでNexus5をLineageOSで再セットアップ

水没事故 うっかりNexus5を水没させてしまいました.ちゃんと乾かしてから起動したら動作はちゃんとしたのですが,何故かデータが全て吹き飛んでしまった.ストレージがやられた?復旧過程で一度データを全てwipeする作業が入った?原因はもはやよくわかりません. 大事なデータはクラウド上に置いてあるので,データが吹き飛んでも損害はないのですが,色々な再セットアップが面倒くさい.面倒くさいので,せっかくだから手順を書いておくことにします. ROMの選定 これまで惰性でCyanogenModを使っていたのですが,CyanogenModは会社ごと吹き飛んだので使うのはやめておくことにします.CyanogenModの終焉とそれから - dev:mordiford標準ROMに戻してもroot化だけしても良いのですが,そこそこの頻度で標準ROMに戻しては,機能不足などに不満を持って戻すということが多いです.それに最新のNexus 5のAndroid OSであるAndroid 6.0 MarshmallowにはSELinuxが入ってなんか色々面倒くさいみたいですね. 長いものにまかれてしまいましょう

軽量なネット用語辞書が欲しかったので,ニコニコ大百科とピクシブ百科事典の共通部分の辞書であるdic-nico-intersection-pixivを作りました

データは現在https://cdn.ncaq.net/dic-nico-intersection-pixiv.txtに置いています.良ければ使ってください. google日本語入力の辞書が貧弱なので補完したい ネット用語を変換する辞書が欲しい.純狐さんが変換できない.mozcだからダメというわけではなく,google日本語入力も対応できていないものが結構あります.東方の専門辞書とか,いちいち色々な場所を回って収集するのは面倒くさいし,更新も面倒です.それに私は記号にこだわりがあって,全角互換文字は使いたくない.正規化をしたい. ニコニコ大百科IME辞書 ニコニコ大百科IME辞書が既に存在します. しかしこれには問題点があります. 読みがなでネタをやっている記事を排除しきれていない 膨大な量なので入れるとmozcが滅茶苦茶重くなる androidだとメモリが足りない(私のnexus 5のメモリは1GB)ので最悪google日本語入力がクラッシュする これの登録数は今確認したところ200604らしいですね.およそ20万とは恐れ入りました.ニコニコ用のデータはわざわざ私が作りなおし

gentooでgnome-base/nautilus-3.22.2がビルドできなかったのを解決

ちょっと前からgentooのgnome-base/nautilus-3.22.2がビルドできず,アップデートが出来ませんでした.まあそのうち治るだろう,1つバージョンが古くても困らないし,と思って放置していましたが,しばらく経っても治らなかったので,原因を真面目に調査してみることにしました. ビルドエラー エラーメッセージは In file included from nautilus-file-undo-operations.c:35:0: nautilus-batch-rename-utilities.h:24:28: fatal error: tracker-sparql.h: No such file or directory 原因はtracker-sparql.hがないことみたいですね. ファイルの調査 portageでファイルが不足した時には超便利なwebサービスがあってPortage File Listというサービスにファイル名を入力してやれば,ファイルを入れてくれるパッケージを出してくれます. これによるとまあ予想通りですがtracker-sparql.hはa

stackageにアプリケーションをアップロードしました

だいぶ前に作った haskell-import-graph :: Stackage Server haskellのimportのグラフ関係をgraphvizで出力する uniq-deep :: Stackage Server unixのuniqコマンドは隣り合ってない重複行を削除してくれないので削除する というアプリケーションをstackageにアップロードしました.色んな環境にインストールするのに,stackでインストールできないので不便だからです. 葛藤 こんな自分しか使わないようなアプリケーションを天下のstackageにアップロードして良いのか?という葛藤がありました.結論から言うとそれは杞憂でした.stackageの認証プロセスはほぼ完全に自動化されていて,トラブルが起きないと人を煩わせることもありません.そんなに悩むこともないでしょう. 手順 手順はもう色んな場所に書かれていますが,一応書いておきます. アップロードしたいパッケージをちゃんとstackでビルドできるようにしておく githubのstackageをforkする build-constraint

jcomの 回線遅く 不満持ち サポートに連絡したら改善 したけどやはり遅くて不満

半年前ぐらいにマンションの回線がucomからjcomに切り替わりました.どうも価格が安いということで決定されたらしいです.マンションの管理側で決定されたことで,議決権を持たないしがない子供の私に反論を差し込む余地はありませんでした… jcom回線が遅い 別にIPアドレスなどに対してこだわりはないので,品質が同じなら構いはしないのですが,その肝心の品質がひどい. mikutterがtwitterのiconの読み込みに度々失敗する google検索に数秒かかる ホストが分散しているwebサイトを表示するのに1分はかかる こんな状況にありました. しかし切り替わってからしばらくは,私は大学に行って忙しかったので,だいたいの作業は大学でラップトップで行い,家ではただひたすら寝てばかりいたので,嫌だなあと思いつつも積極的に改善しようとはしませんでした.ですが,大学が春休みになって,作業を家で行うようになると,これがものすごいストレスになりました.google検索に数秒かかる回線で作業をする苦痛は耐え難いです. GNU/LinuxのDNSクライアントにキャッシュ機能が無いのが原因かと思いdn

尊敬するプログラマと口実を羅列する

1年半ほど前に,大学の先輩に「尊敬するプログラマって誰か居る?」的なことを聞かれたことがありました.その時は「私はソフトウェアの凄さには興味はあるけれど,誰が作ったかなんてあまり興味はないし,今使ってるソフトウェアは大抵複数人の共同作業で作られているので,特定の誰かを上げるのは難しいですね」と答えました.今でもこの考えはあまり変わってないですが,この答えってすごくアスペルガーっぽいですし,単に世間話的にこの質問を投げかけた先輩は話を広げられなくてさぞかし困ったことでしょう. もう一度似たような質問を投げかけられた時用に,適当なリストと尊敬する理由を書いておくことにしました.しかし実際に書いてみると,あまりにも偉大な人たちの業績を私ごときが書くのはなんだか気恥ずかしくて,2人で止まってしまった.まあ2人も居れば話の種としては十分でしょう.私が尊敬するポイントが具体的かどうかの方が重要. ケン・トンプソン UNIXとC言語の開発者であり,QEDとUTF-8の開発者でもあります.「私はプログラマです」と名乗ることを見習いたいです.プログラマを見下す一部の日立人達を見るたびに,この人のことを

bootstrap-v4.0.0-alpha.6のリリースノートハイライトの日本語訳

Release v4.0.0-alpha.6 · twbs/bootstrapの日本語訳です.bootstrap-flex.scssが消滅してビルドできなくなって30分悩んだので初翻訳です.google翻訳を頼っています.超意訳.我英語力皆無. 翻訳 あけましておめでとうございます!これはBootstrap 4の最終的なアルファです. 詳細 v4 Alpha 6 ship list · Issue #20939 · twbs/bootstrap v4.0.0-alpha.6 Milestone ハイライト Flexboxがデフォルトでオンになりました,フォールバックはありません!これはIE9のサポートを廃止したことを意味しますが,コードベースを大幅に節約し,コンポーネントを簡素化し,カスタマイズを改善しました.これはflexboxのおかげです. navbarがflexboxを使って再構築されました,様々な構造上の変更が生じます,しかし柔軟性とカスタマイズ性が向上します.ドキュメント,コードスニペット,オプションも更新しました.全てのサンプルのナビゲーションバーは最新のマー

2015年06月の,TypeScriptで世界各国の人口を表すインフォグラフィックスを作成するレポートを見直して自己評価

背景 2015年06月の,簡単なアドレス帳のレポートを見直して,web技術と自分のwebに対する姿勢の変化を観察する - ncaqの続きです. オブジェクト指向技術の第2回レポートでは世界各国の人口を表すインフォグラフィックスを作成するという課題が出ました. おそらく私以外全員の受講生はネイティブのJavaScriptを使っていたのですが,その時期は私はAltJSにハマっていたので「TypeScriptを使って良いですか?」という問い掛けをして,許可を貰いました. なぜTypeScriptなのかと言うと,当時Fay,Dart,JSXは試したけれど,TypeScriptは試していなかったからです. この記事も前回と同じく,レポートの内容を改訂して書いているので,一部不自然な文章になっています.ご了承ください.本物のレポートには,先生の課題条件指定文が全文引用で載っているのですが,それをそのまま載せるのは気が引けるんですよね.引用の範囲に収まるので著作権的には問題とは思うのですが. ソースコード 当時TypeScriptに@typesなんてものは存在しなかったので,referenc

2015年06月の,簡単なアドレス帳のレポートを見直して,web技術と自分のwebに対する姿勢の変化を観察する

背景 2015年06月のオブジェクト指向技術の第1回レポートで,簡単なアドレス帳というものを書きました.私がまともにwebを学ぶ以前に書いたものなので,公開するのは気恥ずかしいですが,死蔵しておくのも勿体ないので,見直すことでweb技術と自分のwebに対する姿勢の変化を観察したいと思います. 手抜きのためにレポートの内容を改訂して書いているので,一部不自然な文章になっています.ご了承ください. 最終的なソースコード 簡単なアドレス帳の実装 簡単なアドレス帳を作る. 何故jQueryを使っているか 私はjQueryが嫌いで,なるべく使いたいとは思っていませんでしたが,レポートの指定としてjQueryを使うことというものがあったので,仕方なく使いました. しかし,まだまだjQueryを使っているWebページは多いため,新規開発にjQueryが不要になっても,アップデートにjQueryの知識は依然必要となります. なので,そこまでモチベーチョンは下がりませんでした. XSS対策 この課題の裏ポイントはXSS対策だと予想しました.ユーザが自由にデータを入力できるWebアプリケ

asyncとawaitの由来を調べたところ,asyncとawaitのaは関係なかったことがわかりました,英語はクソ

背景 「awaitってなんだよ」という気持ちがある日寝てる私に降ってきました. asyncの由来 asyncはsynchronize(同期する),synchronization(同期すること)を省略したsyncに,ギリシャ語由来の接頭辞a-をくっつけて,async(同期しない)となります. また、英語の〈a-〉という接頭辞はいろいろな意味がありますが、その中の一つに、ギリシャ語の〈a-〉(母音またはhの前ではan-)に由来して、「無」「ない」という否定を表すものがあります。 第29回 食べることと話すこと (2) - 語源でゴキゲン prefix meaning "not, without," from Greek Online Etymology Dictionary じゃあawaitの由来は? そうなるとawaitは一体どうなるんだということになります.wait(待つ)にa-がついてるのでawait(待たない)?いやいや,プログラミング上の意味的に考えてawait(待つ)だろう,どういうことだよ. まあ,そんな疑問は辞書を辿ればすぐに解決するも

発達障害者です,ウェクスラー成人知能検査(IQテスト,通称WAIS)の詳細な結果を貰ってきました,本人が自己分析を行います

背景 私も就職活動とやらをしなければならないことになりまして,自己分析とやらをしなければならないらしいです.しかし,私は鬱病を患っているので,自分で自己分析を行うとどんどん自殺欲求が深まってしまいます. そこで,せっかく数年前に心療内科で知能検査を行ったことがあるので,その詳細な内容を貰ってくることにしました.先生は「渡すようなものじゃないんだけどなあ…」と言いながらも渡してくれました.これは心療内科の専門のアシスタントと一対一で行うもので,どこぞの得体のしれない団体の適性検査よりはよほど信頼できるものです. せっかくなのでweb上で公開して,本人のコメント付きで自己分析を行います.数年前のテストなので,今の状況とは乖離しているかもしれませんが,初回のテストのほうが対策ができない分信頼もあるでしょう. 結果 それぞれの項目の意味はウェクスラー成人知能検査 - Wikipediaが参考になるのではないでしょうか. IQ, 群指数 IQ, 群指数 VIQ(128) PIQ(90) FIQ(112) この数値だけは昔から知っていました. 言語理解(129) 知覚統合(97)

最初に学ぶプログラミング言語なんて何でも良いだろ,ゲームのスキルビルドじゃないんだから

背景 常々こういった話題について考えていたことを文章にしたいと思っていました.そこに「最初に学ぶべきプログラミング言語」 - mizchi's blogが投稿されたので便乗します. プログラミングスキルに上限なんてない ゲームのスキルビルドは大体上限があります.だいたいのRPGではスキルを全て取ることはできません.ポケモンだって振れる努力値は510で上限になってしまいました. だからというわけじゃないだろうけれど,プログラミングの学習を始める前に「どの言語を覚えようか」なんてことを気にする人が多くてイライラします.そんなものを気にする必要はありません.思い付きで始めて「これわけわかんないわ」と思ったら放置すればよいのです. プログラミング言語には好みがある プログラミング言語には当然好みがあり,個人の学習のしやすさも異なります.いろんな言語を試してみて,自分に合う言語を探したほうが良いのではないでしょうか? また,他の言語での標準的な考えを取り入れることで,他の言語を理解するきっかけにも繋がります. Lispで再帰を学ぶ C言語のポインタでJavaの参照の正体を知る

xinputコマンドを使ってラップトップPCのタッチパッドの無効有効を即座に切り替える

背景 まず、キーボードを入力するとき、少し手のひらがタッチパッドに触れるとカーソルが動いてしまう。この問題について、ThinkPadを所有している(使っている)知り合いに尋ねたところ、「そもそもトラックパッドは無効化している」という返答がほとんどだった。 さよならMac | めがねをかけるんだ タッチパッドがクソ:タッチパッドがボタンと一体になっているため、 Thinkpad 伝統のトラックポイントを使うと、認識がとても怪しくなる。そしてでかいため、指が触れて誤操作の原因になってしまう。これについては、 Mac から影響を受けたのではないかと考えている。実際に、タッチパッドのみで使っていると驚くほど Mac ユーザーにとって違和感がない。そこを従来のトラックポイントと無理に合わせようとしたため、中途半端になってしまったと思われる。実際、 X220 を使う際はトラックポイントを使っているのだが、 X240 では全く使っていない。 さよなら Mac - 表道具 そもそもThinkpadのタッチパッドは基本無効化するものなのでどうでもいい。まあそのスペース邪魔なんだよ、とは思いま

専修大学のhttpによる認証を必要とする腐ったwifiに,NetworkManagerのdispatcherを使って自動ログインする

NetworkManagerを開発しているGnomeのロゴ 2017年度より,専修大学のwifiにもWPAエンタープライズ認証が導入されました.よってこの記事は早くも腐りました. 背景 2014年に専修大学に入学して,困ったことが1つありました. それは,専修大学の学内wifiSENSHUWLはまるで空港のような形でwifiの認証を行うということです. http通信に中間者攻撃をしてhttps://wcgw.senshu-u.ac.jp/cgi-bin/loginへリダイレクトするwebページを返す https://wcgw.senshu-u.ac.jp/cgi-bin/login上で学生番号と割り当てられたパスワードを入力する こういった手順で,学生は大学のwifiにログインします. 行きずりの空港ならともかく,毎日ログインする大学のwifiでこの作業を行うのは非常に面倒くさいです. さらに最近はhttpsやHSTSが普及したおかげで,中間者攻撃が通じないため,未だにhttpを使っているサイトを探さないといけません.わざわざwifiにログインするため,httpを提供し続ける

項書換えシステム記述言語maude

背景 大学の分散情報システムという講義で,maudeという項書換えシステムを使うことになったので,コードを書きました.コードを書いたので,せっかくなのでgistにuploadしました.gistにuploadしたので,せっかくなのでここで解説したいと思います. 途中から大学に提出したレポートの写しになっているので,なんだかちぐはぐです.注意してください. maude 公式サイトはThe Maude System.マニュアルはMaude Manual and Examples - The Maude SystemのHTMLのリンクを読みましょう.バージョンが上がるとURLが変わるため直接リンクは貼りません.また,wikipediaにも記事があります,誰か翻訳してください.Maude system - Wikipedia maudeの数の取り扱いはペアノの公理 - Wikipediaを直接触ることになります.ペアノの公理については型システム入門 −プログラミング言語と型の理論− | Benjamin C. Pierce, 住井 英二郎, 遠藤 侑介, 酒井 政裕, 今井 敬吾, 黒木

iijmioの契約を家族のファミリーシェアプランにまとめました

背景 これまでiijmioとは自分と父親が2人分ミニマムスタートプランで契約していました. ファミリーシェアプランを2人で使ったほうがお得なのに,何故ミニマムスタートプランを2つ契約していたのか?それは「自分がファミリーシェアプランへ変更して親の分のSIMを追加しよ!」と思っていたけれど,契約の変更は月末にならないとできないことを知らなかったので,仕方なく新規追加になっていたからです.iijmioの契約変更は月末じゃないとできないことには気をつけよう!変更するのには手数料もかかるし,そのままミニマムスタートプランでズルズル契約していました. それをなんで今になって変更したかというと,9月頃から急に自分の通信料が多くなり,ミニマムスタートプランの3GBでは物足りなくなってきたからです.父親に聞いてみたところ,父親の分の通信は結構余ってるらしいので,2000円の手数料を使ってでも変更しようと思いました.それで,今はちょうど月末なので,自分のプランを解約して,父親のプランを変更しました. 解約せずにまとめられなかったの? 無理っぽいけどまとめられないかなあ,と思ってiijmioに直接お

unixコマンドの使用頻度を計測する

背景 2015年08月に書きました. 大学で「unixコマンドの自分用のマニュアルを書け」という正直言って謎な課題が出たためです.そのためにまず自分の使っているコマンドを計測するために.zsh_historyの内容を解析することにしました.最初は当初学んでいたerlangで解析しようとしましたが,文字列操作がわけわかめで疲れてやめました. ソースコード 純粋なunixコマンドだけではなくaliasやfunctionも計測したいため,自分のncaq/.zsh.dを読み込んで,定義されてあるコマンドやaliasをまず抽出するようにしてあります.当初はzsh側でtypeで存在を確認しようと思いましたが,どう考えても重すぎるため却下.その後にhistoryのテキストを単語ごとに分割してコマンドっぽいものを抽出すれば,sudoで指定されたaliasも出て良い. 実行結果 これを書いた当時の実行結果 7357: "eix" 7150: "ll" 3803: "sudo" 2517: "p" 1739:

haskellによるLZ78の実装

背景 2015年07月の大学の講義「情報理論」で「Ziv Lempel符号について調べて解説せよ」という課題が出ました. 情報理論という名前の講義ですが,プログラミングは直接は関係していない,数学寄りの講義でした.しかし私はプログラミングで理解したほうが楽なため,LZ78 - Wikipediaによるデータ圧縮プログラムを実装してみることにしました. なぜLZ78なのか.それは適当にググってる時に出てきたwikipediaの記事の解説が丁寧でわかりやすくて,これなら自分でも実装できそうだと思ったからです. ソースコード コード解説 標準入出力を使って,オプションが-eならエンコード,-dならデコードを行う. 簡単のため,符号はAscii範囲の文字しか想定していません. 評価 実用性はありません. シリアライズが非効率 今回の目的は実用性のある圧縮ソフトウェアを作ることではなく,LZ78アルゴリズムを理解することなので,その範囲外であるデータシリアライズには全くやる気を出しておらず,haskell標準関数であるshowを使っています.これの効率は論外であり,大抵の場合L

c++によるbrainfuckの実装

背景 2015年05月に書きました. 課題の提出結果をbrainfuckで書いたら先生混乱するかなあと思って,まず同梱するための処理系を書こうと思いました. 私にとっては初めての言語処理系記述でした. ソースコード 今見返した感想 初めてにしてはそこそこうまく出来ているのではないでしょうか. メモリは巨大なテープという安直なイメージからdequeを使って自動拡張していますが,それなら連想配列を使ったほうがおそらく楽だったでしょう. それとループのネスト構造は実行時に文字列処理で強引に解決していますが,構文木を作ったほうが確実に楽でしたね.この頃は構文木という概念もよく知らずに実装していたから仕方がありませんが. 結局これで課題を提出することはありませんでした.

c++によるマージソートの自前実装

背景 2014年11月にc++で安定ソートを実装しました. 学校の課題で何らかの成績の順位付けをする必要がありました.秒数が同じ時はインデックスが小さいほうが順位が高いという指定があったため安定ソートを使う必要がありました.別に課題の指定では自前でソート関数を実装する必要はありませんでしたが,constexpr対応させたかったのでマージソートを自前で実装しました.本当に対応してるかは知りません. インターフェイスはできるだけstd::stable_sortに準じているようです. 当時の私(大学1年)はヒマそうで羨ましい.この時期に課題を適当に終わらせてなにか実用的なものを作ってれば…やめておこう,過去を悔やんでも仕方がない. ソースコード reinvention stdと名前空間を分けるためにreinvention名前空間内に定義. reinvention of the wheel → 車輪の再発明. merge マージする関数. help_stable_sort 要素数が2以下になるまで再帰してmerge. main 課題本体を解く. こんな適当な記述なのに比

haskellによるquine

haskellによるquine クワインを書くコツ 背景 2014年4月に書きました. 当時クワイン (プログラミング) - Wikipediaを知って,ちょうど暇だった. 一応wikipediaのサンプルコードは読まずに書きました. ソースコード main :: IO ()はなくても良いので,これをなくせば1行になります. クワインを書くコツ 文字列を2回出力するプログラムを書きます. 2回めの出力時には,その言語の文字列表現とするために,haskellの場合はダブルクオートをくっつける.このソースコードでは1回めの出力ではputStr,2回めの出力ではprintを使うことでダブルクオートを添付しています. 最後に,そのプログラムを文字列として書き,そのプログラムに渡してあげます.

googleオートコンプリートでfizzbuzz

このプログラムを実行してはいけません googleオートコンプリートでfizzbuzz curlのラッパー boost xml_parser 背景 2014年10月に,大学のプログラミング演習の課題として,fizzbuzzを書いてきてくださいというものが出ました. 普通にやっても面白くないので,googleのオートコンプリート機能を使って余りを判定するようなプログラムを書きました.googleのオートコンプリートには簡単な電卓機能があります. 書いたのは2014年なので,今動くかはわかりませんし,このプログラムを実行してはいけません. ソースコード curl ネットワーク通信にはcurlを使い,std::unique_ptrのデストラクタでリソース解放が行われるようなc++用ラッパーを一応書きました.この規模のプログラムならそんなものを使わずにベタ書きすれば良いのですが,当時std::unique_ptrの機能を使いたかったので書きました. 普通にc++向けのちゃんとしたバインディングがあることをこれを書いた後で知りました.実用するときはそういうものを使ったりコマンドラ

rubyによるedの部分的実装

背景 学校の課題で作成しました. 課題要求で正規表現をなるべく使うようにしています. ソースコード 行番号が正規表現でパースできない edでコマンドを実行するときは,1, 2pみたいに行番号を2つまで指定するのですが,実はこの行番号,無限に指定すると最後の2つが取られるようになっているので,正規表現では多分パースできません. GNU edでは普通にループして解析してるみたいですね. 2つ以上行番号を指定するコマンドは今のところ存在しないので,実用上の問題はないでしょうけど.edを実用している人が居るかどうかは知りません. -1を指定した時の挙動が異なる rubyの配列を適当に使っているので,添字に-1を指定すると末尾と解釈されておかしなことになります. 正規表現の挙動が異なる edはposixの正規表現ですが,こちらはrubyの正規表現を適当に使っているので挙動が異なります. 行番号指定の計算を真面目に行っていない マニュアルを読み進めないとわからなかったことですが,edの行番号指定は簡単な電卓のようなことができる仕様になっていて,これを計算するのは出来なくはな

斜辺が2017になる三角形を探索してgnuplotでグラフ化

2017年です. 背景 2017の素因数分解がつくる多角形 - tsujimotterのノートブックを読んで,なんだかよくわからないがすごい!と思って,真似をしてみようと思って,挫折しました. そこから思考が迷走し始めて,ダウングレードして斜辺が2017になる三角形を探索してみました. 斜辺が2017になる三角形を探索 細かく調べたらキリがない上に,浮動小数点数の誤差が面倒なので度数法で1から179まで探索しました. gnuplotでグラフ化 角度をz軸にしてgnuplotでグラフ化してみました. pm3d map 感想 自分が余弦定理 - Wikipediaをちゃんと活用してなかったことがわかりました. また,maximaやgnuplotなどの数学情報も収集できたので,結果的には良かったです. 今までgnuplotはmaximaなどからしか使ったことがなかったのですが,直接使った方が手っ取り早いこともあることがわかりました. 今年も数学の力を取り込み,プログラミングに活用していきたいです.

:
ネットワークスペシャリスト試験に合格したので学習方法などを書いておきます

ネットワークスペシャリスト試験に合格しました これまでの振り返り 学習方法 受験テクニック 背景 2016年秋のネットワークスペシャリスト試験に合格しました. これで私は ITパスポート 基本情報技術者 応用情報技術者 情報セキュリティスペシャリスト ネットワークスペシャリスト に合格したことになります. せっかくなので,これまでの情報処理技術者試験を振り返って,学習方法,受験テクニックを書き残しておこうと思いました. ITパスポート 高校の時に対策本を1回読んで受験. 電車が苦手だったため,遅刻してしまいましたが,ギリギリ許容範囲の遅刻時間に間に合いました. 問題をよく見てみたら,義務教育程度の知識があれば6割取れるレベルでした. もちろん意味が分からないと読解できない専門用語は出てきますが,6割取れば良いので,基本的な読解問題を読めばわかります. 基本情報技術者 対策本を1回読んで受験. 印象が薄すぎて試験の記憶がないです. 応用情報技術者 大学に入学したので忙しくなって,無学習状態で受けることになってしまいました. 仕方がないので,試験会場までの電車内で応用

whitespaceプログラムをc++プログラムに変換するrubyプログラムを書きました

ifを並べ立ててラベルを表現しました ワンパスで変換したかった 背景 学校で「whitespaceプログラムを実行するrubyプログラムを書け」という課題が出たので書くことにしました. whitespaceのラベルは静的なので,c++に変換できるはずだと思ったので,c++に変換して実行するプログラムを書きました. 参考 この記事はWhitespaceをC言語ソースに変換する - koturnの日記を多大に参考にしています. labelを実装する whitespaceには他の言語で言うgotoとgosubがあります. サブルーチンではない場合,処理はそのまま進むことになります. つまり各ラベルはgotoとgosubの両方に対応する必要があるということでです. これがwhitespaceからの変換の1番の問題点です.他の部分は普通にワンパスで書き換えることが可能なので,問題ありません. longjmpを使う WhitespaceをC言語ソースに変換する - koturnの日記ではこの方法を使っていました. で,これを見てしまったので,この方法は使わないことにしました.

webアイコンに絵文字を使おう

絵文字 / Emoji Advent Calendar 2016 - Qiitaの12日目の記事です webアイコンに絵文字を使おう 従来のwebにおけるアイコンの表現方法 当初は素直に画像をアイコンとして配置する方法が使われていました. しかし,http/1環境では大量のファイルを配信すると非常にページが重くなるので,様々な方法が使われるようになりました. cssが普及した後,アイコンを一枚の画像にまとめてそれぞれの場所で画像の座標を指定するというcssスプライト svgが普及した後,アイコンを一枚のsvgにまとめてそれぞれの場所でsvgを呼び出すというsvgスプライト webフォントが普及した後,適当な文字にアイコンを割り当てるweb font icon これらはバッドノウハウですが,現実的に早いので,広く普及するようになってしまいました. 従来の手法の問題点 スプライト 開発が面倒くさい. アイコンだろうが画像というものはそれぞれ分割しているのが自然であり,分割というのはunixにおいてはファイル単位で行われるのが最も自然です. 現実的にもスプライト画像は編集が困

yesodで全てのモデルにcreatedAt,updatedAtを作りたかった話

Yesod Advent Calendar 2016 - Qiitaの5日目の記事です 私のcreatedAt, updatedAtとの戦いの記録 背景 User email Text name Text createdAt UTCTime updatedAt UTCTime のように,それぞれのモデルに生成時間と更新時間を付けたい. 役に立つことがあるかもしれない 全てのモデルにつけることで一貫性を保ちたい 問題 単純にFormを userForm :: Form User userForm = renderBootstrap3 BootstrapBasicForm $ User <$> areq emailField "email" Nothing <*> areq textField "name" Nothing <*> lift (liftIO getCurrentTime) <*> lift

prologによる格子点の個数からの円周率の近似値の計算

Prolog Advent Calendar 2016 - Qiitaの3日目の記事です 2015年07月に出た数学の課題をprologを使って解いてみました これがはじめてのprologでした 未だprolog初心者です 背景 格子点の個数を求め,\(\pi\)の近似値を計算せよ.という課題が2015年07月に数学の授業で出ました. 特に言語は指定されていなかったので,せっかくなのでこれまで実用してこなかったprologで解いてみました. 提出した後死蔵されていたので,Advent Calendarにて供養することにします. ソースコード swi-prolog向けに記述しています. 格子状に点を並べ,四角形と円の中に入った点の比率を計算することで円周率を計算しています. prologを試してみたかったので,問題を解くのに必要ない記述も含んでいます. 実行結果 精度を指定して実行します.精度を上げるにつれて,再帰回数が増え,段々円周率に近似していきます. ?- piExp(1, Pi). Pi = 4.0 ?- piExp(2, Pi). Pi = 3.7320508

Hakyllの紹介

静的サイトジェネレーター Advent Calendar 2016 - Qiitaの2日目の記事 関連記事 ブログを作りました - ncaq hakyllのteaser設定方法が好みではなかったので自作した - ncaq 私はhakyllしかろくに使ったことはない hakyllとは Hakyllはhaskellで書かれた静的サイトジェネレーターである.このサイトもhakyllで作られている.ncaq/www.ncaq.net: ncaq website 強み pandocが楽に使える PandocはmarkdownやreStructuredTextを処理するための極めて強力なツールである.hakyllはpandocをデフォルトで使うようになっているので,pandocを使うために何かしらのセットアップは必要ない.markdownでサイトを作るにはうってつけのツールである. また,pandocはhaskellで書かれており,内部コードもライブラリとして関数がきちんと整備されている.pandoc: Conversion between markup formats 他の言語を

英辞郎は英語学習において害なのだろうか?

英辞郎 on the webの使用を禁止されかけた 背景 授業中にスマートフォンを使っていることを注意されたが,PCならOKだった,理由が謎だったので,何故なのか理由を推察してみた - ncaqの続編. 本来前の記事とまとめて1つの記事にするつもりだった.しかし意外と長くなったし本題が違うので分割する. 誰かを批判することを目的とするものではない. 事件 私はAdvanced English bという英語学習のための授業を受けている. 2016年11月の授業の時に英辞郎 on the webの使用を禁止されかけた. 教師の主張 その回の授業では,電子辞書の話をしていた.(この文書に書いてある電子辞書はカシオやシャープが出しているような専用装置型のものを指す) その時に私は「電子辞書を持っているか」と質問されたので「一応持っているが何処に行ったかもわからないし,あんな役立たずを使う気にはなれない.私は英辞郎を使う」と返答した. すると教師は私に「私も英辞郎は使っているが,英辞郎は英語学習の妨げになる」「英辞郎は使わないでください」と発言した. 教師の主張を要約して箇条書きに

授業中にスマートフォンを使っていることを注意されたが,PCならOKだった,理由が謎だったので,何故なのか理由を推察してみた

授業中の授業のためのスマートフォンの使用を注意された 何故かPCならOKだった 謎なので理由を推察してみた 背景 この文書は人間の思考と社会観念を奇妙に感じて,私の思考と社会のズレに対して多少のおもしろおかしさを感じて書いている. 私は現在この事件に大して全く不満は持っていない.損をしていないからだ.奇妙さを感じているだけである. 誰かを批判することを目的とするものではない. 事件 2016年5月,私はAdvanced English aという英語学習のための授業を受けていた. その時2回目の授業の時に,スマートフォンを使っていることを注意された. 別に私は授業中にスマートフォンを使って授業と関係のないことを行っていたわけではない.アルクの提供するオンライン辞書サービスである英辞郎 on the webを使って,英語の学習のために英和辞書と和英辞書を使っていたのである. 私はいわゆる電子辞書を使うことは殆ど無い.それがなぜかというと,電子辞書が不便だからである.主に入力が不便である.電子辞書はキーボードをdvorak配列に出来ないし,ローマ字テーブルを私が独自に開発したnlo

2016年02月に単純なLispを実装した

2016年02月に単純なLispを実装した 面白みはない 背景 48時間でSchemeを書こう - Wikibooksを見たら案外簡単そうだと思って手を動かしてみたようだ. 継続とレキシカルスコープの実装が難しく,やらねばならない課題などがあった(これは課題でも何でもない)ので,これ以上実装は進められなかった. かと言って教材をそのまま丸コピペするのも面白くなかった. フィボナッチ数を計算してそれで満足した. ソースコード Parsecを使うのは初めてだった.それどころか,抽象構文木を作るようなテキスト解析処理を書いた事自体当時初めてだったので,コードの拙さが伝わってくる.例えばtryを乱用している. 感想 もうちょっとオリジナリティのある言語を作ったほうが教材と被らなくて面白みがあって良さそうだ. まだ単純な言語とネタ言語しか作ったことがないので,今度はもうちょっと応用的なものを書いてみたい. しかしParsecやHaskellの学習にはなった.次のネタ言語ではApplicativeやStateモナドを使っている.

MathJaxはCommonHTML出力で使うべきである

MathJaxはそんなに遅くない MathJaxのCommonHTML出力は速い 基本的にSVG出力よりも良い 背景 このサイトに数式表示を導入したかった. MathJaxの存在は数年前から知っていたが,数年前から知識をアップデートしていなかったため,「MathJaxは遅い」という認識だった. そこで\(KaTeX\)を使おうと考えていたが,調べ直した所,今の\(MathJax\)はさほど遅くなかったので,MathJaxを導入した. CommonHTML CommonHTML出力はすべてのモダンブラウザで高品質の出力を生成します,結果はブラウザとOS間で一貫しています.これはMathJax v2.6から,MathJax'sの基本的なモードです.主な利点は,品質,一貫性,速度,サーバーサイドでのサポートです.IE9と同等のブラウザをサポートしており,古い世代のブラウザでは正常に機能しなくなります.CommonHTML出力はwebベースのフォントを使用しているため,ユーザはコンピュータに数式フォントをインストールする必要はありません.現在はMathJaxのデフォルトのフォントの

haskellプログラマ向けのモノイドの解説

半群とモノイド 数学のモノイドとhaskellのモノイドの差異 背景 私は高校2年生(2012年)頃に,すごいHaskellたのしく学ぼう!を読んで,haskellを使い始めた. その中にはモノイドの解説もあり,当然haskellのコードでもモノイドを使っていたが,haskellのモノイドが何処からきた概念なのか,どうしてこういう設計になっているのか,それをさっぱり理解していなかった. 2014年頃に大学の授業で半群,モノイド,群を学習して,多少は理解が深まった.しかしその頃はアウトプットを行っていなかったので,何処かに書き留めておこうとは思わなかった. 最近群論をまた学ぶ機会が来たので,拙い数学知識ながらも書き留めておこうと思う.数学は全く得意ではない.間違いがあればemailやtwitterなどで是非指摘して頂きたい. 私は数学者ではなくプログラマであり,この文章もプログラマ向けに書いている.なので,この文章ではプログラマ向けの言葉を使う. 半群(semigroup) 型\(A\)と二項演算子\(<> :: A -> A -> A\)が結合法則を満

箱のようなものは鶏肉みたいな味のようなもの

このページは鶏肉みたいな味 - Wikipediaのパロディです クリエイティブ・コモンズ 表示-継承 3.0 非移植ライセンスの下で利用可能です 皮肉です 箱のようなもの(はこのようなもの)とは,日本語圏においてプログラミングにおける概念を比喩するときによく使われる表現である.但しあまりにも頻出するため,一種のクリシェ - Wikipediaのようになってしまっている.その結果,この言い回しは実際には関係のない概念やふさわしくない状況にも現れ,不条理な笑いをはらむこともある[要出典]. 歴史 この言葉の背景には,世界中で箱が身近な道具として親しまれているという事実がある[要出典].しかしラベルやメモもありふれた道具であるのに,なぜ昔から箱が新しいプログラミングの概念を例えるときの「安全策」となっているのか,これに関してはいくつかの説明が考えられる.まず,箱は単純な構造を持つ道具だということが大きい.これは目的の方が道具にとっては大事な要素だからで(とくに箱をバラバラにした場合にそれが明らかになる),だからこそ構造の単純な箱は比較対象を探すときに手軽に浮かぶ選択肢となるのである[

hakyllのteaser設定方法が好みではなかったので自作した

hakyllのteaser設定方法が好みではなかったので自作した twitterがopen graphに対応していたことを知った 背景 twitterにdescriptionを設定したかった. hakyllのteaser設定方法 hakyll公式のteaser設定方法はmoreをmarkdownに書くものである. We use <!--more--> for this to mimic the WordPress convention: Hakyll - Using teasers in Hakyll 手動でいちいち「続きを読む」部分を書くのは人間の行う作業ではないし,マークアップの流儀とも反している. また,descriptionは文字列のサイズで適当に切り捨てられるので,切り捨てをいちいち考えるのも面倒くさい. 手動で文章を綺麗に切り抜いたほうが,美しいwebページを作ることは出来るのだろう.しかし,手動で切り抜き部分を指定するのは,私の美学に反する. pandocで変換する というわけで私のサイトでは,pandocにhtmlからplaintextに変

LLVMでフィボナッチ数を計算する

2016-05にLLVMでフィボナッチ数を計算するプログラムを書いた LLVM Language Reference Manual — LLVM 4.0 documentationを参考にした 人間が書く言語ではない 背景 自作のプログラミング言語をLLVM対応させて,ネイティブコンパイルしたくなった. なので,まずLLVMの内部言語を知ろうと考えた.そのために,とりあえず,フィボナッチ数を計算するプログラムを書いた. そういう記憶がある. なお,肝心の自作プログラミング言語は放置されている.そもそもがネタだから仕方がない. ncaq/unown-expl: pokemon exp programming language ソースコード 感想 いかんせん書いたのが2016-05なので記憶が曖昧だが,C言語がどれほど高級な言語か思い知らされた. x86アセンブリの方が簡単なレベルにつらい. 低級で超冗長な言語でデータが不変だと,とてもつらいことがわかった. こことかこことか簡単に推論出来るだろ?冗長すぎるだろ…とか思いながら書いていたが,よく考えたら人間が書く言語ではなか

wcのrubyによる簡易的な移植

wcのrubyによる簡易的な移植 wc (GNU coreutils) 8.23を参考にした ファイル引数のみの出力のエミュレート utf-8のみサポート 背景 学校の課題で2016-10に作成した. k-takata/Onigmo: Onigmo is a regular expressions library forked from Oniguruma.のunicodeプロパティ指定を知らなくて結構悩んだ. ソースコード テストコード parallel 'wc {}; ruby wc.rb {}' ::: ../**/*.{md,rb,hs}|uniq|perl -pe 's/\s*\S+\s+\S+\s+\S+\s+//'|uniq -d

google driveをlinuxで利用した話

dropboxからgoogle driveに移行した grive2がdaemon機能をもたないのでやっつけスクリプトを書いた 背景 google photosが便利そうなのでdropboxに写真アップロードする方法から移行したかった.ついでにファイル同期機能もgoogle driveに移行してdropboxを使うのをやめた. grive2 google driveには公式linuxクライアントがないので,vitalif/grive2: Google Drive client with support for new Drive REST API and partial syncを利用する. gentooならportageにパッケージがある.設定方法はヘルプ通りにすれば簡単. これでついでにgoogle photosとも同期できる. portageのuseフラグ net-misc/grive-0.5.1_pre20160706はcurlがgnutlsを使うことを要求する.package.useにそれを記述する必要がある.dev-python/pycurlも弄る必要があること

stack buildがout of memoryした時の対処法

Home - The Haskell Tool Stackでstack buildやstack installしたとき,out of memoryでプログラムがビルドできないことがある. 他の人のPCやTravis CIで起きた.その対処法を書いていこう. --jobsオプションを使う stack --jobs 1 build こうすると並列にビルドが走らないため,メモリが足りなくなることが減る. virtualboxのメモリ割り当てを増やす virtualboxのデフォルトメモリ割当量は少ないため,割当量を増やす. virtualboxをやめる 仮想マシンは甘え,ネイティブブートをするべき. メモリを買う 金で殴れ. out of memoryするライブラリにpull requestを出す どうやったらコンパイル時のメモリ使用量が減るのかはよくわからん.もっとTemplate Haskellのことを知りたい.

pixivにメールアドレスを「使用できません」と弾かれていたのが解決した話

pixivにメールアドレスを「使用できません」と弾かれていた MXレコードを設定していないせいだった 規格では設定しなくて良いらしい 独自のバリデーションには気をつけよう 背景 私はメールサーバを独自に運用している.そのメールアドレスがpixivで使えないトラブルがあった.どうでもいいやと放置していたけれど,丁度pixivのidが変更出来るようになった.その機会にtwitterで愚痴ったら,pixivのエンジニアから返答を頂いた. そう言えばpixivのメールアドレス「このメールアドレスは使用できません」ってなってずっと死んでるメールアドレスにしたままなんだよな… — エヌユル (@ncaq) 2016年10月17日 @ncaq https://t.co/xdpeG2Qvy3 でMXレコードが引けないからですね… https://t.co/xZfl5RnLRT は大丈夫 — うさみけんた (@tadsan) 2016年10月17日 わぁいDNS たっどさんcheckdnsrrだいすき https://t.co/mjZMMpGlIS — うさみけんた (@ta

Google カスタム検索を導入して,その進化に驚いた

Google カスタム検索を導入した 今のカスタム検索は進化していてwebサイトに統合できる 背景 ブログ記事からタグデータを削除した,そもそもブログにタグは不要 - ncaqに書いてあるように,このサイトにタグだのカテゴリだのの区分けはない.要するに,テキストが主体のサイトなのだから,全文検索すればいいだろと考えている. しかしgoogleの検索クエリにsite:www.ncaq.netを付ければ,私のサイトだけを検索することが出来るということを知っている人は多くはないだろう. なので,Google カスタム検索を導入することにした. 参考 Google カスタム検索 カスタム検索 ヘルプ Google カスタム検索の導入方法 昔より進化していた Google カスタム検索の存在は,webを使い始めた頃から知っていた.そのイメージは,単に検索クエリにsite:www.ncaq.netをつけたのと同じgoogle検索結果が表示される,ただそれだけであった. それで十分だと考えていたが,私は今のGoogle カスタム検索が大きく進化していることを知った.そして驚いた.

linux上のfirefoxでNoto Color Emojiを使う

Linuxでもカラー絵文字は普通に表示できる さまざまなフォントが利用できる Noto Color Emojiを使うときはビットマップを取り除かないようにする 追記 firefox 53からNoto Color Emojiを使うとサイズが異常に巨大化するようになりました.今の最新版のfirefoxでは組み込みの絵文字が利用できます.指定するのはやめておきましょう. 背景 FreeTypeがcolor emojiに対応していたことは知っていた.しかし,私がそれを知ったのは数年前で,その時点では安定版にはマージされていなかったので,Symbolaで済ましていた.当時はまだwindowsなどもカラー絵文字に対応しておらず,絵文字があまり利用されていなかったことも放置した理由の1つである. しかし,このwebサイトに絵文字をアイコン用に使ったのをきっかけに調べなおしたところ,とっくにlinuxでもcolor emojiが普通に表示できるようになっていたことがわかった. そこで,私の環境もいい加減カラー絵文字に対応させることにした. 参考 Linux とかでも Unicode 絵

PageSpeed Insightsに従ってサイトを最適化してみた

PageSpeed Insightsという,googleが提供する,webサイトのパフォーマンスを測定して,速度上昇の提案をしてくれるツールがある. 今回はそれに従って,パフォーマンスの向上を目指してみた. まあ,元々そんなに重いwebサイトではないのであまり最適化する必要はないのだが(早すぎる最適化),webの学習の一環として最適化を試みることにする. 改善前 スクロールせずに見えるコンテンツのレンダリングをブロックしている JavaScript/CSS を排除する このサイトで<head>に使っているcssはdefault.css1つだけである. googleの提案する手法は, 小さな CSS ファイルのインライン化の例 大きなデータ URI をインライン化しない CSS 属性をインライン化しない CSS の配信を最適化する  |  PageSpeed Insights  |  Google Developers であるが, 大きなデータ URI をインライン化しない CSS 属性をインライン化しない はそもそも行っていない. そして, 小さな CS

デジゲー博に行ってきました

デジゲー博 | 同人&インディーゲームオンリー展示・即売会に行ってきました. tweet [悲報]デジゲー博の開始時刻を10時だと間違える — エヌユル (@ncaq) 2016年11月13日 デジゲー博で展示してたからやってみたけど合理的で面白かった / “#rogue-hex” https://t.co/jFIFHtqR2r — エヌユル (@ncaq) 2016年11月13日 デジゲー博でlinux対応ゲーム2つ買いましたlinux対応してることを書いておけばlinux対応要求男が買ってくれる可能性が上がるぞunity使いは少しの出力を頼む — エヌユル (@ncaq) 2016年11月13日 unity製のゲームはlinux対応せっかく簡単なんだから需要があることをアピールしていきたい — エヌユル (@ncaq) 2016年11月13日 戦利品がデジタル 戦利品 戦利品とは言っても,デジゲー博は別に即売会ではないので,なにかを売ってる人はむしろ少数派です.基本的には展示会です. 買ったゲーム2つも,1つはダウンロード用アカウントを渡し

強力なフィルタリングであるThe Spamhaus Project - ZENをpostfixで使って,スパムメールを拒否する

dovecotとspamassassinと限界を感じるGoogleAppsを契約してクラウドの民になろうか…面白みは全くないが、実用を考えると仕方がないんだよね — エヌユル (@ncaq) 2016年6月7日 @ncaq spamassassinの限界どこらへんです? — 武藤スナイパーカスタム🔫🕵🏻 (@__tai2__) 2016年6月7日 .@__tai2__ いろいろあるけれど、画像中心のメールに弱い — エヌユル (@ncaq) 2016年6月7日 こんなことをつぶやいていたが,/etc/postfix/main.cfに以下の設定をすることによってスパムが激減した. smtpd_relay_restrictions = permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client all.rbl.jp, reject_rbl_client bl.spamcop.net, reject_rbl_client zen.spamhaus.org それまでもreject_r

gulpもgruntも使わずにbootstrap4をカスタムビルド

bootstrapのカスタマイズのメリット bootstrap4はsassで作られているので,変数を設定することでフォントを変えたり,デフォルトの文字色を変えることが出来る. 他のcssを用意して上書きするのに比べて,この方法には以下のメリットがある. cssファイルが1つにまとまる ルールが1つになるため,どのルールが優先されるか気にする必要が無くなる デザインに統一感が生まれやすくなる bootstrapがsassで定義したマクロが使える デメリットは public CDNを使うことができなくなるため,他のサイトでbootstrapがキャッシュ済みであることを期待できなくなる めんどくさい なお,この方法を使うとbootstrapのコンパイル済みのCSSを配信するCDNは当然使えなくなるため,npm install bootstrap@4.0.0-alpha.5するなど,パッケージマネージャでローカルにファイルを保存する必要がある. _custom.scssを編集する方法(間違い) Bootstrap 4 ships with a _custom.scss file

xmonadでgimpを普通に動かす

xmonadの初期設定でgimpを使い,ウインドウを開くと荒ぶり操作が不可能になる. これを解決するにはmanageHookを以下のようにカスタマイズする. myManageHook :: ManageHook myManageHook = composeAll [ isDialog --> doFloat ]

gnome-shellを使うのをやめた

1年前ぐらいからxmonadからgnome-shellに移行して,気に入って使っていた. しかしディスプレイマネージャでxmonadを起動 - ncaqでわかるように,私はxmonadに戻って,gnome-shellを使うのをやめた. 使うのをやめる機会に,gnome-shellについてレビューする. gnome-shellの良い点 gnome-shellは言われているほど悪くない gnome-shellは自分の周りではよくボロクソに言われていると感じる. 特に日本ではその傾向が強く,それがcinnamonへの逃げに繋がり,linux mintの日本での高い人気にも繋がっている. しかし,gnome-shellは言われているほど悪くない. 評判が悪い理由は, 既存のデスクトップ環境(要するにwindowsのことだ)と似通ってない 重い せいであると考えている. 日本で特に評判が悪いのは, 日本のwindows人気と保守性 日本のラップトップPCがアメリカのものと比べて貧弱である せいであると考えている. gnome-shellの拡張性は低くない,むしろトップクラスに高い

ブログ記事からタグデータを削除した,そもそもブログにタグは不要

このブログでは,今までタグデータをyamlに書いていて,そのうちhakyllのタグクラウド機能でタグ検索を出来るようにする予定だった. しかし,それはやめて,記事データからタグデータを全て削除した. 理由は以下. タグを書くのが面倒くさい 記事からどのタグを抽出するか タグの表記ゆれの対処 新しいタグの追加 これらは私が楽しくやれる作業ではない. 他の人のブログでタグ機能を使ったことがない qiitaのような多人数投稿サイトならともかく,個人のブログでタグ機能を使ってまで検索しなければいけないほど記事が散乱することはあまりない. 目的の記事が読みたいときは,google検索を使うほうが良い. ここは個人ブログなのだから,自分が使わない機能は不要である. 個人ブログにタグ機能が必要ない 先程も述べたが,qiitaのような多人数投稿サイトならば,投稿数が膨大になるため,タグによるある程度のカテゴリ分けは必要だろう. また,ニコニコ動画のような動画中心のサイト,pixivのような画像中心のサイトなどは,テキストデータが抽出しにくいため,検索のために人力でタグをつけていく必要があ

ディスプレイマネージャでxmonadを起動

デスクトップPCなどでは.zloginにexec startxを書いて自動でXが起動するようにしても良いが,ラップトップPCでは流石にロック機能などが欲しいので,lightdmなどのディスプレイマネージャ(ログインマネージャ)を使いたい. セットアップに少し詰まったのでメモ. 新しいセッション設定を書く必要はない /usr/share/xsessions/に新しいセッションを追加するのは,私の環境では必要なかった. 何故ならば,私のxinitには/usr/share/xsessions/Xsession.desktopというセッションが定義されており,それが/etc/X11/Sessions/Xsessionというシェルスクリプトを呼び出すからである.シェルスクリプトは最終的にexec $HOME/.xsessionを実行する. $HOME/.xsessionを記述 そうなれば後は$HOME/.xsessionにシェルスクリプトを記述すれば良いことがわかる. なので私の環境では,以下のように記述した. #!/usr/bin/env bash export GTK_IM_MODUL

XPS 13 9360(2016年発売)にgentooをインストール

パーティションの切り分け 本の虫: LenovoのWindows 10 Signature Edition PCにLinuxのインストールを妨害する機能が発覚 みたいな話があったので少し不安に思っていたが,案の定そのままだとSystemRescueCdではSSDを認識できないことが発覚した. しかし,DellはLenovoとは違い,RAIDモードをちゃんと無効化出来るようにUEFIを設定している. 多数の警告を無視しつつ,UEFIでRAIDモードをAHCIモードに切り替えると,ちゃんとSSDをnvme0n1として認識するので,linux側でも認識する.代わりにwindowsは起動しなくなる, 大爆笑. しかし,もう一度設定をRAIDモードに戻すと,ちゃんとwindowsは起動するので安心しよう.安心した. osを切り替える度にUEFIの設定を変更する必要があるシュールなことになってしまったが,私は殆どwindowsを使わないのであまり気にならない.そのうちlinux側がraidに対応して普通にブートできるようになるだろう. 回復パーティションを削除 初期状態で回復パーティションが4

XPS 13 9360(2016年発売)を購入した

到着したので書く. 購入理由 これまで使っていたXPS 13 L322X(2013年発売)にあまり不満はなかったが, ファンがぶっ壊れたのか,少し負荷をかけると異音を放ち,静かな場所だとかなり気まずい CPUをケチってCore-i5でオーダーしたため,ビルドが遅い 新しいPCは全体的に昔のより軽いと聞いて魅力的に感じた ため新しいPCを探した. USキーボードのものを発注できて軽くてそこそこの速度を持つPCが結局XPS 13しかなく,丁度15%セールの最終日だったのでつい購入してしまった. 小計: 12万2483円 消費税: 9798円 合計: 13万2281円 であった.消費税が高い. これまでのと比較 これまで使っていたのはXPS 13 L322X(2013年発売) 今回購入したのはXPS 13 9360(2016年発売) XPS 13 9360(2016年発売)はXPS 13(2015年発売)のマイナーチェンジモデルで,CPUだけが新世代に切り替わった. 2013年に発売したモデルとは外見から異なり,特にベゼルが狭くなった. 並べてみると,同じ表示領域なのにも関ら

lightdmに引っ越したら,nvidiaドライバがkernel panicを引き起こす原因がgdmだったことがわかった話

問題 数年前から,PCを起動するとたまにnvidiaドライバが発狂して,linuxがkernel panicを引き起こして電源を落とすしかない状況になることがあった. NVidia/nvidia-drivers - Gentoo Wikiやnvidiaのフォーラムを見ても,似たようなログを出してpanicになる現象はあったが,その解決方法を試してみても,全く改善しなかった. しかし,全く起動しないというわけではなく,50%ぐらいの確率でkernel panicになるという状況だったので,クラッシュしたら諦めて電源を落として再チャレンジしてみるというアホなことを2年ぐらいやっていた. キーボードのdeleteキーを連打するとクラッシュしにくいという感覚があったが,おそらくこれはポケモン捕獲時にボタン連打すると捕まえやすいと同じような錯覚だろう. 思わぬ解決 数カ月前の話である. クラッシュ問題とは全く関係なく,gdmが結構メモリを食うことが気になって,試しにlightdmに移行してみた. すると起動するときにnvidiaドライバが全くクラッシュすることがなくなってしまった. 起動す

highlight.jsを全ての言語に対応させる

このブログのシンタックスハイライトにはhighlight.jsを使っている. 膨大な言語に対応し,また多くのスタイルに対応しながらも軽量なフレームワークである. このライブラリをセットアップするときに多少ハマったので,問題点と手順をメモしておこうと思う. 最終的な方法だけ知りたい人はbrowserifyの項まで飛ばして良い. CDNは少数の言語にしか対応していない おそらく大半の人は,Getting highlight.jsに載っているように, <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/styles/default.min.css"> <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/highlight.min.js"></script> と書けばそれで満足できるはずだ. しかし,high

edコマンド世界ではwqは1文字?

謎 ちょっとedを実装してたら謎を見つけました GNU 'ed' Manualより引用. All ed commands are single characters 全てのedのコマンドは1文字です (1,$)wq fileWrites the addressed lines to file, and then executes a 'q' command. (1,$)wq fileファイルに指定した行を書き出し, 'q' コマンドを実行する wqは1文字だった…?そんなことはないと思うんだがなあ. 指摘 (.)klcがそのまま小文字受け取るから実用上困るんだよなあ…wqだけ特別扱いすることで対処したけど — エヌユル (@ncaq) 2016年10月25日 w コマンドと q コマンドを連続して書いてるだけなんじゃないのかな https://t.co/5Bnvd4omyt — 齊藤敦志 (@SaitoAtsushi) 2016年10月25日 .@SaitoAtsushi 確かにソースコード読んでもそんな感じなんですけど,waとかwcは通らない

ブログを作りました

ブログを作る理由 月並みな話だが,アウトプットをしないと成長が鈍るからである 数カ月前の記憶を消失することがよくあるのでメモを取っておきたい 思考を文章化することによりストレスが減少するかもしれない 自分にとって価値のないと思う情報でも,他の人にとってはそうではないこともある なぜqiitaではダメなのか qiitaはきわめて便利なサイトであるし,私も記事を投稿したことはあるし,よくコメントなどはする. なぜこれをそのまま使わないか qiitaを使いたい理由 優れたmarkdownで投稿できる コメントシステム完備 pull requsetが送れる アカウントシステムが統合されているのでコミュニケーションが取れる tagシステムにより読んでもらえる可能性が増える わざわざ自分でセットアップする必要がない 枯れている qiitaを使いたくない理由 qiitaには技術の記事以外は投稿できないので,それ以外を書くにはやはり自前のサイトが必要 自分のドメインを半分もてあましている デザインなどを細かくカスタマイズできない qiitaに管理されることになる 自分のサイトの全て