Quantcast
Channel: web pakun
Viewing all 247 articles
Browse latest View live

MySQLでcsvファイルをエクスポート・インポートする方法まとめ

$
0
0

MySQLを利用して開発を行っていると、csvからサンプルデータをimportしたり、DBの中身をエクスポートする場合があります。

Pentaho(Spoon)等のETLツールを使うと、スクリプト化したり、項目の加工を行ったり、エクセルからimportしたり、エクスポートしたりすることもできますので、ぜひその記事も読んで活かしてほしいですが、今回は、シンプルにMySQLの機能を使って実現することにしましょう。

s1

 

 

エクスポートする方法

以下のmysqlコマンド構文でcsvファイルをエクスポートできます。

気をつけたいのは、「escaped by」で指定するエスケープ文字ですね。

デフォルトは「\」になっていますので、カラムの囲み文字と同じ文字がレコードに含まれると、「\」でエスケープされ、「”AD”,”アン\”ドラ”」のように出力されます。

通常、csvでは「”」がエスケープに使われますので、それと同じにするには「escaped by ‘”‘」を指定した方が良いと思います。

 

mysql>
select * from table_name into outfile "D:\\export_file_name.csv" 
fields 
terminated by ','             /* カラムの区切り文字 */
enclosed by '"'               /* カラムの囲み文字 */
escaped by '"'                /* エスケープ文字(デフォルトは\) */
lines terminated by '\r\n';   /* 1レコードの改行コード */

 

出力カラムに加工を加えてエクスポートするには

上記のコマンドで「select * from table_name」の部分が、出力カラムを指定しているところで、基本的にSQLのSelectの結果をファイル出力しています。

そのため、この部分に「select concat(CODE, ‘-‘, COUNTRY), CODE, COUNTRY from table_name」のようなSQLの関数等を使用してカラムに対して加工を行うことも可能です。

 

ヘッダをつけてエクスポートするには

上記を応用すると、ヘッダをつけることもできます。

一行目に文字列を出力し、selectの結果とUNIONします。

 

mysql>
(select 'CODE', 'COUNTRY')
UNION
(select CODE, COUNTRY  from country into outfile "D:\\export_file_name.csv" 
fields 
terminated by ','             /* カラムの区切り文字 */
enclosed by '"'               /* カラムの囲み文字 */
escaped by '"'                /* エスケープ文字(デフォルトは\) */
lines terminated by '\r\n'   /* 1レコードの改行コード */
);

 

Nullを含むデータを出力するとおかしくなる問題に対処

上記のように出力すると、Nullを含むレコードは「”N」のように出力されておかしくなってしまいます。
s3

そこで、IFNULL()関数を使用して、あらかじめNullだったらどのように置換するかを指定しておくと良いです。

mysql>
select CODE, IFNULL(COUNTRY, '') from country into outfile "D:\\export_file_name.csv" 
fields 
terminated by ','             /* カラムの区切り文字 */
enclosed by '"'               /* カラムの囲み文字 */
escaped by '"'                /* エスケープ文字(デフォルトは\) */
lines terminated by '\r\n'; 

 

 

タブ区切りでエクスポートするには

よく使われる形式として、タブ区切りの形式(tsv)もあります。

上記の原理が分かれば簡単ですね。以下のように指定します。

 

mysql>
select * from table_name into outfile "D:\\export_file_name.csv" 
fields 
terminated by '\t'           /* カラムの区切り文字 */
lines terminated by '\r\n'   /* 1レコードの改行コード */

 

インポートする方法

以下のmysqlコマンド構文でcsvファイルをインポートできます。

 

mysql>
load data local infile "D:\\import_file_name.csv" into table table_name 
fields terminated BY ','          /* カラムの区切り文字 */
enclosed by '"'                   /* カラムの囲み文字 */
lines terminated by '\r\n'        /* 1レコードの改行コード */
IGNORE 1 LINES;                   /* 1行を無視する */

 

一行目にヘッダのあるcsvファイルの場合には、上記のように「GNORE 1 LINES」を指定すると1行目を読み飛ばしてくれます。

 

インポートするときに、項目の値に加工を加える

通常はそのままcsvをインポートしますが、その際に、なんらかの加工を行いたい場合があります。

たとえば日付型のフォーマット加工や文字列置換などです。

その場合には、「ユーザ変数」を利用すると便利です。

 

上記では、例として、CODEとCOUNTRYというカラムを持つテーブルのCOUNTRYの項目に対して、インポート時に文字列置換(REPLACE)処理を行う例です。

mysql>
load data local infile "D:\\export_file_name.csv" into table country
fields terminated BY ','      /* カラムの区切り文字 */
enclosed by '"'               /* カラムの囲み文字 */
lines terminated by '\r\n'    /* 1レコードの改行コード */
(CODE, @var_country)
SET COUNTRY = REPLACE(@var_country, 'E', 'rr');

置換だけでなく、

STR_TO_DATE(@date_column, '%m/%d/%Y');

のように文字列を日付型に加工したりすることもできます。


Salesforceのapexで自作のWeb Serviceを作成し、外部プログラムから呼び出すには?

$
0
0

以前、「Salesforceに接続して、オブジェクト加工等を行うEclipseプロジェクトのテンプレート」という記事で、Partner WSDLを利用してWebサービス経由でSFDCにログインし、様々な情報を取ってきたり、レコードを作成したりしました。

今回は、自分で、Apexコードで何かを行うクラスを作成し、それをWebサービスとして公開した後、それを外部のJavaプログラムから呼び出すことをやってみたいと思います。

複雑なSFDC内部での処理はApexコードに任せれば、外部プログラムはそれを呼び出すだけなので、呼び出し側の
ロジックが簡素化されるだけでなく、Batch Apexを使った大量一括処理を行うことも比較的楽になると思います。

また、JavaのAPサーバからSalesforce側にあるデータを取得したり、SFDC外部サイトのユーザアクションから、
Salesforceに一連のデータを登録・更新することも簡単になります。

 

SFDCにWebサービスを作成する

はじめに呼び出すWebサービスをSFDCに作成します。

今回は以下のような「MyWebServiceClass」を作成しました。

Webサービスで公開するメソッドは「myCalledMethod」とし、呼び出し側からは文字列型の変数を渡すことにします。

戻りの型は、サンプルとして作成した「MyInfo」というクラスにします。

自作のクラスでも呼び出しの引数、戻りとして使用できるという例のためですので、普通に文字列や数値型でもいいですよ。

 

global class MyWebServiceClass  
{  
   
    //Define an object in apex that is exposed in apex web service
    global class MyInfo{
        webservice String myName;
        webservice Integer MyNumber;
    }
    
    webService static MyInfo myCalledMethod(String strParam)  
    {
        // DoSomething
        MyInfo info = new MyInfo();
        info.myName = '111';
        info.MyNumber = 222;
        return info;  
    }  
}

 

クラスを作成したら、「WSDLの作成」ボタンを押して、wsdlファイルを作成、適当な名前でPCに保存します。

 

w1

 

今回は「MyWebServiceClass.wsdl」としました。

WSDLファイルは公開するWebサービスの情報を定義したものです。

後ほど、このファイルを元に、JavaからWebサービスに接続するためのクラスを生成します。

 

呼び出し側のコード

それではJavaからの呼び出しを行ってみます。

Eclipseで前回の「Salesforceに接続して、オブジェクト加工等を行うEclipseプロジェクトのテンプレート」という記事を参考に、雛形のプロジェクトがあることを前提とします。

はじめに、スタブ・クラスの生成を行います。

 

java -classpath lib\wsc-23.jar com.sforce.ws.tools.wsdlc MyWebServiceClass.wsdl .\lib\webservice_stub.jar

 

というコマンドをコマンド・プロンプトから打ちます。

PCに保存した「MyWebServiceClass.wsdl」を元に、クラスを生成し、「webservice_stub.jar」としてまとめる
というコマンドです。

雛形で用意した、「partner.jar」と「webservice_stub.jar」がクラスパスに入っていることを確認しましょう。

「partner.jar」には、SFDCにログインして情報を取ってくる一般的な機能を提供するクラス群が、

「webservice_stub.jar」には今回作成したMyWebServiceClassのWebサービスを利用するために特化したクラス群が含まれています。

 

呼び出しのクラスはこのような感じになります。

 

public void execute( ) throws ApplicationException{

	PartnerConnection connection;
	SoapConnection sconnection;


	ConnectorConfig config = new ConnectorConfig();
	config.setUsername(USERNAME);
	config.setPassword(PASSWORD);
	config.setAuthEndpoint(AUTH_ENDPOINT);
	config.setTraceMessage(true);
	//config.setProxy(PROXY_SERVER, PROXY_PORT);


	try {
		
		connection = com.sforce.soap.partner.Connector.newConnection(config);
		System.out.println("Auth EndPoint: "+config.getAuthEndpoint());
		    System.out.println("Service EndPoint: "+config.getServiceEndpoint());
		    System.out.println("Username: "+config.getUsername());
		    System.out.println("SessionId: "+config.getSessionId());
		    
		    
		    config.setServiceEndpoint(Connector.END_POINT);

		    sconnection = com.sforce.soap.MyWebServiceClass.Connector.newConnection(config);

		    
		MyInfo info = sconnection.myCalledMethod("test");
		
		System.out.println("getMyName:"+info.getMyName());
		
		
	}catch (ConnectionException e1) {
		e1.printStackTrace();
	}  catch (Exception e) {
		e.printStackTrace();
	} 


}

 

はじめにPartnerConnectionを使ってログインを行い、その後、SoapConnectionで自作のWebサービスを呼ぶ流れになっています。

「config.setServiceEndpoint(Connector.END_POINT);」をきちんと指定しないと、

 

com.sforce.ws.SoapFaultException: No operation available for request {http://soap.sforce.com/schemas/class/MyWebServiceClass}myCalledMethod
	at com.sforce.ws.transport.SoapConnection.createException(SoapConnection.java:204)
	at com.sforce.ws.transport.SoapConnection.receive(SoapConnection.java:148)
	at com.sforce.ws.transport.SoapConnection.send(SoapConnection.java:110)
	at com.sforce.soap.MyWebServiceClass.SoapConnection.myCalledMethod(SoapConnection.java:178)

 

のようなエラーが表示されるかもしれませんので、気をつけてください。

台湾新幹線(高鉄)の切符は早割がきくので、ネットで安くでゲットできるよ(日本語でも可)

$
0
0

台北や国際線のターミナルである桃園国際空港から、台湾の中南部に移動するには、台湾新幹線(台湾高鉄)を利用すると、すごく早くて便利です。

例えば、台北から南の高雄の左営駅まで、約1時間半で到着します。

台北やその郊外の九份へは行く人も多いですが、南台湾も、美食の町・台南や南の楽園・墾丁(くんてぃん)など、いろいろと見どころのあるところが多いですよ。

さて、台湾新幹線(高鉄)のホームページは中国語、英語だけでなく、日本語でも列車の検索・予約が可能になっています。

さらに、「アーリーバード切符」「オフピーク割引」というものがあり、それぞれ、10%から35%の割引で切符を予約・購入することができます。

「アーリーバード切符」は日本でいう「早割」のようなもので、一か月前からホームページで予約することができます。

最大の割引は35%で、そこから、20%、10%くらいまで枠があります。

結構人気なので、35%はすぐに席が埋まってなくなってしまいますが、一か月前になったときに予約すると、ほとんどゲットすることができますよ。20%くらいは、2~3週間前でも余っていることも多い感じです。

私は30日前の夜中1時にPCの前に座って購入するので(台湾は1時間の時差があるので、こちらの1時があちらの0時です)、ほとんど35%ゲットできます。

予約から支払いまでは三日間程度余裕がありますので、まずは予約して、あとでじっくり検討してみてもいいかもしれませんね。

以下に簡単に予約方法をご説明します。

台湾高速鉄道のホームページに行き、右上の「オンライン予約24H」をクリックします。

taiwan-rail1

 

すると、「台湾高鉄インターネット予約システム」に行きます。

taiwan-rail2

 

ここで、普通にどこから乗って、どこに行くのか、および日程と大体の時間をいれて検索すればOKです。

早割検索のチェックは、入れても入れなくてもいいです。検索結果を早割に限定するかということですが、結果に割引の%も大きく載っていますので、迷うことはないです。

taiwan-rail3

検索の結果は上記のようになりますので、好きな割引の列車を選んで、確認ボタンを押すと、予約画面にいきます。

予約の際には、台湾身分証明書番号かパスポートの番号が必要です。台湾人でない我々は、パスポート番号ですよね。

あとは、電話番号とメアドがあればOKです。

予約が完了すると、予約番号が発行されますので、控えておきましょう。それから、メアドに予約の内容が送られます。

予約番号があれば、指定された期限までにオンラインで支払えばOKです。すこしわかりにくいかもしれないので、念のため、以下にやり方をのせますね。

taiwan-rail5

 

メールにあったリンクをクリックするか、再び「台湾高鉄インターネット予約システム」に行き、画面上部の「予約履歴照会/お支払・変更」をクリックします。ここが少しわかりにくいです。。

ここに行けさえすれば、あとは、パスポート番号と予約番号を入力すればオンライン決済の画面に進めます。

それでは、快適な台湾の旅を!

Inkscapeで縁取り文字のロゴを、簡単にきれいに作成する方法

$
0
0

InkscapeはIllustratorのようにベクター形式を扱えながらもフリーのソフトで、簡単にきれいなロゴを作成することができます。

今回は、

inkscape0

 

上記のような白い縁のついた文字を作成する方法です。

 

①文字を書く

inkscape1

はじめに文字を書きます。上記矢印の、テキスト「A」のアイコンをクリックして、好きな文字を書きます。

 

②書いた文字を複製する

inkscape2

次に、書いた文字のオブジェクトを複製します。

左側の矢印のアイコンをクリックするとオブジェクトを選択できるようになるので、それで書いた文字を選択し、「Ctrl+C」

と「Ctrl+V」でコピー&ペーストしましょう。

 

③文字色を縁の色にして、膨らます

inkscape4-0

つぎに、文字の色を縁の色に変更します。

オブジェクトを選択して、画面下部のカラーパレットから色を選択し、色変更します。今回は白にしました。

その後、その文字の周りを太くするために、「パス」⇒「アウトセット」を行います。

少しづつ膨らむので、自分の好きな大きさになるまで、繰り返し行います。

ストロークの太さを指定して、それを太くしていく方法もありますが、例えば、「ぱ」などの穴のある文字の場合、穴の部分が白で埋まらなかったりなど、きれいにいかないので、「アウトセット」を使った方法をおススメします。

 

④2つをきれいに重ねる

inkscape5

白文字の方がちょうどいい太さになったら、両方のオブジェクトを選択します。

「Shift」を押しながら2つのオブジェクトをクリックすると、両方選択できます。

選択後、右の「整列と配置」で、「中心を垂直軸に合わせる」と「水平軸の中心に揃える」をクリックすると、両方のオブジェクトがきれいにそろいます。

 

こんな感じですね。

inkscape7

もし、オブジェクトの上下が逆になっている場合は、画面上部の「最背面に移動」か「最前面に移動」ボタンを使うと調整できます。

 

 

 

 

Javaでオブジェクトを任意のキー(複数)で並び替え(ソート)する方法まとめ

$
0
0

javaのListやArrayListにクラスオブジェクトを格納した後、それを任意の項目(キー)で並べ替えて処理を行いたい場合によく使うTipsです。

結構使用頻度が多いのですが、そのたびに調べることになるので、まとめておこうと思います。

方法としては、

①Comparableインターフェースを実装したクラスをListに格納し、それをソートする。

②Comparatorインターフェースを実装するクラスにソート条件を記述し、それとソート対象のクラスを引数にソートする。

③Apache Commons CollectionsのComparatorChainを利用する。

などがあげられます。

①と②の方法は、Javaに限らず、いろいろな言語でも共通で使える原理なので、覚えておくと便利です。

 

最近では、Java8からstreamAPIとラムダ式を使用して、簡便に記述できるようになりましたが、Java8は普及がまだまだなので、次回ということで。

 

①Comparableインターフェースを実装したクラスをListに格納し、それをソートする。

Listに格納するソート対象のクラスがComparableインターフェースを実装していると、Collections.sort(list)メソッドを使用できます。

そのため、Comparableインターフェースを実装したクラス(JavaBeans)を作成します。

Comparableインターフェースで実装しなければいけないメソッドは、「compareTo」で、この中でソート対象のクラスの項目(キー)の比較を行い、以下のようにint型の値を戻します。

・このインスタンスが、compareToの引数として渡されたObjectより小さい(前に並ぶ)場合・・・負の値

・このインスタンスが、compareToの引数として渡されたObjectより大きい(後ろに並ぶ)場合・・・正の値

・同じなら、0を返す。

以下が、Comparableインターフェースを実装したソート対象のクラスの例です。

 

public class MyComparableObject implements Comparable {
	
  private int age;         //年齢
  private String userName; //名前
      
  public MyComparableObject(int age, String userName) {
    this.age = age;
    this.userName = userName;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  /**
  * @return このインスタンスが引数として渡されたオブジェクトより前に並び替えられる場合負の値。
  * このインスタンスが引数として渡されたオブジェクトと同じ順序の場合0。
  * このインスタンスが引数として渡されたオブジェクトより後ろに並び替えられる場合正の値。
  */
  public int compareTo(MyComparableObject passedObj) {
    	
    //このインスタンスが、compareToの引数として渡されたObjectより小さい(前に並ぶ)なら負の値、
    //このインスタンスが、compareToの引数として渡されたObjectより大きい(後ろに並ぶ)なら正の値を返す。
    //同じなら、0を返せばよい。
    if(this.age<passedObj.age){ 
      return -1; 
    }else if(this.age>passedObj.age){
      return 1;
    }else{
      return 0;
    }

  }
}
そして以下が、そのクラスを利用して、実際に並べ替えを行うサンプルです。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SampleSortTest {

  public static void main(String[] args) {
		
    List list = new ArrayList();
    list.add(new MyComparableObject(20, "あさだ"));
    list.add(new MyComparableObject(20, "あさくら"));
    list.add(new MyComparableObject(18, "たなか"));
    list.add(new MyComparableObject(32, "さくま"));
		
    for(MyComparableObject obj:list){
      System.out.println(obj.getAge() + ""+ obj.getUserName());
    }
		
    Collections.sort(list);
    System.out.println("--Sort--");
		
    for(MyComparableObject obj:list){
      System.out.println(obj.getAge() + ""+ obj.getUserName());
    }

  }

}

実行すると、以下のような出力結果となります。
sort1

 

②Comparatorインターフェースを実装するクラスにソート条件を記述し、それとソート対象のクラスを引数にソートする。

既にクラスが存在していて、変更できない場合は、Comparatorインターフェースを実装したクラスを作成し、そこでソートの条件を記述します。

すると、「Collections.sort(list, <ソート条件を記述したクラス>)」のようにListと条件を渡してソートできるようになります。 たとえば、以下のようなJavaBeansクラスが、すでに存在していたとします。

 

public class MyObject {
	
  private int age;         //年齢
  private String userName; //名前
        
  public MyObject(int age, String userName) {
    this.age = age;
    this.userName = userName;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
   this.age = age;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

}


このクラスはそのままにしておき、下記のようなComparatorインターフェースを実装したクラスを作成します。

メソッド「compare()」は2つの引数をとり、メソッド内でそれらのオブジェクトの項目の比較を行っています。

 

import java.util.Comparator;

public class MyObjComparator implements Comparator {

  public int compare(MyObject obj1, MyObject obj2) {
		
    if(obj1.getAge()<obj2.getAge()){ 
      return -1; 
    }else if(obj1.getAge()>obj2.getAge()){
      return 1;
    }else{
      return 0;
    }
  }
	
}

この原理を使うと、複数の項目で並べ替えを行う条件を記述することもできます。
以下は、ageという項目に加えて、userNameでも比較を行っています。

 

import java.util.Comparator;

public class MyObjComparatorMulti implements Comparator {

  public int compare(MyObject obj1, MyObject obj2) {
		
    if(obj1.getAge()<obj2.getAge()){ 
      return -1; 
    }else if(obj1.getAge()>obj2.getAge()){
      return 1;
    }else{
      //ここに来るということは、年齢が同じだということなので、次の条件で比較する。
      //これを繰り返せば、何個でも大丈夫。
      //String.compareToは2 つの文字列を辞書的に比較するメソッド。
      return obj1.getUserName().compareTo(obj2.getUserName());
    }
  }
	
}


以下が、それらのクラスを利用して、実際に並べ替えを行うサンプルです。

最初に、ageという1項目でソートを行い、次に、MyObjComparatorMultiクラスで2項目によるソートを行っています。

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SampleSortTest2 {

  public static void main(String[] args) {

    List list = new ArrayList();
    list.add(new MyObject(20, "あさだ"));
    list.add(new MyObject(20, "あさくら"));
    list.add(new MyObject(18, "たなか"));
    list.add(new MyObject(32, "さくま"));

    for(MyObject obj:list){
      System.out.println(obj.getAge() + ""+ obj.getUserName());
    }

    Collections.sort(list, new MyObjComparator());
    System.out.println("--Sort--");

    for(MyObject obj:list){
      System.out.println(obj.getAge() + ""+ obj.getUserName());
    }

    Collections.sort(list, new MyObjComparatorMulti());
    System.out.println("--Sort--");

    for(MyObject obj:list){
      System.out.println(obj.getAge() + ""+ obj.getUserName());
    }

  }

}

 

実行すると、以下のような出力結果となります。

sort2

 

③Apache Commons CollectionsのComparatorChainを利用する。

上記の②の理論で汎用的に使えるようにしたのが、Apache Commons CollectionsのComparatorChainというユーティリティクラスです。

ComparatorChainクラスの「addComparator」というメソッドで、ソートのキーをどんどん追加していくことができます。

そのため、複数のキー条件によるソートが比較的簡単に実現できます。

下記のクラスは、最初にage、次にuserNameでソートを行う場合の記述です。

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;

public class SampleSortTest3 {

  public static void main(String[] args) {

    List list = new ArrayList();
    list.add(new MyObject(20, "あさだ"));
    list.add(new MyObject(20, "あさくら"));
    list.add(new MyObject(18, "たなか"));
    list.add(new MyObject(32, "さくま"));

    for(MyObject obj:list){
      System.out.println(obj.getAge() + ""+ obj.getUserName());
    }

    ComparatorChain comparator = new ComparatorChain();
    comparator.addComparator(new BeanComparator("age"));
    comparator.addComparator(new BeanComparator("userName"));

    Collections.sort(list, comparator);
    System.out.println("--Sort--");

    for(MyObject obj:list){
      System.out.println(obj.getAge() + ""+ obj.getUserName());
    }

  }

}

 

必要なjarは以下のページから取得してください。

Apache Commons Collections・・・commons-collections-3.2.2.jar

Apache Commons BeanUtils・・・commons-beanutils-1.9.2.jar

Apache Commons Logging・・・commons-logging-1.2.jar

 

Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/collections/comparators/ComparableComparator

というエラーが出る場合は、CollectionsとBeanUtilsのバージョンが合っているかを確認するといいかもしれません。

commons-beanutils-1.9.2はcommons-collections-3.2系に依存していますので、私がcommons-collections-4系を使ったときは、上記のエラーが出てしまいました。

WordPressのサイト移行で、旧から新サイトへ301転送設定をまとめて行えるRedirection

$
0
0

WordPressで複数のサイト運営を行っていましたが、その一部を統合することにしました。

サイト移行をした場合、今まで書いた記事も新しいサイトに移行したい場合があります。

単純に新しいサイトに同じ記事を書いて、古い記事を消す方法もありますが、旧サイトにそこそこアクセスがあり、ブックマークもいただいているような記事があると、そのリンクが切れてしまうのはなるべく避けたいところです。

かといって、2つの記事を残したままにしておくと、Googleにコピーコンテンツとみなされ、SEO的にマイナスの評価を受けてしまう可能性もあります。

そのため、
・2つの同じ記事あるけど、メインは新サイトの記事の方で、旧サイトの記事の方は以前のサイトのユーザのために残しているんですよー。

ということをGoogleにも伝えてあげる必要があります。

そのような場合に利用できるのが、「301 リダイレクト」という方法です。

リダイレクトとは「転送」のことで、旧サイトのその記事にアクセスがあった場合、そのまま新サイトに「転送」し、サイトの記事の方を表示してあげます。

また、「301 リダイレクト」すると、旧サイトはGoogleのインデックス対象とならず、転送先の新サイトの方がインデックス対象となるので、転送設定後しばらく経つと、新サイトの方が検索結果に表示されるようになりますので、新しく検索してサイトに到達してくれる人には、新サイトでアピールできることになります。

こうすることで、旧サイトにブックマークしているユーザは活かしつつ、新サイトに誘導していくことが可能になります。

現実の世界でも、引っ越しで住所が変更になったとき、郵便局に届け出をしておけば、旧住所にきた郵便物を新しい住所に転送してくれますよね。

しばらくして、新住所が浸透してきたら、新しい住所に荷物を送ってくる人はほとんどいなくなります。それと同じようなことをインターネットの世界で行うことだと考えるとわかりやすいです。

実際にこの設定を行うのは旧サイト側で、「このURLにアクセスがあったら、自動的にこの新しいサイトのこのURLを表示してあげる」という定義を行っておきます。

定義する場所は、どの方法をとるかによって変わりますが、Wordpressを使っているのであれば、「Redirection」というプラグインを利用すると便利です。

このプラグインを使うと、旧から新の1対1のURLのマッピングを定義できるだけでなく、あるディレクトリから下のURLを全部新サイトの対応する記事に転送したりなど、自由度の高い設定が行えます。

旧サイトの記事数が多くて、ひとつひとつの設定は手間がかかるといった場合も便利なプラグインですね。

では、さっそく使い方をみてみましょう。

ここからダウンロードして、プラグインをインストールして有効化します。
その後、管理コンソールの「ツール」⇒「リディレクション」をクリックすると、以下のような画面となります。

img_56d2e31a4ec1f

 

1対1での転送設定

あるURLから新しいURLに1対1でのマッピングを行うのは簡単です。

下記のように、ソースURLに旧サイトの記事のURL、ターゲットURLに、新サイトの記事のURLを入力し、一致条件は「URLのみ」、操作は「URLへ転送」を選んで「新しい転送ルールを追加」すればOKです。

正規表現を使うと、もっと自由度のある複数URLの設定ができますが、それは後程使いますので、今回はチェックなしで結構です。

img_56d2e3308cd9f

設定を保存できたら、実際にブラウザで旧記事のURLを入力してみます。

すると、新サイトが表示されるはずです。

 

ディレクトリtoディレクトリの転送設定(各記事to各記事)

それでは応用編として、あるディレクトリ以下の記事を全部新サイトのあるディレクトリ以下の各記事に転送してみる設定を1つの定義で行ってみます。

img_56d2e341a5f8c

今回は「正規表現」を使用します。

この表現を使うと、URLのマッチング条件の自由度が上がります。

少し、上記の設定を解説します。

まず、ソースURLには「旧サイト/wordpress/(\d*)/(\d*)/(.*)」と指定されていますね。

「\d」は任意の半角数字を表し、「()」でグループ化されているので、「数字の繰り返し」にマッチします。

「.」は(改行文字を除く)任意の1文字にマッチします。

つまり、

旧サイト/wordpress/2015/02/saple-kiji」のようなURLだった場合に、転送されることになりますね。

それをどのURLに転送するかは、「新サイト/wordpress/$1/$2/$3」と指定されています。

「$数字」はソースURLでマッチした文字列に順番に対応しています。

つまり、最初の「(\d*) 」にマッチする「2015」が「$1」に、次の「(\d*)」にマッチする「02」が「$2」に、「(.*) 」にマッチする「saple-kiji」が「$3」に対応することになります。

このため、「旧サイト/wordpress/2015/02/saple-kiji」が「新サイト/wordpress/2015/02/saple-kiji」に転送されます。

このように指定することで、旧サイトのwordpressディレクトリ配下の「年/月/記事名」の記事を1つの指定で新サイトの同じ「年/月/記事名 」に転送できるわけです。

ヘッダー画像やバナー作成でも大活躍 Inkscapeで物の周りをぼかして切り抜く方法

$
0
0

最近、InlscapeやGimpなどフリーソフトでの画像加工にはまっているぱーくんです。

特に、ホームページのヘッダー画像やバナーの作成にこれらのソフトを使うと、表現の幅が広がって楽しいですね。

さて、ヘッダー画像作成時に、文字と写真を一緒に載せる場合、画像の切抜きって難しいと思いませんか?

その写真にはその写真が撮られた背景があり、そのまま切り取ってしまうと、サイトのヘッダーに妙になじまないというか。。

 

そんなとき、切り取った画像の周りをぼかしてあげると結構なじませることができます。

そんな周りをぼかした切抜きですが、いくつか方法があるうち、ここではInkscapeを使ってみます。

 

まずは画像を切り取りたい形で囲ってみる

最初に画像を開き、切り出したい形を決めてあげます。

領域を囲う際に使用するのは、「ペンツール」です。

Inkscapeの左側のパレットで「ペンツール」をクリックして選択します。

その後、クリックして画像を囲んでいきましょう。

クリックの感覚を狭く、細かく行っていけば、ものの形になるべく添うように領域を指定することもできます。

始まりの点から、クリックして囲っていき、最後の点と最初の点をつなぐと囲うことができます。

ここでは、ざっくり囲いました。
incscape1

 

 

囲った領域を白で塗りつぶす

それでは、その領域を白で塗りつぶします。塗りつぶしのために、領域を選択しないといけないですね。
ツールを変更し、左側の一番上の「選択ツール」を選びます。
それから囲った領域の線上、もしくはそれより少し内側をクリックすると、領域を選択することができます。
選択出来たら、画面の下側にあるカラーパレットで白をクリックすると、領域が白で塗りつぶされます。

incscape2

 
 

切り抜く領域の境界をぼかしていく

上記で白く塗った部分が後で切り抜かれることになりますので、そこの輪郭をぼかしていきましょう。

選択した領域の境界をぼかしていくには、右側の「フィル/ストローク」⇒「ストロークのスタイル」から、「ぼかし」のメモリを上げていきます。

上げれば上がるほどぼやけ度がアップしていきます。

今回は5程度にしました。

 

incscape3

 
 

切り抜く

それではいよいよ切り抜きます。

切抜きには「マスク」という効果を使います。

元画像から、白く塗った部分をマスクすることで、その部分を切り抜けるというわけです。

そのためには、元画像と白く塗った部分の2つを選択してあげる必要があります。

Shiftを押しながら選択していくと、選択対象を追加していくことができますので、最初に「選択ツール」で元画像を選択し、Shiftを押しながら白く塗った領域の内側をクリックすることで、2つの領域を選択できます。

選択で来たら、上部メニューの「オブジェクト」⇒「マスク」⇒「設定」をクリックすることで、切抜きが行えます。

 

incscape4

incscape4

 
 

画像として保存

それでは切り取った領域を画像として保存しましょう。

切り抜いた画像は周りが透明になっていますので、png形式で保存すると透過イメージになります。

「ファイル」⇒「PNG画像にエクスポート」でpng形式で保存できます。

 

incscape5

 

保存した画像はこんな感じになります。
WindowsのViewerなので、透明な部分が黒く表示されています。

 

incscape6

 

いかがでしたでしょうか。

慣れると1分足らずでこのような周りをぼかした画像の切抜きができるようになります。

Youtubeで字幕付きの動画にしぼって検索して閲覧すると英語学習に便利だよ!

$
0
0

英語学習に重要なのは、理解できるフレーズを、何度も聞いたり、何度も口に出して発音してみること。

Youtubeの普及で、英語の動画を身近に、しかも大量に見ることができるようになったけど、実際になんと言っているのか、どんな単語を発しているのかを確認できないと、もどかしいですよね。

そのため、私は、なるべく字幕付きの動画を探してみるようにしています。

で、Youtubeの動画の中から、字幕付きの動画に絞って検索する方法をご紹介します。

 

Youtubeで字幕付きの動画のみを検索する

はじめに、普通に検索窓に検索文字列を入力して検索を行います。

以下が、検索ボタンを押した後の検索結果画面です。

検索窓の下の赤枠で囲った部分に「フィルタ」というボタンがあるのが見えますでしょうか。

 

 

そこをクリックすると、検索結果を絞り込む(フィルタする)条件が表示されます。

字幕付きにフィルタ

 

その中で、「字幕」というフィルタをクリックすると、検索結果が、字幕の付いた動画だけに絞られます。

それ以外にもフィルタ条件がありますので、自分の好みの動画を絞り込む条件があれば追加してみてください。

 

以下が絞り込んだ後の検索結果です。

「CC」という文字列があるのがわかりますね。これが字幕付きの動画になります。

字幕付き動画

 

 

実際にその動画を見てみましょう。

字幕を表示させるには、動画の下の部分の、一番左の四角いアイコンをクリックします。

 

字幕アイコン

 

英語の動画だと、日本語が字幕として表示されるかもしれません。

その場合は、その右の歯車アイコンをクリックすると、字幕の言語を選択できますので、そこで、英語等に変更してみてください。

字幕設定

 

ちなみに、iPhoneなどスマートフォンのYoutubeでも同じように、検索結果の画面で以下のオプションアイコンをクリックすると適用する条件を指定することができます。

 

 

 

 

まとめ

Youtubeの検索結果を、字幕付きの動画に絞り込むことができる。

あとは、動画閲覧の際に、設定で、英語の字幕を表示するように設定すればよい。


それってストレートネック?スマホ症候群が引き起こす首や後頭部の痛みを軽減する3つの方法

$
0
0

最近、どうも首を回すと首の横の部分が痛かったり、

前かがみになったり下を向いたりすると、後頭部に鈍痛が走ってました。。。

「脳に腫瘍でもあるんじゃないかなぁ」

と心配になるほど、頭が痛いので、

自分でマッサージをしたり、鍼灸院に行ったりしたんですが、まったくよくならず。

半分あきらめかけていたところ、テレビで「スマートフォン症候群」の特集をしていて、

その中のひとつ、

「ストレートネック」

に非常に症状が似てました。

 

確かに最近、下向きでスマホをいじる時間が長いし、

健康のために走っているのですが、その走る姿勢を最近変更したので、

その確認のために下を向いて走っていたので、首に下向きの力がかかりすぎたような。。

 

これは「ストレートネック」に違いないと思い、対策をとったところ、

すっかり直すことができました。

 

調べてみると結構同じような症状で悩んでいるひとが多そうなので、

どうすれば症状を軽減、または治すことができるのか、自分の知識をあげておこうと思います。

 

そもそもストレートネックって何?

人間の首は、横から見ると、頚椎(首)の根っこの部分から前方にせりだし、

そこから後ろにカーブして頭の付け根につながるような、

「C型のカーブ」

を形成しています。

健康な状態の首は約30から40度の角度をもっています。

 

ストレートネックとは、そのC字のカーブが失われ、まっすぐになってしまった状態で、

直立不動の軍人の姿勢に似ていることから、外国ではミリタリーネック(軍人ネック)とも呼ばれたり、

頚椎後湾症と呼ばれたりします。

 

なぜ、スマホ症候群でストレートネックが引き起こされるのか

最近、スマホを日常的に長く操作している人の間で、ストレートネックが問題になっているとのことですが、

スマホをいじることが、

なぜストレートネックにつながってしまうのでしょうか。

 

それは、スマホをいじる姿勢に原因があります。

 

多くの人が、下向きにスマホの画面を覗き込むように操作しているので、

顔が斜め前に突き出し、その状態で下向きの力がかかってしまいます。

それが長い間続くと、後ろに反り返るようなC字のカーブが失われ、まっすぐになってしまうのです。

 

なぜ人間の首にはC字カーブが必要なの?

人間が二足歩行を行う過程で、首は徐々にカーブを描くようになってきました。

立ったり、歩いたりする際に、重力のショックを吸収する仕組みが人間には必要なためです。

 

首には7つの骨があり、骨と骨の間には軟骨(椎間板)が挟まれています。

そしてこれらが適度にカーブを描くことによって、クッションの効果がうまれ、

重力の衝撃を吸収してくれるのですが、

一旦カーブが正常な状態でなくなったり、まっすぐになってしまうと、

クッションがうまく機能しなくなり、

重力の力で骨や軟骨組織が磨り減ってしまいます。

 

これは、痛みを引き起こすことはもちろん、骨や軟骨が変形して、

神経に触れることで首や後頭部の痛みを引き起こす場合もあります。

また、一度そうなってしまうと、それをカバーする姿勢をとるようになり、

他の骨組織も次々に変形していってしまうこともあります。

 

さらに、首の骨がまっすぐになってしまうと、クッションが働かず、

頭部を、首の後ろの筋肉や肩の筋肉で引っ張って支える必要が出てくるため、

首が痛くなったり、肩こりを引き起こしたりします。

時には肩の周りの筋肉が痙攣したりする場合もあるそうです。

 

ストレートネックとその痛みを改善する3つの方法

ストレートネックをきちんと直すには、一般的に非常に長い期間がかかります。

下に述べるような枕を利用することで、痛みを軽減したり、応急処置をほどこすことはできますが、

根本的に治さないと、また、再発してしまいます。

歯の矯正を想像してもらうと分かりやすいですが、

それと同様、首の骨を正しいカーブにもどすにも時間がかかるんですよね。

 

ひとつ言えているのは、ストレートネックになってしまう人は、

日常的な姿勢に問題があることが多いので、

自然になおることはほとんど無いということです。

 

ストレートネックとその痛みを改善するのに効果のある方法をご紹介します。

 

①首の位置を正しくする運動(エクササイズ)

以下の運動を行うと、頭、首を正しい位置に戻し、弱くなってしまった首の筋肉を強くする効果があります。
また、凝り固まってしまった首の周りの筋肉をほぐす効果もあります。

  • 仰向けに寝て、首を前後に動かす(うなずくような動き)運動を行う。
  • 鎖骨に手を当てて、頭を前後に動かす運動を行う。

 

②牽引(首を伸ばす)

椎間板は、小さな楔のように、骨同士の緩衝材として働いており、

首が正しいカーブを保つのを助けていますが、

ストレートネックになってしまって、椎間板が押しつぶされてしまうと、

形が変形し、緩衝材としての役割も失ってしまいます。

 

この状態が続くと、首の骨も変形し、椎間板にさらに圧力がかかって、

押しつぶされて平べったくなり、首の痛みを引き起こしたり、

さらには痛みが肩の周り、腕全体に広がったりします。

 

牽引装置を使うと、首のポジションを正しい位置に修正し、

曲がってしまった首のカーブを元に戻すことができます。

この装置が人気あるようですね。↓↓↓↓

 

 

③首を支える/伸ばす枕を使う

眠っている時間は結構長いので、

首を正しい姿勢で支え、伸ばすことのできる枕を使うと、

寝ている間に牽引もでき、効果が高いです。

 

どんな枕が効果がある?

ストレートネックに効果のある枕は大きく2つの種類があります。

1、ロール枕

このタイプの枕は首の姿勢を正しい位置に直すための矯正治療にも使用されます。

このロール枕を使うことで、頚椎のカーブを正しく保ったまま支えられます。

また、この姿勢だと、首の筋肉が適度に弛緩できますので、



これに寝る姿勢を、1回20分、1日3回行うと効果が高いです。

首の筋肉を温かいタオルで覆ってあげるとさらにリラックス効果が高まります。

ただし、事故等で突発的に鞭打ちになった場合は、

症状は似ていますが、温めるのではなく、冷やした方が良いそうです。

 

タオルを巻いたタオル枕で代用することもできます。

私はこれを3日行うことで、後頭部と首の痛みが軽減し、一週間で痛みがなくなりました。

ただし、効果が高いからといって、

寝ている間もずっとこの枕を使用するのは、私の場合はだめでした。

牽引の力が強いため、首に力がかかりすぎ、また頭部への血行も悪くなるので、

やはり、20分程度の短時間での使用をおススメします。

 

2、睡眠用枕

睡眠用の枕でもストレートネックを改善することができます。

頚椎(首)を後ろから支えることができるようなタイプがよいです。

 

首を正しい姿勢で支えると、気道もきれいに開くため、いびきも改善されます。

 

 

首の位置が正しく、自然の位置になるため、このストレートネック用枕は首の圧力を軽減するためには良い選択です。

 

まとめ

枕を使うと、首が自然のカーブになることを助けますが、それだけではだめであることを認識しておきましょう。

 

ストレートネックを改善するには、

首の正しい位置と、「正しい姿勢」とはどんな姿勢なのかを知った上で、

まくらの使用とともに、正しいエクササイズを続けていくことが大切です。

パワポなどの企画書の説明用デザインテンプレートにも使えるサービス・デザインいろいろ

$
0
0

もともと、サービスデザインとは、

サービスの提供者と、そのサービスを受ける人の関係性(コミュニケーション)を

デザインのプロセスを使って視覚化する試みです。

 

特に、まだ存在していないソリューションを表現したり、

顧客から引き出したりするのに効果的な方法であるため、

近年、話題を呼んでいます。

 

servicedesigntools.org」は、

そんなデザインプロセスを用いたコミュニケーション手段を

「サービスデザイン・ツール」と呼んで、

様々な種類の「ツール」を集め、解説しているサイトになります。

 

Webマーケティングの世界ではよく耳にする

「カスタマー・ジャーニー・マップ」や「ペルソナ」、「マインドマップ」なども

掲載されており、デザインだけでなく、

アイデアを共有するための方法論(methodology)も豊富です。

 

デザインを使ったコミュニケーション・ツールが優れているのは、

直感的で、言葉が要らないというところで、

まだ参加したばかりのメンバーや外国人のチームメイトに、

すばやくプロジェクトのコンセプトを説明したり、

イメージを共有するのに便利な図やチャートがたくさんあります。

 

「サービスを提供する」側と「顧客」の関係性をうまく説明する

とか

言葉が少なくても直感的に分かりやすい

という意味では、企画書とかにも通じるものがあり、

パワポの図にも利用できるのではないかなーと思いました。

 

一度のぞいてみてください。

VPN Serverで、proxy越しに社外ネットワークにアクセスする

$
0
0

会社からの社外アクセスにはproxy serverが使用されていることも多く、社外のサーバにアクセスすることが難しい場合があります。

少し前ならsshを利用し、ポートフォワードすればいろいろなリソースにアクセスできましたが、それも許可されていないことも多いです。

最近はAmazon(AWS)やそれ以外のクラウドサービスを利用して開発するプロジェクトも多くなってきましたが、proxy経由だけでは、それらにアクセスして開発することが難しい場合もあります。

そんな場合は、VPN Serverを利用すると便利です。

今回は、AWSのEC2にWindowsのVMを借り、そこにSoftEtherVPNをセットアップすることで、社内の自分のマシンをAWSと同じネットワークに参加させることで、社外サーバにアクセスしようと思います。

SoftEtherVPNはSSL経由で仮想的なネットワークを構築するので、proxy serverの後ろであっても、httpsで外に出ることができます。

 

AWS側のセットアップ(「SoftEther VPN Server」のインストール)

まず、AWSにEC2を契約しましょう。

次に「SoftEther VPN Server」をインストールします。

ここからソフトをダウンロードして、Serverをインストールしてください。

その後、「SoftEther VPN Server Manager」を起動すると、設定がありますので、「Edit Setting」で設定を行います。

 

 

設定で変更するところは、「Virtual HUB Admin Mode」にチェックを入れるのと、その仮想ハブの名称を設定することです。

名称は元々ある、「DEFAULT」にします。

 

 

これで、仮想的なハブが用意できました。SoftEther VPN ServerのVirtualAdminModeでは、このように設定することで、これ以降、SevrerがDEFAULTと名前の付いた中継ハブの役割を担います。

ハブですので、あとは複数のPCのNICを接続すれば、両PCは同じセグメントに属することになるわけです。

 

仮想ハブの設定

次に、仮想ハブに設定を行います。

Managerの起動画面から「Connect」ボタンを押下してServerに接続し、DEFAULTを選択した状態で「Manage Virtual HUB」ボタンを押します。

 

 

すると、仮想ハブに対する設定ができますので、ユーザを作成します。

このハブに接続するユーザの数だけ作成すればいいですので、今回は、2ユーザ作成します。

localとremoteなど、わかりやすい名前で大丈夫です。

 

 

「SoftEther VPN Client」のセットアップ(AWS側)

AWSと自分のPCを仮想的に同じセグメントに属させたいので、両方のPCに今度は「SoftEther VPN Client」をインストールします。

はじめにServerをインストールしたAWS側にClientもインストールしましょう。

インストール後、SoftEther VPN Client Managerを起動します。

各Clientは仮想的なネットワーク・アダプタ(NIC)を使用して仮想HUBに接続しますが、初期状態では仮想NICがないので、右クリックして作成しておきます。

 

 

作成出来たら、それに対して設定を行います。

 

 

「Connect」メニューから「New VPN Connection Setting…」を選択しましょう。

 

 

設定で重要なのは、

Host Name・・・・ローカルのDEFAULTハブに接続するので、「localhost」

Virtual Network Adapter to use・・・・使用する仮想NICなので、先ほど作成したNIC。

User・・・・仮想ハブに作成したユーザ。「local」の方を使います。

くらいです。

設定が終わったら、メニューから「Connect」を選択して、実際にハブに接続します。

 

「SoftEther VPN Client」のセットアップ(自分のPC側)

上記と同じように、自分のPCにもClientをインストールして、仮想NICの作成と設定を行います。

AWS側と異なるのは、

Host Name・・・・AWSのDEFAULTハブに接続するので、AWSのホスト名。

Virtual Network Adapter to use・・・・使用する仮想NICなので、自PC側に作成したNIC。

User・・・・仮想ハブに作成したユーザ。「remote」の方を使います。

でしょうか。

設定ができたら同じく「接続」しましょう。

 

最後に

両方のマシンのクライアントから仮想ハブに「接続」できたら、両PCは同じセグメントにいます。

コマンドプロンプトで「ipconfig」と打つと、仮想NICに割り当てられたIPアドレスがわかりますので、以降はそのIPで通信可能ですよ!

 

 

 

 

Amazon Redshiftを使ってみよう その①「クラスタの作成と設定」

$
0
0

AmazonやSalesforceなど、クラウドサービスでの環境構築のお手伝いをすることも増えてきました。

今回は、Amazon Redshiftを使ってみたいと思います。

 

RedshiftはPostgresqlを元に作られた、データウェアハウスで、

特に大規模データに対するクエリを投げるBI(ビジネスインテリジェンス)などの業務に向いています。

 

数億件のデータであっても、比較的早くクエリが戻ってきますが、

それゆえ、DBの構造としては通常のデータベースとは異なるところもあります。

 

例えばMerge処理のような、Insert or Updateを判断してデータ投入を行うクエリは遅いため、

あらかじめS3と呼ばれるデータストレージに投入対象のデータをアップロードして、

更新対象データをDeleteしたうえで、Insertするなどの工夫が必要です。

 

このあたりのやり方については次回の記事でくわしく述べるとして、

今回はRedshiftのデータベースを新規にセットアップするところまでを重点的に解説します。

 

クラスタの作成

AWSの契約を済ませたら、最初に、管理コンソールから「Redshift」をクリックして、「Redshift」の管理画面に遷移します。

 

 

管理画面に行ったら、右上のところからリージョンを選択します。

選んだリージョンによってパフォーマンスが著しく異なることはないと思いますが、

今回は東京を選択しました。

その後、「Launch Cluster」ボタンを押下して、クラスタを新たに起動しましょう。

 

 

クラスタの詳細

最初のステップはクラスタの詳細情報を入力します。入力項目は以下の通りです。

Cluster Identifier・・・クラスタの名称です。「examplecluster」と入力しました。

Database Name・・・Redshiftに作成するデータベース名を指定します。空欄のままでもOKです。デフォルトで「dev」という名称でデータベースが作成されます。

Database Port・・・データベースが接続を待ち受けるポート番号です。後程、SQL クライアントからデータベースに接続できるように、お使いのファイアウォールの開いているポート番号を確認しておきましょう。デフォルトでは5439番です。

Master User Name・・・DBに接続するユーザ名です。今回は「masteruser」としました。

 

 

ノードの設定

次に、クラスタを構成するノードの設定を行います。

ここでは特に変更する箇所はありません。

参考までに、ノードタイプを変更すると、使用できるCPU数、メモリなど、スペックが変わってきます。

 

 

 

追加設定

次に、追加の設定を行います。

主に暗号化やネットワーク構成などセキュリティに関する設定を行います。

ここでも特に変更するところはありません。

VPCは、Amazonが提供する仮想的なネットワークのことで、

従来のデータセンターで提供してきたネットワークサービスを クラウドに置き換えたものです。

今回は、普通にインターネット上に公開するので、デフォルトで結構です。

 

 

最後に、設定した項目の確認を行います。

画面下部にフリートライアルでない場合の課金のされかたの注意事項が表示されます。

今回はフリートライアルなので、関係ないですね。

確認してOKであれば、右下の青いボタン「Launch Cluster」を押して、クラスタを作成します。

 

 

作成ボタンを押すと、クラスタの作成が始まります。

数分時間がかかりますので、その間に、

このクラスタにアクセスするためのネットワーク設定を、さきほど指定したデフォルトのVPCに対して 行いましょう。

 

ネットワーク(ファイアウォール)設定

 

 

上記のクラスタ一覧画面で、クラスタ名のリンクをクリックすると、以下のような画面になります。

ここで、「Configuration」タブをクリックして、デフォルトのセキュリティグループをさらに選択します。

 

 

すると、そのVPCのINとOUTのネットワーク設定ができます。

Windowsでいうところの、ファイアウォールのようなものだと思えばわかりやすいでしょう。

インバウンド・タブの、「編集」ボタンを押下します。

 

 

 

ここで、クラスタの作成時に指定した、

「データベースの待ち受けているポート番号」に対するインバウンドを、

「どこから許可するか」を設定します。

 

「任意の場所」を選択すれば、IPが「0.0.0.0/0」になり、特にアクセス元について制限を設けない設定になります。

今回はお試しなので、これで良いですが、

セキュリティを強化するためにアクセス元を制限したい場合は、ここにアクセスを許すアドレスを指定してください。

 

 

さて、ここまでできたら、

先ほどのクラスタ一覧の画面に戻って、クラスタができたか確認してみましょう。

できていたら、SQLクライアントツールから実際にRedshiftにアクセスして、クエリを投げてみたいのですが、

少し長くなってしまったので、これ以降は次回に行います。

次回は実際にRedshiftに接続してみますよー。

Amazon Redshiftを使ってみよう その②「SQL Workbench/Jによる接続」

$
0
0

前回は、Redshiftのクラスタを作成するところまで行いました。

今回は、実際にクラスタのデータベースに接続してみます。

後程、サンプルデータをテーブルにロードしますので、

それに対してクエリを投げて確認できるようにしておきたいですからね。

 

さて、データベースへの接続には、「SQL Workbench/J」を使うことにします。

これは汎用的なSQLクライアントツールで、Redshiftに対しても使用することができます。

 

データベースへの接続情報の確認とJDBCドライバのダウンロード

「SQL Workbench/J」を使って接続する前に、接続先の情報を確認しておきましょう。

 

AWSのRedshiftの管理コンソールに行き、左側の「Connect Client」というリンクを押下します。

すると、JDBCおよびODBCドライバをダウンロードできるページが開きます。

今回はJDBC4.0とJDBC4.1のドライバがダウンロードできましたので、ローカルのPCに保存しました。

また、その下で、クラスタをプルダウンから選択すると、そのクラスタに応じた「JDBC URL」が生成されます。

これが接続先になります。

 

 

 

「SQL Workbench/J」のセットアップ

 

接続先の情報が確認できたら、さっそく「SQL Workbench/J」をインストールします。

このホームページに行き、パッケージをダウンロードします。

 

 

 

今回は「Workbench-Build119.zip」というファイルをダウンロードしました。

これを適当なディレクトリで解凍して、exeを起動します。

最新の「SQL Workbench/J」はJDK1.8が必要なようですので、ダウンロードしておきましょう。

 

起動したら、「Manage Drivers」から、ドライバを新規作成します。

ドライバ名を適当に入力して、ファイル選択から、RedshiftからダウンロードしたJDBCドライバをしています。

すると、Classnameは「com.amazon.redshift.jdbc41.Driver」のような文字列が自動でセットされます。

 

 

ドライバの設定ができたら、いよいよ接続します。

メニューの「File」→「Connect Window」で下記画面を開きます。

設定するのは、接続名と上記で確認した「JDBC URL」および、ユーザ名とパスワードです。

ついでに「Autocommit」のチェックも入れておきます。

 

 

設定で来たら、右下の「OK」を押すと、接続を開始します。

うまく接続できましたでしょうか。

select * from pg_namespace;

みたいなクエリを投げて、結果が返ってきたら、成功ですね。

ここまで来たら、サンプルのデータをロードしたいですよね。

AWSにはS3というストレージサービスがあり、Amaznがサンプルデータを用意してくれています。

ここから、RedshiftのCOPYコマンドで大量データをロードできるのですが、S3の利用には、キーが必要です。

今後も考えて、このキーの取得と、S3からのデータのロードを次回やってみることにしましょう。

Amazon Redshiftを使ってみよう その③「S3からCOPYコマンドでロード」

$
0
0

S3はAmazonのストレージサービスです。大量のデータを置いておくことができます。

前回の記事の最後に、サンプルデータをRedshiftにロードしてみましょうといいましたが、

Amazonが用意してくれたサンプルデータのファイルも、S3で公開されています。

 

これを利用しようと思いますが、

S3にアクセスするには、「アクセスキーID」と「シークレットアクセスキー」が必要です。

今後、ツールを使ってファイルをS3にアップロードしてデータロードを行う際にも必要ですので、今回取得しておきましょう。

 

Redshiftへのデータの登録、更新は、JDBCドライバを使用してローカルからでも行えます。
ただ、Redshiftの使用目的として、分析目的での大量データのストックがあります。JDBC経由で登録、更新はできますが、データベースの特性上、この処理が非常に遅いです。
そのため、、Redshiftでは、更新対象のデータ・ファイルをS3ストレージにアップロードし、そこからCOPYコマンドで高速ロードするのです。
そして、API経由でS3にファイルのアップロード、ダウンロードを行うには上記の2つのキーが必要です。

 

キーの取得

「アクセスキーID」と「シークレットアクセスキー」を取得するには、管理コンソールの「IAM」サービスに行きます。

IAMは「Identity and Access Management」の略で、

AWS内のサービスを利用する際に必要なユーザの管理を行います。

 

 

初期状態では上記のようにユーザがいませんので、

左のナビゲーションから、「グループ」を選択し、「新しいグループの作成」を押下します。

 

 

 

グループ名を入力し、次に進みます。

 

 

 

 

ポリシーのリストが開きますので、「AdministratorAccess」 ポリシーのチェックボックスを選択します。

作成するグループに、どのような権限を与えるのかの指定になります。

 

 

次にユーザを作成しましょう。

左から「ユーザ」→「新規ユーザの作成」を選択します。

 

 

ユーザ名を入力し、「ユーザごとにアクセスキーを生成」にチェックを入れてから、「生成」ボタンを押します。

 

 

ユーザが作成され、下記のように画面になります。

「ユーザのセキュリティ情報を表示」させると、「アクセスキーID」と「シークレットアクセスキー」が表示されます。

これは重要な情報ですので、必ず控えておきましょう!!

 

 

最後に、作成したユーザを作成したグループに追加しておきます。

 

サンプルデータのロード

さて、いよいよデータをロードします。

前回設定した「SQL Workbench/J」を使ってRedshiftに接続します。

その後、以下のコマンドでテーブルを作成しましょう。

 

 

create table users(		
	userid integer not null distkey sortkey,	
	username char(8),	
	firstname varchar(30),	
	lastname varchar(30),	
	city varchar(30),	
	state char(2),	
	email varchar(100),	
	phone char(14),	
	likesports boolean,	
	liketheatre boolean,	
	likeconcerts boolean,	
	likejazz boolean,	
	likeclassical boolean,	
	likeopera boolean,	
	likerock boolean,	
	likevegas boolean,	
	likebroadway boolean,	
	likemusicals boolean);	
		
create table venue(		
	venueid smallint not null distkey sortkey,	
	venuename varchar(100),	
	venuecity varchar(30),	
	venuestate char(2),	
	venueseats integer);	
		
create table category(		
	catid smallint not null distkey sortkey,	
	catgroup varchar(10),	
	catname varchar(10),	
	catdesc varchar(50));	
		
create table date(		
	dateid smallint not null distkey sortkey,	
	caldate date not null,	
	day character(3) not null,	
	week smallint not null,	
	month character(5) not null,	
	qtr character(5) not null,	
	year smallint not null,	
	holiday boolean default('N'));	
		
create table event(		
	eventid integer not null distkey,	
	venueid smallint not null,	
	catid smallint not null,	
	dateid smallint not null sortkey,	
	eventname varchar(200),	
	starttime timestamp);	
		
create table listing(		
	listid integer not null distkey,	
	sellerid integer not null,	
	eventid integer not null,	
	dateid smallint not null  sortkey,	
	numtickets smallint not null,	
	priceperticket decimal(8,2),	
	totalprice decimal(8,2),	
	listtime timestamp);	
		
create table sales(		
	salesid integer not null,	
	listid integer not null distkey,	
	sellerid integer not null,	
	buyerid integer not null,	
	eventid integer not null,	
	dateid smallint not null sortkey,	
	qtysold smallint not null,	
	pricepaid decimal(8,2),	
	commission decimal(8,2),	
	saletime timestamp);	

 

成功したら、Amazonが用意してくれているサンプルのS3からデータをロードするために、

「SQL Workbench/J」で以下のクエリを投げます。

との部分を上記で取得したキーに変更してクエリを投げてください。

 

copy users from 's3://awssampledbuswest2/tickit/allusers_pipe.txt' 
credentials 'aws_access_key_id=;aws_secret_access_key=' 
delimiter '|' region 'us-west-2';

copy venue from 's3://awssampledbuswest2/tickit/venue_pipe.txt' 
credentials 'aws_access_key_id=;aws_secret_access_key=' 
delimiter '|' region 'us-west-2';

copy category from 's3://awssampledbuswest2/tickit/category_pipe.txt' 
credentials 'aws_access_key_id=;aws_secret_access_key=' 
delimiter '|' region 'us-west-2';

copy date from 's3://awssampledbuswest2/tickit/date2008_pipe.txt' 
credentials 'aws_access_key_id=;aws_secret_access_key=' 
delimiter '|' region 'us-west-2';

copy event from 's3://awssampledbuswest2/tickit/allevents_pipe.txt' 
credentials 'aws_access_key_id=;aws_secret_access_key=' 
delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' region 'us-west-2';

copy listing from 's3://awssampledbuswest2/tickit/listings_pipe.txt' 
credentials 'aws_access_key_id=;aws_secret_access_key=' 
delimiter '|' region 'us-west-2';

copy sales from 's3://awssampledbuswest2/tickit/sales_tab.txt'
credentials 'aws_access_key_id=;aws_secret_access_key='
delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region 'us-west-2';


ロードできたら、以下のようなクエリを投げて、データが入っているかどうか、確認してみましょう。

 

select count(*) from sales;

エラーが起きてしまったら、管理コンソールから確認することができます。

クラスタの「load」タブをクリックするとロードした履歴を参照することができます。

Load番号のリンクをクリックして詳細を表示すると、

 

 

下記のようにエラー理由が出力されていますので、エラー修正の参考にしてください。

 

 

このときは、日時型のカラムのフォーマット指定がうまくできてなかったようですね。。

Salesforceのデータを検索・確認できるGUIツール① WorkBench

$
0
0

Salesforceのデータを手軽に検索、更新する場合に使えるのが、Workbenchです。

オープンソースのWebベースの別アプリケーションですが、

Salesforceとのシングルサインオンも実現されているので、Salesforceと同じログインIDを使用することができます。

SalesforceのIDでOAuth認証を行って権限委譲し、APIを使ってSalesforceからデータを取得したり、操作したりしているイメージですね。

Workbenchを使うと以下のようなことができます。

 

Workbenchでできること

  • Salesforce の APIを使って、データの検索・更新・削除等ができる
  • 検索の結果を CSV ・XML形式に出力できる
  • CSV ・XML形式からのデータ更新(Dataloaderと同じようなこと)ができる
  • データの検索結果からSalesforce上のデータを閲覧できる
  • WebベースのクライアントでREST-APIの確認ができる

では、早速つかってみることにしましょう。

 

ログイン

はじめにログインを行います。

ここから接続先の環境とAPIバージョンを選択して、進みます。

ここで選択した内容が、接続先のEndpointになります。

 

 

先に進むと、Salesforceのログイン画面が表示されます。

 

上記で入力したユーザIDでSalesforceに対して認証を行い、OKであれば、

下記のアクセス許可の内容で許可した権限がWorkbenchに委譲されます。

 

 

さて、ログインできたら、ひととおりWorkbenchでできることを確認してみます。

 

オブジェクトのメタ情報確認

メニューの「Info」⇒「Standard & Custom Objects」を選択すると、以下のような画面になります。

ここで、対象のオブジェクトを選びます。

通常のオブジェクト情報を確認するには、「Standard & Custom Objects」を選ぶといいでしょう。

 

 

 

その後、対象のオブジェクトを選ぶと、そのオブジェクトのメタ情報が書くにできます。

フィールドや属性が確認できますね。

 

 

 

SOQLによるデータ検索

Workbenchには、WebのGUIで、SOQLを構築し、データを確認できる機能もあります。

下記のように、オブジェクトを選択し、セレクト対象のカラムを

「Ctrl」を押しながら複数選択すると、SOQL文が構築され、「Query」ボタンを押せば結果が表示されます。

Id項目はリンクになっており、押下すると、そのレコードの詳細を確認したり、

更新したりできる画面に遷移します。

 

 

 

SOSLによるデータ検索

SOSLによる検索もできます。

SOSLはグローバル検索のように、複数のオブジェクトを跨いだ検索が可能です。

SOSLクエリは癖があり、構文に慣れるまではSOSLクエリを書きにくいので、

GUIで構築できるWorkbenchは結構重宝します。

 

 

データの挿入・更新・削除

メニューの「data」には、Insert,Update,Upsert,Delete,Undelete,Purgeなどのリストがあり、DataloaderでできるようなことがWebから実行できます。

ファイルでの更新にも対応していますが、

あまりに大量のデータで実行するとタイムアウトする可能性もあるので、注意しましょう。

ただ、手軽にデータを更新するには非常に便利な機能です。

 

 

 

REST APIの実行、確認

Salesforceで提供しているREST APIを実行したり、確認したりすることができます。

REST APIによる開発時にクエリの構文や実行結果を確認するのに便利です。

 

 

/services/data/v36.0/query?q=SELECT+Id+,+Name+,+AccountNumber+FROM+Account

 

 

 

まとめ

いかがでしたでしょうか。

SalesforceのAPIを使って構築されているWebアプリなので、

非常に直感的で、特に、開発者にとっては

イメージしやすいのではないかとおもいます。


Salesforceのデータを検索・確認できるGUIツール② Force.com Explorer

$
0
0

Force.com ExplorerはAdobe Flashでできたデータベースエクスプローラです。

オブジェクトのフィールドや、ラベルを確認するのに便利で、

SOQLクエリの構築も行えますので、構文を確認したりするのにも重宝します。

あまりバージョン更新がされず、APIが少し古かったりもするのですが、

それでも、Workbenchよりもすばやくデータの確認を行える手軽さは、

開発時に大いに役立つはずです。

 

 

Force.com Explorerの便利な使い方

いろいろと便利に使えますが、代表的なTipsをご紹介します。

 

1.クエリの確認を行う。

左ペインにオブジェクトが表示されていますので、

それを選択したり、項目を選択することで、クエリの構築ができます。

自分で項目名を記述する必要がないので、間違いが少ないのと、

複雑なクエリが正しいのかの確認にも使えます。

 

 

 

2.レコードの更新を行う。

発行したクエリの結果は、更新することができます。

結果のカラムをダブルクリックすれば、編集可能ですので、

そのまま変更すれば、Salesforceのデータも更新されています。

 

 

3.検索結果をcsvにエクスポートする

地味に重宝するのが、クエリの結果csvファイルにエクスポートできることです。

テスト時のエビデンスを取得するのに便利ですよー。

 

Windows10でサービス一覧の管理コンソールを起動する方法

$
0
0

Windowsでは、サービスの起動・終了・再起動を行ったり、起動の設定を

「サービス一覧」の管理コンソールで行っていますが、

Windows10ではその起動方法が変わっていて、簡単に見つけられなかったので、備忘。

 

メニューから起動する方法

Windowsのメニューから起動するには、

左下の「Windows」マークから「すべてのアプリ」をクリックします。

 

 

表示されるアプリケーションの中で、

「Windows管理ツール」⇒「サービス」

を選択すると、サービス管理を起動擦ることができます。

 

 

 

ショートカット・キーで「ファイル名を指定して実行」から起動する方法

メニューをたどるのはめんどくさいという人は、ショートカット・キーを使えばもう少し素早く起動できます。

キーボードの「Windows」キーを押しながら「R」キーを押せば「ファイル名を指定して実行」コンソールが立ち上がるので

そのまま「services.msc」と入力し、Enterするか、「OK」ボタンを押します。

 

 

 

Windows版のMySQLでクエリのデバッグログを出力する方法

$
0
0

開発時などに、MySQLサーバに対して発行されたクエリを確認したいことがあります。

そのような場合に利用できるクエリのログ出力機能は2種類あります。

一つは、発行されたクエリを出力するクエリログ(general_logと呼ばれます)

もう一つはスロークエリログと呼ばれ、ある一定時間を超えたら、そのログを出力するというものです。

 

ログ出力設定の方法

Windows版のMySQLでログ出力を行うには、設定ファイルである「my.ini」に、

以下の行を追加します。

 

log-output=FILE
general-log=1
general_log_file="C:\Program Files\MySQL\MySQL Server 5.5\log\query.log"
slow-query-log=0
slow_query_log_file="C:\Program Files\MySQL\MySQL Server 5.5\log\slowQuery.log"
long_query_time=10

 

設定内容ですが、「general-log」と「slow-query-log」の引数は1または0で、

1ならログ出力を行い、0なら行いません。

「long_query_time」は、ここで指定した時間(秒)以上かかったクエリを出力する設定になります。

デフォルトは10秒です。

 

追加したら、記述したログファイルを、空で該当のディレクトリに作成しておきましょう。

 

 

Salesforceオブジェクトのキープレフィクス(PrefixId)を知っているとレコードの一覧Viewがすぐに表示できて超便利だよー

$
0
0

Salesforceのオブジェクトには一意なID(ObjectId)があり、

以下のようにURLにつけてアクセスすると、そのオブジェクトの詳細画面にいけるのは皆さんよくご存知でしょう。

 

https://ap2.salesforce.com/a002800000VUWrW

⇒「a002800000VUWrW」の部分がObjectId

 

そればかりでなく、ObjectIdからいろいろなことが分かり、

知っていると便利なことがあるのでご紹介します。

 

ObjectIDの命名規則

ObjectIdには以下のような意味があります。

たとえば、私が組織に作成したカスタムオブジェクト「SampleObject1」を例に取ると、詳細画面のURLは

 

https://ap2.salesforce.com/a002800000VUWrW

 

となっていました。

a002800000VUWrW は15桁表記のIdで実際のIdは
a002800000VUWrWAAX の18桁です。

a00・・・最初の3文字は「キープレフィクス(PrefixId)」と呼ばれ、オブジェクトを特定するのに使います。たとえば、皆さんよくご存知の「CONTACT(取引先責任者」のキープレフィクスは「003」です。

280・・・最初の2文字(ここでは「28」)で組織の属するサーバを特定します。ドメインの最初についている「ap2」とかの識別子ですね。最後の1文字(ここでは「0」は将来のために予約されています。)

0000VUWrW・・・これがオブジェクトの識別子です。

AAX・・・最後の3文字は、大文字小文字を区別しないシステム用のキャラクタです。

 

キープレフィクス(PrefixId)の取得方法

1.先日ご紹介した「Force.com Explorer」でオブジェクトを展開すると、確認することができます。

 

 

 

2.そのオブジェクトのidの最初の3文字がキープレフィクスですから、オブジェクトをブラウザで確認すれば、すぐに分かりますね。

 

https://ap2.salesforce.com/a002800000VUWrW

 

レコード一覧の表示方法

キープレフィクス(PrefixId)を知っていると、

 

https://ap2.salesforce.com/a00

 

のように「ドメイン+キープレフィクス」で下記のようにレコード一覧の画面に遷移します。

 

 

通常は、カスタムオブジェクトを作成したら、タブも作って表示させますが、

タブ数が多くなって、選択しづらいときや、組織のタブ数の制限で、

タブを追加できないときなどでも、すぐに一覧を表示できるので、便利です。

MySQLのサンプルデータを用意する

$
0
0

各データベースには、機能やパフォーマンスを試してみたりするためのサンプルデータが用意されていることがあります。

それらを利用すれば、一からCreate Tableしたり、関連性のあるデータを作る手間が要らないため、検証に利用させてもらう場合が多いです。

特に最近では、BIを使った仕事も多いのですが、いろいろなBIツールを検証するにあたって、

最初からファクト・テーブルを作ったり、ディメンションをつくるのは大変なので。。

 

今回は、MySQLのサンプルデータの在り処をご紹介します。

はじめにMySQLのホームページに行って、「Documentation」タブを押下します。

そこから、「More」タブをクリックすると、サンプル・データベースへのリンクのあるページに遷移します。

 

mysql-panel

 

 

いくつかサンプルがあるようですので、簡単に説明しますと、

 

employee data・・・BIの検証とかにも使える大量データです。

world database / world_x database・・・世界の国と都市のデータです。xの付いた方がUTF-8なので、日本の我々はxがついた方が使いやすいかもしれません。

sakila database・・・最近できた。DVDレンタルショップのマスタ。トランザクションデータがセットアップできます。

menagerie database・・・ペットのデータのはいった小さなサンプルです。

 

といった感じになっています。

Viewing all 247 articles
Browse latest View live