ブックマーク / qiita.com (423)

  • PureScriptレコードの便利な所 - Qiita

    はじめに 空きが多かったので急遽書きました。アドベントカレンダー発参加です。そもそも Qiita への投稿が初めてです。とうかブログ書いたの数年ぶりです。ツッコミ、指摘歓迎です。 僕は元々 Haskell を齧っており、その後 PureScript を勉強しました。今はどちらも個人的に使っていますが、レコード回りでは断然 PureScript が使いやすいと思っています。PureScript のレコードで感動した所を少し書きたいと思います。 レコードがちゃんとした型! Haskell にはレコード構文がありますが、レコード型はありません。実態はタプルで、フィールド名と同名のアクセス関数が定義されます。Haskell 触り初めた人が多く躓くのが、フィールド名の重複問題でしょう。OverloadedRecordFields 拡張、各レコードライブラリの登場、lens などでレコード回りの問題は

    PureScriptレコードの便利な所 - Qiita
    bouzuya
    bouzuya 2017/12/02
  • Mockery を試してみる - Qiita

    vsts-task-libで使われている mockeryの挙動が謎だったので、ハローワールドレベルから試して見た。とっても、しょーもないことでクソハマったが、それも含めて書いておく。 mockery の mock 方式 ドキュメントを読んでいると、node のモックは難しいらしく、普通のフレームワークとは違う方式をとっている様子。基的な話をすると、require(...) が呼ばれたタイミングで、require の先のモジュールをモックにごっそり入れ替えるという方式みたい。 ちなみに、そういう方式なので、 といった感じになっているときに、require('index.js') にも、require('special.js') にもモックをかけられる。つまり、モジュールを読んだ先のモジュールもモックができる。 コードサンプル コードを書いてみよう。vsts-task-lib もそうなので、

    Mockery を試してみる - Qiita
    bouzuya
    bouzuya 2017/11/26
    proxyquire 的なアレか
  • Haskellの入門から中級者になるまでの指針 - Qiita

    プログラミング言語の学習は一般に大変である。 最初にどのようなことをすればいいのか、どのをよむべきなのか等疑問は尽きない。マイナーな言語で情報が少なければなおさらである。 この記事では諸事情でHaskellに入門することになった方にむけて、どのように勉強していくか、参考にすべきや記事を紹介する。 より良い指針にするためにも、指摘、感想等はコメントや私のTwitterアカウント(@Lugendre)に投稿して頂けるとありがたい。 入門〜初心者 環境構築 まずどんなプログラミング言語においても、プログラミングをする環境が必要である。Haskellにおいては Stackと呼ばれるツールをインストールすることによって、コンパイラ(GHC)、モジュールのインストール、ビルドなど自動でやってくれるようになるので、とりあえず脳死でStackをインストールしておけば良い。 以下の@igrepさんの記事

    Haskellの入門から中級者になるまでの指針 - Qiita
    bouzuya
    bouzuya 2017/11/05
  • language server protocolについて (前編) - Qiita

    (今のところ前後編に分ける予定ですが、追記したり構成が変更になったりするかもしれません。予定は未定。) 2016年6月に、Microsoftがlanguage server protocolという仕様を公開しました。 稿では、このlanguage server protocolの存在意義や具体的な実現方法について解説します。 language server protocolの存在意義 language serverとは、IDEが必要とするプログラムのプロジェクト ソースを解析して情報を提供する機能を、サービスとして実現するものです。language serverがサポートされたIDEでは、型やメンバーの自動補完、変数やメンバーの定義参照、変数やメンバーの利用箇所の検索、コードの自動フォーマット、コードのエラー分析や修正案の提示といった、さまざまな機能を実現できます。 Microsoft

    language server protocolについて (前編) - Qiita
    bouzuya
    bouzuya 2017/11/04
  • Linus Torvalds氏によるGitの内部構造の解説 - Qiita

    初めに LinusによるGitのinitial commitのREADMEの訳です。 社内のSVNからの移行を促すために資料を整備していたのですが、SVNでやっていたことを移し替えたりコマンドを覚えたりするより内部構造を知ったほうが早いことに気づきました。 それで、gitの内部構造についての解説資料を色々見ていたのですが、データ構造については原作者のこのREADMEに言い尽くされている気がします。のみならず、gitを使うものが抱くべき精神性のようなものが示されており、深い感銘を覚えました(ヒャッハー)。 README: ”GIT - 馬鹿コンテンツトラッカー” コミットメッセージ:git, 地獄からきたインフォメーションマネージャ gitの意味 "git" は何を意味することも出来る、お前の気分次第だ。 3文字で、発音可能で、実際のUNIXシステムで共通コマンドとして使われていないものであ

    Linus Torvalds氏によるGitの内部構造の解説 - Qiita
    bouzuya
    bouzuya 2017/11/04
    お前、が印象的
  • TypeScript 2.6.1 変更点 - Qiita

    訂正1: コメントで指摘があった Contravariant→反変では? を反映。coとcontra… こんにちはソウゾウ社に転職しました@vvakameです。 今回は結構気持ちよくなる更新が多いです。 TypeScript 2.6.1がアナウンスされました。 What's new in TypeScriptも更新されているようです。 破壊的変更もあるよ! 変更点まとめ 関数の引数の型についてのチェックを強化 Strict function types (d: Dog) => void 的な関数を (a: Animal) => void 的な変数に突っ込めてたのを弾けるようになった タグ付きテンプレートリテラルがキャッシュされるようになった Cached tagged template objects in modules よりECMAScriptの仕様に準拠した形 関数の第一引数に渡され

    TypeScript 2.6.1 変更点 - Qiita
    bouzuya
    bouzuya 2017/11/03
    ええやん
  • Upgrade from Bower to Psc-Package - Qiita

    Even though Bower has worked and continues to work for PureScript, most end user applications benefit greatly by having a static set of dependencies installed. This post will go over the relatively simple steps it takes to upgrade an existing project using Bower to use Psc-Package instead. Why not Bower? Let's review some reasons why you might not want Bower: You probably don't need or even want t

    Upgrade from Bower to Psc-Package - Qiita
    bouzuya
    bouzuya 2017/10/29
  • マルチスレッド/プロセスまとめ(Ruby編) - Qiita

    プログラムの実行単位 固有のメモリ空間を持つ(リソースを共有しない) マルチプロセスの場合、物理/仮想メモリ領域間のアドレス解決のオーバーヘッドが高い。 プロセスの実行単位 共通のメモリ空間を持つ(リソースを共有する) マルチスレッドの場合、物理/仮想メモリ領域間のアドレス解決は発生しない。 ユーザースレッド ユーザー空間(アプリケーションが利用するメモリ空間)を利用 1つのプロセスに複数のスレッドがあっても、1つのスレッドしか実行されない。 OSカーネルを介さないスレッド切り替えのため、スレッド切り替えに伴うオーバーヘッドが少ない。 仮想VM上で実行されるスレッドをグリーンスレッドと呼ぶ。 カーネルスレッド カーネル空間(カーネルが利用するメモリ空間)を利用 1つのプロセスに複数のスレッドがある場合、同時に複数(CPUコア数分)のスレッドを実行できる。 OSカーネルを介するスレッド切り替

    マルチスレッド/プロセスまとめ(Ruby編) - Qiita
    bouzuya
    bouzuya 2017/10/12
  • 型クラスの歴史を軽くひも解く - Qiita

    現在、型クラスは Haskell のみならず、様々な言語で実装されたり似たようなものが実装されている言語機能です。 そういった風潮にも拘わらず、型クラスはどうにも大仰に捉えられがちに感じます。勿論、Haskell でも当初の仕様に比べると、最新の仕様はややこしいし、GHC の拡張や他機能と組み合わせるともっとややこしいのは事実ですが。 ということで、型クラスとはそもそもどういう motivation で発明、導入されたのか、簡単に調べてみます。 Haskell の型クラスは 1992 年の Haskell 1.2 で導入されました。1.2 のレポートに以下のような記述があるので間違ってないはず(他の言語でより早く実装されてるかもしれないけどそこまで調べてると時間なくなるので見ないふりをする。)。 Haskell is a large and complex language. design

    型クラスの歴史を軽くひも解く - Qiita
    bouzuya
    bouzuya 2017/10/11
  • RxJS v5を小さくバンドルする方法。import文の書き方で容量が変わる(v6の書き方も紹介) - Qiita

    RxJS 5はES Modulesの import の書き方で容量が変わる。 利便性と容量のトレードオフの関係⚖ ※注意:この記事はRxJS 5について言及したものだ。RxJS 5では import 文の書き方で容量が変わるが、RxJS 6ではツリーシェイキングが可能な構造になっているので、一般的な書き方で容量がコンパクトになる。RxJS 6についてもこの記事の末尾で検証結果を記載している。 公式ReadMeにも書かれていることだが、バンドルツールで検証したので数値結果とともに4通りの記述方法を示す。 1. 全部まるっとimport import * as Rx from 'rxjs'; Rx.Observable.interval(200) .take(9) .map(x => x + '!!!') .bufferCount(2) .subscribe(value => console.

    RxJS v5を小さくバンドルする方法。import文の書き方で容量が変わる(v6の書き方も紹介) - Qiita
    bouzuya
    bouzuya 2017/09/08
    まるっとインポートするくらいなら個別インポートしたのをプロジェクト内で一箇所にまとめて、それをインポートすれば良いのでは……。
  • Fun Row-typed Validation with Purescript-Home-Run-Ball - Qiita

    A while ago, I talked about using row types to store validations performed on a string, but I was left feeling like the solution I came up with then wasn't quite there yet. Recently, I gave a talk about RowLists at Small FP Conf and was determined to use RowLists to improve on my previous encodings, which gave rise to Home-Run-Ball. This library allows you to specify rules to be applied to validat

    Fun Row-typed Validation with Purescript-Home-Run-Ball - Qiita
    bouzuya
    bouzuya 2017/09/08
  • Safariのオートコンプリートの不思議な挙動 - Qiita

    <form method="post" action="/"> <div> <label> username <input type="text" name="username" /> </label> </div> <div> <label> password <input type="password" name="password" /> </label> </div> <div> <input type="submit" /> </div> </form> とりあえずユーザー名に myname@example.com パスワードに password とか入力して送信して、またこのページに戻ってくるとユーザー名とパスワードが自動入力されます。 同じサイト内のパスワードフィールドのあるフォーム この状態で同じサイト内の他のパスワードフィールドのあるページに移動してみます。 <form

    Safariのオートコンプリートの不思議な挙動 - Qiita
    bouzuya
    bouzuya 2017/08/24
    とんでもないクソ
  • FragmentをonCreateで何も考えずにaddして増殖するケースが後を絶たない件 - Qiita

    連続して3つの現場で同じバグが発生しているアプリを直すという経験をしたので、おそらくかなり多発している気がするこのような不幸が発生することが減るように書き残しておきます。 Fragmentのaddを何も考えずonCreateに書くとActivityのリストア時にリークする 例えば以下のようなごく単純なサンプルアプリ。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportFragmentManager() .beginTransaction()

    FragmentをonCreateで何も考えずにaddして増殖するケースが後を絶たない件 - Qiita
    bouzuya
    bouzuya 2017/08/19
  • --headless時代の本命? Chrome を Node.jsから操作するライブラリ puppeteer について - Qiita

    --headless時代の命? Chrome を Node.jsから操作するライブラリ puppeteer についてJavaScriptChromee2e puppeteer はHeadless Chrome をNode.jsで操作しやすくしたライブラリです。今日(※ 2017/8/17)一日で凄い勢いでGitHubのトレンド入りしており、TLでも話題になっていたので、早速触ってみました。 Node.jsでChromeを操作するというコンテキストにおいては、Nightmare.jsと同じレイヤに属するプロダクトですね。Nightmare.jsはElectronを介在させることで、Chromeの操作を実現していましたが、今年の5月にChromeでheadlessモードが利用可能になって以降1、headless Chromeを直接操作するライブラリが色々と出始めていますね。この系統は、chr

    --headless時代の本命? Chrome を Node.jsから操作するライブラリ puppeteer について - Qiita
    bouzuya
    bouzuya 2017/08/17
  • 【翻訳】なぜPureScriptを使うべきなのか - Qiita

    この記事はPhil Freeman, "Why You Should Use PureScript"の邦訳です。この記事の原著者のフィルさんは、PureScriptのオリジナルの作者さんでもあります。原著はCC BY-NC-SA 3.0でライセンスされており、その許諾に従って私が勝手に翻訳・公開するものです。もし翻訳された内容に誤りなどがあれば、修正しますので私までご連絡ください。また、わりとざっくりした記事なので、HaskellやPureScriptについて知識がないとわかりにくい部分もあるかもしれませんが、ご了承ください。これは私の夏休みの自由研究です。みなさんも夏休みの自由研究にPureScriptはいかがでしょうか。 なぜPureScriptを使うべきか 優れた抽象 PureScriptは『型クラス』を持ち、私たちはこれを使ってとても再利用性の高いコードを書いています。PureSc

    【翻訳】なぜPureScriptを使うべきなのか - Qiita
    bouzuya
    bouzuya 2017/08/17
  • HTTPで「418 I’m a tea pot」を実装してはいけない(2018/10/18追記) - Qiita

    418 I’m a tea potとは ステータスコード 418 I’m a tea potは、エイプリルフールに発行されたジョークRFCであるRFC2324「Hyper Text Coffee Pot Control Protocol」 で定義されているステータスコードです。 Googleでも 418 を返すURLがあります。 Error 418 (I’m a teapot)!? https://www.google.com/teapot 昨日、golangとnodejsにおいて、418 I’m a tea pot の実装を削除するIssue が投げられています。 golang: net/http: remove support for status code 418 I'm a Teapot nodejs: 418 I'm A Teapot #14644 Issue中でも書かれている通

    HTTPで「418 I’m a tea pot」を実装してはいけない(2018/10/18追記) - Qiita
    bouzuya
    bouzuya 2017/08/08
  • `import * as f from 'foo';` のための `foo.d.ts` の書きかた - Qiita

    問題 TypeScript (2.0.10) において次のように利用するための foo.d.ts の書きかたが分からない。 import * as f from 'foo'; const n: number = 123; const s: string = f(n); console.log(s);

    `import * as f from 'foo';` のための `foo.d.ts` の書きかた - Qiita
    bouzuya
    bouzuya 2017/08/08
    社内で役立ったのでブクマ
  • GitHub でテキスト管理を行う GaaTS(GitHub as a Text Storage) について - Qiita

    GitHub でテキスト管理を行う GaaTS(GitHub as a Text Storage) についてまとめてみました。 GaaTS とは? GaaTS とは 「GitHub でテキストを管理しようぜ」 という考え方や取り組みのことです。 ここで「テキスト」とはテキストファイル全般を指します。例を挙げるとキリが無いですが、たとえばメモ、記録、日記、ブログや書籍の原稿、小説、あるいは(しっかり管理するまでもない個人的な)コードや設定ファイルなどがあります。 対象読者 記事では以下の知識レベルを想定しています。 GitGitHub を使っている、あるいは使っていた 「バージョン管理」「UI」「Markdown」といった IT 用語がわかる GaaTS の用途として以下を想定しています。 個人で テキスト管理を行う 複数人で共同作業する等の用途は想定しません ブログのように不特定多

    GitHub でテキスト管理を行う GaaTS(GitHub as a Text Storage) について - Qiita
    bouzuya
    bouzuya 2017/07/18
  • Loader について知っておいたほうが良いこと 3 つ - Qiita

    AsyncTaskLoaderやCursorLoaderなど、AsyncTaskでは不便だったいくつかのことがLoaderという仕組みによって解決されました。 主には、AsyncTaskで悩みの種であったActivityのライフサイクルとの分離が、Loaderによって実現されます。これによって、画面回転したときにAsyncTaskのインスタンスをうまいこと作りなおさないようにしつつも、コールバックを受けるオブジェクトの参照は新しいActivityに紐付いたものにしなければならない、ということも、システムが勝手にやってくれるようになるので、管理がとても楽になります。 一方で、結構扱い方には注意が必要なことがあって、実装者が知った上で使用すべきこともいくつかあります。 Loader のライフサイクル LoaderManager のインスタンス取得は Activity#onStart() より前

    Loader について知っておいたほうが良いこと 3 つ - Qiita
  • もういい加減「nullチェックをしたら安全」とかわけのわからないことを言うのはやめよう - Qiita

    (僕の主観で)クソな記事をたまたま読んでしまってもにょったので愚痴。 Safe Harbor Statement 以下の事項は個人の見解であり所属する組織の公式見解ではありませんし、明日になったら違うことを思っているかもしれませんがそういう類のものです。 某所で危険と言われていたコード public void hogeMethod(Hoge hoge) { //hogeを使った処理 hoge.doSomething(); return; } 安全な理由: NullPointerExceptionが発生しない 僕がいいたかったこと それ、NPEを握りつぶしているだけですから!!!!!!! (とくにJavaの世界においては)非検査例外というのはコーディングバグを示してくれるものですから、へんなnullチェックをいれるのではなく、積極的にNPEを発生させていきましょう。 こういうわけのわからない

    もういい加減「nullチェックをしたら安全」とかわけのわからないことを言うのはやめよう - Qiita
    bouzuya
    bouzuya 2017/06/05
    これ、すごい分かるんだけど、この方針を貫くべきか迷うタイミングがあって……。