Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

C言語の可変長引数は、型安全でない(まちがった型の引数を渡してもコンパイルエラーにならない)とされています。これは言語仕様の理解としては正しいのですが、特定の型の引数を任意の個数とる関数に限っては、マクロを使うことで型安全性を確保することができます。 任意の個数のdoubleを引数にとり、その和を返す関数「sumf」を例にあげて説明します。 C言語の可変長引数機構を使ってsumfを定義すると、以下のようになります。 #include <math.h> #include <stdarg.h> #include <stdio.h> static double sumf(double nfirst, ...) { double r = 0, n; va_list args; va_start(args, nfirst); for (n = nfirst; ! isnan(n); n = va_a
indexOf(val) >= 0の話 配列に要素が含まれているかのチェックに [1, 2, 3].indexOf(2) >= 0; // true のようなコードを使っている場面を極めて頻繁に(それ以外を使っているのを見ることは稀なくらい)見るが、 function contains(a, v) { return a.indexOf(v) >= 0; } は厳密にはJavaScriptでは正しく動くとは限らない。上記コードのどこが間違っているのか、下記の解説を見る前に考えてみてほしい。こんなシンプルなコードにも、バグがある。 解説 containsがどのように動くべきなど明白だというのは間違いである。実は微妙な問題がたくさんある。 まず、致命的な部分をあげると、最初のナイーブな実装だと contains([NaN], NaN) // false となってしまう。明らかに意図した動作と異な
Originally presented at Baruco 2014. Updated for RubyConf Portugal 2014. Video here: https://www.youtube.com/watch?v=fGFM_UrSp70.
シェルスクリプトにおいて標準出力(標準エラー出力)される文字列を変数に代入して取り扱う方法について。 対象とする関数として以下のものを利用。 sayHello(){ sleep 10 echo "hello stdout" echo "hello stderr" >&2 } 直接変数に代入する 変数messageに出力を代入したければ以下のようにすればよい message=`sayHello` echo ${message} この結果は以下の通り hello stderr hello stdout つまり、関数"sayHello"実行時にエラー出力が表示され、 標準出力は変数messageへの代入を経由して出力される。 これではエラー出力結果を別の変数に代入することはできない。 また、関数"sayHello"をバックグラウンドで実行したい時には 標準出力を変数に代入することができない。 フ
結論を先に:STDOUTは定数だから変更しない方が良いです。 あと、Loggerクラスを使ってログを出力する場合には $stdout.sync = trueしておいたほうが良いです。 STDOUTと$stdoutの違い STDOUT(Object::STDOUT):定数。 $stdout($>):グローバル変数。初期値がSTDOUT。 Kernelモジュール>特殊変数 variable $> $> -> object $stdout -> object 標準出力です。 組み込み関数 Kernel.#print、Kernel.#puts や Kernel.#p などのデフォルトの出力先となります。 初期値は Object::STDOUT です。 コマンドラインオプションオプション -i を指定した場合には 読み込み元と同じ名前のファイルを表します。 $stdout に代入するオブジェクトには
C言語プログラム上で高機密性情報(パスワード文字列など)を消去するケースで、memset関数の単純利用では機密情報がメモリ上に残存してしまい、セキュリティ上の脆弱性につながる可能性がある。 void secure_operation() { // パスワード文字列を取得 char passwd[128]; get_password(passwd, sizeof(passwd)); //... // メモリ上の高機密データを消去... memset(passwd, 0, sizeof(passwd)); // ?? } 上記コードではパスワード文字列が格納された変数passwdを使用後にゼロクリアしているが、コンパイル時の最適化によりmemset関数呼び出しが削除される可能性がある。この(プログラマの意図に反する)最適化は、C言語の言語仕様上も許容されるコンパイラの振る舞いとなっている。*1
-- 前回調査してからちょっと間が空いたのと、前回なんとなく紆余曲折していたのでもう一度確認。 結局のところ「$myinvocation.ExpectingInput」を使うのがベスト? function test { [CmdletBinding(DefaultParameterSetName='NonPipeline')] param( [Parameter(ValueFromPipeline=$true)] $Data ) begin { $myinvocation.ExpectingInput } process {$myinvocation.ExpectingInput} end { $myinvocation.ExpectingInput } } "パイプライン" 1,2 | test "ダイレクト" test 1,2
を書いておく。以下解説。 set -e エラーがあったらシェルスクリプトをそこで打ち止めにしてくれる(exit 0以外が返るものがあったら止まるようになる)。「あっあれここでうまくいってないからデータ準備できてないのにあれあれっもうやめて!」ってなるのを防げる。 set -u 未定義の変数を使おうとしたときに打ち止めにしてくれる。Perlでいうuse strict 'vars';的なもの。 って気軽な気持ちで書いてしまって、「ん、やたら時間かかると思ったらスペルミスうわなにをするやめ」ってなるのを防げる。 一部だけ例外にしたい はてなブックマークのコメントより -e は command1 || command2 みたいなことが出来なくなるの使うことないな。-uは付けといて良いが。 確かにおっしゃるとおりですね。コマンドの失敗を考慮して書いている部分については(もしくはやたらexit 0以外
2回ぐらい Lingr に話題になったネタなんですがいつも忘れているので覚書。 Vim script で文字列を比較する場合、==# を使用する事が多いと思います。 let s:homu = "homu" echo s:homu ==# "mado" " => 0 echo s:homu ==# "homu" " => 1 上記の場合だと問題はないのですが、文字列以外の場合と比較する場合に問題になります。 " 数値を設定する let s:homu = 0 echo s:homu ==# "" " => 1 echo s:homu ==# "homu" " => 1 このように両方とも 1 が返ってきます。 [回避方法] is#、isnot# を使用します。 let s:homu = "homu" echo s:homu is# "mado" " => 0 echo s:homu is# "
連載「Webサイト・アプリ高速化テクニック徹底解説」の第5回は、前回の「DOM操作の最適化によるJavaScriptチューニング(前編)」に続く後編です。後編では、createElement()などのDOM操作メソッドを使ったさまざまなテクニックや、パフォーマンスを劣化させるよくあるパターンについて詳しく解説します。 CodeIQとの連動企画! この記事で学べるJavaScriptチューニングのテクニックを、実際にCodeIQの問題で試すことができます。もう既に自信がある方は腕試しに、もしくは理解度チェックのための復習として是非ご活用ください!こちらから問題にチャレンジ! 前回は、DOM操作が遅い原因と仕組みについて簡単に説明し、チューニングのサンプルをいくつか解説しました。その中で、innerHTMLを利用したコードをサンプルにあげていますが、innerHTMLを利用する場合、いくつかの
RubyMotionを相変わらずいじってるのだけど、最近は業務に疲れてあんまり趣味開発が捗ってない。 趣味開発しようとする前に使うgemがまだいい感じに枯れてないので不満が出るからまずそっちを直そうみたいなことを繰り返している気がする。 最近直したgemで、ibというRubyMotionでInterface Builderを使うために、app/*以下のRubyのコードをparseして、Outletとかが定義されたダミーヘッダーファイルを作ってくれる奴がある。 $ rake ib:open というコマンドを叩くとローカルにib.xcodeprojを作ってくれて、その中にあるStubs.hとxibファイルをマウスでうにょーってoutletの連携する事ができる。 吐き出してくれるStubs.hには、OSXアプリを作る時は#import <UIKit/UIkit.h>じゃなくて、#import <
私はシェルスクリプトの大ファンで、他人のスクリプトから面白い方法を学ぶのが大好きだ。最近、SSHサーバの2要素認証を簡単にするためのauthy-sshスクリプトに出会った。このスクリプト群を見まわしていて、みんなと共有したいたくさんのクールなことを見つけた。 出力に色付けする 出力文字列を、成功した時は緑に、失敗した時は赤に、警告は黄色に色づけしたいと思うことはたくさんあるだろう。 NORMAL=$(tput sgr0) GREEN=$(tput setaf 2; tput bold) YELLOW=$(tput setaf 3) RED=$(tput setaf 1) function red() { echo -e "$RED$*$NORMAL" } function green() { echo -e "$GREEN$*$NORMAL" } function yellow() { e
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く