Ubuntu 16.04でGitBucketインストール+ssh接続

Ubuntu 16.04の比較的初期状態からGitBucketをインストールしてsshでgit cloneとかできるようにするまで。

インストール

Oracle Java SE 8をインストール。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Tomcat8をインストール。

sudo apt-get install tomcat8

GitBucketをダウンロードしてデプロイ。 URL中の3.13のところは最新バージョンに適宜変更。

curl -L -O https://github.com/gitbucket/gitbucket/releases/download/3.13/gitbucket.war
sudo cp ./gitbucket.war /var/lib/tomcat8/webapps/
sudo mkdir /usr/share/tomcat8/.gitbucket
sudo chown tomcat8:tomcat8 /usr/share/tomcat8/.gitbucket

Tomcat8を再起動。

systemctl restart tomcat8

起動確認。

ブラウザでhttp://localhost:8080/gitbucket/にアクセス。

f:id:mochalog:20160418175832p:plain

ssh接続用設定

gitをsshでつなげるようにする。 事前に適当なユーザとリポジトリが作成済みであるものとする。

まずシステムの設定。

  • root/rootでGitBucketにログイン
  • [System administration]>[System Settings]を選択
  • [Base URL]を設定。"http://localhost:8080/gitbucket"など
  • [Enable SSH access to git repository]にチェック
  • [SSH Host]を設定。"localhost"など
  • [Apply changes]ボタンを押下

ユーザの設定。

  • rootアカウントからサインアウトして、開発ユーザでサインイン
  • [Account settings]>[SSH Keys]を選択
  • 公開鍵を登録。苦労したくなければ~/.ssh/id_rsaに対応する公開鍵で
  • リポジトリのページをブラウザで表示
  • clone用のURLが書いてあるのでそれをコピー
    • http用のURLが表示されている場合は、[HTTP]と書いてあるドロップダウンリストで[SSH]を選択
  • git clone <コピーしたURL>

以上

Pure-Java Markdown processor

pure-Java Markdown processor。 Github flavoredなコード記法も対応してるっぽい。

GitHub - sirthias/pegdown: A pure-Java Markdown processor based on a parboiled PEG parser supporting a number of extensions

フォルダ右クリックからmintty起動

Windowsでフォルダを右クリックして、そのフォルダをカレントにしたminttyを起動する方法。

mintty (cygwin版)をインストール

手順省略。

batファイルを作成

CHERE_INVOKING=yがミソ。

@echo off
set CHERE_INVOKING=y
cd %1
start C:\opt\Cygwin64\bin\mintty.exe -

レジストリキーを追加

パスは適宜修正。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\mintty]
@="Mintty(&M)"

[HKEY_CLASSES_ROOT\Directory\shell\mintty\command]
@="D:\\home\\mocha\\bin\\mintty_chere_invoking.bat \"%V\""

SQL Server LocalDB使用ソリューションのVS2012からVS2015への移行

Web.configの接続文字列のv11.0という箇所をMSSQLLocalDBにすれば動く。 SQL Server 2014で仕様が変わったっぽい。

    <connectionStrings>
        <add name="HelloAspAngular" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=以下省略" />
    </connectionStrings>

あとEntityFrameworkを使っている場合は、同じくWeb.xmlなどの以下の箇所もたぶん変更が必要。

    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
            <parameters>
                <parameter value="MSSQLLocalDB" />
            </parameters>
        </defaultConnectionFactory>
        <!-- 省略 -->
    </entityFramework>

emacsで前のwindowに移動

複数のwindowを表示しているときに次のwindowに移動するにはc-x o。 前のwindowに移動するにはc-- c-x o。(c--Ctrlキーと-(マイナス)。

Ubuntu 15.10でリカバリモードでファイルを編集

/etc/fstabの編集をミスったりしたときの直し方。

  1. Shiftキーを押しながら起動
  2. 「Advanced options for Ubuntu」を選択
  3. Ubuntuなんとかかんとか(recovery mode)」を選択
  4. 「root」を選択
  5. mount -o remount,rw /を実行。リードオンリーでマウントされているので再マウント。
  6. いろいろ直す。 101キーボードの配列になっているのでviを使うときは注意。日本語106キーボードshift+;:になります。
  7. shutdown -r now

以上

Visual Studio Codeのエディタ部分以外のフォントの変更

いろいろと非公式なファイルの修正をしないといけない。

lombokの@Accessors

生成するsetter/getterをfluent interfaceにできる。

lombokで生成されるsetterがfluent interfaceになるように生成できる。 fluent = trueがget/setプレフィクスをなくし、 chain = trueがsetterの戻り値を自分自身にして連続してsetterをかけるようにする。

@Data
@Accessors(fluent = true, chain = true)
public class Bar {
    private int afo;
    private String bfo;
    private String cfo;

    public static void main(String[] args) {
        val bar = new Bar();

        bar.afo(1).cfo("a");

        System.out.println(bar.afo());
        System.out.println(foo.bfo());
        System.out.println(foo.cfo());
    }
}

@Getterのみな場合でも、getプレフィクスをなくせる。

@Value
@Accessors(fluent = true)
public class Foo {
    private int afo;
    private String bfo;
    private String cfo;

    public static void main(String[] args) {
        val foo = new Foo(1, "a", "a");

        System.out.println(foo.afo());
        System.out.println(foo.bfo());
        System.out.println(foo.cfo());
    }
}

DTOのバリデーション処理の位置

入力DTOに対して以下の検証処理をする。

  • Applicatoinレイヤで入力値バリデーション
    • 無効な入力や害のある入力をはじく
  • Domainレイヤでモデルの不変条件検査
    • クライアントに不変条件検査違反を返したい場合、 Domainレイヤにクライアントを意識した違反処理ロジックが入り込むことになるかもしれない。 DomainレイヤでSepcificationを提供して、 Applicationレイヤでそれを使って検査する、という構造にしたほうがよいこともある。