タグ

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

  • ■ - NullPointer's

    おそらく悪意はないのだろうけど、「という程度の内容」のような上から目線の言葉、好きじゃないな ゼノブレイドシリーズのモノリスソフトのブログ記事。我々の業界だと、CI環境なんて息するように作るので、ゲーム業界だと、Jenkinsfile書いてますという程度の内容でニュースブログが取り上げるのが新鮮だった。Smoke Testの中身の方を見たい! https://t.co/BhEmJdDUQy— giginet (@giginet) 2022年11月4日 「という程度の内容」だったとしても、このgamemakerというサイトはゲーム開発の初学者も意識したサイトに見えるのでJenkins入門的なブログ記事を取り上げることは驚くような事でもないし、普通に意義があると思うんですけどね・・・ あとさー、我々の業界の人間は会社のテックブログで執筆する機会は多いわけで、「という程度の内容」みたいなレベルが

    ■ - NullPointer's
    UDONCHAN
    UDONCHAN 2022/11/07
    それな
  • 公開鍵は暗号よりも電子署名 - NullPointer's

    こちらはSSHではRSA公開鍵は電子署名に使っているのであって、暗号化をしているのではないという記事。 qiita.com 実はRSAを暗号として用いるシーンは減ってきている。 現在、我々に最も馴染みのあるRSAの用途はSSL/TLSだろう。TLSでは文の暗号化は共通鍵暗号で行われており、RSAで文を暗号化していない。ではRSAの用途は何かというと2つあって、1つは共通鍵をサーバクライアントの間で安全に共有(鍵交換)するための暗号化。もう1つはサーバ証明書を検証するための電子署名である。 ところが、TLS v1.3では鍵交換からRSAが外され、 RSAの用途はサーバ証明書の検証のみとなった。 削除されたきっかけはあのスノーデン事件らしい。共通鍵をRSAで暗号化して共有した場合、仮に暗号通信を全て記録している者がいたとして、その者にサーバの秘密鍵が奪われると通信内容が全て解読されてしまう

    公開鍵は暗号よりも電子署名 - NullPointer's
    UDONCHAN
    UDONCHAN 2020/04/22
  • 配列そのものを大小比較する - NullPointer's

    配列の要素ではなく、配列それ自体の大小比較をしてみる JavaScript [1, 11, 3] > [1, 2, 4] false JSで配列を順序比較すると文字列に変換されて辞書順比較を行うためfalseとなる。順序比較するとまずToPrimitiveが呼ばれるがArrayはToPrimitiveを実装してない。その場合はvalueOfが呼ばれ、ArrayのvalueOfは自分自身を返す。valueOfがObjectを返した場合はtoStringを呼ぶ、という仕様らしい。 Ruby [1, 11, 3] > [1, 2, 4] 例外がスローされる。Rubyは演算子もメソッドであり、Arrayは > メソッドを実装していないのでNoMethodError。 Java public class Hoge { public static void main(String[] args) {

    配列そのものを大小比較する - NullPointer's
    UDONCHAN
    UDONCHAN 2019/08/21
    おもしろい
  • ブラウザはport 6000にアクセスできない - NullPointer's Blog

    知らんかった… Dockerでローカル環境を構築していた時にブラウザはport 6000にアクセスできないことを知った。例えばdockerで以下のようにnginxを起動。 docker run -p 6000:80 -v $(pwd)/htdocs:/usr/share/nginx/html --name web nginx:latest chromeで http://localhost:6000/ にアクセスすると などというメッセージが表示される。dockerネットワークの設定が何か間違ってる?nginxのdocument rootの場所が間違ってる?などと思ったが特に問題はなく困惑していたところ、何気なくcurlでアクセスすると普通にhtmlが帰ってくるではないか。もしかしてブラウザ側?となった。 どうやら ERR_UNSAFE_PORTというのがミソのようで、実はブラウザは6000

    ブラウザはport 6000にアクセスできない - NullPointer's Blog
    UDONCHAN
    UDONCHAN 2018/11/03
    へーへー、知らなかった
  • DBのタイムアウトはサーバ側をクライアント側より長くする - NullPointer's

    多くのデータベースにはコネクションのタイムアウトという設定が存在します。指定した期間使われていないコネクションを解放するというもので、クライアント、サーバ双方で設定可能になっています。 タイムアウトはサーバ側の寿命がクライアント側よりも長くなるように設定すべきです。逆にしてしまうとサーバ側で切断されたコネクションに対してクライアントが読み書きを行おうとしてエラーになってしまうことがあります。 MySQLとnode.jsで再現すると以下のようになります。 $ node index.js [ RowDataPacket { Variable_name: 'wait_timeout', Value: '28800' } ] wait 11 seconds [ RowDataPacket { '1': 1 } ] end $ $ mysql -u root -e "set global wait_

    DBのタイムアウトはサーバ側をクライアント側より長くする - NullPointer's
    UDONCHAN
    UDONCHAN 2018/02/21
    まじかよ“Redisのようにデフォルトでサーバ側のタイムアウトが無限大となっているDBも”
  • JavaScript配列の空要素の話 - NullPointer's

    gfx.hatenablog.com 配列の空要素の問題ですね。容量は確保されてるが値が(undefinedさえも)入っていない状態。 $ node -p -e "new Array(3)" [ <3 empty items> ] この配列のlengthは3になるのだが、forEachなどのイテレーション関数では空要素は列挙されない。 $ node -p -e "new Array(3).length" 3 $ node -e "new Array(3).forEach(i => console.log(i))" # 何も出力されない リンク先ではArray.fromやスプレッド演算子を使って、undefinedをセットするコードが紹介されているが、自分はこういうときはfillを使っている。 $ node -p -e "new Array(2).fill()" [ undefined, u

    JavaScript配列の空要素の話 - NullPointer's
    UDONCHAN
    UDONCHAN 2018/01/28
    JSの `new Array()` の挙動はホントどうにかならなかったのかという気持ちしかない。
  • ちょっと変わったフィボナッチ数の作り方 - NullPointer's

    15歳女子が「フィボナッチ数列は2進数でも美しいのか」を考察 算数・数学の自由研究作品コンクール「MATHコン」で日数学検定協会賞を受賞 | プレスリリース | 公益財団法人 日数学検定協会 フィボナッチと聞いて、昔編み出した少し変わったフィボナッチ数の作り方を思い出した。とは言っても、俺が思いつくレベルの話なのでとっくに誰かが考えているだろうけど。 以下のようなオブジェクトを定義する あるオブジェクトについて 2回だけクローンを作れる 2回クローンを作ると死ぬ このオブジェクトに1ターンに1つずつクローンを作らせていくと、各ターンに生きているオブジェクトの総数がなんとフィボナッチ数になるのです。 思い出しながら適当に書いたコードはこんな感じ。 require 'set' class Cell def initialize(life) @count = life @life = lif

    ちょっと変わったフィボナッチ数の作り方 - NullPointer's
    UDONCHAN
    UDONCHAN 2017/12/31
    おもしろい
  • Node.js v8とasync function - NullPointer's

    Node.js v8.0.0のリリースが近い。v8は10月にリリースされるLTSの候補版、マイルストーンとして非常に重要なリリースとなる。 LTSラベルは4系列がArgon(アルゴン)、6系列がBoron(ホウ素)だったので、8系列のLTSはCarbon(炭素)あたりが有力なんすかね? むしろ10系列はどうするんだろう。Dで始まる元素なんて知らんぞww ※ v8と書くとJSエンジンのV8と紛らわしいので、以後はv8.xと書きます。 async function (asyna & await) Node.js v8.xの目玉機能、それは何と言ってもasync function。こいつはv7.6で既に使用可能になっているのだが、格的に普及するのはLTSとなるv8.x以降だろう。正気ならv7.xとか番環境で使わないっしょ? 変態でない普通のプログラマが使うようになるのはLTSからですよ。 ん

    Node.js v8とasync function - NullPointer's
    UDONCHAN
    UDONCHAN 2017/05/02
  • node.jsでモジュールを再ロードする - NullPointer's

    requireされたモジュールは、モジュールのフルパスをキーとしてrequire.cacheというオブジェクトに格納されており、これを削除すればモジュールを再びロードできるらしい。というわけでテスト。 # main.js console.log(process.pid); setInterval(function() { var a = require('./a'); console.log(a.value); }, 3000); process.on('SIGINT', function() { console.log('clear module a'); var key = require.resolve('./a'); delete require.cache[key]; }); # a.js console.log('load module a'); exports.value =

    node.jsでモジュールを再ロードする - NullPointer's
    UDONCHAN
    UDONCHAN 2016/12/13
    おもしろい
  • 乱数にコクを出す? - NullPointer's

    togetter.com コクとはww? count = (ARGV[0] || 1).to_i 10000.times do puts Array.new(count) { rand() }.inject(&:+) / count end rand.rbとして保存 $ ruby rand.rb 1 | pbcopy これをgoogleスプレッドシートでグラフにする rand - Google スプレッドシート なるほど正規分布っぽくなる たとえば分子のエネルギーなどは正規分布なので自然界の挙動をエミュレートするには単純な乱数よりいいかもしれませんね よしコクのある乱数の実際のサンプルをアップした。こうやって並べてみると、味の違いは一目瞭然。 https://t.co/esbYaYWYLh— 深津 貴之 (@fladdict) November 4, 2016 なるほどなるほど 中心極限定

    UDONCHAN
    UDONCHAN 2016/11/05
    こういうの好き
  • node v6 LTSリリース - NullPointer's

    node v6.9.0が新しいLTSライン(Boron)としてリリースされた。 Node v6.9.0 (LTS) | Node.js v4系列からアップグレードするにあたって、大きな変更点は ECMAScript機能の追加 Bufferコンストラクタの非推奨化 npm v3 その他はリンク先を参照。 新しいECMAScript機能 node v6系では import を除くECMAScript 2015 の仕様がほぼ網羅されている。さらにES2016のArray#includesも使用できる。 The spread operator for arrays and function calls(スプレッド演算子) const arr = [1, 2, 3]; function hoge(a,b,c) { return a + b + c; } hoge(...a); // => 6 con

    node v6 LTSリリース - NullPointer's
    UDONCHAN
    UDONCHAN 2016/10/20
  • クロージャとbindの引数束縛パフォーマンス - NullPointer's

    JavaScriptで引数を束縛したい場合、クロージャかbindを使うのだが… function plus(x, y) { return x + y; } function multiply(x, y) { return x * y; } // Function.prototype.bindで束縛 const plus1 = plus.bind(null, 1); plus1(5); // => 6 // closureで束縛 function closure(func, param) { return function(index) { return func(param, index); }; } const twice = closure(multiply, 2); twice(5); // => 10 なんとなく、どちらが速いのか気になったので比べてみた。 console.time

    クロージャとbindの引数束縛パフォーマンス - NullPointer's
    UDONCHAN
    UDONCHAN 2016/06/09
    まじか『ver.4とver.6でFunction.prototype.bindが10倍も高速になっている』
  • 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
    UDONCHAN
    UDONCHAN 2016/06/03
  • 高速な同一の文字列結合 - NullPointer's

    クソではないと言ったが、同一の文字列連結に関してはもっと高速なアルゴリズムがある。 たとえばxからxxxxxxxxという文字列を生成するなら x + x xx + xx xxxx + xxxx 普通にループすると8回の結合が必要だが3回で済む。このアルゴリズムを適用したパディングのコードを書くと以下のようになる。 'use strict'; function leftpad4(str, len, ch) { str = String(str); if (!ch && ch !== 0) ch = ' '; ch = String(ch); var max = len - str.length; for (var i = ch.length; i < max; i = i << 1) { ch += ch; } return ch.slice(0, max) + str; } では速度を比較

    高速な同一の文字列結合 - NullPointer's
    UDONCHAN
    UDONCHAN 2016/03/25
  • 不思議なfizzbuzz - NullPointer's

    社内チャットにて > @here 面白いfizz buzz実装がありました。 https://gist.github.com/kazuho/3300555 > Javaではできなさそうなfizz buzzですね^^ > ですねぇ~(^ω^) https://gist.github.com/kazuho/3300555 innerクラスとか匿名クラス駆使すればできそうな気がしたので昼休みに書いてみた。 gist.github.com javacすると13個もclassファイルが生成されてウンザリですわw lambdaを使ったJava 8版も書いた。ネストがだいぶ浅くなって良いねw

    不思議なfizzbuzz - NullPointer's
    UDONCHAN
    UDONCHAN 2015/09/16
  • 廃止されるかもしれないautoloadの代わりを用意する - NullPointer's

    Rubyのautoloadは廃止されるかもしれないので、代わりの方法を用意しておきたい。 Rubyにはconst_missingというヤバいメソッドがある。このメソッドは未定義の定数にアクセスした時、NameErrorが発生する前に処理をフックする事ができる。superを呼べばそのままNameErrorがraiseされ、値を返せば、それが未定義定数の値として使用されるのだ。Rubyにはこういう悪魔のような邪悪なメソッドがしれっと用意されているので恐ろしい… このconst_missingの中で必要なファイルをrequireし、const_getで取得できなかった定数を取得して返せばautoloadの代わりになりそうだ。 # autoloader.rb require "set" module AutoLoader def auto_require hash @autoloading = h

    廃止されるかもしれないautoloadの代わりを用意する - NullPointer's
    UDONCHAN
    UDONCHAN 2014/07/22
  • nodeモジュールとしてC++でLinked listを実装 - NullPointer's

    node.jsのアドオン作成の練習として、先日書いたJavaScriptのlinked listをネイティブ実装に移植してみた。 https://github.com/paulownia/node-linkedlist 先日のJS実装と速度を比較した。リスト先頭への大量の要素追加にかかる時間(ms)を表に示す。 10000 50000 100000 200000 Linked List(JS) 3 14 36 59 Linked List(native) 2 10 19 36 C++で実装しなおしても1.5〜1.8倍程度しか高速化しない。v8が優秀なためJS実装でもかなり高速なこと、アドオン実装ではJavaScriptC++ブリッジ部分でオーバーヘッドが大きい事などが原因だろう。元々nodeのアドオンは高速化ではなくOSのライブラリを呼ぶのが目的なのであまり期待しない方がよいだろう。

    nodeモジュールとしてC++でLinked listを実装 - NullPointer's
    UDONCHAN
    UDONCHAN 2013/09/28
    へー
  • argumentsオブジェクトと仮引数の謎挙動 - NullPointer's

    JavaScriptのargumentsはなかなか不思議なオブジェクトで、配列のようで配列でなかったり、関数スコープで暗黙に作られていたり、きわめつけは… function hoge(a, b) { console.log(a); arguments[0] = 5; console.log(a); } hoge(1, 2); 1 5 !? function fuga(a, b) { console.log(arguments[0]); a = 7; console.log(arguments[0]); } fuga(1, 2); 1 7 !!?? arguments の値と仮引数の値が連動するという摩訶不思議な挙動を示します。 何故このような挙動をするのか、 ECMA-262 5th 仕様書を紐解いてみました。10章6節 Arguments Object によると… Add name as

    argumentsオブジェクトと仮引数の謎挙動 - NullPointer's
    UDONCHAN
    UDONCHAN 2013/08/22
  • コンパイル言語でもJavaではセキュリティホールになりうる - NullPointer's

    なぜPHPでrequire("http://...")したらセキュリティホールなのに、Goならいいのか - kazuhoのメモ置き場 コンパイル言語でも、コンパイル時にプログラムの内容が確定しない言語、実行時にライブラリをダイナミックロードして、ロードパスにhttpのURL指定できると同じ問題が発生しますな。つまりJavaはこのセキュリティホールが発生しうる。普通やる奴いないと思うけど Javaはご存知の通り、コンパイル時には依存するクラスの型とメソッドシグニチャのチェックを行うが、クラスの内容までは見ない。クラスファイルの内容は実行時にクラスローダによってダイナミックにロードされる。そしてクラスローダの正体は URLClassLoader という、いかにもな名前のクラスで、想像の通り http://172.28.8.32/hoge.jar のようなURLを処理可能なのだ。 環境変数やコマ

    コンパイル言語でもJavaではセキュリティホールになりうる - NullPointer's
    UDONCHAN
    UDONCHAN 2013/03/25
  • 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
    UDONCHAN
    UDONCHAN 2012/09/29