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

  • Sinon.JS でテストダブルを理解する - Qiita

    スパイ、スタブ、モック、フェイク、ダミー、それぞれの役割って言えますか? 私はつい最近まで言えませんでした。 だいぶ前に Sinon.JS というパッケージがある事を知ったのですが最近改めてドキュメントを読んだところ、これらを学ぶのにとても適している事に気づきました。Sinon.JS ではスパイやスタブなどが spy stub など独立したオブジェクトとして存在していて、それぞれのメソッド名も returns() notCalled() withArgs() など役割をそのまま表現した名前になっています。 APIリファレンスを眺めていたら spy.returns() メソッドは存在しない事に気づいてしまいました。 今まで何でもかんでも spyXX のように変数名を付けて、コール回数やら引数の検証やら戻り値の変更やら、ひとつのオブジェクトで全てを検証しようと詰め込んでいましたが、これは間違い

    Sinon.JS でテストダブルを理解する - Qiita
    bouzuya
    bouzuya 2018/04/14
  • Using IxMonad to enforce good hamburger building in Purescript - Qiita

    Using IxMonad to enforce good hamburger building in Purescriptpurescript Recently, I came across a use for indexed monads to do some mutations on a foreign data type and keep track of its actual type as it changed, with a final operation for extracting out the result. While my implementation of this is hacky, there are some cool uses of IxMonad out there that provide useful restrictions, like the

    Using IxMonad to enforce good hamburger building in Purescript - Qiita
    bouzuya
    bouzuya 2018/04/14
  • Conduitの使い方 - Qiita

    使えると便利、Conduitの大雑把な使い方です。 目次 使い始める前に Sourceから全ての値をリストで取得する 複数のSourceの全ての値をリストで取得する 自作Sourceを作成する 出力可能な値の残っているSourceを再利用する Sinkに流れてきた値を全て出力する 自作Sinkを作成する Conduitで流れているデータを加工する 自作Conduitの作成 使い始める前に 使い始める前に、Hackage: conduitから適切な関数を選択する為の最低限の知識として次の事を覚えましょう。 何するものなの? Conduitを構成するベースの型1つ 基の3つの型 2つのオマケの型 何をするものなのか? Conduitはストリームデータを処理する為のライブラリです。 ストリームデータ処理の流れを「データの取得」「データの加工」「最終処理」の3段階に分けて記述していきます。 使用

    Conduitの使い方 - Qiita
    bouzuya
    bouzuya 2018/04/06
  • Web Pushのサーバ認証VAPIDを試してみる (旧題: GCMの登録が不要になったChromeのWeb Pushを試してみる)

    Web Pushのサーバ認証VAPIDを試してみる (旧題: GCMの登録が不要になったChromeのWeb Pushを試してみる)HTML5ChromeFirefoxPush通知FirebaseCloudMessaging ※ 2018-2-26: VAPIDのRFC 8292対応ですが、FirefoxとMicrosoft Edgeが対応済みで、Chromeでも少々手を加えれば使えるようです。 W3CとIETFで標準化が進むWeb Pushですが、Firefoxでは事前の設定を特に必要としないのに対し、ChromeではAndroidアプリと同様にGoogle Cloud Messaging (GCM)の登録とキーやIDの取得が必要となります。従って、Webアプリ側では、Chrome専用のマニフェスト記述が、アプリケーションサーバ側ではGCMサーバの認証用に専用のHTTPヘッダの記述が必要

    Web Pushのサーバ認証VAPIDを試してみる (旧題: GCMの登録が不要になったChromeのWeb Pushを試してみる)
    bouzuya
    bouzuya 2018/04/05
  • Show型クラス 〜型クラスで見るPureScript〜 - Qiita

    ※この記事は「型クラスで見るPureSciript」の連載記事です。 ショーの開幕 この記事を読みに来てくださった皆様、ありがとうございます。「型クラスで見るPureSciript」第1回Show型クラスの幕開けです。 最初はウォーミングアップ程度の話題ですが、しばしの間、お付き合いください。 型クラスとは まずはじめに型クラスとは何であるかを簡単に説明しましょう。 型クラスというのはPureScriptを特徴付ける機能の1つであり、Javaや.NETにおけるInterfaceのような役割を担う機能です。型クラスの定義は次のように記述します。

    Show型クラス 〜型クラスで見るPureScript〜 - Qiita
    bouzuya
    bouzuya 2018/04/02
  • Making a new library and using it in your own Psc-Package set - Qiita

    Making a new library and using it in your own Psc-Package setpurescript For two years now, I've been writing PureScript-Node programs that need to spawn a child process and read the output out, and this whole time, I've been writing out the same code over and over for no real good reason. Recently, I finally decided to extract this repeated code out to a library, so I wouldn't have to maintain all

    Making a new library and using it in your own Psc-Package set - Qiita
    bouzuya
    bouzuya 2018/04/01
  • RxJS 6.0 変更点まとめ(適宜更新) - Qiita

    Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationWhat you can do with signing up

    RxJS 6.0 変更点まとめ(適宜更新) - Qiita
    bouzuya
    bouzuya 2018/03/29
  • トランザクションの基本 - Qiita

    来はこの話はトランザクション技術アドベントカレンダー初日に書くべきだったかも知れない。 トランザクションとは「1つ以上の連続した操作の単位」であり、ACID特性を満たすとよく言われている。(というか先日も何度も何度も無意識にACIDという言葉を使っていた) ACIDとは ACID(えいしっど、もしくはあしっどと読む人も居るしどっちでもいいと思う)はWikipediaにも説明があるが、そこの説明は僕にはイマイチだと感じたので僕の言葉で今一度説明する。 Atomicity Consistency Isolation Durabilityの4つがトランザクションの満たすべき性質であると提唱されており、その4つの頭文字を取ってACIDと呼ぶ。それぞれの性質の内容に付いて書くと Atomicityとは トランザクションが残す結果が、すべてのトランザクション内操作が成功したか、もしくはすべて無かった

    トランザクションの基本 - Qiita
    bouzuya
    bouzuya 2018/03/26
    "DB開発者がせっかくトランザクションの仕組みを作りこんだ割にアプリ開発者たち(とORマッパ作者たち)はほとんどトランザクションを使わず、データのValidationやらユーザレベルでの不変条件保護に労力を割いている。"
  • Row-typed fun for building SQLite Queries - Qiita

    Recently, I've been wanting to make some fairly naive SQLite queries using information from record types to map what inputs should go where and what type the output should be parsed to. Well, to work with the generic information of a record type, I pull out the RowToList tricks to get to work. Select All The "simplest" of queries involves defining what record you want the results in, which means t

    Row-typed fun for building SQLite Queries - Qiita
    bouzuya
    bouzuya 2018/03/25
  • 読み手にやさしい if 文を書きたい - Qiita

    // 1~100のランダムな値を得る const getRandomScore = (): number => Math.floor(Math.random() * 101); const value = getRandomScore(); // 以下の様に書けば視覚的にすぐに分かる if (20 <= value && value <= 80) { console.log(`値は範囲内です:${value}`); } else { console.log(`値は範囲外です:${value}`); }

    読み手にやさしい if 文を書きたい - Qiita
    bouzuya
    bouzuya 2018/03/19
    JavaScript / TypeScript の場合、 true / false との比較は truthy / falsy があるので、意図的にそうすることもある。
  • コンテナ・デザイン・パターンの論文要約  - Qiita

    Brendan Burns, David Oppenheimerらの論文「Design patterns for container-based distributed systems」を読んで、コンテナを活用したシステム設計や開発に、とても有用と感じたので、図を中心にした要約にしてみた。 要約内容に誤りや理解不足な部分もあると思うので、原文も参照していただきたい。また、自身の理解のために、論文中に無い図を加えた点、独自の注釈も加えている。 背景 コンテナ化されたソフトウェアコンポーネントから構築されたマイクロサービスアーキテクチャの人気が高まり、分散システム開発においても同様の革命が起っている。 コンテナの境界の壁は、分散システムの基的なオブジェクトの境界に適している。そこで、コンテナを活用して、コードの低レベルの詳細を抽象化し、アプリケーションやアルゴリズムに共通する高レベルのパター

    コンテナ・デザイン・パターンの論文要約  - Qiita
    bouzuya
    bouzuya 2018/03/07
  • hyperHTMLやlit-htmlが効率的に再描画を行う仕組み - Qiita

    昨今のJavaScriptのViewライブラリは以下の特徴を備えています。 DOM構造を宣言的に記述できる 動的な値のマッピングを宣言的に記述できる 再描画の際、DOM構造の変異を最小限に留める 例えば、ReactであればJSXと仮想DOMによるdiff/patch処理によってこれらを実現しています。 一方、hyperHTML(およびlit-html)はECMAScriptの構文であるTagged Template Literalを使ってこれらの機能を実現するライブラリです。 import hyper from 'hyperhtml/esm'; const render = () => { hyper(document.getElementById('container'))` <h1>Hello</h1> <p>It is ${new Date().toLocaleString()}</

    hyperHTMLやlit-htmlが効率的に再描画を行う仕組み - Qiita
    bouzuya
    bouzuya 2018/03/05
  • PureScriptのInt型とは何であるか? - Qiita

    PureScriptのInt型って何だろう? 最近、PureScriptという言語の勉強を始めました。PureScriptというのはJavaSciptエンジン上で動作する関数型言語です。haskellライクな文法で記述することができ、コンパイルするとJavaScriptのプログラムコードが生成されて、JavaScriptエンジン上で動作するという仕組みになっています。 JavaScriptのコードに変換されるので、JavaScriptで記述することができない機能は、当然、PureScriptでも記述できません。幸いにも、JavaScriptの関数は、関数オブジェクトと呼ばれる第一級オブジェクトなので、関数型アルゴリズムを記述することができます。そのおかげで、PureScriptという関数型言語が成立しているのです。 また、JavaScriptでプリミティブ型とされるデータ型の多くは、Pur

    PureScriptのInt型とは何であるか? - Qiita
    bouzuya
    bouzuya 2018/03/05
  • textareaが異常に重い時はspellcheck="false" - Qiita

    経緯 現在英作文を書くwebサービス趣味で作っているが、50words程度の文章であってもtextareaに書き込むとページが非常に重くなり、一文字打つのにすら大幅な遅延が発生してしまう。 (※写真の文章はアメリカトランプ大統領の一般教書演説の一部です) これは困った、と思い色々調べた。 結果 この赤線が原因だった。 この赤線はHTMLのspellcheck属性によるもの。テキストを編集可能な要素について、スペルミスがあったら教えてくれるらしい。現在は日語には未対応らしいが、英文はちゃんとチェックしてくれる。(の割に、"than"とか"year"とか絶対スペルミスなさそうな単語にもついてるのはなぜだろう・・・) 文章を入力するたびにいちいちスペルチェックをするので、こんなに重くなっていたようだ。 ちなみに、下のリンクにあるように、現在ほとんどのブラウザがtextareaについてはデフ

    textareaが異常に重い時はspellcheck="false" - Qiita
    bouzuya
    bouzuya 2018/02/27
  • あなたはDRY原則を誤認している? - Qiita

    DRY原則。 WebフレームワークRuby on Railsが基理念のひとつとして採用している有名なソフトウェア開発原則です。素晴らしい原則なのですが、最近Railsを始めた人や新卒のエンジニアさんなど、DRY原則を誤認してしまう人が非常に多い為、DRY原則に関する説明をQiitaにまとめておくことにします。 よくある間違った認識 DRY原則を誤認しているとはどういうことなのか?最も多いのが「DRYとはコードを重複させないという意味である」と認識しているケースです。当然、コードを重複させないという部分もDRYの一部ではあるのですが、これではソースコードだけに着目しているので、OAOO(Once And Only Once)原則に近い考え方になってしまいます。 OAOOとは何か 厳密な定義を書かないと斧が飛んできそうですが、長文になってしまうのであえて一言で説明すると、「コードを重複させな

    あなたはDRY原則を誤認している? - Qiita
    bouzuya
    bouzuya 2018/02/03
  • 連想配列はMapを使うべきは本当か? - Qiita

    ES2015が出るまではJavaScriptで連想配列を扱う場合はObjectを使用するのが通常でした。ES2015からMapが登場し、こちらを使用すべきと言われています。それは果たして当なのでしょうか? 連想配列とは何か? 単純な配列は単なる値の順列と考えられます。値が一つ一つ順番に並んでおり、入っている値の数(同じオブジェクトが重複して入っている場合もある)がその配列の長さであり、0または1から始まるインデックスでアクセスできるというものです。複数のオブジェクトをひとまとめに扱う場合、この単純な配列であってもそれなりに使用できますが、インデックスは整数しか使えず、飛び飛びに使うことはできず1、ある値を探すには順番に見に行くしか無いなど、色々と不便なところがあります。そこで、インデックスに任意の名前をつけて、目的の値をすばやく取得できるようにしたのが連想配列です。 連想配列の基要件

    連想配列はMapを使うべきは本当か? - Qiita
    bouzuya
    bouzuya 2018/01/22
  • OSSのデータ可視化ツール「Metabase」が超使いやすい - Qiita

    Metabase、まじでイケてる。 1日で、Re:Dashから乗り換えました。 Metabaseとは OSSのデータ可視化ツール。Re:Dashとかと同じ類。 AWSとかに乗せて、誰もが見れるダッシュボードを作ったりする時に使うと、俺かっけーってなります。 スクリーンショット 実際に社内で運用している様子をモザイク付きでお見せします。 毎日みているダッシュボード。これの4倍くらいの数値見てる。 ダッシュボードの編集。マウスで簡単に位置や大きさの変更ができる。 クエリビルダー的なやつがあり、グルーピングとか超絶便利。SQL書けない人でも、単一テーブルとかだったら余裕かと。 グラフ化も簡単。 SQLでのクエリ編集画面。ちゃんと補完してくれる。 Metabaseの良い所 見た目が格好いい。 インストールが簡単。 openjdk-8-jdk入れて、jarファイル置くだけ。 豊富なデータソースに対応

    OSSのデータ可視化ツール「Metabase」が超使いやすい - Qiita
    bouzuya
    bouzuya 2018/01/10
  • いろんな言語で「Optional(2018)年」やってみよう - Qiita

    元ネタ Optional(2018)年あけましておめでとうございます マジレスすると『Optional(2018)年』を恐れる必要はない Optional(2018)と表示された原因 Swift 2からSwift 3になった際に、DateComponents 構造体のyearやmonthプロパティがOptional 型になったため 他の言語でも同様の破壊的変更があった場合どうなるか?

    いろんな言語で「Optional(2018)年」やってみよう - Qiita
    bouzuya
    bouzuya 2018/01/10
  • Nyquistより先に作ったセパレート5x6キーボード - Qiita

    Ergodoxを手に入れたものの、実は自作キーボードだと半額以下で作れるとの情報をもとにを色々調べているうちに、レツプリにたどり着いたのですが、 当時、唯一レツプリのPCBを取り扱ってたSwitchTopは在庫切れだった為、代わりに5x6のMacroPadというPCBを2枚買って見ました。 (その後すぐに、縁あってレツプリの第1回グループバイに参加することができましたが) Redditで情報を探しても、MacroPadのPCBでLet'sSplitと同じ様なセパレートタイプにするのは難しいなどの情報が書かれていたのでダメ元くらいの気持ちでいました。 以下が実際に入手したMacroPadPCBです。 また、Let'sSplitとは違いセパレートキーボードとして設計されていない為、ProMicroの位置は左右対称とはなりません。 また、シリアルケーブルを接続するTRRSジャックを取り付けるスル

    Nyquistより先に作ったセパレート5x6キーボード - Qiita
    bouzuya
    bouzuya 2018/01/09
    「ぼくは加工業者に頼もう」って気持ちになった。
  • Mitosis Keyboardを組み立ててみました - Qiita

    この記事について この記事は、自作キーボード Advent Calendar 2017の15日目の記事です。みなさんの記事がどれも素晴らしく、こんな記事でよいのかなと不安ですが、よろしくお願いします。 最近、時々知人と集まってオープンソースハードウェアのキーボードを組み立ててみたり、気になるところに手を加えてみたりしています。その中で、Mitosis Keyboardというオープンソースハードウェアのキーボードを組み立ててみましたので、その話をしたいと思います。 もともとあるブログの記事で知ったのですが、Mitosisなる自作キーボードがRedditにて公開されています。 詳細はRedditを見ていただいたほうが良いとは思いますが、このMitosis Keyboardの特徴は以下の通りです。 Ergodox等と同じく、左右分離型のコンパクトキーボード PC(正確にはUSBドングル)とキーボ

    Mitosis Keyboardを組み立ててみました - Qiita
    bouzuya
    bouzuya 2018/01/09
    左右分離かつ無線だ