WordPressの has_filter()は返り値が int|boolean なので普通に if(has_filter()) で処理しちゃうと `` が返ってきた時に意図しない結果になってしまいます。 解決策 なのでそういう時は if(is_int(has_filter())) を使いましょう。 参考 [wordpress – recognize `` as a true in PHP if statement – Stack Overflow][1]

続きを読む

そのまま unique 条件付の index を追加しようとするとエラーになるので まず既にある index を削除してから追加しましょう。 [crayon title=”db/migrate/add_unique_constraint.rb”] def change remove_index :editabilities, [:user_id, :list_id] add_index :editabilities, [:user_id, :list_id], unique: true end [/crayon] 参考 [ruby on rails – How to add unique constraint to already existing index by migration – Stack Overflow][1]

続きを読む

RailsのModelは常に単数名詞、そしてControllerはその名詞の複数形という規則がありますが、Modelが”Child”などの不規則変化名詞だった時にController名はChildrenなのか、Childsなのかがわからなかったので調べました。 答え プログラム的には当然簡単に処理できるChildsだと思ったけども実際はちゃんと不規則変化にも対応してるらしくChildrenが正解です。 その他の不規則名詞 他の不規則名詞は https://github.com/rails/rails/blob/4-0-0/activesupport/lib/active_support/inflections.rb に載っているんですが、 inflect.irregular('person', 'people') inflect.irregular('man', 'men') inflect.irregular('child', 'children') inflect.irregular('sex', 'sexes') inflect.irregular('move', 'moves') inflect.irregular('cow', 'kine') inflect.irregular('zombie', 'zombies') zombieって不規則名詞なの…? cow→kineの変化はそもそも英単語がわかりませんでした、、 Zombieが不規則名詞の理由 ([2013/12/14] 追記) 単数形から複数形への変化は規則通りですが、複数形から単数形への変化 zombies -> zombie が不規則で、規則通り変化させてしまうと zombies -> zomby になってしまうから不規則名詞らしいです。英語は難しいですね。 情報元 [Model and Controller's naming rule for irregular noun in Rails – Stack Overflow][1]

続きを読む

wxPythonを使って頑張って作ったGUIをPythonが入ってないPCの人も使えるようにするのにpy2exeで変換したら見た目が変わってしまった(古い?TK?)のでその対処法。 必要なファイル Microsoft.VC90.CRT.manifest msvcm90.dll msvcp90.dll msvcr90.dll の4つのファイルが必要。自分の環境だとPython 2.7 Portableを入れたフォルダに全部入っていたので、Py27MSdllsというフォルダをsetup.pyと同じ階層に作って全部入れました。 Microsoft.VC90.CRT.manifest の中で示されてるdllのバージョンが合ってるかどうか確認する。 違ってたら適宜修正する。 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><br> <!-- Copyright (c) Microsoft Corporation. All rights reserved. --><br> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><br> <noInheritable/><br> <assemblyIdentity<br> type="win32"<br> name="Microsoft.VC90.CRT"<br> <s>version="9.0.21022.8"</s> <span style=color:red;>version="9.0.30729.6161"</span><br> processorArchitecture="x86"<br> publicKeyToken="1fc8b3b9a1e18e3b"<br> /><br> <file name="msvcr90.dll" /> <file name="msvcp90.dll" /> <file name="msvcm90.dll" /><br> </assembly><br> setup.py setup.pyを書き換えて用意したこれらのファイルを読み込むように変更する。 # -*- coding: utf-8 -*-<br> #<br> # setup.py<br> <br> from distutils.core import setup<br> import py2exe<br> import glob<br> <br> <br> class Target(object):<br> """ A simple class that holds information on our executable file.

続きを読む

画面遷移無しでファイルのアップロードしようと思ったらiframeを使った技とかややこしい情報が色々出てきて、なかなかやりたいことに辿りつけなかったのでメモ。 やりたい事と条件 ・ajaxなテキストファイルのアップロード ・テキストをRubyで編集して返す ・画面遷移せずに結果を表示 ・IEは諦める。 必要最低限のコード まずHTMLを用意 ajaxupload.html ` <script type="text/javascript" src="ajaxupload.js" charset="utf8"></script><br> textarea{height:80%;width:100%;} ` つぎにjavascript ajaxupload.js ` $(function(){ $("#upload").click(function(){ var file = $("#file")[0].files[0]; var reader = new FileReader(); reader.readAsText(file, 'UTF-8'); reader.onload = showFile; }); function showFile(event) { $.ajax({ type: "POST", url: "ajaxupload.rb", data: { filedata:event.target.result} }).done(function(msg) { $("#output").html(msg); }); } }); ` んで何か処理をするRubyのスクリプト。ここではファイルの中身をそのまま返してるだけ。(パス名は適宜変更してください。) ajaxupload.rb ` #!P:\Dropbox\bin\RailsPortable\App\Rails\bin\ruby.exe require "

続きを読む

Lispを書いてると、他の言語でもapplyを使いたくなる。 そしてPythonにもapplyがあったので早速喜んで使ってたら引数の数がおかしいというエラーメッセージに困らされた。 基本的なapplyの使い方 ` def hoge(word): print word apply(hoge,"A") ` とまあこんな感じ使うわけです。 文字列を引数にできない。 ところがこの引数の”A”を”ABC”に変えるだけでエラーになる。 ` Traceback (most recent call last): File "", line 9, in TypeError: hoge() takes exactly 1 argument (3 given) ` どうやら文字列を渡すと文字数分だけの引数を渡したと解釈されてしまうらしい。 解決策 さて、解決方法ですがタイトルにもあるように廃止された関数なのでもう使っちゃダメらしい。 引数 function は呼び出しができるオブジェクト (ユーザ定義 および組み込みの関数またはメソッド、またはクラスオブジェクト) でなければなりません。args はシーケンス型でなくてはなりません。 function は引数リスト args を使って呼び出されます; 引数の数はタプルの長さになります。オプションの引数 keywords を与える場合、 keywords は文字列のキーを持つ辞書で なければなりません。これは引数リストの最後に追加されるキーワード 引数です。 apply() の呼び出しは、単なる function(args) の呼び出しとは異なります。 というのは、apply() の場合、引数は常に一つだから です。*apply() は function(*args, *keywords) を 使うのと等価です。 上のような “拡張された関数呼び出し構文” は apply() と全く等価なので、必ずしも apply() を使う必要はありません。

続きを読む

Vimの初期設定ではインデント幅が8で広すぎるので2に変更したかったけども、設定方法を見ると ~/.vim/indent/$filetype.vim と各ファイルタイプごとに変更する方法しか紹介されてなかったけどもダメ元で ~/.vimrc に set tabstop=2 shiftwidth=2 softtabstop=2 と追加したら変更できたみたい。どちらが流儀的には正しんだろうか?

続きを読む

javascript で大文字、小文字を区別しないで文字列比較がしたい時は、そういう演算子は用意されてないので toLowerCase() で全部小文字にして比較しちゃいましょう。 こんな感じ。 function check(){ foo="ABC"; bar="abc"; if(foo.toLowerCase() == bar.toLowerCase()){ //大文字小文字を無視 alert("ok!!"); }else{ alert("NG!"); } } ちなみに英語で「大文字、小文字を区別しない。」と言いたい時は case-insensitive を使えばよいそうですよ。

続きを読む

jQuery を使って 「クリックされた時に左なら要素を消して、右なら何もしない。」 という動作をさせようと思ったら日本語だと検索してもすぐに答えが出てこなかったので、また stackoverflow から解説を紹介します。 実際のコードがこちら。 $('#element').mousedown(function(event) { switch (event.which) { case 1: alert('Left mouse button pressed'); break; case 2: alert('Middle mouse button pressed'); break; case 3: alert('Right mouse button pressed'); break; default: alert('You have a strange mouse'); } }); mousedown の時に渡されるイベントを確認して場合わけすればよい、と。 つまり左クリックで要素を隠すにはこうします。 //左クリックされると foo を隠す $(".foo").click(function(e){ if(e.which == 1){ //左クリック $(this).hide("fast"); } }); 他の方法 頻繁に使うのであれば jquery.detailclick.js を入れてこんな風に使えるようにしておくとよいかもしれません。やっぱりこちらの方が jQuery っぽくて見やすいですね。 $("target").rightClick(function() { $(this).text('右クリックされました!').css('background-color', '#ff3399'); }); 参考 javascript - How to distinguish between left and right mouse click with jQuery?

続きを読む

プロフィール画像

ironsand

語学好きのプログラマーです

Railsエンジニア

Yokohama