OmniAICreator/Qiita-1.07M huggingface dataset:
ヤフープロダクト検索API

ヤフーショッピングプロダクト検索APIについての質問です。

ヤフーショッピングプロダクト検索APIを使って商品情報インポートをして外人向け代理販売サイト構築をしたいと思っています。
ヤフープロダクト検索APIを使って，例えば100商品や50商品のダウンロードをあるカテゴリーから行うリクエストを出すと，一体どのような商品がダウンロードされるのでしょうか？
あるカテゴリー内には何万，何十万，何百万（カテゴリーの階層にもよるのですが）の商品が格納されているのでどのような商品が自動的にインポートされるのか知りたいです。
また，ある一定のカテゴリーからトップRated100商品，人気トップ100商品などをインポートすることは可能でしょうか？

現在わたしは，“itemsearch” APIを使用して商品検索のIdentificationを各カテゴリーレベルで行っています。
カテゴリーランキングAPI等を使用して，本件解決することは可能でしょうか？もし可能な場合はどうやって解決をすることが可能なのか，教えてください。
Tomcat7 でのWebアプリケーションをHTTPS通信に対応させる

##背景
LANからインターネットに出る際にプロキシ経由となっている環境で、外部に立てたTomcat上のWebアプリにHTTPS通信ができるようにしたい。
諸事情（プロキシによるブロック）あって、外部のサーバーに直接接続できなかったので、まずはローカル環境で試した。


##結果
### 事前確認
まずはHTTPでちゃんとアプリが起動しているか確認。
サービスで動かしているので、サービスを起動して、ブラウザでURLにアクセス。接続OK。

### TomcatへのSSL対応処理
* keystoreファイルの作成

コマンドでTomcatが使えるkeystoreを作成する。
```
"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
```
対話形式であれこれ聞かれるので、適宜入力。パスワードはあとで使うので忘れないように。
これで.keystoreファイルがローカルユーザーのフォルダ配下にできる。

* server.xmlのHTTPS通信設定

先ほどのコマンドで作成された.keystoreのパスと、設定した鍵パスワードをHTTPSのConnector定義の箇所に追記する。

```
 <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="[keystore_dir]\.keystore" keystorePass="[key_password]" />

```


### HTTPSでの接続確認
ブラウザにて、https://[tomcat_server_URL]:8443/ にアクセスして、Tomcatの管理画面が開けばOK。
これでTomcatに構成してるアプリがHTTPSで接続できる。

## 参考
* SSL/TLS Configuration HOW-TO
	* https://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html
* Tomcat で SSL の自己証明書を使用する方法
	* http://www.websec-room.com/2013/02/28/302
PythonでUTM-30LXのデータを表示する


 北陽電機の測域センサ「UTM-30LX」をpythonで動かしたのでメモ。

pythonnでURG動かないかな…と思って探してみたら[いい感じのライブラリ](https://github.com/HiroakiMatsuda/pyurg)を見つけたので使ってみました。

とりあえずソースコード

```lang:Test_LRF_v1.py
import pyurg
import matplotlib.pyplot as plt
import time

def draw():
   urg = pyurg.Urg()
   urg.set_urg('COM5')
   plt.ion()
   axis = plt.gca()
   while True:
      status = urg.request_me(0,1080,num = 1)
      urg.check_status(status)
      dist, intensity, timestamp = urg.get_distance_and_intensity()
      x,y = urg.convert_to_x_y(dist)
      plt.plot(x,y)
      plt.draw()
      axis.clear()
      time.sleep(0.01)
        
if __name__=="__main__":
   draw()

```

とりあえず表示するだけでそこから先は特に何もなしってかんじです。



```
import pyurg
import matplotlib.pyplot as plt
import time
```
ライブラリのインポートです。
pyurg(URG使うため)
matplotlib(グラフに描画)
time(スリープのため)

```
def draw():
   urg = pyurg.Urg()
   urg.set_urg('COM5')
   plt.ion()
   axis = plt.gca()
   while True:
      status = urg.request_me(0,1080,num = 1)
      urg.check_status(status)
      dist, intensity, timestamp = urg.get_distance_and_intensity()
      x,y = urg.convert_to_x_y(dist)
      plt.plot(x,y)
      plt.draw()
      axis.clear()
      time.sleep(0.01)
```

urgはCOM5に接続しています。
plt.ion()でインタラクティブモードに入ります。

status = urg.request_me(0,1080,num = 1)
urgへMEモードで計測要求をリクエストします。(この場合step0-1080までを1回計測)

urg.get_distance_and_intensity()
でデータを受け取り、
urg.convert_to_x_y(dist)
でx,yのデータに変換します。

あとはplotしてdrawすればグラフを表示してくれます。

whileで無限ループを作っているので時系列でデータを更新しながら表示できます。


![IMAG1041.jpg](https://qiita-image-store.s3.amazonaws.com/0/84997/6d0af0b8-f73e-68d7-67af-07210a93f05a.jpeg)

こんな感じで動きます。
![スクリーンショット (160).png](https://qiita-image-store.s3.amazonaws.com/0/84997/361d1b42-e083-55d4-968c-8024d289d5a4.png)

![スクリーンショット (159).png](https://qiita-image-store.s3.amazonaws.com/0/84997/41581689-6955-0b5d-9864-26ec857778ec.png)
[php]連想配列の操作まとめ 

自分用メモ。随時追加予定
## 初期化
```php:index.php
$fruit = array(
  'apple' => 'ringo',
  'orange' => 'mikan',
);
```
##変更

```php:index.php
$fruit['apple'] = 'ringo_new';
```
##追加

```php:index.php
// 書き方1 もし既存要素に同名keyがある場合、上書きされない(新規追加もされない)
$fruit += array( 'grape' => 'budou');
//書き方2 もし既存要素に同名keyがある場合、上書きされる
$fruit['grape'] = 'budou';
```
@kazu56さんのこのページが詳しいです。
[【PHP】連想配列、配列への追加](http://qiita.com/kazu56/items/6947a0e4830eb556d575)
## 並び替え

```php:index.php
// key基準で並び替え
ksort($fruit);
```

#入れ替え

```php:index.php
// key とvalue を入れ替える
$fruit = array_flip($fruit);
```
【OSMC】rootでsftp接続した時にハマったのでメモ

#osmcへrootでsftp接続した時にハマったのでメモ
sudo suでrootにはなれる、でもsftpで接続できない・・・なぜだ
ではどうする、そうrootにパスワードを設定すればいいのだ
**と言う前置きは置いといてw**
#解決方法
※[Enter]はEnterキーを押してください
osmcにssh接続して(user:osmc | pass:osmc)
**sudo passwd root [Enter]** と入力すると
*Enter new UNIX password:* と出るのでパスワードを入力(パスワードは非表示です)入力し終わったら[Enter]
*Retype new UNIX password:* と出るので↑と同じパスワードを入力(入力し終わったら[Enter])
*passwd: password updated successfully*
*osmc@osmc:~$* と出ればOKです

[OSMCの公式wiki](https://osmc.tv/wiki/general/usernames-and-passwords/)に載っていました
DeisでWordpressをDeployする

## Deisについて

![Screen Shot 2015-07-08 at 15.47.55.png](https://qiita-image-store.s3.amazonaws.com/0/1232/97aa14ae-9871-760f-89ff-2842956752db.png)


オープンソースて作られた、Herokuのワークフローを実現するオープンソース。コンテナーのデプロイ、Git pushによるデプロイが可能。ベースはCoreOS/etcd/fleetで作られている。

http://deis.io/

## ローカルでWordpressを動作させる

### boot2dockerの起動

```
$boot2docker up
$(boot2docker shellinit) 
```

### WordpressコンテナーとMySQLコンテナーの起動 

```
$ docker run --name wordpress-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql 
fcb2522174ccbc15c8a6ea585d75da5833a21d6a890e019c94e384d87db500a8

$ docker run  --link wordpress-mysql:mysql -p 8080:80 -d wordpress
51a289307895082b1c093e3bef150a27767ed86f81273c8d745080848283b1d7

$ boot2docker ip
```

 http://${boot2docker ip}:8080　にアクセスすると、動いている。

![Screen Shot 2015-07-08 at 15.48.36.png](https://qiita-image-store.s3.amazonaws.com/0/1232/052117d0-890c-5f2a-c223-9e6b60166fb6.png)


### Dockerhub にプッシュ

```
$  docker ps                                                                                                                                           
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                  NAMES
51a289307895        wordpress:4         "/entrypoint.sh apac   2 minutes ago       Up 2 minutes        0.0.0.0:8080->80/tcp   sick_pasteur        
fcb2522174cc        mysql:5             "/entrypoint.sh mysq   2 minutes ago       Up 2 minutes        3306/tcp               wordpress-mysql     

$  docker commit 51a289307895  quay.io/ukitazume/wordpress                                                                                             
1a3e13c9e5c84c486eb2f8f3a0ef19ac1c35c52585b9087d20565dca4cd79a17

$  docker push ukitazume/wordpress 
...
1d2897283c7d: Image successfully pushed 
```


### Deisにアプリケーションを作成

* MySQLを用意しておく（手抜き）

アプリケーションの作成

```
$ mkdir wordpress 
$ cd wordpress
$ deis create
Creating application... done, created wordpress
```

WordPressにDB接続情報を設定

```
$ deis config:set WORDPRESS_DB_HOST=mysqlurl.com:3306
$ deis config:set WORDPRESS_DB_USER=admin
$ deis config:set WORDPRESS_DB_PASSWORD=password
```

設定された情報を確認

```
$ deis config:list                                                                                                                                     
=== wordpress Config
WORDPRESS_DB_HOST          mysqlurl.com:3306
WORDPRESS_DB_PASSWORD      password
WORDPRESS_DB_USER          admin
```


### Deploy

```
$ deis pull ukitazume/wordpress:latest
Creating build...  .o. 
Creating build... done, v6
```

### 確認！

```
$ deis open
```

ブラウザが開きます！
![Screen Shot 2015-07-08 at 17.11.24.png](https://qiita-image-store.s3.amazonaws.com/0/1232/d043f18c-42b6-3e3d-bb6e-969a9679eed5.png)


### スケール

http://showterm.io/3f078edda4e1289802b70

### 感想

- Wordpressのimageは大きすぎる
- WordPressのassetsはs3などに上げる必要がある
関数に渡すmapをconstにしたい


C++のmap(/unordered_map)コンテナは、[]演算子で要素を読み出すと、当該要素が存在しなかった場合に新たに要素を生成してそれを返す。 **したがって、map自体が変更される。**
この仕組のため、constで宣言されたmapには[]演算子でアクセスすることができない。

constなしで宣言してデータを入れたmapを関数に渡すということはそれなりにあると思うが、そのような場合もこの制限は同様である。プログラマ自身はそのmapが変更されないことを知っているにもかかわらず残念な話である。
だからといって、`find()`でイテレータを取得して`.second`で参照するというのはまわりくどい。

このような場合、C++11で追加された`at()`メソッドを使うことで解決できることがわかった。

ちょうど手元に[yukicoder no.92](http://yukicoder.me/problems/149)があるので、それを例に出す。

```yukicoder92.cpp
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <cstdio>
using namespace std;
set<int>result;
set<pair<int,int> >memo;

void dfs(const vector<map<int,vector<int> > >&v,const vector<int> &d,int cur,int depth){
	if(depth==d.size()){
		result.insert(cur+1);
	}else{
		pair<int,int> x=make_pair(cur,depth);
		if(memo.find(x)!=memo.end())return;
		for(auto &it:v[cur].find(d[depth])->second){
			dfs(v,d,it,depth+1);
		}
		memo.insert(x);
	}
}

int main(){
	int N,M,K;
	scanf("%d%d%d",&N,&M,&K);
	vector<map<int,vector<int> > >v(N);
	for(int i=0;i<M;i++){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		v[a-1][c].push_back(b-1);
		v[b-1][c].push_back(a-1);
	}
	vector<int>d(K);
	for(int i=0;i<K;i++)scanf("%d",&d[i]);
	for(int i=0;i<N;i++)dfs(v,d,i,0);
	printf("%d\n",result.size());
	bool f=false;
	for(auto &it:result){
		if(f)putchar(' ');
		f=true;
		printf("%d",it);
	}
	puts("");
}
```

dfs()中の

```
v[cur].find(d[depth])->second
```

は、

```
v[cur][d[depth]]
```

とするとコンパイルエラーになりますが、

```
v[cur].at(d[depth])
```

なら置き換えられるというわけです。
UIControlのメモ

UIViewの子。ターゲット-アクション関連の機能を持ち、コントロール部品の親の役割を持つ。

# プロパティ #

プロパティは大雑把に

```objc:property.h
enabled //タッチ可能(デフォルトYES)
selected //選択されている(デフォルトNO)、アニメーションさせたいときはsetSelected:animated:を使うこと。
highlighted //ハイライト(デフォルトNO)

contentVerticalAlignment //縦揃え
contentHorizontalAlignment //横揃え

state //状態(UIControlState、ビットフラグ) 読みのみ
tracking //トラッキング(読みのみ)、ユーザはタッチしてスクロール動作をしている
touchInside //bounds内をタッチしている。トラッキング中のみ有効
```

# メソッド #
## トラッキングの開始、終了関係 ##

```objc:method1.m
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;
- (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event;
- (void)cancelTrackingWithEvent:(nullable UIEvent *)event; 

```

返り値にYESを渡すとトラッキングが続く。

## 各種イベントとアクションとの連結 ##

UIControlEventsに反応するアクションセレクタを設定する。

```objc:method2.m
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
- (void)removeTarget:(nullable id)target action:(nullable SEL)action forControlEvents:(UIControlEvents)controlEvents;

```

設定したターゲット、アクションセレクタのあるイベント、イベントに対するアクションセレクタを取り出す。

```objc:method3.m
- (NSSet *)allTargets; 
- (UIControlEvents)allControlEvents; 
- (nullable NSArray<NSString *> *)actionsForTarget:(nullable id)target forControlEvent:(UIControlEvents)controlEvent; 
```

例えば、Buttonがpushed:にViewControllerとtouch insideで繋がっているだけなら
allTargetsにはViewController、UIControlEventsは64(UIControlEventTouchUpInside)、actionsForTargetにはpushed:が入っている。


```objc:method4.m
- (void)sendAction:(SEL)action to:(nullable id)target forEvent:(nullable UIEvent *)event;
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents; 
```


### UIControlEvents ###
ビットフラグになっている。詳細はヘッダ参照。
* UIControlEventTouch系

Down, DownRepeat, DragInside, DragOutside, DragEnter, DragExit, UpInside, OutSide, Cancel 

* UIControlEventEditing系

DidBegin, Changed, DidEnd, DidEndOnExit

* UIControlEventValueChanged

スライダーの値変化等

* UIControlEventPrimaryActionTriggered

iOS9から。
> semantic action: for buttons, etc.

とのこと。

* UIControlEventAll系

終わりましたイベント。TouchEvents, EditingEvent

* UIControlEventApplicationReserved

カスタムイベント用。

* UIControlEventSystemReserved

フレームワーク内部で使う
processingでフォントデータを扱う

Geomerativeライブラリを利用するとフォントのアウトラインデータを参照できるので、
そのデータでちょっとアニメーションを入れてみました。
このライブラリはフォントデータだけでなく、SVGデータにもアクセスできます。
https://vimeo.com/97508025

~~~java
import geomerative.*;
 
RFont font;
RShape group;
RPoint[] points;
 
float[] x;
float[] y;
float[] z;
float[] ax;
float[] ay;
float[] az;
float[] vx;
float[] vy;
float[] vz;
float[] rx;
float[] ry;
float[] rz;
float[] px;
float[] py;
float[] pz;
 
float offsetx;
float offsety;
float offsetz;
float spring;
float friction;
float deg;
 
String msg = "a";
 
void setup () {
 
  size (1000, 800, P3D);
  background (255);
  frameRate (60);
 
  RG.init (this);
 
  offsetx = 0;
  offsety = 0;
  offsetz = 0;
 
  group = RG.getText (msg, "Georgia.ttf", 800, CENTER);
 
  points = group.getPoints ();
 
  x = new float[points.length];
  y = new float[points.length];
  z = new float[points.length];
  ax = new float[points.length];
  ay = new float[points.length];
  az = new float[points.length];
  vx = new float[points.length];
  vy = new float[points.length];
  vz = new float[points.length];
  rx = new float[points.length];
  ry = new float[points.length];
  rz = new float[points.length];
  px = new float[points.length];
  py = new float[points.length];
  pz = new float[points.length];
 
  spring = 0.1;
  friction = 0.96;
  deg = 0.0;
 
  for (int i = 0; i < points.length; i++) {
    ax[i] = 0;
    ay[i] = 0;
    az[i] = 0;
    vx[i] = 0;
    vy[i] = 0;
    vz[i] = 0;
    px[i] = points[i].x + offsetx;
    py[i] = points[i].y + offsety;
    pz[i] = offsetz;
    rx[i] = random (width);
    ry[i] = random (height);
    rz[i] = random (-1000, 0);
  }
 
}
 
void draw () {
 
    background (255);
 
  translate (width / 2, (height / 2) + 300, -400);
  rotateY (radians (deg));
 
    stroke (100);
    strokeWeight (2);
    noFill ();
 
    for (int i = 0; i < points.length; i++) {
        ax[i] = (px[i] - rx[i]) * spring;
        ay[i] = (py[i] - ry[i]) * spring;
    az[i] = (pz[i] - rz[i]) * spring;
        vx[i] += ax[i];
        vy[i] += ay[i];
    vz[i] += az[i];
        vx[i] *= friction;
        vy[i] *= friction;
    vz[i] *= friction;
        rx[i] += vx[i];
        ry[i] += vy[i];
    rz[i] += vz[i];
        point (rx[i], ry[i], rz[i]);
    }
 
  deg += 4.0;
 
  //saveFrame ();
 
}
 
void keyPressed () {
 
  msg = str (key);
  group = RG.getText (msg, "Georgia.ttf", 800, CENTER);
  points = group.getPoints ();
 
  x = new float[points.length];
  y = new float[points.length];
  z = new float[points.length];
  ax = new float[points.length];
  ay = new float[points.length];
  az = new float[points.length];
  vx = new float[points.length];
  vy = new float[points.length];
  vz = new float[points.length];
  rx = new float[points.length];
  ry = new float[points.length];
  rz = new float[points.length];
  px = new float[points.length];
  py = new float[points.length];
  pz = new float[points.length];
 
    for (int i = 0; i < points.length; i++) {
    px[i] = points[i].x + offsetx;
    py[i] = points[i].y + offsety;
    pz[i] = offsetz;
        rx[i] = random (width);
    ry[i] = random (height);
    rz[i] = random (-1000, 0);
    }
 
}
~~~
メモ化再帰において集合をビットで表すと速くなる例


例として、ICPC2009アジア地区予選H [Twenty Questions (AOJ)](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1302)。
普通に解くとこう。
vectorはフラグのリストで、要素はすべてN未満(Nは最大128)。setでも置き換えられる。

```icpc2009rH.cpp
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <numeric>
#include <algorithm>
#include <cstdio>
using namespace std;
map<vector<int>,int>memo;

int M,N;
vector<string>v;
int dfs(vector<int> &t){
	if(t.size()==1)return 0;
	if(memo.find(t)!=memo.end())return memo[t];
	int r=1<<30;
	for(int j=0;j<M;j++){
		vector<int>a,b;
		for(auto &e:t)(v[e][j]=='0'?a:b).push_back(e);
		if(a.size()&&b.size())r=min(r,max(dfs(a),dfs(b))+1);
	}
	return memo[t]=r;
}

int main(){
	for(;cin>>M>>N,M;){
		v.resize(N);
		for(int i=0;i<N;i++)cin>>v[i];
		vector<int>t(N);
		iota(t.begin(),t.end(),0);
		memo.clear();
		printf("%d\n",dfs(t));
	}
}
```

落ち着いて考えると、要素128未満の集合なのだから、ビット演算で表現できることがわかる。
128未満なので、__uint128_tを使う。

```icpc2009rH2.cpp
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <cstdio>
using namespace std;
map<__uint128_t,int>memo;

int M,N;
vector<string>v;
int dfs(__uint128_t t){
	if(memo.find(t)!=memo.end())return memo[t];
	int c=0;
	for(int i=0;i<N;i++){
		if(t&(__uint128_t)(1)<<i)c++;
	}
	if(c==1)return 0;

	int r=1<<30;
	for(int j=0;j<M;j++){
		__uint128_t a=0,b=0;
		for(int i=0;i<N;i++){
			__uint128_t e=(__uint128_t)(1)<<i;
			if(t&e)(v[i][j]=='0'?a:b)|=e;
		}
		if(a&&b)r=min(r,max(dfs(a),dfs(b))+1);
	}
	return memo[t]=r;
}

int main(){
	for(;cin>>M>>N,M;){
		v.resize(N);
		for(int i=0;i<N;i++)cin>>v[i];
		__uint128_t t=0;
		for(int i=0;i<N;i++)t|=(__uint128_t)(1)<<i;
		memo.clear();
		printf("%d\n",dfs(t));
	}
}
```

これだけで2倍ほど速くなる。
要素が64未満なら(64bit環境ではネイティブ型である)unsigned long longが使えるし、メモ化もunordered_mapでできるので、より高速化が狙えるだろう。

### 追伸

CodeIQの今週のアルゴリズムで、このやり方で高速化できた問題が実際にいくつかあった。
React.jsでformのinput要素内でEnterキーを押下したときのイベントをハンドリングする

# 実装(coffee script)

~~~
module.exports = React.createClass

  handleKeyPress: (ev) ->
    ENTER = 13
    switch ev.which
      when ENTER
        ev.preventDefault()
        @handleCreateClick()

  render: ->
    <form>
      <Input type='text'
            name='name'
            label='Name'
            placeholder='Name'
            value={@state.name}
            onChange={@handleInputChange}
            onKeyPress={@handleKeyPress} />
    </form>
~~~
adbコマンドでIPアドレスを表示させる

Wi-Fi接続しているAndroid端末のIPアドレスをadbコマンドで確認したい。

`adb shell`で端末のシェルに入った状態で下記コマンドを実行する。

```bash
$ ip addr show wlan0
```

このような結果が表示される。

    5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 90:b6:86:c1:01:6b brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.90/24 brd 192.168.10.255 scope global wlan0
           valid_lft forever preferred_lft forever
        inet6 fe80::92b6:86ff:fec1:16b/64 scope link
           valid_lft forever preferred_lft forever

上記の例だと端末のIPアドレスは*192.168.10.90*であることがわかる。
もしIPアドレスが*192.168.xxx.xxx*であることがわかっているなら、

```bash
$ ip addr show wlan0 | grep 192.168
```

こっちの方がすっきりした表示になる。

いちいち`adb shell`してからコマンドを打たずに、

```bash
$ adb shell "ip addr show wlan0 | grep 192.168"
```

とすれば一発でIPアドレスが取得できる。

```bash
$ ip addr show
```

とすると、Wi-Fi以外の接続情報も見れる。モバイル回線のIPアドレスもわかる。

いいよね。
プログラムを使った実験で必要になる情報を取ってくる方法(window/mac)

#はじめに
卒論などでプログラムを書く際には，実験に使用した計算機の情報が必要になる時があります．例えば，以下の情報が挙げられます．

* 使用したCPU
* メモリサイズ
* コア数
* 実験した日時
* ピークメモリ使用量

これを自分で調べたり，タスクマネージャーとにらめっこするのはあまりよくないので，それぞれを調べられるような方法をWindowsとMacでしらべて，両方で動く関数群を(大分昔に）作成しました．

#コード

* https://github.com/tmichi/mibase : 自作ライブラリ mi::SystemInfoに実装しています．単独で利用したい場合は， include/mi/SystemInfo.hpp とsrc/SystemInfo.cppを持って来ればokです．

#関数
``static std::string mi::SystemInfo::getCpuName ( void )``
CPUの名前を文字列で取得する．
``static double      mi::SystemInfo::getMemorySize ( void )``
メモリ使用量(GB)を取得する．
``static int         mi::SystemInfo::getNumCores ( void )``
CPUのコア数を取得する
``static std::string mi::SystemInfo::getDate ( void )``
実行日時を取得する．
``static double      mi::SystemInfo::getPeakMemorySize ( const SIZE_TYPE type = MI_MEGA_BYTE )``
この関数が呼ばれた時点での最大メモリ使用量を取得する．引数には，単位を指定できる(MI_BYTE, MI_KILO_BYTE, MI_MEGA_BYTE, MI_GIGA_BYTE)

#サンプルコード
```cpp:system0.cpp
#include <mi/SystemInfo.hpp>
#include <iostream>

int main ( int argc, char** argv )
{
        std::cerr << "cpu name: " << mi::SystemInfo::getCpuName() << std::endl;
        std::cerr << "mem size: " << mi::SystemInfo::getMemorySize() << "[gb]" << std::endl;
        std::cerr << "date: " << mi::SystemInfo::getDate() << std::endl;
        std::cerr << "#cores: " << mi::SystemInfo::getNumCores() << std::endl;
        return 0;
}
```

```bash:実行結果
$ ./samples/system0 
cpu name: Intel(R) Core(TM) M-5Y51 CPU @ 1.10GHz
mem size: 8[gb]
date: 2015-07-08-12:25:37
#cores: 2
$ 

```
##使い方
計算結果を出力する際に計算結果と一緒に出力しておくと，いつ，どの環境で実験したのかがわかりやすくなると思います．
Homebrew Caskでインストール済みのパッケージを全てアップデートするシェルスクリプト

```shell-session
$ brew cask update && brew cask list | xargs brew cask install
Already up-to-date.
Warning: A Cask for adobe-reader-ja is already installed. Add the "--force" option to force re-install.
Warning: A Cask for alfred is already installed. Add the "--force" option to force re-install.
Warning: A Cask for atom is already installed. Add the "--force" option to force re-install.
Warning: A Cask for bartender is already installed. Add the "--force" option to force re-install.
Warning: A Cask for bettertouchtool is already installed. Add the "--force" option to force re-install.
Warning: A Cask for betterzipql is already installed. Add the "--force" option to force re-install.
Warning: A Cask for dropbox is already installed. Add the "--force" option to force re-install.
Warning: A Cask for evernote is already installed. Add the "--force" option to force re-install.
Warning: A Cask for google-japanese-ime is already installed. Add the "--force" option to force re-install.
Warning: A Cask for intellij-idea is already installed. Add the "--force" option to force re-install.
Warning: A Cask for iterm2 is already installed. Add the "--force" option to force re-install.
Warning: A Cask for java is already installed. Add the "--force" option to force re-install.
Warning: A Cask for java7 is already installed. Add the "--force" option to force re-install.
Warning: A Cask for karabiner is already installed. Add the "--force" option to force re-install.
Warning: A Cask for mysqlworkbench is already installed. Add the "--force" option to force re-install.

```

Warningが嫌なら

```shell-session
$ brew cask update 2> /dev/null && brew cask list | xargs brew cask install 2> /dev/null
```

こんな感じでaliasに登録しています。

```shell-session
$ alias bcu='brew cask update 2> /dev/null && brew cask list | xargs brew cask install 2> /dev/null '
$ bcu
```

古いバージョンの削除はしないので手動で削除する必要があります。
正規表現にuse constantした定数を埋め込む


`use constant TEST_HOGE => 'hogehoge';` としていて、この定数をつかって正規表現をつくりたい場合。

普通に `/TEST_HOGE/` とかすると TEST_HOGE という文字列とのマッチングになってしまいます。

なので、こうすると良いようです。

```
use constant TEST_HOGE => "hogehoge";

if ('hogehoge fugafuga'=~ /${\(TEST_HOGE)}/) {
    print "matched!";
}
```

参考
http://www.perlmonks.org/?node_id=104059
UbuntuにおけるAPTのエラー

# linux-serverを更新しようとしてエラー
普通にパッケージをインストールしようとするとエラーになる。
なので、

```bash
# apt-get -f install
```
を実行すると、

>dpkg: 依存関係の問題により linux-server の設定ができません:
> linux-server は以下に依存 (depends) します: linux-image-server (= 3.2.0.82.96) ...しかし:
>システム上の linux-image-server のバージョン は 3.2.0.87.101 です。
> linux-server は以下に依存 (depends) します: linux-headers-server (= 3.2.0.82.96) ...しかし:
>システム上の linux-headers-server のバージョン は 3.2.0.87.101 です。
>dpkg: linux-server の処理中にエラーが発生しました (--configure):
> 依存関係の問題 - 設定を見送ります

というエラーで怒られる。
なんで、**linux-server**のバージョンが3.2.0.87.96なのに、**linux-image-server**と、**linux-headers-server**のバージョンが3.2.0.87.101なんだよ………。

しょうがないので、Ubuntuのサイトから3.2.0.87.96の**linux-image-server**と、**linux-headers-server**を落としてきて、

```bash
# dpkg -i パッケージ名
```
でインストールして、再び *apt-get -f install* してやったら無事解決。
入れようと思ってたパッケージのインストールも出来た。
ブラウザと同じキーマップで、Inspect Element

Chrome ブラウザでは、<kbd>alt-cmd-i</kbd> で DevTool が開くし、<kbd>cmd-shift-c</kbd> で Inspect Element を開始出来る。

Atom では、<kbd>alt-cmd-i</kbd> はできるが、<kbd>cmd-shift-c</kbd> はデフォルトでは設定されていない。

以下を設定することで、いきなり Inspect Element を開始できる。
Atom Package の UI 系を作成時には重宝する。

## init.coffee

```coffeescript
atom.commands.add 'atom-workspace',
  'user:inspect-element': =>
    atom.openDevTools()
    atom.executeJavaScriptInDevTools('DevToolsAPI.enterInspectElementMode()')
```

## keymap.cson
  
```coffeescript
'atom-workspace:not([mini])':
  'cmd-shift-c':   'user:inspect-element'
```
フロントエンドが嫌いでしょうがなかった

#日記的エントリ
とりあえず、日記的なエントリなので、Qiitaっぽくねえ！　というのはある。

ゲーム業界時代から、「絵が出ると嬉しい」というのが根本的に欠けていた。時間を計測して速くなっていると嬉しかったし、ログを読んでにやにやする事はあっても、絵なんて飾りですよ、な気持ちからどうしても逃れられなかった。小学生の時、見よう見まねでソースコードを打ち込んで描画させたマンデルブロ集合が、「絵が出て嬉しかった」最初で最後の経験だと思う。

で、今も趣味でコードを書いていて、Redisを触るのは楽しいし、ExpressやらTowerやらを触っていても楽しいのだが、どうしてもインターフェースを作ろうとするとぴたりと手が止まる。めんどくさいのだ。たぶん、学生時代にTopcoderがあったら、嵌まっていた気がするな。たぶん、アルゴリズムとデータ構造、そっちが好きなんだろう。画像ファイルとかモデルデータとかモーションデータとかを吐き出すのは嫌いじゃ無いのに、これは何なんだろう、と思う。PhotoshopだってIllustratorだって3dsだって、触るのは嫌いじゃ無い。あ、DTMと動画編集はめんどくさいと感じるかも。この辺が何かヒントかも知れない。

もしかすると、「ある程度出揃わないと使い物にならない感」がいかんのかも知れないな。

自分がフロントエンド系を触って「面白く」感じるような何かが欲しい。何かが足りない気がする。WEBなら、多少は違うはずなのだ。だって、ただHTML,CSSを吐き出しているツールじゃないか、とも思う。だけどね。なんか足りないんだよね。
[CocoaPods]実機起動時の「Symbol not found」エラーでクソ詰まった



# 追記
そもそもこれで起動時にすぐは落ちなくなったがBrightFutureにアクセスした瞬間落ちるようになった。
↓
プロジェクト自体をgit cloneしなおしたら、そもそもこの問題自体起きずに解決した。

要はgit cloneしなおすこととか大事。

-----------------------------------------------------
CocoaPods: 0.38.0.beta.2
iOS: 8.3
Xcode: 6.4


いつのまにか、実機のみ、起動直後に
**"「BrightFutures」が見つかりません"**というようなエラーで落ちるようになっていた...!
4時間くらい詰まってしまった。一日潰れるかと思ったぜ..！


```エラー

dyld: Symbol not found: __TWPCSo7NSError13BrightFutures9ErrorTypeS0_
  Referenced from: /private/var/mobile/Containers/Bundle/Application/E5242F00-6D45-4101-964C-6D42B2CDDA87/APlayerViewController.app/APlayerViewController
  Expected in: /private/var/mobile/Containers/Bundle/Application/E5242F00-6D45-4101-964C-6D42B2CDDA87/APlayerViewController.app/Frameworks/BrightFutures.framework/BrightFutures
 in /private/var/mobile/Containers/Bundle/Application/E5242F00-6D45-4101-964C-6D42B2CDDA87/APlayerViewController.app/APlayerViewController
(lldb) 

```



ここらへんとか色々見まくってたけど、皆も詰まってる様子。
その解決法も様々だった。
http://qiita.com/cobonas/items/8bfe26d679798b24a4b2

http://stackoverflow.com/questions/24043532/dyld-symbol-not-found-nsurlauthenticationmethodclientcertificate-when-trying

http://stackoverflow.com/questions/21402065/dyld-symbol-not-found-nsurlsessiontransfersizeunknown-afnetworking-2-1-0

# 解決した方法

色々試してなんとか解決できたのがこれ。
エラーが出てるBrightFutureをOptinalで追加した。



![スクリーンショット_2015-07-08_14_49_48.png](https://qiita-image-store.s3.amazonaws.com/0/10826/f69dbe0f-f708-9935-3214-01b852e59353.png "スクリーンショット_2015-07-08_14_49_48.png")

**※ Optinalにしないとダメ。**
[Android][AppCompat]AppCompat22.2.0でv7.NotificationCompatが追加されてMediaStyleが使えるようになっていた

Android Support Libraryは最近とても増えていますし、後方互換やらバグ修正が盛んでとっても喜ばしいことと思います。

[Support Library](http://developer.android.com/tools/support-library/index.html)

特にv4 Support Libraryとか、v7 Support Libraryとか使うと思います。
あとはDesign Support Libraryとか簡単にMaterialデザインにできるので、最近話題になってますよね。

# android.support.v4.app.NotificationCompat

自分はNotificationの後方互換で[NotificationCompat](http://developer.android.com/reference/android/support/v4/app/NotificationCompat.html)とか使っていました。
これはBuilder使う書き方だけ実装されてるんですが、バージョンごとにうまいことやってくれるので重宝します。

## NotificationCompat(v4)ではNotification.MediaStyleが使えない。。

[NotificationCompat.setStyle() can't get Notification.MediaStyle](http://stackoverflow.com/questions/26453419/notificationcompat-setstyle-cant-get-notification-mediastyle)
こちらのスレですね。。

今更、Lollipopで追加された[Notificatio.MediaStyle](http://developer.android.com/reference/android/app/Notification.MediaStyle.html)の実装を使用として、気づいたのですがSupportLibrary22.1.0のNotificationCompat(v4)ではMediaStyleがありませんでした。。

上記のスレは

```java:
new NotificationCompat.Builder(this).setStyle(new Notification.MediaStyle()
         .setMediaSession(mySession))
```
これができない！という話です。。

解決策でAnswer1(2014 Oct)で言われてるのは自分でBuilderのCompatコードを書いてV21Builderとそれ以前を分ける、という方法。。
まあ、SupportLibrary自体の実装も同じようなものですし、よくやりますが、面倒なので、やりたくないなーと思ったら、最後の回答(2015 Jun)に

> There is no NotificationCompat.MediaStyle in v4 package, however, it does exist in v7 package. Make sure to import:
> 
> import android.support.v7.app.NotificationCompat;
> 
> instead of the v4 package. It's working for me as of v22.2.0 of the appcompat library.

って書いてあります！
v4だったりv7だったりもはやよくわかりませんが、解決できそうなので最新のv22.2.0にしてみました！

# android.support.v7.app.NotificationCompat

これが救世主ですが、NotificationCompatがSupportLibrary v22.2.0ではもう一つ追加されていました！
[NotificationCompat](http://developer.android.com/reference/android/support/v7/app/NotificationCompat.html)
えwって感じですね。

で、肝心の実装内容ですが、、本当にNotificationCompatを拡張してNotificationCompat.MediaStyleを設定できるようにしてあるだけでしたw

```java:
Notification noti = new NotificationCompat.Builder()
     .setSmallIcon(R.drawable.ic_stat_player)
     .setContentTitle("Track title")
     .setContentText("Artist - Album")
     .setLargeIcon(albumArtBitmap))
     .setStyle(new NotificationCompat.MediaStyle()
         .setMediaSession(mySession))
     .build();
```
こんな感じで使えます。

v7のパッケージに実装した理由がMediaSessionCompatがv7なのかと思いましたが、v4ですね。。

[MediaSessionCompat.Token](http://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.Token.html)

詳しく追えばわかるかと思いますが、きっと難しい事情があるのでしょう。
もしくはv4単体ではもう使って欲しくないのかもしれませんね。
v4に本体を残しているのもMediaStyle使っていない人に置換させる手間をかけさせないためでしょう。

とりあえず、若干もやもやしますが、これからはMediaStyleも後方サポートしつつ簡潔に書けるので普通に使っていきましょう！
Rails 開発を円滑に進めるための gem ３選


## bullet

https://github.com/flyerhzm/bullet

```rb:Gemfile
gem 'bullet', group: :development
```

Rails で不意に起こりがちな N+1 問題を検出してくれる gem。ステージング環境のちょっとしたデータなら問題無いけど、本番環境の膨大なデータになると一気に問題が顕在化してしまう、なんてことを予防するために入れておきましょう。

## rack-mini-profiler

https://github.com/MiniProfiler/rack-mini-profiler

```rb:Gemfile
gem 'rack-mini-profiler', group: :development, require: false
```

controller、model、view のどの辺の処理に時間がかかっているかを教えてくれます。パフォーマンスをチューニングする時の手助けとなってくれるかもしれません。

## pry−rails

https://github.com/rweng/pry-rails

```rb:Gemfile
gem 'pry-rails', group: :development
```

irb には無いコマンドを提供してくれたり、柔軟なコンソールを使わせてくれます。色々たくさんコマンドがあるんですが、わたしがよく使うのは次の３つです。（コンソール上で `help` と打つとどんなコマンドが使えるか教えてくれます。）

#### （１）hist（履歴の表示）
```rb
pry(main)> hist
 1: help
 2: show-routes
 3: show-source User
```

#### （２）show-source <クラス名>（ソースの表示）
```rb
pry(main)> show-source User

class User < ActiveRecord::Base
  belongs_to :company
   :
   :
```
※エイリアスが割り当てられているので `$ User` としても同じ結果が得られます。

#### （３）show-model <モデル名>、show−models（モデルの情報を表示）

###### 特定のモデル情報を表示

```rb
pry(main)> show-model User
User
  id: integer
  created_at: datetime
  updated_at: datetime
  name: string
  nickname: string
      :
      :
```

###### 全てのモデル情報を表示

```rb
pry(main)> show-models
User
  id: integer
  created_at: date
      :
      :

Company
  id: integer
  created_at: date
      :
      :
```
お名前.comとAWS Route53を使ってS3で静的なページを公開する方法

表題の組み合わせで、まとめて解説しているページがなかったのでメモしておきます。

# お名前.comでドメインを取得する
http://www.onamae.com/

# 静的なページ一式をS3のバケットにアップロードする

## S3のコンソールにアクセス
https://console.aws.amazon.com/s3

## 「バケットを作成」
バケット名：（お名前.comで作成したドメイン）
リージョン：Tokyo

## 指定したドメインのバケットにアクセス
「アクション」→「アップロード」
ファイルをごっそりアップロードする

## 「プロパティ」
「アクセス許可」→「バケットポリシーの追加」

```
{
  "Version":"2012-10-17",
  "Statement":[{
    "Sid":"AddPerm",
        "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::（バケット名）/*"]
  }]
}
```

→「保存」

「静的ウェブサイトホスティング」→「ウェブサイトのホスティングを有効にする」にチェック
インデックスドキュメント: index.html
エラードキュメント: 404.html
→「保存」

# Route53の設定

## コンソールにアクセス
https://console.aws.amazon.com/route53/

## 「Hosted zones」
お名前.comで作成したドメインを選択

## 「Create Record Set」
Name: （空 ※バケット名にwww.などサブドメインを指定している場合はそれを記入）
Type: A - IPv4 address
Alias: Yes
Alias Target: バケット名を選択
→「Create」

## Type「NS」レコードに記載されているDNS情報を取得
あとでお名前.com側で設定するのでテキストを記録する

# お名前.comでドメインにDNSの設定
「ドメイン設定」→「ネームサーバーの設定」→「ネームサーバーの変更」

冒頭で取得したドメインを選択→「他のネームサーバーを利用」
先ほど記録したRoute53のNSレコードにあるサーバーを上から順に設定する。
→「確認する」→「設定する」


しばらく待つとアクセスできるようになります。

# 参考ページ
画像付きの説明とかあります

[AWS S3,Route53で独自ドメインの静的サイトを公開する](http://qiita.com/tomsig/items/f106fe94ab7e20490938)

[お名前.com で取ったドメインを Amazon Route53で管理し、サブドメインをはてなブログに割り当てるまで](http://tech.tanaka733.net/entry/2013/09/15/%E3%81%8A%E5%90%8D%E5%89%8D.com_%E3%81%A7%E5%8F%96%E3%81%A3%E3%81%9F%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92_Amazon_Route53%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%97%E3%80%81%E3%82%B5%E3%83%96%E3%83%89)

こちらもセットで（www.example.comからexample.comにリダイレクトさせたい）
[S3でリダイレクト](http://t.y13i.com/post/77054791661/s3-redirection)
litaに短冊を作ってもらう

# 概要
世間は七夕なのでlitaたんに頼んでSlackに短冊をさげてもらいました（遅い）

# 短冊プラグイン実装
```rb:lita-tanzaku/lib/lita/handlers/tanzaku.rb
module Lita
  module Handlers
    class Tanzaku < Handler
      route(/^tanzaku\s+([^ ]+)/i, :tanzaku) 

      def tanzaku(response)
        negaigoto = response.args[0].chars
        tanzaku = "┏┷┓\n" + negaigoto.map{|item| "┃" + item + "┃\n"}.join + "┗━★"
        response.reply(tanzaku.gsub("ー", "｜"))
      end
    end

    Lita.register_handler(Tanzaku)
  end
end
```

# litaにプラグイン追加

```rb:Gemfile
gem 'lita-tanzaku'
```

## 動作確認
完成！！
![lita-tanzaku.jpg](https://qiita-image-store.s3.amazonaws.com/0/42777/e857e5c5-79b4-d6d0-390a-de4bec4a5175.jpeg)

## gem
rubygemsに登録してたんでした
https://rubygems.org/gems/lita-tanzaku
注文APIについて

お世話になります。
下記のサンプルをブラウザから実行しましたが、データを取得できません。
http://circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderCount?sellerId=teststore

上記APIどうしたら正しく動作するか（その他にすべきことなど）、ご教示いただければ助かります。

注文API全般を利用したいと思っております。初心者ですので分かりやすくご説明いただけますと大変助かります。

※アプリ―ケーションIDを取得し、商品名のListの取得のAPIなどは動作しました。

よろしくお願いいたします。
OSX ChromeでOpen SansがLast resortに文字化けする場合の対応

# Gmailログイン画面の文字化けに困った

とあるタイミングからChromeでGmailのログイン画面を開いた時に、メッセージが下記のLast resortに文字化けしてしまって困ったので対応メモ。

![image](https://qiita-image-store.s3.amazonaws.com/0/41027/243f4b97-9966-5049-2f3f-818b054160ec.png)
>引用元：https://en.wikipedia.org/wiki/Fallback_font#/media/File:LastResort_samples.svg

# 主な原因
＿人人人人人人人人人人人人人人＿
＞　Open Sansが入っていない！＜
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣

# ないものは入れよう
[Google Fonts](https://www.google.com/fonts/#UsePlace:use/Collection:Open+Sans)からダウンロードしてきてインストール
![image](https://qiita-image-store.s3.amazonaws.com/0/41027/ea3c5232-4186-02c9-f0ea-d6bd5179a84c.png)

これで無事直りました。拡張機能かな、など、もっと筋のいいやり方があるかもしれませんがひとまずこれにて解決。
ROS tutorial まとめ1 ノードの起動とか

#ROSまとめ1#


HIROやPepperをROSで動かすために、ROSの勉強をはじめた次第です。
勉強のログを残していこうかと！

最初は、ROSのノードの起動まで。

##1.準備##
- まず、ワークスペースを作る。

```bash
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
```

- ワークスペースをビルド。

```bash
$ cd ~/catkin_ws/
$ catkin_make
```

- ワークスペースをインストール環境に配置(overlay)。

```bash
$ source devel/setup.bash
```

- パッケージを作る。

```bash
$ cd ~/catkin_ws/src
```

このあと、`catkin_create_pkg`でパッケージ生成。

使い方

```bash
$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
```

例

```bash
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
```


これは、std_msgs, roscpp, rospyに依存した**新しい**package`beginner_tutorials`を作るという意味。

**パッケージの生成が完了したら、ワークスペースのディレクトリまで移動して、もう一度`catkin_make`コマンドを実行**

```bash
$ cd ~/catkin_ws/
$ catkin_make
```

これをしないと、`rospack depends1`コマンドでエラーが発生する。

このあと、

```bash
$ source devel/setup.bash
```

により、`setup.bash`を読み込む。


##2.実行手順##
- ROSを使うためには、まず`roscore`
- 次に`rosrun`でノードを起動

使い方

```bash
$ rosrun [package_name] [node_name]
```

例

```bash
$ rosrun turtlesim turtlesim_node
```
PhalconのVoltでデータベースのdatetime型などを整形して表示したい

データベースから値を取ってきて、そのままviewへ入れた時、datetime型などの表示を整形(YYYY年MM月DD日みたいな感じ)して表示したい時がしばしばあります。
そんな時にうまい方法がないかと考えて、思いついたのでメモしときます。

# コントローラで取得した値をviewに放り込む

ちょっと乱暴ですが概ねこんな感じでviewに入れますよね。

```php:AnythingController.php
$this->view->items = Item::find();
```

# イマイチコード

毎回以下のようにやってました。
しかし、面倒だし見た目が良くないので何とかしたいと思いました。

```php:イマイチその1@model内
// 不要な時もやってしまうし、余計な値を毎回入れたくない
public function afterFetch()
{
    $this->updated_at_timestamp = strtotime($this->updated_at);
}
```
```php:イマイチその2@volt内
// 表示するだけに2行必要だし、volt内にPHPコード入れるのはどうかと
<?php $time = strtotime($data->updated_at); ?>
{{ date('Y年m月d日', time) }}
```

```php:イマイチその3@volt内
// volt内にPHPコード入れるのはどうかと
<?php echo date('Y年m月d日', strtotime($data->updated_at); ?>
```

# 結論

色々考えた挙句、単純にフィルタにstrtotimeを追加してみました。

```php:services.php抜粋
$volt = new VoltEngine($view, $di);
// strtotimeフィルタ追加
$volt->getCompiler()->addFilter('strtotime', 'strtotime');
```
```php:anything.volt
{{ date('Y年m月d日', data.updated_at | strtotime) }}
```

期待通りでスッキリしました。
以上です。
コンパイルしないJava

[Cをオンザフライでコンパイルして実行するやつ](http://qiita.com/kuwa72/items/5e42fe1a0ff3ec7bf27c)の[Java版](https://github.com/kuwa72/j1)

これをj1という名前で保存する。

```bash
#!/usr/bin/env bash

temp=$(mktemp /tmp/JXXXXXX)
class=$(basename $temp)
outdir=$(dirname $temp)

{
  echo 'public class '$class'{'
  echo 'public static void main(String[] args){'
  echo $@
  echo ';}}'
} >> $temp.java

#cat $temp.java

{
  javac $temp.java
  java -cp $outdir $class < /dev/stdin
}
```

こうなるけど、C以上にうれしくない。

```
~/s/c ❯❯❯ ./j1 'System.out.println("Hello world.")'
Hello world.
```

普通の用途には[Java REPL](http://www.javarepl.com/console.html)とか、Nashorn,JRuby,Groovy,Clojureあたりをおすすめします。
【Java】フォルダ内の指定した拡張子を一括削除する方法

try-with-resourcesを使ったりNew I/O 2を使ったりしてるのでJDK1.7以上じゃないと使えません。 

```java

// 指定フォルダをhogeとする。
Path path = Paths.get("C:","hoge");
try(DirectoryStream<Path> ds = Files.newDirectoryStream(path, "*.txt") ){
    for(Path deleteFilePath : ds){
        System.out.println("次のファイルを削除します。: " + deleteFilePath.toString());
        Files.delete(deleteFilePath);
    }
} catch (IOException e) {
    e.printStackTrace();
}
```
トランジスタ > ダーリントン接続 > 回路図 / 大きなh_{FE} / 重い負荷を駆動できる

http://www.marutsu.co.jp/contents/shop/marutsu/mame/186.html

ダーリントン接続の回路図
![darlington.png](https://qiita-image-store.s3.amazonaws.com/0/32870/98dd14c0-5404-bc59-ec98-504f1c53b563.png)

##特徴1 > 大きな h_{FE} が得られる

```math
h_{FE} = h_{FE1} \times h_{FE2}
```
ここで
h_{FE1} : Q1のh_{FE}
h_{FE2} : Q2のh_{FE}

##特徴2 > 重い負荷を駆動できる
> ダーリントンは少ないベース電流で大きなコレクタ電流が得られるのが特徴ですが、言い方を変えると重い負荷（電気の世界では抵抗値が低い負荷を重い負荷と言います）を駆動することが出来ます。
セキュリティ・アップデート Node v0.12.6, v0.12.7

Node v0.12.6 および v0.12.7 が登場している。

- [Node v0.12.6 (Stable)](http://blog.nodejs.org/2015/07/03/node-v0-12-6-stable/)

v0.12.6 には UTF-8 復号処理に問題があり、 DoS を引き起こす可能性あり。

> This release of Node.js fixes a bug that triggers an out-of-band write in V8's utf-8 decoder. This bug impacts all Buffer to String conversions. This is an important security update as this bug can be used to cause a denial of service attack.

- [Node v0.12.7 (Stable)](http://blog.nodejs.org/2015/07/09/node-v0-12-7-stable/)

OpenSSL 1.0.1p に対応したバージョン。

- [Node v0.10.40 (Maintenance)](http://blog.nodejs.org/2015/07/09/node-v0-10-40-maintenance/)

0.10 系もアップデート。上記2つの問題に対応している。

というわけで、とっととアップデートしましょう。

## ブックマーク

- [Security Updates for Node.js and io.js | US-CERT](https://www.us-cert.gov/ncas/current-activity/2015/07/06/Security-Updates-Nodejs-and-iojs)
- [Forthcoming OpenSSL releases](https://mta.openssl.org/pipermail/openssl-announce/2015-July/000037.html)
コンパイルしないC言語

オリジナルは[kazuho/C](https://github.com/kazuho/C)です。

[makeを再開発する記事](http://qiita.com/ine1127/items/752a6300cc1e053f2c7c)を見たときに、2003年ころC言語をオンザフライでコンパイルしてワンライナーが書けるようなものがあったのを思い出してぐぐってみたけど見つからなかったので、代替するものを探してみんとす。

ちなみに似たものを[再現](https://github.com/kuwa72/c1)してみた。このようにフィルタコマンドとして使えなくもないが、シェル芸向きではないと強く思う。

```shell-session
~/s/c ❯❯❯ echo "Hello world" | ./c 'char x[256];fgets(x,sizeof(x),stdin);puts(x)'
Hello world
```

```bash
#!/usr/bin/env bash

temp=$(mktemp /tmp/cXXXXXX)

{
  echo '#include <stdio.h>'
  echo 'int main(int argc, char *argv[]){'
  echo $@
  echo ';}'
} >> $temp.c

#cat $temp.c

{
  cc -o $temp.o $temp.c
  $temp.o < /dev/stdin
}
```

同様に、明示的にコンパイルしないプロダクトも幾つかあるようだ。

ryanmjacobs/c
https://github.com/ryanmjacobs/c

.cをccして.oを実行するだけのやつ。C言語をシーバンで実行できる。ググラビリティ…。

picoc
https://github.com/zsaleeba/picoc

インタプリタ。

CINT
https://root.cern.ch/drupal/content/cint

C,C++インタプリタ。

Cling
https://root.cern.ch/drupal/content/cling

C++インタプリタ。LLVMベース。

StudyC
http://www.orchid.co.jp/soft/studyc.html

Windows用。

まあウェブベースで実行できる[ideone](http://ideone.com/)とか使ったほうが楽な気はする。
【Ubuntu・Debian系】Dropboxの認証ループ対処法

Ubuntu14.04LTSにDropboxを導入しました。

しかし、起動しようとしたら何度も以下のような認証を求められます。

`'/usr/bin/dropbox'を管理者として実行するためには認証が必要です`
![Screenshot from 2015-05-31 21:47:28.png](https://qiita-image-store.s3.amazonaws.com/0/76668/72f3efa8-b221-7db9-5b96-abc50bde82e9.png)

調べてみると、「PolicyKit」関連とのこと。

調べてみると以下の方法で対処出来ました。

```
$ which dropbox
/usr/bin/dropbox
```
これで、dropboxの保存場所がわかったので、viで編集します。
```$ sudo vi /usr/bin/dropbox```
で、
```PARENT_DIR = os.path.expanduser("/var/lib/dropbox")```
を
```PARENT_DIR = os.path.expanduser("~")```
に変更。
終わったら、
```$ dropbox start -i```
を実行してOK。
こんな感じです。
【OSX】rbenvでRubyをインストールする際のクラッシュに対する対処法

homebrewでrbenvの導入まではできても、rbenvでrubyをインストールするとクラッシュして再起動してしまう人向けメモ。

以下の項目に当てはまったら解決できるかと思います。

* セキュリティソフトをインストールしていませんか？
* メモリやCPUの監視ツールは入れていませんか？

当てはまった場合

1. 一度、homebrewでrbenvをアンインストール。

`$ brew uninstall rbenv`

2. 上記の該当ソフトを無効にする

3. もう一度homebrewでrbenvをインストール
`$ brew install rbenv`

4. rubyをインストール
`$ rbenv install -v バージョン名`

これでOK
今日の日付を出力するコマンド

毎日コンソール上で今日の日付(20150707とか)を入力することが多いので、
aliasでサクッと書いてくれるコマンドを作ったメモ。

```bash
alias today='date "+%Y%m%d"'
```

これでtodayと書けばカレンダー見ながらポチポチ数字を入力する作業から開放されます。
それだけ。
ガイドブックのまとめ

<h1>ガイドブックをまとめてく</h1>

Bookmarkだと管理しづらいからここに書いとく


<h2>ionic</h2>

->[ドキュメントリンク](http://qiita.com/tkhm/items/fbd9bd035557d9c53d63)

->[Learn ionic Resources](http://learn.ionicframework.com/resources/)

->[ionicまとめ自分用](http://qiita.com/masakyx/items/91920a1271f0515ebc19)

<h2>Heroku</h2>

->[デプロイの仕方](http://qiita.com/masakyx/items/a5687487828e99871922)


<h2>Angular js</h2>

->[公式リファレンス](https://docs.angularjs.org/api?PHPSESSID=cae8e98e7ca559b4605d75c813b358ee)

->[使い方まとめ](http://qiita.com/opengl-8080/items/2fe0a20c314b1c824cc5)

->[自分用のまとめ](http://qiita.com/masakyx/items/67405d027e5b4f8895e6)

<h2>Onsen UI</h2>

->[ガイドブック](http://ja.onsen.io/guide/overview.html)

->[Template](http://ja.onsen.io/download.html#download-templates)

->[リファレンス](http://ja.onsen.io/reference/javascript.html)


<h2>jQuery</h2>

->[jQueryリファレンス](http://semooh.jp/jquery/)


<h2>HTML CSS</h2>

->[カラーリファレンス](http://www.colordic.org/colorsample/ccba52.html)
数値の構造をおさらいしよう(float,double)


<h2>doubleとfloat</h2>

doubleとfloatは次のように呼ばれています。

double(倍精度浮動小数点型)

float(浮動小数点型)

そもそも浮動小数点型ってなんでしたっけ。

<h2>浮動小数点型</h2>
符号部(正負) + 指数部(10^) + 仮数部(数値) から構成される数値です。

<p>
符号部 : 数値がマイナスかプラスかを示すための部分
</p>
<p>
指数部 : 数値の大きさを示す部分
</p>
<p>
仮数部 : 値を格納する部分
</p>

となっております。なので32bitといえども、保存できる値の領域は決まっておるわけであります。


<h2>floatとdoubleの違い</h2>


| 構成 		| 符号部 | 指数部 | 仮数部 |
|---------:|------|--------|:----:|
|float| 1bit     |      8bit |    23bit    |
|double| 1bit       |        11bit |     52bit     |

floatは32bit(4byte),doubleは64bit(8byte)となっております。
doubleでは倍精度ということでfloatの倍のサイズを持っていることがわかります。
つまりデータとしてはdoubleのほうが2倍大きいのです。

たとえばfloatではこのように32bitの値であっても値として使える部分が
23bitと限られており、24bit目に値を入れちゃったりすると変な挙動をすることがわかります。

例えばこんな実験をしてみましょう。
int(32bit)でどんどん2進数でのbitフラグを立てていきます。24bitまで

```cpp:Test

    int target{0};

    for(int i = 0 ;i < 25;i++)
    {
        target |= 1 << i;
        printf("%d\n",target);
    }
    
    printf("%f\n",(float)target);
    
    return 0;

```

```terminal:結果
1
3
7
15
31
63
127
255
511
1023
2047
4095
8191
16383
32767
65535
131071
262143
524287
1048575
2097151
4194303
8388607
16777215
33554431
33554432.000000	// !! 最後の値がfloatにした瞬間変わっている

```

となりました。最後のintのtargetの値は33554431でしたが、これをfloatにキャスト値が変わってしまってますよね。
これはどういうことでしょうか。2進数表示に変換してみましょう

```:2進数表示
1111111111111111111111111 // <= 33554431 (24桁目まで1)
10000000000000000000000000 // <= 33554432 (25桁目のみ1)
```

これはどういうことでしょうか。floatでは仮数部が23bit、つまり数値として扱えるのは23bitまでなので
もともと24bitまで値が入っているintの値をキャストすると値が溢れてしまったということです。
たしかにfloatが23bitまでしか扱えないことがわかりましたね。

なので大きな値や数値の多いいbitフラグを扱う時はdoubleで行うべきであることがわかります。
doubleなら52bitまで扱えますからね。その分データは倍になってしまいますが。

普段intで32bitまで数値が扱えている分、ふとしたときにこういうワナにはまってしまわぬよう、覚えておきましょう。
Macでdeepdreamをやってみる

## deepdreamとは

googleが公開したディープラーニングを用いた画像認識ネットワークでオープンソース、レポジトリは[こちら](https://github.com/google/deepdream)。入力画像の中に学習していたパターンに似た領域があると学習元の画像を復元しようとし、人間の想像からかけ離れた画像を合成してくれます。最近何かと話題なので見たことある人多いと思います。

![0002.jpg](https://qiita-image-store.s3.amazonaws.com/0/72314/94113b47-de16-15fc-b4a1-7b01669bc5f6.jpeg)

この実行はローカル環境でできます！、がディープラーニングフレームワークであるCaffeの導入が必要になるので導入しておいてください。Caffeの導入方法は[この記事](http://qiita.com/t-hiroyoshi/items/3bba01dd11b1241f1336)にまとめておいたのでもしよろしければ参考にしてください。

## 手順

ipython notebookで動くので入れます。

```
pip install ipython "ipython[notebook]"
```

レポジトリから公開されているソースをCaffeの隣にクローンしてきます。

```
cd /path/to/caffe
cd ../
git clone git@github.com:google/deepdream.git
```

学習済みのcaffemodelが必要なので[ここ](https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet)のcaffemodel_urlからダウンロード、Caffe内の`models/bvlc_googlenet/`に保存します。

deepdreamに移動してipython notebookを起動します。

```
cd deepdream
ipython trust dream.ipynb
ipython notebook
```

ブラウザが起動されたと思います。dream.ipynbを選択して、上部にある再生ボタンを押していきます。最後まで行くと`sky1024px.jpg`という画像を元にdeepdreamが実行され、`deepdream/frames/`に変換された画像が保存されていると思います。

これでニューラルネットワークの夢(dreamとか言ってるけど全然夢じゃなくて無理やり認識させただけな気がするが)を出力することができました、自分で好きな画像をdeepdreamしたいときは好きな画像を`sky1024px.jpg`として保存すれば読み込んでくれます(中身いじりたくないから横着)。

作成した画像をSNSなどに上げる際は#deepdreamタグを付けるとdeepdreamを作ってくれた人達が喜ぶので是非付けましょう。
[Swift] AlamofireでApiを叩いて、SwiftyJSONでレスポンスデータを展開する

# はじめに

RailsでJSON Apiを作成したので、そこと通信をするiOSアプリをSwiftで作ることになりました。
以前はHTTP通信部分に[NSURLSessionやAFNetwork](http://www.fisproject.jp/2014/02/%E3%80%90afnetworking%E3%80%91ios%E3%81%AEhttpclient%E3%81%BE%E3%81%A8%E3%82%81%E3%80%90mknetworkkit%E3%80%91/)を使っていましたが、今回はSwiftで書かれた[Alamofire](https://github.com/Alamofire/Alamofire)を使って見ることにしました。
JSONのSerializeにはNSJSONSerializationを使っていたところを、[SwiftyJSON](http://www.binpress.com/tutorial/swiftyjson-how-to-handle-json-in-swift/111)を使ってみることにしました。

# やったこと

とりあえずテストとしてAppDelegate.swiftあたりに書いてみました。

```swift
import UIKit
import Alamofire
import SwiftyJSON
　　　　・
　　　　・
　　　　・
        Alamofire.request(.GET, "http://foo.com/api/v1/bar/1", parameters: ["foo": "bar"])
        .response { (request, response, data, error) in
            println(request)
            println(response)
        }
        .responseJSON { (_, _, json_data, _) in
            println(json_data)
            let json = JSON(json_data!)
            println(json)
            println(json["bar"])
            println(json["bar"]["hoge_id"])
        }
    }
}
```

```rb:request
<NSMutableURLRequest: 0x7fab3b28b720> { URL: http://foo.com/api/v1/bar/1?foo=bar }
```

```rb:response
Optional(<NSHTTPURLResponse: 0x7fab38d60bc0> { URL: http://foo.com/api/v1/bar/1?foo=bar } { status code: 200, headers {
　　　・
　　　・
    "Cache-Control" = "max-age=0, private, must-revalidate";
    Connection = "keep-alive";
    "Content-Type" = "application/json; charset=utf-8";
　　　・
　　　・
　　　・
} })
```

```rb:json_data
Optional({
    bar =     {
        "created_at" = "2015-07-01T12:25:41.438+09:00";
        id = 1;
        "updated_at" = "2015-07-01T12:25:41.438+09:00";
        "hoge_id = 1"
    };
})
```

```rb:json
{
  "bar" : {
    "id" : 1,
    "created_at" : "2015-07-01T12:25:41.438+09:00",
    "updated_at" : "2015-07-01T12:25:41.438+09:00",
    "hoge_id" : 1
  }
}
```

```rb:json["bar"]
  "id" : 1,
  "created_at" : "2015-07-01T12:25:41.438+09:00",
  "updated_at" : "2015-07-01T12:25:41.438+09:00",
  "hoge_id" : 1
```

```rb:json["bar"]["hoge_id"]
1
```

# まとめ

今回はとても単純な例ですが、今までよりもとても直感的に使えそうです。
複雑な操作は今後。


# References

- https://github.com/Alamofire/Alamofire
- https://github.com/lingoer/SwiftyJSON
Nagios→HipChatに日本語で投稿させたい

### 経緯

* 今まであったrubyベースのものは英語以外が混じると投稿出来なかった
* hipsaintならOK
https://github.com/hannseman/hipsaint

### インストールとテスト

* CentOS7
* インストールメモ

```
$ sudo yum  install python-pip
$ sudo pip install hipsaint

テスト
$ hipsaint --token=<TOKEN>--room=<ROOM_ID> --type=service --inputs="サービス詳細|テストです|Wed Jul 8 05:05:42 JST 2015
|PROBLEM|1.1.1.1|OK|hipsaint 日本語" -n
```

rubyベースより、セットアップがだいぶ楽
SalesforceのSOQLで標準項目に表示されてる項目を取得する！


Salesforce初心者ですが、SOQLを使い出して物凄く謎な現象に出会いました。
それについての調査・結果を書き出します。

## どんな現象？

CampaignMemberオブジェクトの標準項目であるEmail項目を取ろうと以下のようにSOQLを作成してみました。

````SOQL
SELECT Email FROM CampaignMember
````

しかし、クエリエディタで動かしてみたところエラーになりました。

![Evidence.png](https://qiita-image-store.s3.amazonaws.com/0/39382/9520cbe0-3d7d-d6e1-bbe1-20d23c3c1803.png "Evidence.png")


ぐぬぬと唸りながら、色々と調べてみました。

## 調査

以下の記事のように標準項目は色んなオブジェクトの項目が関わってることがあると発見。
[Accountの標準項目BillingAddressをSOQLでSelect時にエラー](https://help.salesforce.com/apex/HTViewSolution?id=000004257&language=ja
)

で、スキーマビルダーを眺めていた時にピンと来ました。

もしや、LeadとCampaignMemberはリレーション関係にあるが、Lead側でのEmail項目がCampaignMemberのEmail項目と関わっているのでは？と。

## 実験

で、実験として以下の様なSOQLを実行してみました。
[SOQLでのリレーションの辿り方](http://blog.flect.co.jp/salesforce/2010/07/soql-3dd0.html)の記事を参考にしました！

````SOQL
SELECT Lead.Email FROM CampaignMember
````

実行してみたところ無事Emailが取得出来ました！

親オブジェクトにある項目が子オブジェクトにある標準項目に関わっていることもあるのですね・・・