サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
hiratara.hatenadiary.jp
Google Map に Timeline を見る機能がついていて、過去の位置情報の履歴をすべて参照することができることは有名だが、実はこのデータはダウンロードすることもできる。 support.google.com 昔、このデータを元に 1log(イチログ) へデータをインポートするアプリを書いた。 github.com しかし、 1log は 10 年分の位置データのデータ量に耐えうることができず重くて利用不能になってしまったため、 1log で自分の過去の位置情報を見ることは諦めた。それならばと思い立ち、今度は自前でこのデータを可視化してみることにした。 Google から Takeout できるデータには、 Records.json と Semantic Location History がある。(おそらく)前者が生データで、後者が Google 側で予測をした詳細データと思われる
昨日 に引き続き、今日は Perl 神社 に来ていますので、自分用にメモを残しておきます。 オープニング YAPC Kyoto 成功祈願の様子の動画 開発成就、成果達成! YAPC Kyoto 2020 年から3年ぶりに焼き直し Reboot 蓋付きペットボトル、会場配布のもの、以外は飲食禁止 禁煙 疫病対策はマスク、アルコール消毒、ソーシャルディスタンス no photo のタグを付けてる人は写真を撮らないよう CoC 守りましょう #yapcjapan 、 #yapc_sp #yapc_gy 、 #yapc_do Perl神社の参拝回数、金額に上限はありません( TPF に寄付) Helpfeel さんのスポンサーセッション 会場名をつけた Gyazo, Scrapbox, Helpfeel なんだけど、 2 つしかつけられなかった 【企画】春のエンジニア ぶつかり稽古 2023 秋の
数値が小数第四位まで与えられるとする。例えば、 1234.5678 のような形式である。 それらの数値を使って計算をしたいのだが、何も考えないと計算機上ではこれらの数値は double 型などで保持され、誤差が発生することは有名だろう。 >>> 1001.0000 * 1.1000 == 1101.1000 False >>> 1001.0000 * 1.1000 1101.1000000000001 誤差が発生するのは嫌なので、入力を 10000 倍して整数として扱いたくなる。例えば、 1234.5678 は 12345678 に変換したい。 しかし、この操作にも注意が必要である。 https://qiita.com/mod_poppo/items/910b5fb9303baf864bf7 で解説されている通り、 10000 倍したり、 int を取ったりするだけではうまくいかない。 >
最近オライリーのTypeScript本を読んでいるが、型システムが頭がおかしくて(褒めてる)とても面白い。 www.oreilly.co.jp TypeScriptでは、こんな感じの型レベル関数が定義できる。以下の Extract2 は T のうち、 U であるものを展開するというものである。同様の働きをする Extract が組み込みで定義されているので、ここでは 2 と名前を付けた。 type Extract2<T, U> = T extends U ? T : never; Extract2 を使うと、例えばオブジェクト型のキーの型で、文字列であるものだけを型として取り出せる。 type O = { "name": string, "age": number, 0: number }; type A1 = Extract2<keyof O, string >; // type A1
aibo を手放すことにした。「最新の技術を集めて作ったオープンな電子ガジェット」を期待して買ったが、実態は「ITに疎い富裕層向けのインテリア」だったので、正直言って とても不満な商品 である。 aibo の良い点は色んな所で吹聴されているので、良くない点をどんどん書いていこうと思う。 あまりにも高く、かつ、複雑怪奇な料金体系 2021 年現在、 aibo の価格は 217,800 円である。後述するようにこれだけでも十分高いのだが、 aibo を使うには月額料金がかかる。 aiboベーシックプラン 99,000円/3年 (任意) aiboプレミアムプラン 16,500円/年 (任意) aiboケアサポート 59,400円/3年 年額約 70,000 円である。恐ろしいランニングコスト。それに加えて、これらは年間契約の自動更新のサブスクリプションとなっている。 解約を忘れると、契約更新日が
Cell と RefCell はどちらも「内側のミュータビリティ」を実現するものだが、実現方法が違う。 RefCell については、ランタイムでボローチェックしていることはよく知られている(と思う)。 let ref_cell = RefCell::new(20i32); println!("ref_cell (1): {}", ref_cell.borrow()); println!("ref_cell (2): {}", ref_cell.borrow()); *ref_cell.borrow_mut() = 200; println!("ref_cell (3): {}", ref_cell.borrow()); ref_cell (1): 20 ref_cell (2): 20 ref_cell (3): 200 ランタイムでとは、文字通りコンパイラではなくランタイムで、つまりプロ
redis-rs の cluster のテストが何度やっても通らなくてハマった。ただし、テスト名を指定して一個ずつであれば成功する。該当するテストは以下。 redis-rs/test_cluster.rs at bd8dc731ded564329d74717dfacc5cce748d891f · mitsuhiko/redis-rs · GitHub このテストは redis server を立ち上げてクラスタを組んでテストを実行している。このとき、各サーバには 7000 番ポートから順番に割り当てている。 redis-rs/cluster.rs at bd8dc731ded564329d74717dfacc5cce748d891f · mitsuhiko/redis-rs · GitHub そして、デフォルトでは cargo test 1 は複数のテストを並列に実行する。直列な世界に生き
Rust で書かれたアプリをビルドするための docker image は以下で公開されている。 hub.docker.com しかし、ここに出ているように COPY . . なんてやっていると、 src/main.rs を触るだけで毎回 cargo install 時に依存するライブラリをすべてダウンロードしてきてコンパイルしてしまい、恐ろしく効率が悪い。 これを避けるには、アプリをビルドする前に依存だけをビルドするレイヤを作っておき、その上に自分のアプリをビルドするレイヤを載せられるといい。しかし、残念なことに、現在の cargo には依存クレートだけをビルドする仕組みがない。じゃあどうするかというのが、以下のエントリに書かれている。 whitfin.io 要点だけ説明すると、まず cargo new --bin my_project とこれからビルドするプロジェクトと同名のダミーの空
&mut は Copy trait を 実装していない 。よって、こちらは実行できない。 fn main() { let x: &mut i32 = &mut 0; { let y = x; println!("y: {}", y); } println!("x: {}", x); } Compiling playground v0.0.1 (/playground) error[E0382]: borrow of moved value: `x` --> src/main.rs:7:23 | 2 | let x: &mut i32 = &mut 0; | - move occurs because `x` has type `&mut i32`, which does not implement the `Copy` trait 3 | { 4 | let y = x; | - valu
咳が止まらない状態で非常に厳しいですが、来ていますので、自分用のメモを残しておきます。 関数型(function type)を見つめるプログラミング / 山下さん 関数の型、 Haskell では第一級 リスト型 a が型なら [a] も型 タプル a b が型なら (a, b) も型 タプル a b が型なら a -> b も型 a が domain 、 b が codomain 高階関数型 domain が関数 (a -> b) -> c codomain が関数 a -> (b -> c) こちらは意識されにくい 2変数関数 (a, b) -> c Haskell 以外でもよく使う セクション (+) は高階関数 a が domain、 b が codomain 逆に、 codomain が関数の高階関数は 2 項演算子 f: a -> a -> a `f` curry :: ((a
今日は Regex Festa の日です Regex Festa に来ていますので、自分のためのメモを残しておきます。 挨拶 wi-fiとお手洗い、喫煙所の案内 Opt Technologies さんについて QRコード読むとアンケートあります いろいろな正規表現、いろいろなオートマトン / @sinya8282 さん 正規表現は好きだが、難しい面も面白い面もある 学部の頃は世界最速のgrepを書いてたりした 院では学術よりな研究 Shibuya.pm#16 が正規表現オンリーなイベントだった 東京素晴らしい! 8年の時を経て復活 正規言語の魅力 オートマトンという単純な計算モデル 台数モデル、トポロジー、論理、文法、最小不動点、といった多用な特徴づけ いろいろな道具が使える 効率的なマッチングにオートマトンやモノイドは役に立っている 正規表現は難しい 曖昧性とキャプチャ 講義ではオートマ
"GO GLOBAL" meetup #1 に参加していますので、自分用のメモを残しておきます。 コーディング試験Codility運用の実態と実績 / @k0000i さん コーディング試験とは : コンピュータサイエンスの理解度を見る amazon, Intel, EA など 多数の言語に対応。VBとか 応募すると、コーディング試験を受けるようメールが来る 2時間で2問を回答する IDEは使用可能 デモテストや練習問題がある 受けておくとスコアを上げられるでしょう 正確性とパフォーマンスのスコアの平均 正確性 : バグがないか パフォーマンススコア : 大きいデータを突っ込んだ場合 コードテストだけで実力を図ることは不可能 能力は面接で直接確認する 例えばGoogleの試験では、バイナリ木を反転できないと落ちる (homebrewの作者談) 時間の使い方も見ている コーディングの過程を動
Haskell Day 2018 に来ましたので、自分用のメモを残しておきます。タグは #HaskellDay です。 作りながら学ぶHaskell入門 / @igrep さん 会場、懇親会のスポンサーは IIJ 様 (ありがとうございます!) mmlh コマンドで各自進める 課題の自動添削、たまにヒントを出してくれる わからなかったらメンターへ聞く Haskellを導入した話とHRRの紹介 / @khibinoさん 2008年 PerlからJavaを呼び出していた メンテナがいない、型検査がない Java, UNIXとの親和性があまりない 検討 => Common Lisp, OCaml, Haskell Haskell の unix パッケージが良かった 2010年から debian lenny, GHC 6.8 (cabal installがまだない) PerlをHaskellに書き
つい半年前に最新のLTSへ対応したばかりなのに、気がつくと LTS-12.0 が出て、 ghc-8.4 を Stack から使えるようになった。コミュニティが活発で、非常にありがたいことである。 ということで、 Haskell入門 のサンプルもLTS-12.0に対応させたブランチを用意した。と言っても、いくつか Stackge の管理下から外れてしまったパッケージが出てきたのを調整したくらいで、コードは何も変更していない。 github.com さらに素晴らしいことに、これらのコードはすべてWindows 10の最新の WSL 上で動くことを確認できた。macOS上で試すのと同様に、 Windows 上でも書籍上のコードをそのまま試せる のだ。10章の Spock を使ったWEBサーバも起動して localhost へアクセスして動かすことができる。Windowsが頑張ったのかGHCが頑張
スペシャルセッションで、弊社のプロダクト開発の現場について話してきました。
拙著 Haskell入門 のサンプルコードは lts-8.24 にしか対応していなかったので、現時点の最新である lts-10.6 に対応させた。変更したのはすべてライブラリがアップデートされたのを追随したもの。 master ではなく lts-10 というブランチにしてあるので、注意。 github.com LTSのアップデートによって ghc-8.2 が使えるようになったのが嬉しい。引き続きHaskellでの開発をお楽しみくださいませ。
Haskell入門 の10章は、 SQLite への依存があったりして Windows で試すのは若干面倒だったので、 Docker for Windows で試せるようにした。 https://github.com/hiratara/Haskell-Nyumon-Sample/compare/docker/chap10 docker/chap10 ブランチを持ってきて、Docker for Windows が動いている環境でこんな感じで動かせる。 $ docker-compose build $ docker-compose run --rm --service-ports weight-recorder # ソースをいじって stack build したいとき $ docker-compose run --rm weight-recorder build weight-recorder
去年 と同様に、今年は Surface Book 2 15” を個人輸入した。 MS製品の個人輸入は3度目 1 で、毎年年末の散財の恒例行事となりつつある。 誤解のないように書いておくと、Surface Book 2は 国内でも販売している 。ただし、 15” はUSのみでの販売であるのと、US配列も国内では手に入らない。 15” は フルパワーだと電源につないでいてもバッテリーが減る という問題はあるものの、実用上そんなに困ってはいない。ゲーミングでむしろ邪魔になるのは高温でパワーが抑制されてしまう方で、これは結構頻繁に遭遇する。ので、ゲーミングに使うときは設定は低めの設定で使っている。PUBGも設定さえきちんとすれば快適に遊べる。 今回のSurface Book 2の事前予約で、MSはいろいろとしくじっている。 redditでは事前予約したのに来ないという悲痛な叫び が多数投稿されてい
Haskell入門 という本を書きました。まだ店頭で買うことはできませんが、amazonでは予約を開始しています。また、電子版も早いうちに出ると聞いているので、そちらもあわせてお求め下さい。技術評論社さんのサイトではサンプルのpdfも読むことができます。 Haskellには すごいH本 というとても良い教科書がすでにありますが、「アプリケーションを作って楽しむ」という観点から書かれた本も欲しいなということを常々感じていました1。すごいH本でHaskellの考え方やプログラムの組み方は学べますが、例えば、プロジェクトを作成して開発を始めるにはどうするかであったり、必要なライブラリをどこから探してどのように自分のプロジェクトへ組み込むのかといった、開発に必要な基本的な事項は自分で学ぶ必要があります。今回執筆した Haskell入門 ではとにかくHaskellでアプリケーションを作ることにフォー
慶応日吉キャンバスにおりますので、自分用のメモを残しておきます。 Opening / lestrrat さん 諸事情で英語(スライドは日本語)。 builderscon は YAPC::Asia の直系のカンファレンス いろんな技術の話を集めたものがbuilderscon 近年、様々な技術が互いに関わり合うようになっている 新しいものを発見する場 (Discover something new) #builderscon @builderscon スポンサーランチあるよ ベストスピーカー賞投票してね パネルで写真撮ってね STAFFは腕章つけてるよ 問い合わせは Twitter か google group のメールで LTの通知していた時間が間違っていたので、ごめんなさい LTはその場の熱意で登壇するのが一番いいです! Desktop Apps with JavaScript / fel
圏論勉強会の資料 によれば、 と自由な構成 について、 を与えると が得られるとある。 自由モナドの文脈でこれを考えると、関手 からモナド (の構造を忘れて関手と思ったもの)への自然変換を定義すれば、自由モナド からモナド への自然変換(正確にはモナドモーフィズム)が得られるという意味となる。 free パッケージにこの対応関係に相当するものは入ってないのかなと探してみたら、 Control.Monad.Free.Church というモジュールで定義されていた。 foldF :: Monad m => (forall x. f x -> m x) -> F f a -> m a The very definition of a free monad is that given a natural transformation you get a monad homomorphism. ht
純粋な関数として定義できるんだけど内部でやってることが複雑な場合、何が起きてるかわからないと心配だからとログを吐く機能をつけると、その時点でそいつは IO アクションになってしまう。ログを吐くという副作用を持つのだから IO になるのは当たり前でそれを避けるべきではないのだけど、ログを吐かなくていいいシチュエーションでは、その計算を純粋な関数として使えたほうが理想的ではある。 そんなことを Identity と 型クラス 使えば簡単にできるんじゃねと思いついたんだけど、 monad-logger でそもそも機能が提供されてた。 runLoggingT や runNoLoggingT でモナドに class MonadLogger が持つロギング用のアクションを追加できるのだけど、前者はモナドが class MonadIO のとき、後者は任意の class Monad について使えるようイン
このように f を定義して実行したい。 f :: String -> String f = show . read main :: IO () main = putStrLn $ f "True" エラーが出る。 Prelude> :l test.hs [1 of 1] Compiling Main ( test.hs, interpreted ) test.hs:5:5: error: • Ambiguous type variable ‘a0’ arising from a use of ‘show’ prevents the constraint ‘(Show a0)’ from being solved. Probable fix: use a type annotation to specify what ‘a0’ should be. These potential insta
DuplicateRecordFields を実装した影響だと思うけど、 ghci で重複するレコード名を定義したときの振る舞いが 7.10 と 8.0 で違ってる。 まず 7.10 。「フィールド定義が消される」という振る舞いに見える。 $ stack --resolver ghc-7.10 ghci Configuring GHCi with the following packages: GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help Prelude> data X = X { x :: Bool } Prelude> data Y = Y { x :: Int } Prelude> let anX = X { x = True } <interactive>:18:11: Constructor ‘X’ d
JavaもHaskellも静的型付けの言語だけど、Javaをやっている人とHaskellをやっている人で、「静的型付け」という言葉で頭に描くイメージはだいぶ違うと思う。 じゃあどう違うのかってのを説明すると小難しい話になりがちなのだけど、Haskell 2010 Language Reportにそれを簡潔に示したいい一文を見つけたので記しておく。 An expression evaluates to a value and has a static type. https://www.haskell.org/onlinereport/haskell2010/haskellch1.html#x6-120001.3 Haskellの式に対して、2つの操作が可能である。1つが式を評価して値を求めること。もう1つが、式を型付けして型を求めること。この観点に立つと、型を持っているのは値ではなく式であ
同僚である@myfinderさんが登壇した、Tech Compass【Vol.07】に出席してきました。マイナビさんにレポートをあげていますので、興味のある方がいらっしゃいましたらご覧ください。 超絶トラフィックをミリ秒で処理する、アドテクノロジー開発現場の話 合わせて読みたい さらなる詳細な内容の書き起こしは、以下のエントリが詳しいです。 2014/1/22 TechCompass #7 超絶トラフィックをミリ秒で処理する、アドテクノロジー開発現場の話 まとめ
HipChatを使う機会があったので、lambdabotをHipChatへ組み込むプラグインを書いてる。とりあえず年内ぎりぎりでなんとなくは動くようになった。 以下、この件に関するメモ。 HipChatのAPI WEB APIとXMPPが使える。メッセージのストリーミングはXMPPを使うことになってるっぽいので、lambdabotのようなユーザの発言に反応するbotはこちらを使ったほうが良い。ただし、WEB APIの方がXMPPでは指定できないような細いことにも対応しているので、いろんな操作をしたければこちらを叩くことになる。 HaskellのXMPP 更新されてそうなpontarius-xmppを使った。network-protocol-xmpp の方も一応は更新されてそう。 HipChatでグループチャットの発言を拾うためにはMUCに対応する必要があるのだが、こちらに対応しているのはh
秋のエンジニアぶつかり稽古 2013で横綱級エンジニアのペアプログラミングを見てきたのだけど、これが想像以上に面白かった。他のイベントでもドンドンやるべき。 「ぶつかり稽古」はあんちぽさん(@kentaroさん)が考案した新しいエンターテインメントペアプログラミングのスタイル。単体テストを書く"受ける側"と、そのテストを通すために実装する"ぶつかる側"が交互にコードを書いて行き、聴衆はそれを観覧する。一種のライブコーディングではあるのだが、2人が実装に関わるため、事前の想定と違う方向にコーディングが進み易く、実装者のよりリアルな問題への対処方法を観察することができる。その人が普段どのようにコードを書いているかも、より正確に想像しやすい。参加者もテストを通す側の立場に立って内容を考えられるので、自分の実装と参加者の実装の癖の違いを楽しむこともできる。ぶつかる側だった@__kanさんは懇親会で
こんな感じでいいのかな。 class HFunctor hf where hfmap :: (Functor f, Functor f') => (forall t . f t -> f' t) -> hf f -> hf f' 以下は、型bを固定した時に定義できる関手F_bで、Functor fを型f bに移すような関手の定義。 data FunctorB b g = FunctorB (g b) deriving (Eq, Show) instance HFunctor (FunctorB b) where hfmap nat (FunctorB x) = FunctorB (nat x) 例えば、以下のようなMaybe関手からList関手への自然変換。 maybeToList :: Maybe a -> [a] maybeToList Nothing = [] maybeToList
次のページ
このページを最初にブックマークしてみませんか?
『Pixel Pedals of Tomakomai』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く