OmniAICreator/Qiita-1.07M huggingface dataset:
CentOS7.xに最新版のRedisをインストールする最も簡単な方法

# はじめに
公式でRedis3系のrpmは提供されていないので、REMIを使うのが最も簡単に導入する方法となる。

# 必要なリポジトリの導入
環境は、CentOS 7.2 である。

まず、EPEL と REMI を導入する。

```shell-session
$ sudo yum install epel-release
$ wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo rpm -Uvh remi-release-7*.rpm
```

# Redisインストール
REMIはデフォルトでdisableであるため`--enablerepo`してRedisをインストールする。

```shell-session
$ sudo yum --enablerepo=remi,remi-test,epel install redis
```

今(2016年6月9日現在)なら、Redis3.2がインストールされる。
jsで追加したtextareaにtinymceを有効にする

id='textarea_box';
tinyMCE.execCommand('mceAddControl', false, id);
上記記述をtextarea追加後に実行することで有効にすることが可能。

```js
$('#textarea_box').click(function(){
  html = '<textarea id="textarea_box"></textarea>';
  $('#xxx').html(html);
  id='textarea_box';
  tinyMCE.execCommand('mceAddControl', false, id);
});
```

無効にする場合は下記のようにmceAddControlをmceRemoveControlに変更します。
id='textarea_box';
tinyMCE.execCommand('mceRemoveControl', false, id);
UbuntuにJxcoreをインストールしてみた

最近、Node.jsをやり始めた者です。
Node.jsをやり始めてから、色々調べているうちにVert.xだったりJXCoreという単語を見かけるようになって気になったので使ってみようと思いました。

### そもそもJXcoreってなに？
僕も全然詳しくないので⇓の記事を参考にしてください。
[Node.jsを拡張した「JXCore」、オープンソースでソースコードを公開](https://osdn.jp/magazine/15/02/24/164700)
[JXCoreを使ってJavaScriptのコードをネイティブコードにパッケージ化する](http://sourcechord.hatenablog.com/entry/2015/09/06/203827)

ざっくり言うと、Node.jsに独自拡張が追加されたやーつって事らしいです。

### 環境

今回はdocker上に立てたUbuntu14.04にインストールしてみようと思います。


### 事前準備

インストールのまえに必要そうなパッケージをインストールしておきます。
※不要なものもあるかもしれませんが、ご容赦ください。。

```shell-session
sudo apt-get install git clang-3.4 clang-3.4-doc libclang-common-3.4-dev libclang-3.4-dev libclang1-3.4 libclang1-3.4-dbg libllvm-3.4-ocaml-dev libllvm3.4 libllvm3.4-dbg lldb-3.4 llvm-3.4 llvm-3.4-dev llvm-3.4-doc llvm-3.4-examples llvm-3.4-runtime clang-modernize-3.4 clang-format-3.4 python-clang-3.4 lldb-3.4-dev
```


### インストール
[こちら](https://github.com/jxcore/jxcore/blob/master/doc/HOW_TO_COMPILE.md)を参考にやっていきます。

Prerequisitesを見ると

```shell-session
* GCC 4.2 or newer (for SpiderMonkey builds 4.7+)
* Python 2.7.x
* GNU Make 3.81 or newer
* libexecinfo (FreeBSD and OpenBSD only)
* for Windows (VS2012+) and Visual C++ Redistributable
```
となってます。

今回はUbuntuなのでGCC、 Python、 GNU Makeをインストールします。

```shell-session
sudo apt-get install gcc python make
```


**バージョン確認**

```shell-session
$ gcc -v
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 

$ python -V
Python 2.7.6

$ make -v
GNU Make 3.81
```
OK！

次はgithubからソースを落としてきます。
今回はとりあえず、/home/yama/dev/に落としてきます。

```shell-session
$ cd /home/yama/dev
$ git clone https://github.com/jxcore/jxcore.git
```

ソースを落としてきました！
jxcoreというディレクトリが出来てます。中に入っちゃいます。

```shell-session
$ cd ./jxcore
```

そして、、、コンパイルです。

```shell-session
$ ./configure
$ make
```

コンパイルに成功すると、out/Release/の中にjxとういう実行コマンドが出来てました!!

```shell-session
$ pwd
/home/yama/dev/jxcore

$ ls ./out/Release/

jx ←これ           libopenssl.a  libv8_nosnapshot.a  obj
libcares.a        libsqlite3.a  libv8_snapshot.a    obj.cmp
libchrome_zlib.a  libuv.a       linker.lock         obj.host
libhttp_parser.a  libv8_base.a  mksnapshot          obj.target
```

これを叩けばいいのですが、とりあえずパスを通しておきます。

```shell-session
$ vi ~/.bashrc
// 最後の行に以下を追加
PATH=$PATH:/home/yama/dev/jxcore/out/Release/
```

### 確認
+ バージョン

```shell-session
$ jx -v
v0.10.40
```

+ ファイル実行

```shell-session
$ jx hello.js
Hello!, jx
```
hello.jsの中身はこちら

```js:hello.js
console.log('Hello!, jx');
```

おまけ

Node.jsの拡張ってことだったけど、もとになってるNodeのバージョンはいくつなのかな？と思ったので確認。
コマンドライン上で確認。

```js:version
jx
> process.versions;

{ http_parser: '1.0',
  node: '0.10.40',
  jxcore: '0.3.1.2',
  ch: 0,
  v8: '3.14.5.9',
  sm: 0,
  embedded: { sqlite: '3.9.1' },
  ares: '1.9.0-DEV',
  uv: '0.10.36',
  zlib: '1.2.3',
  modules: '11',
  openssl: '1.0.1p' }

```
v0.10.40か・・・。

一応、[ROADMAP](https://github.com/jxcore/jxcore/blob/master/doc/ROADMAP.md)には
nodeの4.x系に対応とのことだけど。。。いつになるんだろうか。

```
Next Release RoadMap*

    Debugger support for SpiderMonkey (@)
    Node 4.x update (@)
    Power7, Power8, Mips64 Arch. support (+)
    Debugging from Mobile Applications (@)

```
【jQuery】ポップアップで確認してからデータを削除するには


1. リストにデータが一覧表示されている
2. 削除したデータの行にある削除ボタンを押す
3. 「本当に削除しますか？」と確認のポップアップが出る
4. 「はい」を押すと選んだ行だけ削除される

**「ポップアップ」** というワンアクションを挟むのがなかなかネックだった。

#動作の流れ

いろいろ考えたりはしたけど、やっぱり **「どういう順序で動作を進めると考えているものを実装できるのか」** と頭の中を整理するのが大事でした。

1. 削除したいデータの行の削除ボタン `.deleteButton` を押す：`click()`
2. 削除したい範囲（削除ボタンをのある行`tr`）を取得し、変数`deleteMasterPart`とする：`parents()`
3. ポップアップを表示する：[Foundation6 "Reveal Modal"](http://foundation.zurb.com/sites/docs/reveal.html "Foundation6 "Reveal Modal"")を使用
4. ポップアップ内の「はい」ボタン `.toggleDelete` を押す：`click()`
5. ポップアップ閉じる：[Foundation6 "Reveal Modal"](http://foundation.zurb.com/sites/docs/reveal.html "Foundation6 "Reveal Modal"")
6. `deleteMasterPart` を削除：`remove()`

#コード

```html:index.html
<!--ポップアップ-->
<div class="reveal" id="exampleModal1" data-reveal>
    <p>本当に削除しますか？</p>
    <button class="button toggleDelete" data-close style="margin-bottom: 0;">はい</button>
    <button class="close-button" data-close aria-label="Close modal" type="button">
        <span aria-hidden="true">&times;</span>
    </button>
</div>

<!--テーブル-->
<table>
    <thead>
	    <tr>
	        <th>商品コード</th>
	        <th>商品名</th>
	        <th>価格</th>
	        <th>&nbsp;</th>
	    </tr>
    </thead>
    <tbody>
	    <tr>
	        <td>A001</td>
	        <td>りんご</td>
	        <td>100円</td>
	        <td><button class="button deleteButton" data-open="exampleModal1">削除</button></td>
	    </tr>
   	    <tr>
	        <td>A002</td>
	        <td>バナナ</td>
	        <td>198円</td>
	        <td><button class="button deleteButton" data-open="exampleModal1">削除</button></td>
	    </tr>
	    <tr>
	        <td>B001</td>
	        <td>いちご</td>
	        <td>398円</td>
	        <td><button class="button deleteButton" data-open="exampleModal1">削除</button></td>
	    </tr>
    </tbody>
```

```js:common.js
$(function(){
    $(".deleteButton").on("click", function(){
        return deleteMasterPart = $(this).parents("tr");
    });

    $(".toggleDelete").on("click", function(){
            console.log("toggleDeleteおした");
         $(deleteMasterPart).remove();
    });
});
```
【ネットワーク】ケーブル


##ツイストペアケーブル
ツイストペアケーブルは8芯の銅線を束ねて1本のケーブルにしています。ツイストという名前から分かる通り、2芯を撚り合わせてノイズに強くしています。

####コネクタ：RJ45

####規格（数字の所が帯域のMbps）
10Base-T、100Base-TX、1000Base-T


##光ケーブル
km単位の距離を接続可能なため、主として建屋内の階を跨ぐ時、屋外に敷設する時に使われます。
光ケーブルはツイストペアケーブルと違い、通常は送信用、受信用に2本一組で使われ、Full Duplexになります。

####コネクタ
SCコネクタとLCコネクタ

####規格
100Mbpsの通信では100Base-FX、1000Mbpsでは1000Base-SX、1000Base-LXが挙げられます。

参考：[ネットワーク入門サイト](http://beginners-network.com/utp.html)
ウェブ系の本のまとめ



 1. [OCA: Oracle Certified Associate Java SE 8 Programmer](https://www.amazon.com/OCA-Certified-Associate-Programmer-1Z0-808/dp/1118957407/ref=sr_1_2?s=books&ie=UTF8&qid=1465527741&sr=1-2&keywords=java+certification)
 2. [OCP: Oracle Certified Professional Java SE 8] (https://www.amazon.com/OCP-Certified-Professional-Programmer-1Z0-809/dp/1119067901/ref=sr_1_4?s=books&ie=UTF8&qid=1465527741&sr=1-4&keywords=java+certification)
 3. [Clean Code](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&ie=UTF8&qid=1465527878&sr=1-1&keywords=clean+code)
 4. [Agile Performance Improvement](https://www.amazon.com/Agile-Performance-Improvement-Synergy-Technology/dp/1484208935/ref=sr_1_sc_1?s=books&ie=UTF8&qid=1465528271&sr=1-1-spell&keywords=agile+perpormance)
 5. [Java 8 in Action: Lambdas, Streams, and functional-style programming](https://www.amazon.com/Java-Action-Lambdas-functional-style-programming/dp/1617291994/ref=pd_sim_14_3?ie=UTF8&dpID=51JNZZSTmFL&dpSrc=sims&preST=_AC_UL480_SR384%2C480_&psc=1&refRID=BSRQMEEEX6TP3WJRRGM0)
 6. [Java: The Complete Reference](https://www.amazon.com/Java-Complete-Reference-Herbert-Schildt/dp/0071808558/ref=pd_sim_14_2?ie=UTF8&dpID=516CL5AVKVL&dpSrc=sims&preST=_AC_UL480_SR393%2C480_&psc=1&refRID=BSRQMEEEX6TP3WJRRGM0)
 7. [JavaScript and JQuery: Interactive Front-End Web Development](https://www.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/ref=sr_1_1?s=books&ie=UTF8&qid=1466392282&sr=1-1&keywords=javascript)
 8. [A Smarter Way to Learn JavaScript: The new approach that uses technology to cut your effort in half](https://www.amazon.com/Smarter-Way-Learn-JavaScript-technology/dp/1497408180/ref=pd_sim_14_4?ie=UTF8&dpID=51JwcqaSYPL&dpSrc=sims&preST=_AC_UL480_SR336%2C480_&psc=1&refRID=N8QRYKPWJKPFT9Y33QGW)
 9. [Creating Development Environments with Vagrant](https://www.amazon.com/Creating-Development-Environments-Vagrant-Michael/dp/1849519188/ref=sr_1_2?s=books&ie=UTF8&qid=1466392558&sr=1-2&keywords=creating+development++vagrant+in+books)
 10. [High Performance MySQL](https://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/ref=sr_1_1?s=books&ie=UTF8&qid=1466392659&sr=1-1&keywords=high+performance+mysql)
 11. [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124/ref=sr_1_2?s=books&ie=UTF8&qid=1466392755&sr=1-2&keywords=design+patterns)
 12. [Cracking the Coding Interview, 6th Edition](https://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/ref=sr_1_sc_1?s=books&ie=UTF8&qid=1466392812&sr=1-1-spell&keywords=code+inverview)
AMIのvirtualenvでgexiv2を使えるようにする

# インストールした環境

* Amazon Linux AMI release 2015.09
* Python 2.7.6(pyenv)

# 必要なライブラリのインストール

* yumでインストール可能なものはyumでインストールする

```bash
sudo yum -y install gcc*
sudo yum -y expat-devel  
sudo yum -y gettext  
sudo yum -y glib2 glib2-devel  
sudo yum -y gobject-introspection gobject-introspection-devel  
sudo yum -y python27-pycairo python27-pycairo-devel  
```

* yumで提供されていないものはソースからインストール（どこかのリポジトリにあるのかも）

    - ソースをダウンロードして解凍  

    ```bash
    wget http://ftp.gnome.org/pub/GNOME/sources/pygobject/3.10/pygobject-3.10.2.tar.xz  
    tar xvf pygobject-3.10.2.tar.xz  
    cd pygobject-3.10.2  
    ```

    - コンパイルしてpyenv環境をターゲットにインストール  

    ```bash
    ./configure --prefix=/home/ec2-user/.pyenv/versions/2.7.6 # pyenvをホームディレクトリにインストールしています。  
    make  
    sudo make install  
    ```

# exiv2をインストール

* ソースをダウンロードして解凍  

```bash
wget http://www.exiv2.org/exiv2-0.25.tar.gz  
tar xvf exiv2-0.25.tar.gz  
cd exiv2-0.25  
```

* コンパイルしてpyenv環境をターゲットにインストール  

```bash
./configure  
make  
sudo make install  
```

# gexiv2をインストール

* ソースをダウンロードして解凍  

```bash
wget https://download.gnome.org/sources/gexiv2/0.10/gexiv2-0.10.3.tar.xz  
tar xvf gexiv2-0.10.3.tar.xz  
cd gexiv2-0.10.3  
```

* コンパイルしてインストール  

```bash
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig # exiv2.pcをpkg-configが見つけられない状態なので環境変数で指定  
./configure --enable-introspection  
make  
sudo make install  
```

# virtualenvとリンク

* virtualenvを作成  

```bash
virtualenv -p ~/.pyenv/shims/python env # virtualenvを作成する場所はどこでもよい  
. env/bin/activate  
cd env/lib/python2.7/site-packages
ln -s ~/.pyenv/versions/2.7.6/lib/python2.7/site-packages/gi gi
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
python  
```

# テスト  

```py
import gi  
gi.require_version('GExiv2', '0.10')  
from gi.repository import GExiv2  
metadata = GExiv2.Metadata()  
```

# 参考

* [http://stackoverflow.com/questions/17472124/how-to-install-gexiv2-on-a-virtualenv](http://stackoverflow.com/questions/17472124/how-to-install-gexiv2-on-a-virtualenv)
* 

以上です。
Dcokerコンテナ上のTomcatをZabbix Java Gatewayで監視する

Dockerを導入するにあたり、コンテナで動くTomcatの各種メトリクスをZabbixから参照するために行った検証のメモ。

# Zabbixの設定

利用したZabbixのバージョンは3.0。これもDockerコンテナで動かしている。
以下の記事を参考に環境を用意した。

> [docker]1分でテスト用のZabbix環境を用意する
> http://dev.classmethod.jp/cloud/dockerized-zabbix-test/

Zabbix Java Gatewayを利用するため、

* ZS_JavaGateway
* ZS_JavaGatewayPort
* ZS_StartJavaPollers

の3つを追加で指定してコンテナを起動している。

```
docker run \
    -d \
    --name zabbix \
    -p 10081:80 \
    -p 10051:10051 \
    -p 10052:10052 \
    -v /etc/localtime:/etc/localtime:ro \
    --link zabbix-db:zabbix.db \
    --env="ZS_DBHost=zabbix.db" \
    --env="ZS_DBUser=zabbix" \
    --env="ZS_DBPassword=my_password" \
    --env="ZS_JavaGateway=127.0.0.1" \
    --env="ZS_JavaGatewayPort=10052" \
    --env="ZS_StartJavaPollers=5" \
    zabbix/zabbix-3.0:latest
```

最後に、コンテナへアクセスしてZabbix Java Gatewayを起動する。
（最初、これを行わずハマった）

```
[root@xxxx ~]# docker exec -it zabbix bash
[root@yyyy /]# /usr/local/sbin/zabbix_java/startup.sh
```

# Tomcatの設定
JMXを利用するため、CATALINA_OPSへ以下のような設定を追加する。

```
CATALINA_OPTS="${CATALINA_OPTS} \
  -server \
  -Xmx512m \
  -Xms512m \
  -XX:PermSize=32m \
  -XX:MaxPermSize=128m \
  -Xloggc:/usr/local/tomca/logs/gc.txt \
  -XX:+PrintGCDetails \
  -XX:+PrintGCDateStamps \
  -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false \
  -Dcom.sun.management.jmxremote \
  -Dcom.sun.management.jmxremote.port=12345 \
  -Dcom.sun.management.jmxremote.rmi.port=12345 \
  -Dcom.sun.management.jmxremote.local.only=false \
  -Dcom.sun.management.jmxremote.authenticate=false \
  -Dcom.sun.management.jmxremote.ssl=false \
  -Djava.rmi.server.hostname=${HOST_IP_ADDRESS}"
```

"-Dcom.sun.management.jmxremote"以降の設定を追加した。
"-Djava.rmi.server.hostname"に関しては、ローカルIPではなくコンテナを起動したDockerホストのIPアドレスが必要となるっぽい。
Tomcatコンテナを起動するために用意したスクリプトで環境変数を指定した。
また、Zabbix Java Gatewayから参照するため12345番ポートをポートフォワードしている。

```
IP_ADDRESS=`ip -f inet -o addr | grep -v "127.0.0.1" | cut -d\  -f 7 | cut -d/ -f 1 | awk 'NR == 1'`

docker run -d -p 8080:8080 -p 8009:8009 -p 12345:12345 \
  -v /etc/localtime:/etc/localtime:ro \
  --name tomcat_xxx \
  --env CATALINA_OPTS="-Dorg.apache.catalina.SESSION_PARAMETER_NAME=JSESSIONID -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -DjvmRoute=xxx" \
  --env HOST_IP_ADDRESS=${IP_ADDRESS} \
  ...
```

以上の設定で、ZabbixからTomcatのConnector worker等を参照出来るようになった。
ajaxで戻り値が受け取れない。

jquery-2.2.3.min.jsを使用しています。
締め処理を行っていたら、１分ごとにチェックを行うfunctionを実行させたいと思っています。
http://qiita.com/katsukii/items/bd64efcf4f070d77c028
より
function SimeConfirm() {
//締め処理区分を確認する。
return $.ajax({
url:"manual/gmanualini/",
type:'GET',
dataType:"text"
})
}
SimeConfirm().done(function(data) {
    console.log(data);  /*A*/
    //日時更新をしていれば、チェックボックスのチェックを外す。
    if(data=='true') {
        $('input:checkbox').prop('checked',false);
    }
})
.fail(function(data) {
    alert(data);

});
var setTimer;
function Autoprocess() {
var value=SimeConfirm();
    console.log(value);   /*B*/
    if (SimeConfirm()=='true') {
        //日次更新済。
        stopTimer();    

    }else{

        //日次更新していない。
        startTimer();           
    }
}

//開始
function startTimer() {
    setTimer=setInterval(function() {
            SeikEndcheck();
        }   ,60000);
}

//ストップ
function stopTimer() {
    clearInterval(setTimer);
}
Aの部分の　console.log(data);では、"false"と表示されますが、
Bの部分の　console.log(value);では、"Object {readyState: 1}"と表示されます。
"readyState: 1"を調べてみると、「sendメソッドでデータが送られていない。」とありました。
うまくreturnを受け取っていないように見えるのですが、
どうすればよろしいのでしょうか。
よろしくお願いします。
TensorFlowのインストール方法比較

|項目|公式の説明|感想|評価|
|:---:|:---:|:---:|:---:|
|Pip install|Install TensorFlow on your machine, possibly upgrading previously installed Python packages. May impact existing Python programs on your machine.|既存のPythonに影響を与えてしまう|X|
|Virtualenv install|Install TensorFlow in its own directory, not impacting any existing Python programs on your machine.|既存のPythonに影響は与えないがいちいち有効にするのめんどいし複数箇所で使用する場合もめんどい|△|
|Anaconda install|Install TensorFlow in its own environment for those running the Anaconda Python distribution. Does not impact existing Python programs on your machine.|既存のPythonに影響は与えないがいちいち有効にするのめんどいし複数箇所で使用する場合もめんどい|△|
|Docker install|Run TensorFlow in a Docker container isolated from all other programs on your machine.|隔離もされるし複数ディレクトリで使えるので楽|O|
|Installing from sources|Install TensorFlow by building a pip wheel that you then install using pip.|超絶めんどい|X|

僕的にオススメなのはDockerを使う方法です(✿╹◡╹)人(╹◡╹✿)

公式サイトURL
https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html
新卒2年目SEの備忘録 [SSRS キューブ まとめてみた]

#はじめに・・
「・・・。」

はい、初めて**SSRS**という単語を耳にしたときの反応です。
これまで、仕様書作成やJava・PHPなどしか見てこなかった私には
さっぱり何のことか分かりませんでした。

そんなド素人の備忘録として、
SSRS・キューブなどについて書き留めてみました。

#SQLServerReportingService(SSRS) 
まずは、今回学習した際に出てきたSSRSに関連する単語を簡単にご紹介。
[・SQLServer](https://ja.wikipedia.org/wiki/Microsoft_SQL_Server)
⇒Microsoft社が提供するデータベース。

[・SSRS](https://msdn.microsoft.com/ja-jp/library/ms159106(v=sql.120).aspx)
⇒SQLServerに付随した、レポートサービスの総称。
　レポートをアップロードするサーバーを指すこともしばしば。
　![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/123834/c5a0e48b-d55d-e1b0-f08b-e23f060696a7.png)

[・SSAS](http://www.novaview.jp/keywords/ssas.html)
⇒SQLServerに付随した、データ分析・集計に特化したソフトウェア。

[・レポートビルダー](https://technet.microsoft.com/ja-jp/library/dd207008(v=sql.105).aspx)
⇒SQLServerを利用した、レポートの作成が行えるソフトウェア。

・MDX
⇒多次元データベースクエリー言語。
　一般的なSQLとは少し異なり、**多次元**のデータベース専用のクエリーである。

#鬼門、MDXとは・・
先述した通り、MDXとは多次元データベースクエリー言語のことです。
クエリー言語の中でも、難解であり習得が困難という逸話も・・
MDXは、キューブを用いたレポート開発を行う際に利用します。

##キューブ・メジャー・ディメンション
簡単に、それぞれの関係性をまとめてみました。

以下のような、3つのテーブルを仮定します。
![キャプチャ1.PNG](https://qiita-image-store.s3.amazonaws.com/0/123834/319d7f88-aa3b-b715-757a-b5559c245eb0.png)
3つのテーブルを利用し、以下のような情報を抽出します。
この抽出されたデータ1つ1つがメジャーです。
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/123834/a2d11c3a-86f3-9b27-1718-321662b40a2d.png)
メジャーの集合（羽田空港利用者数（1日分））を
日別に見る切り口をディメンションといいます。
※情報の抽出方法が異なれば、国別や年代別に見ることも出来るので
　それもまたディメンションということが出来ます。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/123834/6d8e33c7-a8e9-b4aa-1f7c-2ebf88ebc9c8.png)

##キューブ作成方法
キューブを作成するには、SSASを利用します。
おおまかですが、作成の手順は以下の通りです。
①SSASで、使用データベースを指定する。
②データセット（メジャーの集合体）を作成する。
③ディメンションを作成する。
④②で作成したデータセットのディメンション属性を設定する。
⑤キューブを作成する。
⑥⑤で作成したキューブにデータセット、ディメンションを設定する。


簡単ではありますが、SSRS・キューブについてのまとめでした。
キューブの作成方法については、
学習にとどまっているため、実際に作成を行い理解を深めていきたいと思います。


★続けて、レポートを実際に作ってみました。
http://qiita.com/brc_kozawa/items/879c15c3a9b79a0c9897
Windowsのpsqlでパスワードを聞かれないためのメモ

#Windowsのpsqlでパスワードを聞かれないようにする
- パスワードを対話形式で聞かれないようにするには`pgpass.conf`を使う
- ここにファイルを保存する
  - `%APPDATA%\postgresql\pgpass.conf`
- 設定内容は`:`区切りで書く
  - `hostname:port:database:username:password`

#References
- [PostgreSQL 10.5文書 - 33.15. パスワードファイル](https://www.postgresql.jp/document/10/html/libpq-pgpass.html)
Electronのアプリ内部に配置されたファイルを実行する


色々なアプリを作るときに、Electronではnpmのモジュールが使えるのであまり困ることはないのだけれど、どうしても実行速度や作る時間の問題で、既存のexe等を使いたいときがある。

外部に配置したexeを指定することは、パスの指定諸々とてもめんどくさいので、アプリケーション内部に配置して実行できるかなと思って、exeファイルを`child_process`の`exec()`で動かしてみたらうまく実行できた。

安心して進めていたら、パッケージ化した後にどうにも動かなくなって困った。

ぐぐってみたら、パッケージングを行うときに`asar`形式でアーカイブしていたため、`exec()`や`spawn()`では動かないみたいだった。（参照「[Executing a script as a child_process.exec inside an asar archive #3512 - GitHub/electron](https://github.com/electron/electron/issues/3512)」、「[アプリケーションのパッケージ化 - GitHub/electron](https://github.com/electron/electron/blob/master/docs-translations/jp/tutorial/application-packaging.md)」）


▼ `execFile()`を使ったら動いた。

```
const remote = require('electron').remote;
const app = remote.app;

// アプリ内部のパスを取得する
const path:string = app.getAppPath();

console.log(path);

// ファイルを実行する
const exec = require('child_process').execFile;
exec( path + "/実行ファイルまでのパス", ["オプション"],
　　function(err:any, stdout:any, stderr:any){
  
 }
);
```
※ OSX El Capitan 10.11.5、Electron 1.2.1で試しました。

以上。
mysql Table 'performance_schema.session_variables' doesn't existのエラー

mysqlをアップデートしたところ
　`mysql Table 'performance_schema.session_variables' doesn't exist`
のエラーが出るようになったので、そのエラーの解決方法

以下を実行でエラーがなくなりました。

```
mysql_upgrade -u root -p --force

mysql.server restart
```

http://sweep3092.hatenablog.com/entry/2015/11/28/180103
lsが勝手にファイル名をクオートしてウザいのでaliasを見なおした

最近 `coreutils` をバージョンアップしたら `gnubin/ls` が勝手にファイル名をクオートして出力するようになって、インデント崩れて見づらいのでファイル名はそのまま出力されるよう `ls` の `alias` を２０年ぶりくらいに変更することにした。

勝手クオートの抑制は `-N` オプションを付ければ OK だが、ついでにこれも長年気になっていた `--time-style` オプションも常用することにしよう。
ただし、`bashrc` とかは github で管理してて色んな環境で使いまわしてて環境によってエラーが出るのは困るので、ついでにスペックをチェックしつつ最適な `alias` が設定されるようにしておこう。

# で出来たのがこれ

```bash:~/.bashrc
# 環境に合わせて出来るだけ好みのls出力にする
if ls -d -N >/dev/null 2>&1; then
  # 最近の gnubin/ls が勝手にファイル名をクオート出力してくるのを抑止
  alias ls='ls --color --time-style +%Y-%m-%d\ %H:%M:%S.%3N -N'
elif ls -d --time-style +%Y-%m-%d\ %H:%M:%S.%3N >/dev/null 2>&1; then
  # デフォの時間表示は見難いのでISOぽくする(full-iso,long-iso,isoは帯に短し襷に長しなのでカスタム)
  alias ls='ls --color --time-style +%Y-%m-%d\ %H:%M:%S.%3N'
elif ls -d --color >/dev/null 2>&1; then
  # せめて色だけでも…
  alias ls='ls --color'
fi
```

# BEFORE/AFTER
BEFORE (`ls --color`のみ)
<img width="392" alt="スクリーンショット 2016-06-10 10.36.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/18726/48c7e654-cfd9-3b48-3102-588ac4f33902.png">

AFTER (`ls --color --time-style +%Y-%m-%d\ %H:%M:%S.%3N -N`)
<img width="392" alt="スクリーンショット 2016-06-10 10.37.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/18726/2bda2100-7eb7-ba21-94c9-52162cd23f61.png">

うむ、いい感じ😄
【WordPress】固定ページの親子関係をサイドバーに表示

#【WordPress】固定ページの親子関係をサイドバーに表示

***固定ページの親子関係を利用するとコンテンツに階層構造を持たせることが出来る。
こちらの使い方をメモ。***

今回はこちらの右サイドバーの赤枠部分に親子関係を持った固定ページの目次的なのを表示したい。
![サイドメニュー前表示_赤枠.png](https://qiita-image-store.s3.amazonaws.com/0/97158/93f23370-7cf9-d796-b294-214f9b89a2c5.png)



・まず親ページを作成。
![親ページ (1).png](https://qiita-image-store.s3.amazonaws.com/0/97158/625a7610-f820-5aca-d53f-03ea9fdd922f.png)
サイドバー表示時の挙動を考慮して順序を１００と設定。

・次に子ページを作成。これを長男とする。
![子ページ長男 (1).png](https://qiita-image-store.s3.amazonaws.com/0/97158/ed78d959-6360-8b5b-728c-4be5d07b8205.png)
こちらは順序を110とする。

・次も子ページを作成。これを次男とする。
![子ページ次男 (1).png](https://qiita-image-![サイドバー表示.png](https://qiita-image-store.s3.amazonaws.com/0/97158/ed9befc4-d6e9-9679-0fa0-6756a1a5d323.png)
store.s3.amazonaws.com/0/97158/622d2dd7-3476-8722-be00-1cc36cf776d6.png)
こちらは順序を120とする。

・最後に孫ページを作成。
![孫ページ (1).png](https://qiita-image-store.s3.amazonaws.com/0/97158/b7bd0a84-e233-edb4-7f03-5e5fe8b49dbd.png)
こちらは順序を111とした。

・次にサイドバーの設定をする。
管理メニューの外観から、ウィジェットを選択。
![サイドバー (1).png](https://qiita-image-store.s3.amazonaws.com/0/97158/24b2acb1-7cba-4133-d560-6aec2f3ef255.png)
ウィジェットの固定ページをサイドバーに持って行き、並び順を「ページ順序」に設定し、保存。

・サイトを表示するとサイドバーに先ほど設定した固定ページの親子関係が出現。
親子関係に従ってインデントされてますね！
![サイドバー表示赤枠.png](https://qiita-image-store.s3.amazonaws.com/0/97158/a8673627-f0fc-ea72-a7ab-20d7a4d7507f.png)

並び順は投稿時に指定した「順序」に従っています。
mysql max_allowed_packetを変更する

### max_allowed_packetの確認方法

まず現状の値を確認します。

```mysql
mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.04 sec)
```

`4194304B`
つまり`4MB`になっていることを確認しました。

これを最大の`16MB`にします。


### max_allowed_packetの値を変更する方法

その前に、
`my.cnf` というmysqlの設定ファイルに書く必要があるので、
そのファイルの場所を確認します。

```zsh
$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
```

これらのファイルが存在する場合はそのファイルに。
ない場合は、このパスのどれかに作成。

（私の場合はなかったので以下の場所に作成しました。）

```zsh
$ touch ~/.my.cnf
```

#### my.cnfにmax_allowed_packetの値を設定

```:my.cnf
[mysqld]
max_allowed_packet=16MB
```

#### mysqlを再起動

mysqlを再起動します。

```zsh
$ mysql.server restart
```

####　変更されているか確認

```mysql
mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)
```

変更されていることを確認しました。
めざせNode.jsライブラリマスター （7）exceljs

#【ライブラリ説明】
　Excel操作できる

#【プログラム】
```js:exceljs.js
var Excel = require("exceljs");

var workbook = new Excel.Workbook();
var worksheet = workbook.addWorksheet("My Sheet");

worksheet.columns = [
    // セル入力値、キー、セル幅
    { header: 'Id', key: 'id', width: 10 },
    { header: 'Name', key: 'name', width: 32 },
    { header: 'D.O.B.', key: 'DOB', width: 10 }
];

// ３通りの列取得方法
var idCol = worksheet.getColumn('id');
var nameCol = worksheet.getColumn('B');
var dobCol = worksheet.getColumn(3);

// C1にDate of Birth、C2にA.K.A. D.O.B.
dobCol.header = ['Date of Birth', 'A.K.A. D.O.B.'];

// セル幅指定
dobCol.width = 50;

// 直接セル名を指定して値を代入
worksheet.getCell('C3').value = "555";

// 文字の色を変える
worksheet.getCell('C2').font = {color: { argb: 'FF00FF00' } };

// セルを塗りつぶす（塗りつぶせないセルもある・・・　なぜ？）
worksheet.getCell('C3').fill = {
    type: 'pattern',
    pattern:'solid',
    fgColor:{argb:'12345678'}
};

workbook.xlsx.writeFile('sample.xlsx');
```

#【結果】
<img width="549" alt="excel.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/d4d1e3d8-c22e-cad8-1d9c-8e62e3527321.png">

#【参考サイト】
　[npm](https://www.npmjs.com/package/exceljs)
　[github](https://github.com/guyonroche/exceljs)
めざせpythonライブラリマスター （51）pyautogui

#【ライブラリ説明】
　キーボードとマウスをプログラムで操作

#【準備】
　`pip install pillow`
　　を事前に実行

#【プログラム】
```py:pyautogui.py
# -*- coding: utf-8 -*-

import pyautogui

screenWidth, screenHeight = pyautogui.size()
currentMouseX, currentMouseY = pyautogui.position()
pyautogui.moveTo(50, 270)
pyautogui.click()
pyautogui.typewrite('print "Hello world!"', interval=0.25)
```

#【結果】
　動画を撮りましたがTwitterにアップできなかったのでコードを掲載します。

```py:output.py
# -*- coding: utf-8 -*-

import pyautogui

screenWidth, screenHeight = pyautogui.size()
currentMouseX, currentMouseY = pyautogui.position()
pyautogui.moveTo(50, 270)
pyautogui.click()
pyautogui.typewrite('print "Hello world!"', interval=0.25)
print "Hello world!"
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/PyAutoGUI/0.9.33)
　[github](https://github.com/asweigart/pyautogui)
　[document](https://pyautogui.readthedocs.io/en/latest/index.html)
Yosemite で rbenv install 2.3.1 でエラーになった

# rbenv で ruby 2.3.1 をインストールしようとしたらエラーになった

```
% rbenv install 2.3.1 
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
error: failed to download ruby-2.3.1.tar.bz2

BUILD FAILED (OS X 10.10.5 using ruby-build 20160426-33-g3304f96)

Inspect or clean up the working tree at /var/folders/01/f7zbq8wn5xdbn4r4x0r_541h0000gn/T/ruby-build.20160610095331.2317
Results logged to /var/folders/01/f7zbq8wn5xdbn4r4x0r_541h0000gn/T/ruby-build.20160610095331.2317.log

Last 10 log lines:
/var/folders/01/f7zbq8wn5xdbn4r4x0r_541h0000gn/T/ruby-build.20160610095331.2317 /var/folders
curl: (56) SSLRead() return error -9806

```

# curlでエラーになってるみたい

curl　を　brew　でインストール

```
% brew install curl
==> Downloading https://homebrew.bintray.com/bottles/curl-7.49.0.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring curl-7.49.0.yosemite.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/curl/lib
    CPPFLAGS: -I/usr/local/opt/curl/include

==> Summary
🍺  /usr/local/Cellar/curl/7.49.0: 364 files, 2.5M

```

#curl　のバージョンを比較してみた


```
% /usr/bin/curl --version
curl 7.43.0 (x86_64-apple-darwin14.0) libcurl/7.43.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets 

```

```
% /usr/local/opt/curl/bin/curl --version
curl 7.49.0 (x86_64-apple-darwin14.5.0) libcurl/7.49.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets 
```

##　バージョンが違う・・・

リンク先を変更する

```
% sudo mv /usr/bin/curl /usr/bin/curl_
% sudo ln -s /usr/local/opt/curl/bin/curl /usr/bin/curl
```

# 再度インストール

```
% rbenv install 2.3.1    
Downloading ruby-2.3.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2
Installing ruby-2.3.1...
Installed ruby-2.3.1 to /Users/ansapo/.rbenv/versions/2.3.1
```

わ～い
gmaps4railsの地図の拡大率を設定する

#初めに
- GoogleMapを表示するためにgmaps4railsを利用していた
- そのままだと拡大しすぎで一目で場所がわからなかったため、zoom率の設定を行ったのでそのメモになります。

#やったこと
viewに下記を追加しました。

```show.html.erb
        <div id="map" style='width: 100%; height: 200px;'></div>
        <script type="text/javascript">
            handler = Gmaps.build('Google');
            handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
              markers = handler.addMarkers(<%=raw @hash.to_json %>);
              handler.bounds.extendWith(markers);
              handler.fitMapToBounds();

              //追記ここから
              handler.getMap().setZoom(15);
              //追記ここまで

            });
        </script>
```

handler.getMap().setZoom(拡大率)を追記しました。
拡大率の数字が大きければ大きいほどズームが強くなり（狭い範囲が表示され）、
小さければ小さいほどズームが弱くなります（広い範囲が表示されます）。

# 参考資料
こちらのページを参考にしました。

[how to set a zoom level using Gmap4rails?](http://stackoverflow.com/questions/19954579/how-to-set-a-zoom-level-using-gmap4rails)
Oracle SQL Developerで時刻を表示する

<img width="116" alt="スクリーンショット 2016-06-08 9.32.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/a72247c4-39c7-5d49-616c-8f032913b05f.png">
Oracle SQL Developerで日付までではなく時刻まで表示する方法についてです。Mac版です。

デフォルトだと日付型のカラムは日付までしか表示されません。
<img width="91" alt="スクリーンショット 2016-06-08 16.09.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/056e8865-ddef-958c-c3be-f39375c903e3.png">

時刻の部分まで表示するにはどうすればいいのか調べてみると、だいたい以下の情報がヒットします。

```
メニューから ツール > プリファレンス を選び、ダイアログを開く。
左の一覧から データベース > NLS を選ぶ。
```

ただ、メニューに「ツール」というものはありません。代わりに以下の手順で変更します。

まずPreferencesをクリックします。
<img width="253" alt="スクリーンショット 2016-06-08 16.09.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/8199b9a2-6433-d1a0-86ed-3fc77b865bef.png">

するとこんなのが出てきます。で、日付書式が`YYYY-MM-DD`になっていると思います。
<img width="861" alt="スクリーンショット 2016-06-08 16.09.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/25872d98-d81f-ce64-3fcd-260fa1a7a5e6.png">

これを例えば'YYYY-MM-DD HH24:MI:SS'にしてOKをクリックします。
<img width="861" alt="スクリーンショット 2016-06-08 16.13.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/3c5a5e83-bfca-f981-4c69-f6f171e068ba.png">

これで時刻まで表示されます。
<img width="140" alt="スクリーンショット 2016-06-08 15.54.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/df3d36d9-cab7-b573-d1c5-177e9a820910.png">

ちなみにこの書式についてですが[こちら](http://www.shift-the-oracle.com/sql/datetime-format-element.html)の記事に書かれているものが使えるようです。
今回使用した'YYYY-MM-DD HH24:MI:SS'の場合は

```
YYYY＝4桁の西暦
MM＝月を2桁で表す（00～12）
DD＝日にちを2桁で表す (01～31)
HH24＝24時間表記で時間を表す（00〜24）
MI＝分を表す（00～59）
SS＝秒を表す（00〜59）
```
となります。
PivotalTrackerPr というgemをつくってみました

新しいプロジェクトでPRを出すときに、PivotalTrackerのリンクとタイトルを入れるルールがあります。
リンクだけなら一回のコピペでよいが、タイトルはもう一回しないといけないので、めんどい。

というわけで、gemを作りました。

## gemの実装内容
- `git`のブランチ名に数値がある時、それを`PivotalTracker`のストリーIDとみなす
- ストリーIDがある場合は、`PivotalTracker`のAPIを呼び出してストリー内容を取得する
- 指定の内容で`hub`コマンド経由して`PullRequest`を作成する

イメージ

![PullRequest command](https://raw.github.com/wiki/blueplanet/pivotal_tracker_pr/images/pt_pr_cmd.png)
![PullRequest github](https://raw.github.com/wiki/blueplanet/pivotal_tracker_pr/images/pt_pr_github.png)

## 使い方など
`github`のREADMEに書いているので、興味がある方はぜひご意見を。

https://github.com/blueplanet/pivotal_tracker_pr
Macでgitを利用した開発する際にやっておきたい準備


ここではMac(OSX)環境にて、コード管理ツールにgitを利用した開発を行っていく上で準備しておいた方がいいことを記載していきます。

## 対象・前提

- 実際に開発するプロジェクトによって必要なものは違ってくると思うので共通的に入れておいた方がいいものをピックアップしています。
- 新卒社員にとりあえずこれだけはやっておくといいよ！というための資料になります。
- シェルはbashを想定しています。

# 目次

- 
[Homebrewのインストール](Homebrewのインストール)
- [.bashrcのパスを通す](.bash_profileに.bashrcのパスを通す)
- [ひとまず入れておきたいコマンド](ひとまず入れておきたいコマンド)
- [`git config --global`の実施](`git config --global`の実施)
- [.bashrcのカスタマイズ](.bashrcのカスタマイズ)
- [SourceTreeのインストール](SourceTreeのインストール)

## Homebrewのインストール

[公式サイト](http://brew.sh/index_ja.html)に書いてある通りに実施。

## .bashrcのパスを通す

Macではデフォルトでは.bashrcにパスが通っていないので.bashrcにパスを通します。
.bashrcは設定を記載するのによく使うのでやっておくことをオススメします。

~/.bash_profileに以下を追記します

```bash:.bash_profile
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
```

## ひとまず入れておきたいコマンド

各言語によって入れるものが違うと思いますが、gitを利用して開発する上であると便利なコマンドは以下です

- [bash-completion](bash-completion)
- [git](git)

### bash-completion

bash-completionはbashでよく使うコマンドの補完をサポートするツールです

```sh:インストール
brew install bash-completion
```

インストールが完了したら.bashrcに以下を追記します

```bash:.bashrc
#for bash_completion
if [ -f $(brew --prefix)/etc/bash_completion ]; then
  source $(brew --prefix)/etc/bash_completion
fi
```

### git

gitはデフォルトでインストールされていますが、あえてbrewで入れることをお勧めします。
brewで入れることで以下の恩恵を受けることができます。

- **gitの補完が効くようになる(先にbash-completionを入れておくこと)**
- 最新のgitが利用できる

この補完がきくようになることがbrewでgitを入れる最大の理由です。

```bash:インストール
brew install git
```

## `git config --global`の実施

gitを利用する上での **名前** と **email** を設定します。
この値はコミット時の情報に使われます。

```bash:設定
# 名前の設定
git config --global user.name 名前
# emailの設定
# ここはGithub等のサービスを利用している場合は
# そのアカウントのメールアドレスを設定することをお勧めします
# (Github側でemailを用いてマッピングするため)
git config --global user.email メールアドレス
```

## .bashrcのカスタマイズ

以下を行っています。

- lsコマンドのカラー化
- シェルにgitのブランチ名を表示

```bash:.bashrc
#for bash_completion
if [ -f $(brew --prefix)/etc/bash_completion ]; then
  source $(brew --prefix)/etc/bash_completion
fi

# ls color
alias ls='ls -G'

# git ps1
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[37m\][\[\033[36m\]\u\[\033[37m\]@\h \[\033[32m\]\W\[\033[37m\]]\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
```

こんな感じになります。(※黒背景や透けているのは別途設定したものになります)
![shell.gif](https://qiita-image-store.s3.amazonaws.com/0/56178/4b247b04-9536-7ae5-5147-4e8077cf9728.gif "shell.gif")

## SourceTreeのインストール

[SourceTree](https://www.sourcetreeapp.com/)はgitのGUIクライアントです。
とても使いやすいのでインストールをしておくことをお勧めします。

# まとめ

ここでやったのは **最低限** の準備になります。
当然各言語、各開発に合わせて他のツールやコマンドをインストールするかと思います。
これ以降はプロジェクトの方針に従いツールのインストール等を進めてください。

## 追記

全く必須ではないですが、ターミナルの背景を黒にして透けさせるとカッコイイのでお勧めです₍₍ ᕕ(´ ω` )ᕗ⁾⁾
iOSメモ UIImageView 比率合わせ

typedef enum {
   UIViewContentModeScaleToFill,      // デフォルト。UIImageViewに最大限広げる
   UIViewContentModeScaleAspectFit,   // 画像のaspect比を維持し、ちょうどはいるようにする
   UIViewContentModeScaleAspectFill,  // 画像のaspect比を維持し、最大限広げる（はみ出した分はカット）
   UIViewContentModeRedraw,           //like UIViewContentModeScaleToFill
   UIViewContentModeCenter,           //画像サイズをそのままに、真ん中を表示
   UIViewContentModeTop,              //上位置に表示
   UIViewContentModeBottom,           //下位置に表示
   UIViewContentModeLeft,             //左位置に表示
   UIViewContentModeRight,            //右位置に表示
   UIViewContentModeTopLeft,          //左上位置に表示
   UIViewContentModeTopRight,         //右上位置に表示
   UIViewContentModeBottomLeft,       //左下位置に表示
   UIViewContentModeBottomRight,      //右下位置に表示
} UIViewContentMode;




＊＊サンプル＊＊
- (void)viewDidLoad {
    [super viewDidLoad];
    self.userIconImageView = [[UIImageView alloc] initWithImage:self.userIconImage];
    self.userIconImageView.frame = CGRectMake(self.sideWidth + 10, self.navigationController.navigationBar.frame.size.height
                                              + [[UIApplication sharedApplication] statusBarFrame].size.height + 30, 65, 65);
    self.userIconImageView.userInteractionEnabled = YES;
    self.userIconImageView.tag = 1;
    self.userIconImageView.contentMode = UIViewContentModeScaleAspectFill;
    self.userIconImageView.clipsToBounds = YES;        //写真をアイコンの形にする
    self.userIconImageView.layer.cornerRadius = 32.5;
    [self.view addSubview:self.userIconImageView];
}
Qiita > トップページの記事一覧の展開を解除する方法 > 左のグレーをクリック / ダブルクリック

## 背景

Qiitaのトップページの投稿一覧においては下矢印をクリックすると記事の内容を展開する。
その展開を戻すには、スクロールをして記事の最後まで移動してから上矢印をクリックしないといけない。

間違って展開した記事の展開を解除するのにスクロールしないといけないというのが使いづらいと思っていたが、別の方法を見つけた。

## 方法1

以下のように展開した記事の左端にグレーの領域ができる。このグレーの領域上にマウスカーソルを持っていけば右矢印が表示される。その右矢印をクリックすれば展開が解除される。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c9ad671e-d4bd-5e0f-1a89-79695a95fad7.png)

展開を解除するコンポーネント（ボタン）の位置は展開をした位置に近接している方がUIとしてはいいと思う。展開した記事の下にある上矢印よりはこの右矢印の方が近いというので、多少は使いやすいだろうか。


## 方法2

上の方法を試している中、もっと簡単な方法を見つけた。

記事をダブルクリックしたら展開を解除できるようだ。

これだと展開した場所で展開解除ができるので使いやすい。
Zybo > Chronicles blog 38 > Interrupt from PL > Vivado上の作業 / XSDK上の作業 / Interrupt設定

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-38-Answering-a-question/ba-p/479978

> In this example, I show how to use the private interrupt. However the general concept is the same regardless of interrupt used. For this example, I will be using an EMIO GPIO pin connected via the PL, looped back and connected to the processor’s interrupt pin. A simple software program can then demonstrate how an interrupt from the PL works.

### Vivado上の作業

> The first stage of this example is to enable the interrupts between the PL and PS and to enable the specific interrupt you wish to use.

blogの画像においては Re-customize IP > Interruptにて PL-PS Interrupt > Core0_nRQ にチェックをつけているようだ。

> The second step is to enable a single-bit GPIO using the EMIO option.

Re-customize IP > MIO Configuration > GPIO > EMIO GPIO (Width) を1にしている。

### XSDK上の作業

> 1. Declare the following header files: Platform.h, xparameters.h, Xscugic.h, Xil_Exceptions.h and xgpio.h. These header files will provide functions and macros that enable us to generate the example.
2. Define the generic interrupt controller and GPIO device ID and interrupt numbers along with the FPGA interrupt and pin numbers for the EMIO and push-button switch.
3. Declare and write a number of required functions:

<font color=red>xgpio.hはないのでxgpiops.hを代わりにincludeする。</font>


### Interruptの設定

> When setting up an interrupt in the Zynq we need to do the following things:

> 1. Initialize the Interrupt controller.
1. Connect the exception ID to the associated handler so that when an event occurs it can be run correctly.
1. Connect the FPGA interrupt to the generic interrupt controller. This requires the pre-defined interrupt ID, the call-back handler (which is defined to identify the source of the interrupt), and the interrupt service routine to be run when the interrupt occurs.
1. Enable the interrupt on the interrupt controller.
1. Enable interrupts on the processor.

短いサンプルコードがあるようなので時間が確保できた時に実施してみよう。
技術英語 > Optimize-away the "-i" option

[いまさらgrepが10倍高速化したのはなぜか @ はむかず!](http://hamukazu.com/2014/02/24/why-grep-can-be-accelerated/)
を読んでいる中、記載のgithub内のコメント

>     Optimize-away the "-i" option, when possible, converting each
>     candidate alpha, C, in the regexp to [Cc].

の「Optimize-away」が気になった。

<hr>
     
http://ejje.weblio.jp/content/optimize+away
> may complain, and some C compilers will <font color=red>optimize away</font> the string.
> が警告を出したり、 C コンパイラによっては最適化により文字列を削除する

<hr>

grepのコミットコメントの「Optimize-away the "-i" option」は一見「最適化して"-i" optionを取り除いた」とも英訳できそうだが、実際には「最適化して"-i" optionを高速化した」という意味だと見られる。

awayでなく、「way below normal(標準よりずっと下)」などに使われる way を使って、Optimize-way the "-i" optionであれば意味が通じるが、そういうことだろうか。
しかしながら、「optimize-way」の実例は検索しても見つかっていない。

未消化。
Slackの招待メールの人数制限を非公開APIを使って調べてみた


Slackには招待メールを送れる数に地味に制限があるようで、
しかしながら軽く調べてみても、明確な数値の記載がないみたいだったので調べてみた。

https://get.slack.help/hc/en-us/articles/201330256#invitation_limits
ちなみに、招待を送っているけどあんまり承認されてない時に制限をかけるら？しい。

※ 雑に調べたので信憑性に欠けるかもしれません

#非公式API
https://api.slack.com/methods に載ってないですが、招待メールを送るAPIがあるようです。
`https://TEAM_NAME.slack.com/api/users.admin.invite?email=EMAIL&token=TOKEN&set_active=true`
TOKENはadmin権限のユーザーのtokenが必要なようです。

参照 : http://qiita.com/hiconyan/items/634df8b5fb2392fc90cd

#検証コード
雑な感じですが、とりあえず1000回試してみるコード

```ruby:slack.rb
require 'faraday'
require 'json'

token = 'set-your-admin-user-token'
team_name = 'set-your-team-name'

1000.times do |i|
  conn = Faraday.new(url: "https://#{team_name}.slack.com/api/users.admin.invite")
  response = conn.get do |req|
    req.params[:email] = "your.email+#{i + 1}@hogehoge.com"
    req.params[:token] = token
    req.params[:set_active] = true
  end
  json = JSON.parse(response.body)
  next  puts "#{i + 1} ok" if json['ok']
  break puts "#{i + 1} #{json['error']}"
end
```

```
99 ok
100 ok
101 invite_limit_reached
```
101回目でエラーが。

試しに違うチームを作ってもう一度やってみる

```
99 ok
100 ok
101 invite_limit_reached
```
こちらも101回目でエラー

#結果
100人までは大丈夫みたいでした。

ちなみに制限に達した場合、過去の招待をrevokeしたとしても制限が解除されるわけではないっぽいので、注意が必要です。
制限を解除するにはslackのサポートに問い合わせる必要があるようです。
山陰ITレーダーの情報をiOSのカレンダーアプリに自動更新させながら表示させる方法

# 山陰ITレーダーとは

島根県のIT業界の動向がわかるニュースサイトです。

https://medium.com/sanin-it-radar
※ URLが変更になりました。

Googleカレンダーを使ってイベントを表示しているので、iOSのカレンダーアプリにイベントを表示できるよう設定する手順を以下にまとめます。

# 設定画面の表示

カレンダーの表示設定をするために、以下の手順で操作します。

## 「設定」を開く

ホーム画面で「設定」をタップします。

<img width="320" alt="IMG_2962.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/af3b586f-f719-a682-5348-b422ef803235.png">

## 「メール/連絡先/カレンダー」を開く

「メール/連絡先/カレン...」をタップします。

<img width="320" alt="IMG_2954.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/c87458c0-c18c-c000-e77a-648c0cf787af.png">

## 「アカウントを追加」を開く

「アカウントを追加」をタップします。

<img width="320" alt="IMG_2955.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/65637d6d-5386-2857-63f6-f254cf53fb2e.png">

## 「その他」を選択

「その他」をタップします。

<img width="320" alt="IMG_2956.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/700fb93a-16b6-f8c1-d717-5ad87338e9ef.png">

## 「カレンダー」の「照会するカレンダーを追加」を選択

「カレンダー」グループの中にある「照会するカレンダーを追加」をタップします。

<img width="320" alt="IMG_2957.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/fbf62392-2b48-6cc8-eb20-a9174f5b0550.png">

ここで表示された画面で、サーバ上にあるicsファイルを指定します。

<img width="320" alt="IMG_2958.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/cf394e95-0d74-7741-00fa-a25c4d7354b6.png">

# 照会するサーバを設定

サーバの入力項目で「example.com/cal.ics」と薄く表示されている部分に、以下のURLをコピペで入力します。

https://calendar.google.com/calendar/ical/farend.jp_1s7rr5vdpdq1gggeuna1p3b0k4%40group.calendar.google.com/public/basic.ics

入力したら「次へ」をタップします。

<img width="320" alt="IMG_2959.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/6548ea6d-9a13-cce1-00d3-1e63ea5858f7.png">

## 保存

「保存」をタップします。

<img width="320" alt="IMG_2960.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/f0c57b9e-0719-0587-2d35-aea9292f9ab6.png">

# 確認

カレンダーアプリを表示し、山陰ITイベントカレンダーの内容が反映されていることを確認します。

<img width="320" alt="IMG_2961.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/114240/4a58e3d1-e864-e5d7-3a37-0179a04f0d69.png">
Raspberry PiをVPNGateプロクシにする(Wifi APルータ)

## 概要
- <font color='red'>**手動で** </font>VPNGateへ接続しないといけない。

- 以下の組み合わせ
    - [\[メモ\] Raspberry Pi 3で、Wi-Fi アクセスポイントルータ](http://qiita.com/mt08/items/f2e4f9d3b1ed00849e23)
        - openvpnでつないだら、iptablesの設定を `eth0` から `tun0`へ。切ったら`eth0`へ戻す
    - [\[メモ\] (らずぱい)VPN Gateへ簡単接続スクリプト (OpenVPN使用)](http://qiita.com/mt08/items/9f357be12c126d8976b3)
        - VPNGateへ接続

## 環境
- Raspberry Pi 3
- (追記) Raspberry Pi 2 + USB WiFiドングル(RTL8188CUS)<br>=>`hostapd`の差し替えと`hostapd.conf`の書き換え [その他](http://qiita.com/mt08/items/f2e4f9d3b1ed00849e23#%E3%81%9D%E3%81%AE%E4%BB%96)参照

## 手順
1. WifiAPを作る。[\[メモ\] Raspberry Pi 3で、Wi-Fi アクセスポイントルータ](http://qiita.com/mt08/items/f2e4f9d3b1ed00849e23)
2. `sudo apt-get install openvpn -y`
2. ラズパイにログイン、スクリプト取得・起動。(セッションが切れてもいいように、`byobu`とか使うといいかも)

    ```txt:コマンドラインにこぴぺ(初回)
wget https://raw.githubusercontent.com/mt08xx/vgc/master/vgc -O ./vgc
wget https://raw.githubusercontent.com/mt08xx/vgc/master/chif -O ./chif
chmod +x vgc chif
./chif tun0; ./vgc update; ./chif eth0
```

    ```txt:コマンドラインにこぴぺ(2回目以降)
./chif tun0; ./vgc update; ./chif eth0
```
3. サーバ一覧が出てくるので、よさそうなやつの番号を覚えて、`q`を押して、番号入力\[Enter\]キー。
4. VPNGateへうまくつながったら、WindowsとかスマホでらずぱいのAPに接続
5. http://ifconfig.me などでIP確認 (`% curl ifconfig.me`)
6. Ctrl+C で切断

## その他
- `chif`を`vgc`に取り込もうかと..
- PATHの通ったとこにコマンドをおくのがいいですね.
ビギナープログラマーがやるべきたった１つの事

# あいさつ  
みなさま、こんにちは。

超ビギナープログラマーです。

２０１６年６月、まずは自分の身近なところから始めようと、iOS,MacOSの開発言語である「Swift」を使ってプログラミング言語の学習に取り組み始めました。

今回は、超ビギナーの私が気づいた「初心者特有の落とし穴」を回避して、楽しくプログラミングを学習するコツについてお話したいと思います。

## :beginner: どうやって学習をスタートさせるか？
今までプログラミングに触れてこなかった人間にとっては、初心者向けの書籍やウェブの情報が頼りです。

そこで、プログラミングの初心者向けの書籍やウェブサイト等でよく見かけるのが、【プログラミングはとにかく実際に打ち込んで覚えるんだ！】という主旨の教え。

確かに、自分の手を動かさないと覚えられないだろう、と初心者にも想像がつきますし、納得できます。

## :warning: 初心者特有の落とし穴

ですが、上記の教えの通りプログラミングを打ち込みながら学習してみると、

思った以上にツライ！

*「またエラー！」*
*「ダブルクォーツってどこにあるんだ！」*
*「また同じようなミスをしてる！」*
*「めんどくさくなってきた...寝よう」*

と、このような感じでどんどん辛くなって、やる気が無くなってきます。

## :bulb: ビギナープログラマーがやるべきたった１つの事
では、どうしたらいいのか？


私が思うに、始めたばかりの初心者に対して、「プログラミングは実際に打ち込んで覚えるんだ！」と教えるのはまだ少し早いのではないでしょうか。

その前に伝えるべき事は、
**【プログラミングを学習したいなら、その前にタイピングの練習を終わらせろ!!】**
です。

全般的にタイピングが得意ではない人はもちろん、ローマ字入力が得意な人でもプログラミングでは日常生活では使わない文字列や記号を使います。
また、日本語のタイピングに慣れていると、単語間でスペースを空ける習慣がないため、そこでミスが発生しやすいです。

　*押したいキーを探している内に・・・*
　*エラーの原因になっているスペースの空け忘れを探している内に・・・*
どんどんやる気が無くなっていくのです。

ということで、ビギナーのプログラミング学習において大切なのは、【タイピングによって生じるストレスを無くす】ことなのです。

##**まとめ** :pushpin: 
もしも初心者のあなたが、プログラミングの学習をするのが嫌になったら、
まずは*【タイピングの不慣れさが原因じゃないか？】*と考えてみてください。

もしも思い当たるなら、タイピングソフトを使って「英文入力、記号入力、(数字入力)」についての訓練をやってみましょう！

そして、タイピングに関して自信が持てた時、再びプログラミングの学習に復帰してみてください。

どこにどのキーがあるかを把握したあなたからは、ストレスが消え去り、
*「実際に打ち込まなくちゃいけない面倒さ」では無く、*
*「実際に打ち込んで体感するプログラミングの面白さ」に目を向ける事ができるようになっているはずです。*


初心者の同志の方々、一緒にがんばりましょう！


ここまで読んでいただきまして、ありがとうございます。

### :paperclip: 備考
ちなみに私は[Typist](https://itunes.apple.com/jp/app/taipisuto/id415166115?mt=12)というMac用のアプリケーションでタイピングを練習しました。
中でも、「英文標準ドリル」と「テンキー入力コース」(テンキーは使わず、上部の数字キーを使う)がオススメで、網羅的にタイピングの練習ができます。
AGAL入門 #5 : StarlingでAGAL2、AGAL3のコードを動かす

Starlingでバージョン２以降のAGALコードを動かしたい場合、そのまま記述するとエラーになってしまう事があります。動かすための設定をメモがてら投稿しておきます。

<img width="515" alt="err" src="https://qiita-image-store.s3.amazonaws.com/0/8302/0477a369-295b-b900-4118-570a0fd5c409.png">
_エラーの一例_

#Starling2の場合

##AGALバージョン指定してAssembleする

Starling2.0でカスタムフィルタなりカスタムスタイルなりを作る場合、Programクラスにて頂点および断片シェーダーのAGALコードをバイナリコードに変換している箇所があります。ここの第三引数がAGALのバージョン数なので、2を指定するとうまく動くようになります。簡単ですね。

```sample.as
return Program.fromSource(vertexShader, fragmentShader, 2);
```

しかしながら、レジスタの範囲をAGAL3範囲まで利用すると、上記でバージョン３を指定してもエラーになってしまいます。処理をAGALMiniAssemblerまで追っていくと、どうもバージョン3指定であっても、バージョン2のレジスタ数でエラーチェックがなされている模様です。回避策として、上記を下記のように書き換えます。

```sample.as
if(!_assembler) {
  _assembler = new AGALMiniAssembler();
}
return new Program(
  _assembler.assemble(Context3DProgramType.VERTEX, vertexShader, 3, true),
  _assembler.assemble(Context3DProgramType.FRAGMENT, fragmentShader, 3, true)
);
```

AGALMiniAssemblerのassembleメソッドの第三引数が、レジスタ数チェックを1024まで緩くする引数となっています。厳密なレジスタ数をみてくれなくなりますが、とりあえず動くようにはなります。

#Starling1.xの場合

FragmentFilterのassembleAgalおよびRenderSupport.assembleAgalあたりで同様にAGALMiniAssemblerでのAssembleをやっているようですが、バージョン指定ができません。

https://github.com/Gamua/Starling-Framework/blob/v1.8.x/starling/src/starling/filters/FragmentFilter.as#L516

https://github.com/Gamua/Starling-Framework/blob/v1.8.x/starling/src/starling/core/RenderSupport.as#L688

ここはStarling側のソースを書き換えてやるしかない気がします。

#Stage3Dのプロファイルを正しく選択する

それでもうまく動かない場合、Stage3Dのプロファイル指定が利用したいAGALとずれているのかもしれません。エラー文言が下記のような感じになっていないでしょうか。

```error.txt
Error: Error #3725: The requested AGAL version (3) is not valid under the Context3D profile. For example AGAL version 2 requires standard profile.
	at flash.display3D::Program3D/upload()
```

Starling初期化後(メインクラスのインスタンス化後)であれば、下記のようにして現在のProfile名が確認できます。

```sample.as
trace("Stage3D profile:", _starling.profile);
```

Starling２ではProfileを指定しない限り、高機能な順でProfileを利用しようとします。よって開発環境によっては、同じコードでもAGAL2や3のコードが動かなくなる場合があるわけです。

 * **Context3DProfile.STANDARD_EXTENDED** ... 最新スマホとかでつかえる AGAL3用
 * **Context3DProfile.STANDARD** ... AGAL2用
 * **Context3DProfile.STANDARD_CONSTRAINED** ... AGAL2用 standardの制限版 2015年初頭でiOSの90%ほどをカバー
 * **Context3DProfile.BASELINE_EXTENDED** ... AGAL1用のちょっといいやつ
 * **Context3DProfile.BASELINE** ... AGAL1用
 * **Context3DProfile.BASELINE_CONSTRAINED** ... AGAL1用 かなり古い環境用


各Profileとレジスタ数の関係は自分の前の投稿 [AGAL入門 #4 : 各AGALバージョン (Stage3D Profile) ごとのレジスタ数](http://qiita.com/harayoki/items/fc6d484572c0ab41cc8e) にまとめてあります。

Starlingのインスタンス化の際にStage3Dのプロファイルを指定する事もできます。指定したプロファイルが利用できないと(非同期の)エラーになりますが、AGALコードが実際に動くまで適切なProfileで動いていない事がわからないより、初期化のタイミングでエラーになったほうが良いかもしれません。

```sample.as
var profiles:Array = ["standardConstrained"]; //for AGAL2
var starling:Straling = new Starling(HogeClass, stage, null, null, null, profiles );
```

#捕捉
今回の投稿で検証したStarlingのバージョンは2.0.1と1.8です。Starling2はまだちょいちょい細かい修正アップデートがされているようです。2.0.2以降で状況変わるかもしれないのでご注意を。