Labyrinth of Wisdom

-This is My Archive-


【Apex】Visualforceで一定の文字数で改行して表示する方法

Visualforceで一定の文字数を指定して自動改行をするメソッドを作ったので、自分用にメモ。 意外と使いどころが多いんじゃないかと思います。

Apexクラス

第一引数に改行したい文字、第二引数に改行したい文字数を指定。

\r\nを削除している行がありますが、これはオブジェクトのテキストエリア型などから値を取得してくる場合に有効なので書いています。

decimalStRowsを取得する部分も、Salesforceが勝手に四捨五入するという動きがあるので、確実に処理するためにDecimal型にしてます。(これをやらないと値が揺れる)

public class kaigyoTextController {
      
    public String kaigyoText {get;private set;}
    
    public kaigyoTextController(){
        kaigyoText = autoKaigyo('あいうえおかきくけこ', 4);
    }
    
    private String autoKaigyo(String st, Integer kaigyoLength){
        String rtnSt;
        Integer stLength = st.length();
    // 改行コード削除
        st = st.replaceAll('\r\n','');

        // 文字が空白、または文字数が指定改行文字数以下の場合はそのままの値を返す
        if(String.isBlank(st) || stLength <= kaigyoLength){
            rtnSt = st;
        }else{
            // 小数点を出す為にDecimal型で計算
            Decimal decimalStRows = Decimal.valueOf(stLength) / Decimal.valueOf(kaigyoLength);
            // 切り上げ処理で内容の行数を取得
            Integer stRows = Integer.valueOf(decimalStRows.round(System.RoundingMode.UP));
            // 最初の改行まで取得+改行コード付与
            rtnSt = st.substring(0, kaigyoLength) + '<br/>';
            // 2行目以降をループ処理
            for(Integer i = 1; i < stRows; i++){
                if(kaigyoLength*(i + 1) < stLength){
                    rtnSt += st.substring(kaigyoLength*i, kaigyoLength*(i + 1)) + '<br/>';
                }else{
          // 最後の文字まで取得
                    rtnSt += st.substring(kaigyoLength*i);
                }
            }
        }
        return rtnSt;
    }
}

Visualforce

フィールド変数kaigyoTextをgetしているのでそれを表示しているだけです。 ただし一点注意点として、escape属性をFalseにしてやらないと、コントローラで追加した<br/>が効かないので注意してください。

<apex:page controller="TestFormController" >
    <apex:outputText value="{!kaigyoText}" escape="false" />
</apex:page>

f:id:Labyrinth_of_Wisdom:20171005115511p:plain

Sublime Textのユーザ設定・プラグインメモ

Sublime Text再インストール時などにユーザ設定を調べながらやり直すのが面倒なので、自分用にまとめてみました。 良いなと思う設定は是非パクってください。 パクリパクられしていきましょう。

フォントのインストー

Ricty Diminishedというプログラミングがしやすいフォントがあるので、まずこれをインストールします。 フォントにこだわりがなければしなくてもいいです。

nelog.jp

ユーザ設定

  1. ツールバーの[Preferences]→[Setteings]をクリック
  2. 別ウィンドウが開き、左側にデフォルトのユーザ設定、右側にカスタム用のユーザ設定が表示される
  3. カスタム用のユーザ設定に下記をコピペして保存
{
    "draw_white_space": "all", // スペースやタブを可視化する
    "fallback_encoding": "UTF-8", // 文字コードを自動判別できなかった時のデフォルト文字コード
    "font_face": "Ricty Diminished", // フォント
    "font_size": 11, //フォントサイズ
    "highlight_line": true, // 現在行をハイライト
    "ignored_packages": ["Vintage"],
    "line_padding_top": 5, //行間
    "overlay_scroll_bars": "disabled", // 水平スクロールバーが常に表示されるようにする
    "remember_open_files": false, // Sublimeを終了する直前に開いていたファイルを記憶するかどうか
    "rulers": [0,200],
    "show_encoding": true, // 文字コードをステータスバーに表示
    "translate_tabs_to_spaces": true, // タブをスペースに変換
    "trim_trailing_white_space_on_save": true, // 保存時に空白を除去する
    "word_wrap": true //自動改行
}

設定項目については下記を参照

qiita.com

プラグイン

  • All Autocomplete
  • BracketHighlighter
  • Color Highlighter
  • ConvertToUTF8
  • IMESupport
  • OmniMarkupPreviewer
  • SideBarEnhancements
  • TrailingSpaces

qiita.com

【Discogs】リリース作品の別バージョン作成について(マスターリリース)

はじめに

同じ作品でも初回限定版や各国にローカライズしたバージョン(日本版など)があると思います。

Discogsではそのバージョン違いを、マスターリリースという機能を使ってまとめることができます。 今回はそのマスターリリースの使用方法について説明していきたいと思います。

サンプルとしてKendrick Lamarのページを使います。

マスターリリースについて

f:id:Labyrinth_of_Wisdom:20170608095022p:plain

「Overly Dedicated」という作品はMP3のデータ配信とCDrでのリリースがあったようです。 近年よくある手法で、要は媒体が違うだけですね。

マスターリリースを使えばこのような表示方法にすることが可能になります。

f:id:Labyrinth_of_Wisdom:20170608095954p:plain

ページのサイドバーに「マスターリリースを作成」というボタンがあります。 これをクリック。

f:id:Labyrinth_of_Wisdom:20170608100128p:plain

すると上記のような画面になります。 ここでまとめたいリリース作品にチェックを入れ、「作成する」ボタンを押します。

今回は仮に「HiiiPoWeR」という作品を対象にします。 (実際は別バージョンは出ていないので作成しません)

また、マスターリリース作成時にはまとめたいリリース作品のURL最後尾にある7桁の数字が必要になるので、別途メモをしておいてください。

*HiiiPoWeR URL*
https://www.discogs.com/ja/Kendrick-Lamar-HiiiPoWeR/release/3776731

f:id:Labyrinth_of_Wisdom:20170608102940p:plain

キーリリース項目に、メインとなるバージョンのURL最後尾7桁の数字を入力します。

リリース項目に、メインバージョンも含めた全てのバージョンの数値を入力していきます。

これでマスターリリースが作成され、バージョン違いが表示されるようになります。

リリースのコピーについて

マスターリリースの作成方法は分かったけど、同じようなリリース何個も作成しないといけないの?となると思うので、リリースのコピー方法についても解説します。

f:id:Labyrinth_of_Wisdom:20170608104115p:plain

「リリースを編集」をクリックします。

f:id:Labyrinth_of_Wisdom:20170608104209p:plain

「下書きへコピー」をクリックします。

f:id:Labyrinth_of_Wisdom:20170608104506p:plain

アカウントメニューの「下書き」をクリックします。

f:id:Labyrinth_of_Wisdom:20170608104656p:plain

するとコピーしたリリースの下書きが作成されているので、「編集/送信」をクリックしてリリースを編集していきます。

【Discogs】アーティストの別名義登録について

はじめに

Discogsでアーティストの別名義を登録したい時があると思いますが、その方法についてメモします。

大きく分けて、[エイリアス][バリエーション]と呼ばれる二つの方法があります。

サンプルとして使いやすいので、RhymesterMummy-D氏のDiscogsページを使用します。

f:id:Labyrinth_of_Wisdom:20170531113805p:plain

www.discogs.com

エイリアス

エイリアス…別名

[Mummy-D]という名義は主にMC/Rapper時に使用されるメインとなる名義です。

それとは別に氏はProducerとして[Mr.Drunk]という名義も持っています。

さらに作詞の時等は本名の[Daisuke Sakama]という名義も使います。

このように、同一人物ですが全く違う名前を持っているアーティストにはエイリアスを設定します。

設定方法としては、別名義のアーティスト名をエイリアス欄に記入するだけ。 設定が終わると、エイリアス欄にで別名義のリンクが作成され、クリックするとその別名義のページに飛びます。

因みに、別名義でのアーティストページが存在しない場合は、記入してもエラーになります。

バリエーション

氏のバリエーションの項目を見てみてください。 同じような、しかし微妙に異なる名義がいくつも並んでいるのが分かりますか?

氏は客演も沢山あるのですが、曲によってはグループ名を表記していたりすることもあるので、本来の[Mummy-D]とは少し違う表記が沢山あったりします。

例えば[Mummy-D From Rhymester]みたいなやつです。

他にもよくあるのが、カタカナ表記のアーティストがローマ字表記だったりとか、そういった別名義まではいかないけど表記がちょっと違うというのがバリエーションになります。

f:id:Labyrinth_of_Wisdom:20170531113906p:plain

設定方法のサンプルとして、[Mummy-D From Rhymester]でリリースしている作品を使用します。 因みにバリエーション設定されている名義は表記の後ろに*が付きます。

f:id:Labyrinth_of_Wisdom:20170531114125p:plain

これは作品の編集画面ですが、Mummy-D氏の項目を見てください。 アーティスト名の箇所には[Mummy-D]と書いてあります。

その横に[ANV入力欄]と呼ばれる項目があるのですが、そこに[Mummy-D From Rhymester]と記載されています。

この[ANV入力欄]に記入した値がそのアーティストの名義バリエーションになります。

極端な話、ここで田中太郎とか書いてもそのアーティストのバリエーションになってしまいます。 (Discogsのマナーに反するのでやったら駄目ですよ)

まとめ

全部バリエーションにしたらいいんじゃない?という風に思う方もいらっしゃると思うのですが、名義が違いすぎるものはエイリアスとして登録するのがDiscogsの基本理念ぽいです。(一回それで指摘ありました)

なので下記の様な考え方で進めていけばいいかなと思います。

エイリアス:別のアーティスト
バリエーション:表記違い

Discogsは翻訳があまり進んでないので分かりにくい箇所が多々あるのですが、今回の記事で少しでもDiscogsの理解が深まればと思います。

【Apex】複数条件での検索 (動的SOQL)

複数の入力フォームに値を入力し、その値を検索条件として値を取得するコードのサンプルです。 例えば下記の様なフォームがあるとします。



このフォームの場合、レコードの検索条件としては下記の4パターンが考えられます。

・名前も年齢も入力されていない
 →全てのレコードを取得

・名前のみ入力されている
 →名前の前方・後方一致で当てはまるレコードを取得

・年齢のみ入力されている
 →年齢が一致するレコードを取得

・名前も年齢も入力されている
 →名前が前方・後方一致かつ、年齢が一致するレコードを取得

つまりユーザの操作によって4パターンのSOQLが発行されることになります。

if(String.isBlank(inputName) && String.isBlank(inputAge)){
    // 名前も年齢も入力されていない
    Hoge__c[] hogeList = [SELECT Name, Age__c FROM Hoge__c];
}else if(!String.isBlank(inputName) && String.isBlank(inputAge)){
    // 名前のみ入力されている
    Hoge__c[] hogeList = [SELECT Name, Age__c FROM Hoge__c WHERE Name LIKE :name]
}else if(String.isBlank(inputName) && !String.isBlank(inputAge)){
    // 年齢のみ入力されている
    Hoge__c[] hogeList = [SELECT Name, Age__c FROM Hoge__c WHERE Age__c = :age]
}else{
    //名前も年齢も入力されている
    Hoge__c[] hogeList = [SELECT Name, Age__c FROM Hoge__c WHERE Name LIKE :name AND Age__c = :age]
}

この方法では、WHERE句のみが違う同じようなコードを何回も書かないといけません。 今回は入力フォームが二つなので4パターンで済みますが、これがもっとたくさんある場合はその都度同じようなSOQLの文を書かないといけないので面倒です。

おまけに名前の検索時は%田中%みたいに自分でワイルドカード(%)を付けてやらないと前方・後方一致検索できません。

これを解決するのが動的SOQLと呼ばれるものです。 先ほどのコードに書いてあるSOQLは静的SOQLと呼ばれます。

動的SOQLはDatabase.query(String)メソッドを使用して、引数に文字列でSOQL文を渡してやることでレコードを取得します。

// 静的SOQL
Hoge__c[] hogeList = [SELECT Name, Age__c FROM Hoge__c];

// 動的SOQL
Hoge__c[] hogeList = Database.query('SELECT Name, Age__c FROM Hoge__c');

動的SOQLはSOQL文が文字列なので、Database.query(String)メソッドを呼び出す前に、条件分岐でsoql文を作り変えてやれば画面の入力値に応じて発行されるsoql文が変化します。

先ほどの静的SOQLで書いたコードを動的SOQLで書き直したコントローラのサンプルコードを記載します。

public class SampleSearchController {

    // フォーム入力用変数
    public String inputName {get;set;}
    public String inputAge {get;set;}

    // 検索するオブジェクト
    public Hoge__c[] hogeList{get;set}

    // コンストラクタ
    public SampleSearchController(){
    hogeList = new List<Hoge__c>();
    }

    // 検索メソッド
    public void search(){
        String soql = 'SELECT Id, Name, Age__c FROM Hoge__c';
        String where = ' WHERE '
        String soqlName = 'Name LIKE \'%' + String.escapeSingleQuotes(inputName) + '%\'';
        String soqlAge = 'Age__c = ' + String.escapeSingleQuotes(inputAge);

        if(!String.isBlank(inputName) && !String.isBlank(inputAge)){
            // 名前も年齢も入力されている
            soql += where + soqlName + ' AND ' + soqlAge;
        }else if(!String.isBlank(inputName) && String.isBlank(inputAge)){
            // 名前のみ入力されている
            soql += where + soqlName;
        }else if(String.isBlank(inputName) && !String.isBlank(inputAge)){
            // 年齢のみ入力されている
            soql += where + soqlAge;
        }

        System.debug(soql);
        hogeList = Database.query(soql);
    }

}

このようにSOQL文を文字列で扱うことで、入力された値によって動的にSOQL文を変化させることが出来ます。 ついでにワイルドカード(%)も変数の中に埋め込んでいるので、入力フォームにワイルドカード(%)を入れなくても前方・後方一致検索ができます。

【Discogs】ミュージシャンのディスコグラフィー調査に便利なサイト

あるアーティストの最新アルバムを聴いてすっかり気に入ってしまい、昔の音源も聴いてみようと思うことがままあります。

一般的にはそのアーティストの公式HPやWikipediaなんかを見ればいいと思うんですが、ディスコグラフィーについて特化しているサイトがあるので紹介したいと思います。

Discogs - Wikipedia

2000年に開設され、アメリカ合衆国オレゴン州ポートランドにある企業Zink Media, Inc.が運営している。 ユーザーアカウントを作成すれば誰でも編集できるウィキの要素を持ち、ジャケット写真等の投稿も可能。ポピュラー音楽からクラシック音楽、ノンミュージック(オーディオブック等)まで全てのジャンルを網羅するが、特にクラブミュージックに強みを持っている。 リリース作品のほかアーティスト、レコードレーベルなどの情報も掲載される。 リリース作品に関しては、アーティストのソロ作品・プロデュース作品・提供作品から、レコーディング参加作品・ブートレグまで網羅している。一枚のCD・レコードにつき、その作品に関わったミュージシャン・プロデューサー・スタジオ等のクレジット、再発盤・デジタルリマスタリング盤の情報まで記載されている。 リリース情報の閲覧や投稿だけでなく、ユーザーレビュー投票やコメントなどのコミュニティ機能、CD・レコード等の売買ができるマーケットプレイス機能なども統合されている。

ざっくり言うとアーティストのディスコグラフィーに特化したWikipediaって感じです。 この音源は媒体がCD-Rで出ているとか、データのみでリリースしたとか書いてあって、過去の音源を遡るのにめちゃ便利です。

熱心なファンや本人が書き込みしていることもあるのか、超マイナーな音源の紹介とかもされていることがあってビビります。

気になるアーティストがいたらここで調べると面白いので良ければ。

音楽データ購入サイトの使い分け方

以前の記事で今でもCDを買う習慣があると書きましたが、中にはどうしても手に入らない廃盤のCDとか、アナログレコードでしか発売がされていない音楽なんていうのもちらほらあります。(我が家にはレコードプレーヤーがない)

そういう時に役立つ、音楽データが購入できるサイトの僕なりの使い分けを紹介したいと思います。

因みに、今から紹介するサイトがiTunesAmazonのDL購入と一番何が違うかというと、ビットレートが高いもの、つまり高音質なものが購入できるという点です。

具体的に言うと、MP3のビットレート320kbps以上の音質のものを配信しているということです。 (iTunesAAC 256kbps、AmazonはMP3 256kbps)

別に気にならない人はいいんですけど、どうせなら原曲になるべく近い音で聴きたいので、こういったサイトを使うようにしています。

音質については下記以外にも色々記事あるので探してみてください。

Bandcamp

アンダーグラウンドなアーティストの音源を探す時によく利用します。 発信の場を完全にBandcampに移しているアーティストもいて、最新アルバムはここでか手に入らないなんてこともあります。

あと廃盤のアルバムとかも結構あって、中には投げ銭で提供している太っ腹なアーティストもいるので、手に入らなかった音源とか見つけるとテンション上がります。

Bandcampについての詳細はこちらを参照。

Beatport / Junodownload

この2つのサイトは入手が難しいCDや、レコードでのみ発売されている音源のデータを購入する際によく使います。

Junodownloadの方が基本安い感じですが、Beatportは定期的にクーポン配信があるので、うまく併用してお得な方を選んでいます。

決済方法

Paypalのアカウントを取得することを強く推奨します。 クレジットでもいけるはずですけど、やっぱり安心感あるので。

Paypalについては下記参照。

他にも色々購入サイトはありますが、僕なりの使い方を紹介しました。