タグ

ブックマーク / qiita.com/jkr_2255 (16)

  • Gitとブロックチェーンの関係 - Qiita

    ひょんな拍子に、Bitcoinやブロックチェーンについて調べ始めたのですが、すでに使っているものの中に、ほぼ同じようなものがあることに気づいてしまいました。 なお、この文章は「Gitは知っているけど、ブロックチェーンは何か知らない」というような人を前提としています。また、自分自身の理解が不十分な部分もありますので、マサカリも大歓迎中です。 TL; DR (広義には)Gitツリーもブロックチェーン Bitcoinには、分散系で取引履歴を改ざんされない仕組みがある マージ不能なフォーク Gitの根っこはブロックチェーン 最近、よく話題となっている「ブロックチェーン」ですが、基的には以下の2点が基となる仕組みです。 変更内容をブロックという単位にまとめて、ブロックのハッシュ値を取る 1つ進んだブロックには、前のブロックのハッシュ値を含める こうすることで、「チェーンの途中だけ書き換えることは

    Gitとブロックチェーンの関係 - Qiita
  • 知らないうちにJSON5 in Babel - Qiita

    JSONは身近なフォーマットですが、手で書こうとすれば案外に書きにくいものです。実は、そういった問題をクリアするような「JSON5」というフォーマットがあって、しかも多くの人が利用可能な環境にあったりもします。 JSONの書きにくさ JSONはJavaScriptのオブジェクトリテラルから派生したものですが、データ交換用のフォーマットという性格もあってか、JavaScriptと比べて制約もあります。 オブジェクトのキーは二重引用符で括る必要がある(一重引用符や、何も書かないのは禁止) 文字列も二重引用符で括る必要がある(一重引用符は禁止) ケツカンマ禁止 コメントは入れられない うっかりしていてJSONとしてInvalidなものを作ってしまうことも多いし、設定ファイルにコメントを付けられないのもストレスの一因になったりします。 拡張した、JSON5 そんなJSONの使いにくさへの解決策とし

    知らないうちにJSON5 in Babel - Qiita
  • @babel/pluginのloose/specモードについてまとめ - Qiita

    Babel 7がリリースされたということで、気になる点について調査を行っていたのですが、その過程で一部のプラグインにlooseモードがあるということを知ったので、それについてまとめてみます。 looseモードとは JSXのようなそもそもJavaScriptにないものは別として、Babelのプラグインが変換する各文法構造については、EcmaScriptとして厳密な動作仕様が決まっています。 ただ、変換して実行する過程で、「厳密に言えば仕様どおりになっていなくても、重箱の隅はつつかないから処理が早い/コードが短い、実用充分なコードになればそれでいい」という需要もあります。そういうのに対応するのがlooseモードです。 逆に、「厳密な動作のほうが需要が少ない」と判断された場合には、specで厳密な動作に切り替える、という仕組みのものもあります。 Object.definePropertyと代入の

    @babel/pluginのloose/specモードについてまとめ - Qiita
  • Riotでイベントの最中にエレメントを消した場合の挙動 - Qiita

    Riot.jsなどのJavaScriptフレームワークを使うと、簡単に要素を出したり消したりできます。ただ、時にはそれでややこしい現象になることもあります。 イベントが…うまく伝わらない Riotで作ったモジュールで、「確認済み - 未確認」の状態を制御するものを作っていました。 確認ボタンは未確認の状態でだけ出る 確認ボタンは<button type='submit'>になっていて、押したら確認フラグをセットしてあとはフォーム送信に任せる というような形となっていました。ところが、この確認ボタンを押すと、確認フラグをセットしてボタンを消す…ところまでは動くのですが、ブラウザによってその後に送信されるかされないかが違ってくる、という状況になってしまいました。 原因 どうやら、「イベントを送ったエレメントをイベント中に削除した場合」にどうなるかが、ブラウザによって違ってくるようでした。あるブ

    Riotでイベントの最中にエレメントを消した場合の挙動 - Qiita
  • Riot 3.7と4つの値 - Qiita

    Riot 3.7にアップデートしたところ、今まで動いていたコードがうまく動かなくなってしまいました。 falsyな値 JavaScriptには、falsyな値(条件式に入れるとfalseとして処理される値)が7つあります1。 false null undefined 0 -0 ''(空文字列) NaN Riot 3.7では、このうち数値でない4つ(false、null、undefined、''(空文字列))の挙動が3.6以前と違ってきます。 実際にやってみた まずはこちらのPlunkrを御覧ください。ラジオボタンを生成して、onchangeでvalueをalertするようにしてあるだけですが、false、null、undefined、''の4つは、「on」という妙な値を表示します2。これは、Riotで値のないvalue属性を削除してしまっているからということです(Issue)。そして、va

    Riot 3.7と4つの値 - Qiita
  • 遠隔制御の功罪とRiot - Qiita

    アドベントカレンダーの期間ということで、今までもやっと思っていたことも文章にしてしまおうかと思います。 ここで考える「遠隔制御」 「遠隔制御」といっても、IoTの機器制御とかウイルスでリモートマシンを乗っ取るとか、そういう話をするつもりではありません。ここでいう「遠隔制御」というのは、例えば HTMLの要素へクラスをかけて、それに対してCSSを適用する ある特定のdata-xxx属性を付けたHTML要素について、自動的に特定のJavaScriptを動かす ページ内に適当にRiotのタグを書いて、まとめてriot.mount('*')でマウントする のように、「書いた箇所と別の箇所で何かを制御すること」というような話を意図しています。 遠隔制御の利点 直接書くような方法がある状況で、遠隔制御をするメリットは、「再利用性を上げられる」ことです。CSSを例にしてみると、ページに直書きしてしまうと

    遠隔制御の功罪とRiot - Qiita
  • Bootstrapのウィジェットを手抜きでRiot化 - Qiita

    Bootstrapのウィジェットを見ていたら、Riot.jsで動かすのもそう難しくないかなと思うところがありました。 「手抜き」の意味 「手抜き」と書きましたが、何の手を抜くのかといえば、「Bootstrap用のCSSをそのまま流用する」ということです。デザインにBootstrapを使っている場合、ウィジェット用のCSSまで一になっているので、流用することにかかるコストはほぼありませんし、多くのウィジェットは「CSSで形が決まっていて、jQueryで主にやっているのはクラスの付替えだけ」という感じなので、同じHTML構造をRiotで作ればすぐできそうな感じです。 JavaScriptを見てみる 具体的に、ドロップダウンのJavaScriptを見てみましょう。実際に行っていることは、 展開時…openクラスを追加する、aria-expanded=trueにする、必要ならバックドロップを入れ

    Bootstrapのウィジェットを手抜きでRiot化 - Qiita
  • Riotタグの外側にコードを書く - Qiita

    Riotのタグファイルを作る際に、実はタグの外側にもコードを書けます。 タグファイルとJavaScript ふつう、Riotのタグファイルといえば、以下のようなものをイメージするでしょう。

    Riotタグの外側にコードを書く - Qiita
  • Riot.jsのタグオブジェクトを探す - Qiita

    ページ全体をRiotで作っている場合はあまり問題にならないかもしれませんが、「HTMLの中にRiotタグが散在している」かつ「Riotのマウントと別な箇所でタグを使った処理をしたい」というような状況下では、「あとからページにセットしたRiotタグのオブジェクトを取得したい」という場面が生じてきます。 これは、Riotのデータ構造をたどることで実現可能です。 Riotのデータ構造 グローバルにある状況であればグローバルのriot、const riot = require('riot');としている場合はそのriotを使えますが、riot.util.vdomに、ページへマウントしたタグオブジェクトが配列となって入っています。 そして、タグオブジェクト自体(で、今回のテーマに関係するもの)には、以下のプロパティがあります。 tag.root…対応するDOMノード tag.tags[子タグ名]…こ

    Riot.jsのタグオブジェクトを探す - Qiita
  • Riot.jsで配列を飛ばしつつ回すと、正しいインデックスが取れない - Qiita

    Riot.jsを使っていろいろ組んでいたのですが、ちょっと想定外の挙動をらってしまいました。 each Riotのタグ内では、eachを使って配列を展開することができます(オブジェクトにも使えますが、今回の話題と関係ないので、とりあえずそちらは省略します)。 公式ガイドにも例が上がっていますが、 each={ arr }…arrの中身をオブジェクトとしてタグ内に展開 each={ item in arr }…arrの各要素をitemとして取得できる each={ item, i in arr }…arrの要素はitem、インデックスはiとして取れる というようになっています。ただ、実際には最後のものに落とし穴がありました。 配列を飛ばしてみた Riotのタグ内で直接使える制御構造はeachとifだけですが、「eachで回しつつ、ifで一部だけ取る」ようなことをしたくなることがあります。そ

    Riot.jsで配列を飛ばしつつ回すと、正しいインデックスが取れない - Qiita
  • Redisのpub/sub機能 - Qiita

    RedisはNoSQLのデータストアとして有名ですが、もう1つの機能として、「pub/sub機能」を持っています。もはやSQLと比較するような機能ですらないのですが、軽くまとめてみます。 pub/subとは JavaScriptをやっているとイメージしやすいと思うのですが、onclickに直接イベントを書いてしまうとイベントが1つしか設定できなくなってしまいます。 一方で、addEventListenerを使えば複数イベントをセットできますし、イベントをトリガする側ではイベントがいくつついているかも気にせずに、まとめて発生させることができます。このようにして、「イベントを起こす側」と「イベント処理を行う側」を分離するのがpub/subモデルです。 Redisでのpub/sub まず、受信側がSUBSCRIBE チャンネル名というコマンドをRedisに投げます。ふつうのRedisコマンドは、

    Redisのpub/sub機能 - Qiita
  • Riot+SATで数独ソルバー - Qiita

    以前、ブラウザ内で動くSATソルバーを使ってパズルのソルバーを作っていましたが、じつは表示&入力部分を作るほうが圧倒的に面倒だということもあって、しばらく放置していました。最近知ったRiotを使えば、このあたりの複雑性もなんとかなりそうだと思ったので、アルゴリズム自体に悩むことがほぼない数独で試作してみました(https://jkr2255.github.io/js_puzzle_solvers/sudoku.html)。 入力&表示部分 今までは、「内部的な盤面データ」と「表示」を連動させる処理にてこずっていたのですが、Riotを使えば、内部用のデータを書き換えるだけで、あとは.updateすれば表示は適宜書き換えてくれます。マス目自体は<table>で適宜CSSをかけて表現しています。 ビルド方法 JavaScriptのビルドシステムをbrowserify+rakeで組んでいたのですが

    Riot+SATで数独ソルバー - Qiita
  • P、NP、NP完全、NP困難…似て非なる階層構造 - Qiita

    コンピューターに問題を解かせるときに、それがどの程度の時間を消費するのかも大きな問題です。この観点から、問題はいくつかのパターンに区分されています。ただし、ややこしいです。 おことわり なお、分かりやすさを優先して、厳密でない説明となっている部分があります。たとえば、チューリング完全性を前提に、チューリング機械で計算するものを、通常のコンピューターで計算するものとしています。 ある判定問題(yes/noで答えられる問題)があって、それを解くことのできる多項式時間アルゴリズム(問題の規模に対して、計算時間が規模の多項式で表現される上限を持つ)が存在する場合に、その問題は「Pに属する」ということになります。 なお、この定義にはいくつかの注意点があります。まず、yes/noで答えられない問題(配列のソート)などは、定義上Pには分類されません。また、定数時間の場合や、問題規模の対数で多項式になる場

    P、NP、NP完全、NP困難…似て非なる階層構造 - Qiita
  • 突然のUnbuffered Query…PDO+MySQLで入り込んだ迷宮 - Qiita

    CodeIgniterをバージョンアップしたところ、思わぬ形でPHPのバグを踏んでしまいました。 MySQLのバッファモード トラブルに見舞われるまで知らなかったのですが、PHPからMySQLを使う場合には、「バッファモード」と「非バッファモード」があります(リファレンス)。 バッファモード…SQLを発行すると、自動的にPHP側へ全データを取ってくる。デフォルト設定。 非バッファモード…SQLを発行した段階ではまだデータを取ってこない。 一見すると、非バッファモードのほうが便利そうに見えるのですが、1つ大きな問題があります。非バッファモードの場合、一度投げたクエリを始末し切るまで次のクエリが投げられないのです。もちろん、それを意識した上でPDOなりMySQLiなりを直接叩くのであればまだ使いでもあるのですが、(非バッファモードに対応しない)フレームワーク経由でDB接続するとなると、どこでク

    突然のUnbuffered Query…PDO+MySQLで入り込んだ迷宮 - Qiita
  • JRubyからJavaのクラスを呼んでみる - Qiita

    C言語のライブラリをRubyから使おうとすると、その間をつなぐグルーコードに悩まされることに、往々にしてなりますが、JRubyからJavaのライブラリを呼ぶのは、それよりは楽です。 なお、この記事は適宜追加していく予定です。 まずはrequire まずは、require 'java'と書くと、JRubyのJavaサポートが発動します。また、CRubyでネイティブの.soをrequireできるのと同様に、JRubyでは.jarファイルをrequireすることもできます(なお、JRuby向けなjarをrequireすればそのままJRuby側に現れますが、組み込みのJavaクラスと同じようなやり方でアクセスするために、ふつうのjarをrequireすることも可能です)。 Javaのクラスにアクセスするための手法 Javaのクラスは、java.lang.StringBuilderやorg.apac

    JRubyからJavaのクラスを呼んでみる - Qiita
  • JSビルドツールをRakeで組むことにした - Qiita

    フロントエンドでいろいろ組むWebサイトを作ることになったのですが、いちいち手動ビルドしていては日が暮れるので、ビルドツールも用意することにしました。ただし、よく使われるようなGruntやgulpではなく、Rakeを選択しました。 フロントエンド側のビルドツールの必要性 JavaScriptを補助的にしか使わないようなWebサイトであれば、jQueryを読み込んでちょこちょこ、程度で済むのですが、フロントエンドフレームワークを使うとか、あるいはフロントエンド側でバリバリ計算させるような形で作るとなると、とたんに困ることが出てきます。いちばん大きなこととしては、JavaScriptにモジュール化やその依存管理の機能がないので、そのままではファイル分割すら複雑になってしまう、ということがあります。 また、直接JavaScriptで書くのでなくAltJSで書くとか、あとはファイルの結合・ミニファ

    JSビルドツールをRakeで組むことにした - Qiita
  • 1