Rubyのcaseを圧縮
whenの後の条件式のあとは改行しないとエラーになるのでどうしても行数が長くなる
(追記: when A then B でいけます。基本的な事だけど知らなかった・・)
case key when :foo 1 when :bar 2 else 3 end
条件が文字列かシンボルであれば下の様に書いてみてる。
{ foo: 1, bar: 2 }[key] || 3
式を返すなら
a = { foo: ->{ 0 + 1 }, bar: ->{ 1 + 1 } }[key] a ? a.call : 1 + 2
(訂正: {...}[key].call としていたがこれはhashがnilのとき落ちる)
逆に複雑に見える気も。
これは良くない・もっとこうした方がいい等あったら教えていただきたいです。
追記: when A then B で書けることを知った
case key when :foo then 1 when :bar then 2 else 3 end
まあこれならこれでいいかなw
WindowsのSSL 3.0をコマンドで無効化 (SSL 3.0 POODLE対応)
マイクロソフト セキュリティ アドバイザリ 3009008のWindowsの方のSSLを無効にする方法をコマンドプロンプトで書きました。 やってることはレジストリにファイルを一つ作成しているのみです。
無効の設定ファイルの作成
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client" /t REG_DWORD /v Enabled /d 0
実行後、再起動で反映。(すでにファイルがあった場合は上書きの是非を聞かれます)
※ 実行する際は注意してください。
※ この回避策はシステムにインストールされているすべてのクライアント ソフトウェアの SSL 3.0 を無効にします。
※ この回避策を適用後は、このコンピューター上のクライアント アプリケーションは、SSL 3.0 のみをサポートするその他のサーバーとは通信することはできません。
戻したい場合(作成したファイルを消したい場合)
reg delete "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client\Enabled"
これでバッチファイル化して楽に設定できそうですね。
HKEY_LOCAL_MACHINEはHKLMと省略して書く事もできる。
参考: Windows TIPS:コマンドプロンプトでレジストリを操作する
ちなみに、32bit Windows OSから64bit Windows OSのレジストリを操作する際は注意が必要っぽいです。 /reg:64 というオプションを付ける必要があるとか。
Clojureで同一キーでhash-mapのリストを作ろうとしたらハマった
下のはいける。
user=> (map #(hash-map :key %) [1 2 3]) ({:key 1} {:key 2} {:key 3})
でも、キーを引数化したら怒られる。
user=> (map #(hash-map %1 %2) :key [1 2 3]) IllegalArgumentException Don't know how to create ISeq from: clojure.lang.Keyword clojure.lang.RT.seqFrom (RT.java:505)
うーむ、まだシーケンスの感じがいまいち分かってないです。 とりあえず、以前作った将棋盤をClojureScriptで再作成しようと思ってます。感覚が全然違うので難しい。
CocoaPodsエラー diff: /../Podfile.lock: No such file or directory
以下のようなエラー。
diff: /../Podfile.lock: No such file or directory diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
Pods.debug.xcconfigとPods.release.xcconfigをファイル自体消去してからpod installで直った。
消さずにpod installじゃ直らないなぁ。
Windowsでchromeを落としてインストールするバッチファイル
Windowsマシンの設定自動化についてちょこちょこ調べてます。Windowsマシンは仕事でしかほとんど触らないのでなかなか慣れない。。
管理者権限で実行したらchromeのダウンロードからインストールまでやるバッチを作ってみました。powershellでwget的な事をやってます。(.batと.ps1はマシン外の空間にあり、同階層という想定)
install_chrome.bat
@echo off cd /d %~dp0 copy download_chrome.ps1 c:%homepath%\Desktop powershell Set-ExecutionPolicy RemoteSigned powershell c:%homepath%\Desktop\download_chrome.ps1 powershell Set-ExecutionPolicy Restricted msiexec /i c:%homepath%\Desktop\chrome.msi /passive
line2: cd /d %~dp0 カレントディレクトリをバッチファイルの場所にする。
line3: 一旦ps1ファイルをローカルに持ってこないと動かなかったので。
line7: msiexecコマンドでmsiファイルからインストールできる。 /passiveで操作無し(インジケータとかのみ表示)
download_chrome.ps1
$clnt = new-object System.Net.WebClient $url = "https://dl.google.com/dl/chrome/install/googlechromestandaloneenterprise64.msi" $file = "$home\Desktop\chrome.msi" $clnt.DownloadFile($url, $file)
powershell3.0より前のバージョンだとInvoke-WebRequestというものが無いらしいので記述したやり方で。windows7ではpowershell2.0が標準らしい
UITextFieldで編集中に別のやつにフォーカスさせると色がヘンになる
画面上にUITextFieldが複数あって何文字入力したら次のfieldにジャンプする、みたいな事をしたい場合このようにした。
#import "ViewController.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [_first addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; [_second addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; } - (void)textFieldDidChange:(id)sender { if (sender == _first) { [_second becomeFirstResponder]; } }
でもこれだとジャンプ後のfieldでヘンな色がついてしまう。
そこで、ジャンプ後のfieldで文字入力後にフォーカスを外してから付けるという風に書いてみた。
- (void)textFieldDidChange:(id)sender { if (sender == _first) { [_second becomeFirstResponder]; } else if (sender == _second) { [_second resignFirstResponder]; [_second becomeFirstResponder]; } }
これなら色がつかない。(ちゃんと分かっていない)
Ruby Hashのkeyをsymbolに変換する
hashの中のarrayの中にもhashがあったときの事を考えて書きました。
config/initializers/hash.rb
class Hash def keys_to_sym each_with_object({}) do |(k, v), hash| hash[k.to_sym] = v.respond_to?(:keys_to_sym) ? v.keys_to_sym : v end end end
config/initializers/array.rb
class Array def keys_to_sym map{|v| v.respond_to?(:keys_to_sym) ? v.keys_to_sym : v } end end
pryで実行
[1] pry(main)> [:s, {"ddd" => :ddd}, {fff: {"sda" => "sds"}}] => [:s, {"ddd"=>:ddd}, {:fff=>{"sda"=>"sds"}}] [2] pry(main)> [:s, {"ddd" => :ddd}, {fff: {"sda" => "sds"}}].keys_to_sym => [:s, {:ddd=>:ddd}, {:fff=>{:sda=>"sds"}}]
Railsで使用。こうやって拡張するのがやりやすくていいですね。iOSでいうところのカテゴリ+.pchでのインポートみたいな感じですね。
2015/6/16 追記
deep_symbolize_keysはhash中のarray中のhashはsymbolizeしないらしい。