タグ

ブックマーク / paulownia.hatenablog.com (24)

  • 目標設定はしない方が良い - NullPointer's

    測定は有効であるが、手段と目的を正しく設定し測定結果の評価を正しく行わなければ逆に弊害となる。正しくないデータ、正しくない解釈が正しい結果を導くことはない。 有害な測定の身近な例が目標設定による評価制度。社員のパフォーマンスを測定するために目標を設定し達成度を評価するという施策だが、目的も手段も評価方法も何もかも間違っているので何も得られるものはない。 できる事しかやらない 達成しなければ評価されない、未達であればマイナス、ならば自分ができる事しかしなくなる チャレンジを阻害する要因となる 目標と業務の乖離 ITのような変化の早い業種では立てた目標が半年後には業務内容と大きく乖離 無意味な目標になる 生産管理、保守運用、ユーザサポートなど目標を立てにくい業務での弊害 ポジティブな数値目標を立てにくいため、「エラーを3件に抑える」などネガティブな数値を減らすことを目標にしてしまう 問題を報告

    目標設定はしない方が良い - NullPointer's
    ishiduca
    ishiduca 2023/01/01
  • awaitはasync関数の直前に置く必要はない - NullPointer's

    JSのawaitキーワードはasync関数の直前に置く必要はない。関数の直前におく、というのは以下のような書き方 const result = await fetch(url); 必ずしもこのように書く必要はなく、以下のようにも書ける const p = fetch(url); const result = await p; awaitキーワードはpromiseがresolveするのを待つものである。async関数が返すのはpromiseであるので一旦変数に入れてからawaitしても良い。 これはとても重要なテクニックである。これによって複数のasync関数を並行して実行することができるようになるのだ const result1 = await fetch(url1); const result2 = await fetch(url2); という書き方の場合、fetch(url1)の完了を

    awaitはasync関数の直前に置く必要はない - NullPointer's
    ishiduca
    ishiduca 2022/06/14
    この書き方の場合、fetch(url1)の完了を待たずにfetch(url2)の実行が開始される。つまり複数のHTTPリクエストを並行して実行できるのである。JSはシングルスレッドだがfetchのような非同期関数は並行実行が可能なのである。
  • 【スゴ本】ダイナソー・ブルース - NullPointer's

    ダイナソー・ブルース: 恐竜絶滅の謎と科学者たちの戦い 作者:尾上 哲治閑人堂Amazon 巨大隕石衝突による恐竜絶滅説、いいですよね。恐竜という巨大生物はただその存在だけでも十分に魅力的なのに、劇的すぎるラストシーンがコンテンツを完璧なものに仕上げている。 6500万年前、陸・海・空を我が物顔で闊歩し地球を支配していた恐竜たちは天から降って来た巨大な隕石の衝突によって一夜にして滅びました。隕石の衝突で巻き上げられたチリは太陽の光を遮り、世界を闇に包みました。植物は枯れ、全ての命が死に絶えたかに思われました。しかし、命は消えていませんでした。やがて世界に光が戻り、生き残った哺乳類たちは支配者のいなくなった大地へと足を踏み出しました。ここに新たな時代が幕を開けたのです。それは我々人類の時代へと続く道なのでした。 なんという完璧すぎるご都合主義ストーリー。しかし、これは科学が暴き出した事実なの

    【スゴ本】ダイナソー・ブルース - NullPointer's
    ishiduca
    ishiduca 2021/11/02
    隕石衝突による恐竜絶滅説。それを否定するもの、異なる説を提唱するもの、誤った説を提唱し全てを失ったもの、一足遅れて栄光を手にできなかったもの。隕石衝突説に翻弄された科学者達の生き様を描き出した。
  • deltaでgit diffをパワーアップする - NullPointer's

    deltaというrustで書かれた差分表示ツールがある。これをgitと連携するとgit diffの表示がパワーアップする。 サイドバイサイドのdiff表示 シンタックスハイライト 行番号 difftoolで外部ツールと連携すれば同じような結果は得られる。しかし外部ツールが起動するので気軽にdiffを見るには少々重く、外部ツールがvimdiffの場合一度に1ファイルのdiffしか表示できないので地味に使いにくい。deltaならばgit diffと全く同様の使い勝手で軽いというのが推しポイント。 設定方法 deltaはmacならbrewでインストールできる。 brew install git-delta インストールしただけではgitの出力は変わらないので、~/.gitconfig に以下の記述を追加する [core] pager = delta [interactive] diffFilte

    deltaでgit diffをパワーアップする - NullPointer's
    ishiduca
    ishiduca 2021/02/19
  • 思うこと、COVID-19禍 - NullPointer's

    普通に考えれば社交的で人と会うのが好きな陽キャの方が、引きこもり体質で人と接するのが苦手な陰キャよりも遺伝子を残す上で圧倒的に有利な形質だと思うのだが、人と接することで病原体を広めてしまうという状況下においては、その形質は生存に不利になってしまう。 まあ、SARS-CoV-2ウィルスが社交的な形質への淘汰圧となる程のものとは思わんが、それでも、進化とは優れた存在になることではなく環境への適応であるという事や、遺伝子の多様性というものの意味をよく理解できる事例であるなとは思う。ま、形質の淘汰が確定している陰キャが極まった私にはもはやどーでもいい話ですがね。 しかし、いつまで続くのやら。経済への影響で色々ボロボロになる前に終息してほしいと思う一方、終息したら陽キャ共がリモートワークはダメだ!出社しなければ仕事ではないとか言ってリモートワーク撲滅キャンペーン張るのは目に見えているので、リモートと

    思うこと、COVID-19禍 - NullPointer's
    ishiduca
    ishiduca 2021/01/18
    "終息したら陽キャ共がリモートワークはダメだ!出社しなければ仕事ではないとか言ってリモートワーク撲滅キャンペーン張るのは目に見えているので、リモートという働き方が定着す..."
  • IPv4のサイトだけ接続不能になった - NullPointer's

    朝起きてネットにつなぐとGoogleは見れるのだが、それ以外が見えなくなるという現象が発生した。 結論から書くと原因は、ルータ再起動時にIPv4 over IPv6の設定が誤ったものになってしまい、IPv4のサイトに接続できなくなっていたこと。 自宅のインターネット接続はフレッツ光ネクストのIPoE(ocnバーチャルコネクト)。ルータはNECのAterm WX3000HPである。 設定が変わったのは、夜間にルータのファームウェアが自動アップデートされて再起動した時らしい。このルータは回線を自動判定して適切な設定をするのだが、その判定に失敗したようでocnバーチャルコネクトではなくv6プラスが選ばれていた。 ルータを再起動してもv6プラスが選ばれてしまうのでファームウェアアップデートで回線自動判定に問題が出てしまったのかもしれない。 手動設定でocnバーチャルコネクトに変更するとIPv4の接

    IPv4のサイトだけ接続不能になった - NullPointer's
    ishiduca
    ishiduca 2020/12/06
  • それは優生思想そのものですよ - NullPointer's

    最近技術ネタ以外書かないようにしてたんだが 優生思想的な発想がどこまで許されるのかという点について、もちろん「劣性遺伝子保持者」の出産を抑止しようとすることが許されないとしても、例えばある種の国家にとって有益な才能を持つ人々の出産に対して、国が特別に補助金を出すことは許されるか、などは思考実験としてありえそうですね。— 青識亜論(せいしき・あろん) (@BlauerSeelowe) 2020年7月25日 劣性という言葉の使い方は置いといて、これは思考実験どころかナチスが実際にやっていた政策で積極的優生学と呼ばれるものです。『「劣性遺伝子保持者」の出産を抑止しようとすること』のような断種政策だけを優生思想と呼ぶのではないのです。(断種政策のようなやり方は消極的優生学と呼ばれます) つまりこのような議論は『優生思想的な発想』ではなく優生思想そのものです。どこまで許されるかという疑問にお答えする

    それは優生思想そのものですよ - NullPointer's
    ishiduca
    ishiduca 2020/07/27
    コレは良いコレはダメと決めるときにイデオロギーから中立であることは不可能なんですよ。なぜなら何を重要視するか、すなわち何を優れているかという考え方こそがイデオロギーなのですから。
  • async/awaitで配列要素の非同期処理を書く - NullPointer's

    二年ぶりぐらいにNodeを書いているのだが、寝ている間にコールバック地獄はasync/awaitの導入によって終了していたらしい。ほほーう。 で、配列要素の非同期処理である。コールバック時代はnpmのasyncモジュールを使うのが一般的だったが、async/await時代の今はどうするのか? 逐次処理 普通にループすればいいだけ。ま、そのための構文だからな。async/await function someAsyncTask(i) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(i ** 2); }, i * 100); }); } const arr = [1, 2, 3, 4]; (async () => { console.time('series'); const results = []

    async/awaitで配列要素の非同期処理を書く - NullPointer's
    ishiduca
    ishiduca 2019/01/15
  • Node v8.xのHTTP/2を試す - NullPointer's

    Node v8.8.0がリリースされたが、まだLTSにならない。どうやらv8.x LTSは10/31リリース目標でまだお預けらしい。 気を取り直してv8.8.0のchange logを眺めると、今回のリリースからHTTP/2モジュールがデフォルトで有効になったようだ。実験的実装という位置付けは変わらないようだが、とりあえず試してみよう。 まずサーバの鍵と証明書を作る。無論自己署名のオレオレ証明書。HTTP/2は仕様上、非TLSでの通信も可能であるようだが、各ブラウザベンダは非TLS版を実装しない方針のため事実上TLSが必須らしい。 $ openssl genrsa 2048 > server.key $ openssl req -new -key server.key > server.csr $ openssl x509 -req -signkey server.key < server

    Node v8.xのHTTP/2を試す - NullPointer's
    ishiduca
    ishiduca 2017/10/26
  • JSコード片をObjectURL化してWeb Workerで実行 - NullPointer's

    今Web WorkerといえばService Workerの話題ばかりですが、これからするのは普通のWorker(Dedicated Worker)の話です。 Web Workerはバックグラウンドでスクリプトを実行できるものです。 重い処理をJSで実行するとUIが固まって何の操作も受け付けなくなりますが、Workerは別スレッドで実行するのでUI処理に影響することはありません。UIに影響しないようにDOMにアクセスできないなどの制限がありますが、ArrayBufferを渡してバイナリ処理をしたり、fetch APIを使ってデータを取得して処理したり、できることはいろいろあります。 https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API 普通は以下のように別のスクリプトファイルを指定して使いますが… const worke

    JSコード片をObjectURL化してWeb Workerで実行 - NullPointer's
    ishiduca
    ishiduca 2017/09/17
  • XSSを発見した。またはJSダブルクオートのススメ - NullPointer's

    もう修正・対策済みなので喋ってしまいますが、自社のサービスにXSS脆弱性を見つけてしまったのです。 サーバサイドは node.js で、テンプレートエンジンは jade(pugjs)。問題のコードを簡略化して書くと以下のようになります。 head script var hoge = { a: '#{param}', b: 'fuga' }; 恐ろしい事に、このparam変数にはURLのクエリストリングの値が入るのです。はい、もう嫌な予感しかしないですね〜 jadeは < > % " をエスケープしますが、シングルクオートはエスケープせず出力されてしまいます。 ということは、以下のようなパラメータを渡すと ' がそのまま出力されてしまうため window.alert が実行されてしまうんじゃないですかねー。 http://localhost:3000/login?param=',x:wind

    XSSを発見した。またはJSダブルクオートのススメ - NullPointer's
    ishiduca
    ishiduca 2016/09/23
    "それとシングルクオートをエスケープしないテンプレートエンジンは結構あります。HTMLファイルではダブルクオートを使った方がいいかもしれんですねー。"
  • generatorとpromiseで行う非同期処理 - NullPointer's

    2年ぐらい前にgeneratorでコールバック地獄から解放されるぜウェーイと話題になりましたが、今現在、世間ではgeneratorによる非同期処理ってどのくらい使われているんでしょうね? 自分たちのチームでは今更過去のコードを書き直すのも面倒なので使ってません。個人的にはasync/awaitがES.nextに入りそうなので今から使わなくてもいいかなぁ、という感じ。 generatorを使った書き方、よく忘れるのでここにメモしておく まず適当なプロミスを返す関数を定義 'use strict'; // 引数を2倍して解決するpromiseを返す function twice(value) { return Promise.resolve(value * 2); } // 引数ミリ秒後に解決するpromiseを返す function sleep(time) { return new Prom

    generatorとpromiseで行う非同期処理 - NullPointer's
    ishiduca
    ishiduca 2016/06/02
  • obj && obj.hoge && obj.hoge.fuga ... を少し簡単に書く - NullPointer's

    Qiitaにも投稿してみた JSerの皆様につきましては、JSON.parseしたデータなど、多段ネストしたオブジェクトのプロパティにアクセスするとき、 const obj = {hoge: {fuga: {piyo: 1}}}; const value = obj && obj.hoge && obj.hoge.fuga && obj.hoge.fuga.piyo || 0; のようなコードを書いてウンザリしてることと思われます。どうやって回避してますか? 回避策1 const value = propOf(obj, 'hoge', 'fuga', 'piyo') || 0; function propOf(obj, var_args) { let result = obj; const args = Array.prototype.slice.call(arguments, 1); w

    obj && obj.hoge && obj.hoge.fuga ... を少し簡単に書く - NullPointer's
    ishiduca
    ishiduca 2016/05/26
  • 関数の可変長な仮引数を直接コンストラクタに渡す - NullPointer's

    ある関数が受け取る可変長引数を、コンストラクタに直接渡す方法 要するにコンストラクタが可変長引数を受け取るのでファクトリ関数も可変長引数を使えるようにしたいんですよ。 ES2015ならばこう。 'use strict'; class Hoge { constructor(...args) { console.log(`引数は${args.length}個`); } } function createHoge(...args) { return new Hoge(...args); } createHoge(1); createHoge(1, 2) createHoge(1, 2, 3); で、題は次、スプレッド演算子とレストパラメータが使えない場合。LTSのnode.js v4系等ではどうするか? 普通の関数ならapplyでいい。 'use strict'; function hoge(

    関数の可変長な仮引数を直接コンストラクタに渡す - NullPointer's
    ishiduca
    ishiduca 2016/05/24
  • left-padの文字列連結はクソではない - NullPointer's

    例のleftpad, GCを虐めるためとかコンパイラの最適化を確認するために用意する、「無駄に一時オブジェクト量産するクソコードの典型例」みたいな実装なので、こんな小さい関数のために、信頼できない人のコードを、実装を見るでも無く、依存性追加してたってことで、— INADA Naoki (@methane) March 24, 2016 ここから始まる一連の、モジュールの依存性に関する議論はなかなか興味深いが、自分的に気になったのは以下の一節 GCを虐めるためとかコンパイラの最適化を確認するために用意する、「無駄に一時オブジェクト量産するクソコードの典型例」みたいな実装 ソースを見てみようか。 left-pad/index.js at 0e04eb4da3a99003c01392a55fa2fdb99db17641 · azer/left-pad · GitHub なるほど一見するとクソコー

    left-padの文字列連結はクソではない - NullPointer's
    ishiduca
    ishiduca 2016/03/25
  • node v0.12の公開鍵暗号API - NullPointer's

    Added APIs for RSA public/private key encryption/decryption. Node v0.12.0 (Stable) cryptoモジュールに公開鍵暗号のAPIが追加されたそうなので試す。 鍵生成 $ openssl genrsa 2048 > test_private.key $ openssl rsa -pubout < test_private.key > test_public.key コード var crypto = require('crypto'); var fs = require('fs'); // 公開鍵、暗号化用 var publicKey = fs.readFileSync('test_public.key', {encoding: 'ascii'}); // 秘密鍵、復号用 var privateKey = fs.r

    node v0.12の公開鍵暗号API - NullPointer's
  • createObjectURLとは何か? - NullPointer's

    createObjectURL、省メモリだとかaudioの再生がスムーズだとか言われてるけど、これが何物なのか日語の詳しい説明が見当たらないので、自分の理解を書いておく。File APIの仕様書を軽く流し読みして得た理解なので正確さは保証しない。ま、大筋は間違っちゃないと思う。 createObjectURLはFileオブジェクトのURL(Blob URL)を作成するもの。httpスキームのURLがサーバ上のリソースを指しているように、Blob URLは自分のPCのメモリ上にあるリソースを指し示す。 FileReaderのreadAsDataURLメソッドを使うとfileオブジェクトを元にURLを作成できるが、これはData URLで、URLエンコードされたファイルの中身そのもの。よって、ファイルを読み込んでData URLを作成すると、JavaScriptエンジンはファイルサイズに比例

    createObjectURLとは何か? - NullPointer's
    ishiduca
    ishiduca 2014/01/08
  • launchdでmongoDBを自動起動 - NullPointer's

    以下のようなplistを書いて ~/Library/LaunchAgent/local.mongodb.plist に保存。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <false/> <key>RunAtLoad</key> <true/> <key>Label</key> <string>local.mongodb</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/

    launchdでmongoDBを自動起動 - NullPointer's
    ishiduca
    ishiduca 2013/07/08
  • streamを使ってnode.jsで行処理する - NullPointer's

    node.jsのstreamはディスクやネットワークのIO処理を行うためのオブジェクトだが、それ自身ではIO処理を行わず別のstreamの後処理、前処理を行うフィルタとしても使うことができる。npmを探すと書き出す前にデータの暗号化や圧縮を行うstreamライブラリなどが見つかるだろう。 というわけで今度はstream。以前はストリームのラッパークラスを作って行ごとに処理を行うコードを書いたが、あんまりnodeっぽくないので、よりnodeらしくstreamとpipeで行処理を実装してみた。以下ソース。 var stream = require('stream'); var util = require('util'); function LineStream() { this.writable = true; this.readable = true; this.ended = false

    streamを使ってnode.jsで行処理する - NullPointer's
    ishiduca
    ishiduca 2012/12/15
  • node.jsで行処理 - NullPointer's

    追記:今はこちらのライブラリがおすすめ www.npmjs.com node.jsにはテキストを読み込んで行毎に処理できるライブラリがないので、自前で行処理を行う必要がある。 何も考えてないバージョン 何も考えなければ、難しくない。 var fs = require('fs'); var rs = fs.createReadStream("a_big_text_file.txt"); var data = ""; rs.on("data", function(chunk) { data += chunk; }); rs.on("end", function() { var lines = data.split('\n'); lines.forEach(function(line) { console.log(line); }) }); しかし、これはイケてない実装。使い捨てスクリプトで使う

    node.jsで行処理 - NullPointer's
    ishiduca
    ishiduca 2012/09/29