BullよりElk

洋服と食をこよなく愛するWebプログラマ。

nodebrewによるNode.jsインストール手順

仕事にてnodeが必要になりまして、、、
nodeのインストールにちょいと苦戦したので参考までに!
Node.jsをMacにインストールしてnpmを使えるようにする - Hirooooo’s Laboを参考にさせていただきました〜

Node.jsがインストールされているバージョンを確認

$ node -v
v6.2.1

Node.jsのアンインストール方法

すでにNode.jsがインストールされている場合は、次の方法でアンインストールしてください。

$ brew uninstall node
Uninstalling /usr/local/Cellar/node/6.2.1... (3,818 files, 45.3M)

しかし、macのOS的問題でこんな感じで怒られてしまい、すんなりアンインストールはできませんでした。

Error: Permission denied - /usr/local/bin/node

こんな場合は、次のコマンドで/usr/localのパーミッション変えちゃいましょう

$ sudo chown -R `whoami` /usr/local

これ以降の手順

先に書きましたリンクの記事を参考にしていただけるとよいかと思いますが、
Node.jsのインストールのところでつまづいたのでそこの解決方法だけ補足します。

$ nodebrew install-binary latest
Fetching: https://nodejs.org/dist/v7.2.1/node-v7.2.1-darwin-x64.tar.gz
Warning: Failed to create the file
Warning: /[Home_Directory]/.nodebrew/src/v7.2.1/node-v7.2.1-darwin-x64.tar.gz:
Warning: No such file or directory
                                                                           0.0%
curl: (23) Failed writing body (0 != 941)

なんだこのエラーは!!!と思い、次のようにディレクトリを作ってあげたらできました。

$ mkdir -p ~/.nodebrew/src

mysqlで月+2の15日を入れたい

今回も備忘録レベルです。
仕事で作成日の月に2を足した15日を値を入れるというSQL書かないといけなくて。。。
作成日が6/2のとき、8/15をいれたいって時です。

update table1 t set t.delete_date=date_format(date_add(t.created_at, interval 2 month),'%Y-%m-15');

UPDATE文でのINNER JOINの書き方

よく忘れちゃうので。

update table1 inner join table2 on table1.column1 = table2.column2
set table1.column2 = table2.column2;

PrivateメソッドとPrivateフィールドのユニットテスト

表題の通り、備忘録として。

Target.java(テスト対象クラス)

public class Target {
 
    private String str = "test";
 
    public String getStr() {
        return this.str;
    }
 
    private String thisIsPrivateMethod(Integer number) {
        return number == 1 ? "One" : "Other";
    }
     
}

TargetTest.java(テストクラス)

puclic class TargetTest {
 
    Field field;
 
    Method thisIsPrivateMethod;
     
    @Before
    public void setup() {
         
        // Targetクラスのstrフィールドにアクセス可能
        field = Target.class.getDeclaredField("str");
        field.setAccessible(true); 
 
        // TargetクラスのthisIsPrivateMethodメソッドにアクセス可能(getDeclareMethodの第1引数はメソッド名、第2引数以降は対象メソッドのパラメータの型)
        thisIsPrivateMethod = Target.class.getDeclareMethod("thisIsPrivateMethod",  Integer.class);
        thisIsPrivateMethod.setAccessible(true);
    }
 
    @Test
    public void privateField() {
        Target target = new Target();
        // Targetインスタンスのstrフィールドに"tagbengers"をセット
        field.set(target, "tagbangers");
 
        Assert.assertEquals("tagbangers", target.getStr());
    }
 
    @Test
    public void privateMethod() {
        Target target = new Target();
        Assert.assertEquals("One", thisIsPrivateMethod.invoke(target, 1));
    }
}

こんな感じでユニットテストかけます。

JMockitを使ってprivateメソッドをモックにしてみた話

ユニットテスト書いてて、関係ないprivateメソッド通りたくないな〜と思ってググってたらJMockitなるすばらしいものがあったので忘れないうちに!

まず、
Maven Repository: org.jmockit » jmockitからpom.xmljMockitを追加!

<dependency>
    <groupId>org.jmockit</groupId>
    <artifactId>jmockit</artifactId>
    <version>1.30</version>
</dependency>

JmockitSample.class

package com.example;

public class JmockitSample {
	public static void main(String[] args){
		System.out.println(new JmockitSample().methodPublic());
		System.out.println(methodPublicStatic());
		System.out.println(new JmockitSample().callPrivateMethod());
		System.out.println(callPrivateStaticMethod());
	}

	public String methodPublic() {
		return "methodPublic";
	}

	public static String methodPublicStatic() {
		return "methodPublicStatic";
	}

	public String callPrivateMethod(){
		return new JmockitSample().methodPrivate();
	}

	private String methodPrivate() {
		return "methodPrivate";
	}

	public String callPrivateMethodTwoArgs(){
		return new JmockitSample().methodPrivate("TEST", 1);
	}

	private String methodPrivate(String value, Integer no) {
		return value + no;
	}

	public static String callPrivateStaticMethod(){
		return JmockitSample.methodPrivateStatic();
	}
	private static String methodPrivateStatic() {
		return "methodPrivateStatic";
	}

	public void callPrivateVoidMethod(){
		new JmockitSample().voidMethodPrivate(1);
	}

	private void voidMethodPrivate(int no) {}
}

JmockitSampleTest.java

package com.example;

import mockit.Mock;
import mockit.MockUp;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;

import static org.junit.Assert.assertEquals;
import static org.mockito.MockitoAnnotations.initMocks;

public class JmockitSampleTest {

	@InjectMocks
	JmockitSample jmockitSample;

	private int sum = 0;

	@Before
	public void setup() {
		initMocks(this);
	}

	@Test
	public void mockTest(){

		new MockUp<JmockitSample>() {
			@Mock
			private String methodPrivate() {
				return "mocked methodPrivate";
			}

			@Mock
			private String methodPrivate(String value, Integer no) {
				return "mocked methodPrivate two args";
			}

			@Mock
			private String methodPrivateStatic() {
				return "mocked methodPrivateStatic";
			}

			@Mock
			private void voidMethodPrivate(int no) {
				sum += 5;
			}
		};

		assertEquals(new JmockitSample().methodPublic(), "methodPublic");
		assertEquals(JmockitSample.methodPublicStatic(), "methodPublicStatic");
		assertEquals(new JmockitSample().callPrivateMethod(), "mocked methodPrivate");
		assertEquals(new JmockitSample().callPrivateMethodTwoArgs(), "mocked methodPrivate two args");
		assertEquals(JmockitSample.callPrivateStaticMethod(), "mocked methodPrivateStatic");

		new JmockitSample().callPrivateVoidMethod();
		assertEquals(5, sum);
	}
}

privateメソッドのモックができましたー

クライアントとサーバの通信の流れを見てみよう!

入社当時Webの勉強のためにWebサーバ作っていたのですが、まだできておらずWebの理解を深めなきゃという気持ちで再び取り組みはじめました。
今回は、サーバとクライアントの通信がどのように行われているのかについて書きます。

まず、クライアントとサーバを簡単に作ってみましょう。

Client.java

package client;

import java.net.Socket;

public class Client {
    public static void main(String[] args) throws Exception {
        try(Socket socket = new Socket("localhost", 8001)) {
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Server.java

package server;

import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws Exception {
        try(ServerSocket serverSocket = new ServerSocket(8001)) {

            System.out.println("クライアントからの接続待ち。");
            Socket socket = serverSocket.accept();
            System.out.println("クライアントからの接続!");

            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

サーバを実行した後に、クライアントを実行するとクライアントからサーバへ通信しにいきます。クライアントからサーバで通信するまでに何が行われているのか説明します。流れは、次の通りです。なお、上記のプログラムでは3はやっておりません。

1.ソケットを作る(ソケット作成フェーズ)

まず、サーバがソケットを作成します。ソケットとは、パイプの両端にある出入り口のことです。その時に上記のServer.javaは、8001番ポートで待ち受けています。(「クライアントからの接続を待ちます」と出力)
ソケットができたら、ディスクリプタ(ソケットに割り当てられた番号のようなもの)が返ってきます。アプリケーションはこれを受け取ってメモリに記憶します。ディスクリプタでソケットを識別しています。

2.サーバ側のソケットにパイプをつなぐ(接続フェーズ)

「new Socket("localhost", 8001)」でストリームソケットを作成し、指定されたホスト上の指定されたポート番号に接続します(「クライアント接続」と出力)。繋ぎたいソケットを正確に取得するために、IPとポート番号が必要です。(考え方は手紙の宛名面と同じです。「住所=IPアドレス、宛名=ポート番号」)

3.データを送受信する(送受信フェーズ)

ネットワークを通してデータがサーバに送られます。そして、サーバ側からレスポンスが返ってきます。受信したメッセージを格納するためのメモリ領域を受信バッファと呼びます。

4.パイプを外してソケットを抹消する(切断フェーズ)

繋がっていたパイプを外します。クライアントでもサーバでもどちらから外しても構いません。その後、ソケットを抹消します。

ソケットについてもやもやしていたので少し解消できました!!!

ETHOSENS 2017SSランウェイ行ってきたお

タイトルの通り今回も招待されたのでランウェイに行くことができました。
f:id:b1a9id:20161024011146j:plain
今回は招待だったので関係者席寄りに座れました。逆側が今回初の方達かと思うのですが後ろは立ち見でしたね〜
早く行ったかいもあって前から2列目と良い席に座れました!!!
ただ、15分くらい遅れての開始。やっぱ時間通りにはいかないよな〜

ショーがはじまって、BGMが体をドクンドクン。安定のETHOSENS。どれもかっちょいい!!!!
f:id:b1a9id:20161024011200j:plain
f:id:b1a9id:20161024011155j:plain

総評としては、例年より攻めてるな〜って感じ。そしてカラフルになってました。
紫がすごく綺麗でした。特にこれ気に入りました♪
f:id:b1a9id:20161024011142j:plain
モデルさんはほぼほぼ外人さんでしたね。日本人の方はいらっしゃましたが背が高い人オンリー。
あと、こんなに歩くの早いんだ〜って印象。

ぜひまた行きたい!
ただ並んでるときに思ったことが1つ!
若者よ、お洒落は足元からだよ?いいコート着てるな〜って思っても足元がConverseとかマーチンでちょっと残念。