日々精進

新しく学んだことを書き留めていきます

実行ファイルを実行すると「cannot execute binary file: Exec format error」エラー

原因はOSに対応してないバイナリを実行しようとしているため。 Linux用バイナリをMacで実行してるとか、32bit用を64bit環境で実行してるとか。

参考:

yatta47.hateblo.jp

JavaでKeyStore#getEntryを実行すると「UnrecoverableKeyException」エラー

原因はIBM JavaとSun JavaはKeyStoreの互換性がないこと。 IBMのJDKに含まれるkeytoolで作成したkeystoreをSun JDKを使ったアプリから読み込もうとしていたのでだめだった。 JDKのメーカーを合わせると直った。

参考:

stackoverflow.com

SalesforceにSSOでログインすると、「Salesforce.com ユーザにマッピングすることはできません」エラー

現象は以下。

  • SAML 検証ページで「Salesforce.com ユーザにマッピングすることはできません」というエラーメッセージが表示される。
  • デバッグログはエラーが出ていない
  • ログイン履歴は何も出ない

原因は、JIT Provisioningで作成するユーザのプロファイルが ログイン先のコミュニティメンバーのプロファイルでないため。

以下の手順で直る。 * Salesforceの設定の カスタマイズ>コミュニティ>すべてのコミュニティ>ログイン先のコミュニティのコミュニティワークスペース をクリック * 管理をクリック > メンバーをクリック * 選択済みプロファイルにログインするユーザのプロファイルを移して保存

cpコマンドで強制上書きする

cp -fで確認なしで上書き出来るだろうと思ったら出来なかった。。 cpにエイリアスを設定してるの忘れてた。 このような場合、以下のようにyesコマンドを使うと上書き確認を自動化できる。

yes | cp foo bar

yesコマンド初めて知った。。こんなんあるんだ。 これ使えば確認を飛ばすオプションが無い場合でも実質確認を飛ばせるなぁ。

参考:

dotnsf.blog.jp

apple.stackexchange.com

dharry.hatenablog.com

typescriptのEnumにメソッドを定義する

正確にはEnumにメソッドがはえたように見せる、だけど。。 以下のように、Enumと同じ名前のnamespaceを定義し、そこにメソッドを定義することで Enumにメソッドを定義したように見せられる。

enum Weekday {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
namespace Weekday {
    export function isBusinessDay(day: Weekday) {
        switch (day) {
            case Weekday.Saturday:
            case Weekday.Sunday:
                return false;
            default:
                return true;
        }
    }
}

const mon = Weekday.Monday;
const sun = Weekday.Sunday;
console.log(Weekday.isBusinessDay(mon)); // true
console.log(Weekday.isBusinessDay(sun)); // false

これは思いつかなかった。てかTSのEnumが貧弱すぎて困る。。このぐらい元々出来て欲しい。

参考: https://basarat.gitbooks.io/typescript/docs/enums.html

IntelliJでimport文を*でまとめないようにする

他のIDEを使っている人と設定が合っていなかったので、編集する度にimport文のところに 差分が出てうっとうしかった。 Settings > Code Style > Java > Imports > Class count to use import with ‘*’
この値を大きな数字にしておけばまとめられない。

参考:

xyk.hatenablog.com

SQLのPreparedStatementをログに出す

SQLは以下のような形で作っておき、これと?に埋めるデータをDBライブラリのメソッドに渡すことが多い。

SELECT ... FROM ... WHERE id = ?

この値を?に埋めた後の文字列はDB側でも存在しないらしいので、埋めた後の文字列をログに出すことは出来ない。 なので、選択肢としては?を含む文字列と値を別々にログに出すか、時前で値をエスケープして?に値を埋める処理を書くかのどちらかになる。

参考: stackoverflow.com