OmniAICreator/Qiita-1.07M huggingface dataset:
Marked を拡張してクラスを付与する

# Marked とは

[Marked](https://github.com/chjj/marked) は Markdown を HTML に変換してくれるモジュールです。

```:入力例
# Foo
Bar
- 111
- 222
```

```js:実装例
import marked from 'marked'
import example from './example.md'

// 変換
marked(example)
```

```html:出力例
<h1 id="foo">Foo</h1>
<p>Bar</p>
<ul>
<li>111</li>
<li>222</li>
</ul>
```

シンプルでいいですね。


# id や class を付与したい

Markdown を HTML に変換する際、汎用的なスタイルを当てるならば問題はないでしょう。
しかしある程度凝ったことをしようとするならば、変換後の HTML に class あるいは id を付与したくなります。
Markdown は内部に HTML を書くことが許容されていますので、タグを直書きしてしまう方法が恐らく正攻法でしょう。
純粋な Markdown には class や id を指定する記法がないので、正攻法以外の方法で対応するのは難しいと思います。
（いい感じに付与できる方法を思いつく方は是非コメントなどでご意見いただけると嬉しいです。）

Marked の実装を見ると、Heading 要素については kebab-case に変換した本文の内容を id 属性に代入しているようです。
こちらは[英数字しか対応していない](https://github.com/chjj/marked/pull/436)ようで、本文が日本語だったりすると正しく機能しません。


# レンダラーを拡張する

Marked は変換部分を拡張できますので、今回は Heading 要素のレンダラーを書き換えて class や id を付与する方法を試してみます。

```:入力例
# Foo {{class="title"}}
Bar
- 111
- 222
```

```js:実装例
import marked from 'marked'
import example from './example.md'

// レンダラーを取得
let renderer = new marked.Renderer()

// Heading 要素のレンダラーを拡張
renderer.heading = function (text, level, raw) {
  const regex = /\s*{{(.*)}}/
  const addon = raw.match(regex) ? raw.match(regex)[1] : ''
  return `<h${level} ${addon}>${text.replace(regex, '')}</h${level}>\n`
}

// レンダラーを指定して変換
marked(example, { renderer: renderer })
```

```html:出力例
<h1 class="title">Foo</h1>
<p>Bar</p>
<ul>
<li>111</li>
<li>222</li>
</ul>
```

上記の例では Markdown に `{{}}` を書き足すことで class の追加を実現しています。
純粋な Markdown では無くなってしまうので若干 Evil なアプローチではありますが、Markdown に HTML を書きたくない場合や、変換後に HTML を捻じ曲げたりするよりは、このような手法も悪くないかなと思います。
Android で例外受け取った時にエラーコード取得する方法がどこにも見つからなかったので見つけた

#経緯
Swift やら ObjC なら
catch した NSError の中にエラーコードが含まれている

```swift
let e: NSError = NSError(domain: "unko", code: 931, userInfo: nil)
print(e.code) // <- 931
```

翻って Android Java で HttpURLConnection で例外を受け取った時に、こういうメッセージが表示されたことがあった
``failed to connect to /**.*.***.** (port *****): connect failed: ECONNREFUSED (Connection refused)```
この ECONNREFUSED ってやつが Excption の中にエラーコード持ってないかと思って探したけど Swift みたいに getCode() とかそういうのもなく、
えー、 getLocalizedMessage() で文字列から種別分けするのか？ そんなバカな
という感じで困ったのに検索かけてもなんも情報が出てこないのでちょっとハマった
#見つけた

```java
URL url = new URL("http://unko.com");
HttpURLConnection connection = null;
try {
    connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("GET");
    connection.connect();  // 例外くるとこ
    Log.d("unko", "" + connection.getResponseCode());
    Log.d("unko", "" + connection.getContentType());
} catch (Exception e) {
    Log.w("unko", "" + ((ErrnoException) e.getCause()).errno);
} finally {
    if (connection != null) {
        connection.disconnect();
    }
}
```

この部分でコードが取れた

```java
((ErrnoException) e.getCause()).errno // == 111
```

この 111 ってのは Linux System Errors からきてるみたい
ETIMEDOUT とかもメッセージとったことあったし間違いないでしょ・・・
> Errors: Linux System Errors
http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html

ちなみにそれらは定数が定義されてた
**```OsConstants.ECONNREFUSED```**

こうして私はエラーコード取得がわかりました

はい

#まとめ
- コードとるだけなのにめんどくさい
- ちゃんとは調べてないので他の方法があったら、まじかーってなる
- Java は糞
[MeCab]文章に感情語がどれほど含まれているかカウントする[ShellScript]

# 導入
近年、TwitterやFaceBook等のSNSやAmazonや価格.comにおける口コミなど、ユーザーからの投稿を利用したサービスが普及し、家族や友人、有名人などの近況や売れ筋の商品や飲食店などの情報を気軽に取得できるようになりました。
利用者数はスマートフォンの普及により増加し、ユーザーから投稿される書き込みの量も膨大になりつつあります。

多くのショッピングサイトでは商品に対する口コミと評価値が存在しますが、口コミの内容と評価値が必ずしも一致しないのが現状です。
評価値というのは投稿者の主観で決定されるもので、正確に判断するためには評価値以外の判断基準が必要であると考えました。
そこで、投稿時の投稿者の感情は「喜び」や「悲しみ」など言葉に表れることから、「感情語」を活用した文章の解析が判断基準になるのではないかと思いました。

## じゃあどのように感情語を分類するの？
感情語を分類する方法としてはいくつかあります。例えば、著者:中村明の[感情表現辞典](https://www.amazon.co.jp/%E6%84%9F%E6%83%85%E8%A1%A8%E7%8F%BE%E8%BE%9E%E5%85%B8-%E4%B8%AD%E6%9D%91-%E6%98%8E/dp/4490103395)という書籍から、
感情語のカテゴリを「喜, 怒, 哀, 怖, 恥, 好, 厭, 昂, 安, 驚」の10種類に分類するという手法を用いることもできます。

しかし、このカテゴリの分類の弱点として、ポジティブな表現の方が収録されている語録数が多いことから、感情分析を行った際に偏ってしまうという問題があります。
この偏りから、ネガティブな傾向にあるカテゴリは意味を持たなくなってしまいます。
重要な点としては、全てのカテゴリが均等に語録が収録され、投稿者の感情を汲み取ることのできるカテゴリの分類が必要になります。

そこで、今回は5つのカテゴリに分類する手法を用います。
先ほどの感情表現辞典からネガティブなカテゴリを取り除き、語録を均等に分配した
「喜, 楽, 安, 好, 驚」
この5つのカテゴリに分配する方式です。
これにより、辞書による語録数の偏りが起こらず、投稿者の感情を汲み取ることのできるカテゴリの分類に近いと思いました。

この導入の詳細は参考文献に全て記載されているので、そちらを参考にしていただければ幸いです。

# それでは作ってみよう
というわけで実際に作って見ました。
今回は~~大々的にやる予定もない~~できないので、シェルスクリプトで簡単に作成しました。

処理としては、解析する文章を[MeCab](http://taku910.github.io/mecab/)による形態素解析を行い、分割した単語と感情語辞書に登録されている感情語と一致したらカウントするといったものです。

```
$ emotion 楽しい嬉しい驚き桃の木クッション完備                                                                                                     
enjoy:1 happy:1 like:0 relief:0 surprise:1
```
と行った感じになっています。
ちなみに、-fオプションをつけることによりファイルから読み取ることもできます。

```
$ emotion -f review.txt                                                                                                  
enjoy:1 happy:1 like:7 relief:1 surprise:0
```

まだREADMEも書いていないし、それ以前にガバガバな内容ですが、これから少しずつ改善できたらと思っています...

## Github
https://github.com/MatsuiRuito/homebrew-emotion

# 参考文献
口コミ解析システムのための感情語辞書の検討 - 情報学広場
https://ipsj.ixsq.nii.ac.jp/ej/?action=repository_uri&item_id=177165&file_id=1&file_no=1
rbenvで入れた全てのrubyのgemバージョンを上げるワンライナー

わー、なんてこった。
gemコマンド自体に脆弱性が見つかるなんてー！

https://www.ruby-lang.org/ja/news/2017/08/29/multiple-vulnerabilities-in-rubygems/

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

```
rbenv versions --bare --skip-aliases | xargs -I{} bash -lc 'rbenv shell {}; gem update --system'
```
Macbook で三本指で辞書を開くジェスチャーが使えない

# 問題

設定でジェスチャーは有効になっている。
複数台のMacbookで試したが、何も起こらない。

# 解決

押し込んではいけない。
三本指で「軽くタッチする」のが正解。


![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/ffb7de75-5e6b-16c0-bc7f-bbd0220cbd25.png)




# 感想

二本指ジェスチャーは「押し込む」で
三本指ジェスチャーは「軽くタッチ」というのが死角だった。








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Node.jsで画像アップロードと表示


[Node.jsで画像アップロードを受けつけるサーバー](http://qiita.com/n0bisuke/items/12a1d0fed0f544269489)の続きです。
(ちょっと追加しただけです)

`index.html`を`server.js`と同じ階層に作ります。アップロードした画像`img.jpeg`があります。

![](https://i.gyazo.com/06252c01cf7ad23b9463a305e21dc89f.png)

```index.html
<html>
    <head></head>
    <body>
        <img src="/img.jpeg">
    </body>
</html>
```

## コード

`app.use(express.static(__dirname));`の部分と`res.sendFile()`を追加しているくらいです。

```server.js
'use strict';

const fs = require('fs');
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.static(__dirname));

//画像表示
app.get('/', (req, res) => res.sendFile('./index.thml'));

//画像アップロードを受け付け
app.post('/', (req, res) => {
    let buffers = [];
    let cnt = 0;

    req.on('data', (chunk) => {
        buffers.push(chunk);
        console.log(++cnt);
    });

    req.on('end', () => {
        console.log(`[done] Image upload`);
        req.rawBody = Buffer.concat(buffers);
        //書き込み
        fs.writeFile('./img.jpeg', req.rawBody, 'utf-8',(err) => {
            if(err) return;
            console.log(`[done] Image save`);
        });
    });
});
 
app.listen(PORT);
```

## 実行

```
$ node server.js
```

実行して localhost:3000にアクセスすると画像が表示されます。

![](https://i.gyazo.com/14de002fd957872d57e09262b96317f9.png)
Pythonでブックマークレットを作る

初投稿です
Brythonを使ってPythonで書いたコードが動くブックマークレットを作りました
後半はただのコードゴルフ

## Brythonってなに
http://qiita.com/ryo_grid/items/5e34220ed48f4580126d
こちらが大変参考になりました。

## 需要はあるの
（たぶん）ないです

## とりあえず書いた

```js:bookmarklet
javascript:
(function() {
  var py = document.createElement('script');
  py.type = 'text/python';
  py.src = 'https://example/script.py';
  document.body.appendChild(py);
  var br = document.createElement('script');
  br.src = 'https://example/brython.js';
  br.onload = function() {
    brython();
  };
  document.body.appendChild(br);
})();
```

```py:/script.py
from browser import alert

alert("Hello World!")
```

仕組みとしては単純で`</body>`の直前に

```html
<script type="text/python" src="https://example/script.py"></script>
<script src="https://example/brython.js"></script>
```

を追加しているだけです
`brython.js`を読み込み後、onload属性を用いて`brython()`を呼び出すことでページ内の`text/python`のスクリプトが走ります。

## クロスドメイン問題
Brythonは外部のスクリプトがある場合、Ajaxを使ってロードします
そのためスクリプトが置いてあるサーバーのページ以外ではブックマークレットが動かないという致命的な問題が起こります
のでHTTPヘッダーに`Access-Control-Allow-Origin: *`を追加することで解決しました

## 短くする
ブックマークレットなので短いほうがいいはず（？）

### 宣言を省略し変数名を１文字に
ついでにdocumentも変数に入れとく

```js
javascript:
(function(d,p,b) {
  p = d.createElement('script');
  p.type = 'text/python';
  p.src = 'https://example/script.py';
  d.body.appendChild(p);
  b = d.createElement('script');
  b.src = 'https://example/brython.js';
  b.onload = function() {
    brython();
  };
  d.body.appendChild(b);
})(document);
```

### 再帰化
関数名がないので`arguments.callee`で呼び出す
（関数名をつけるとスペースが入りブックマークレットとしては不適切）
if文を使わず３項演算子を使用

```js
javascript:
(function d(d,u,c,e) {
  e = d.createElement('script');
  e.src = u + (c ? 'brython.js' : 'script.py');
  c ? (arguments.callee(d,u), e.onload = function() {
    brython();
  }) : (e.type = 'text/python');
  d.body.appendChild(e);
})(document,'https://example/',1);
```

### スペース,改行を取り除く
```js
javascript:(function d(d,u,c,e) {e=d.createElement('script');e.src=u+(c?'brython.js':'script.py');c?(arguments.callee(d,u),e.onload=function(){brython();}):(e.type='text/python');d.body.appendChild(e);})(document,'https://example/',1);
```

330文字 => 235文字
まだ長い気がするけど僕の技術では限界みたいです

終わりです、良いPythonライフを！
ChromeDevToolを使ってNodeJSのデバッグ

## 環境

- node(v8以上)

## コマンド

`node`コマンドで`--inspect`フラグを使います。

```bash
node --inspect index.js
```

この時、`--inspect-brk`を使うと指定ファイルの1行目にブレークポイントを設定した状態にできます。 （たいていの場合、一緒に使ったら良いと思う）

```bash
node --inspect --inspect-brk index.js
```

`--require`を使えば、Babelを使ったESxxxxなjsでも、

```bash
# npm i -D babel-register
node --inspect --require babel-register index.js
```

TypeScriptでもデバッグできます。

```bash
# npm i -D typescript ts-node
node --inspect --require ts-node/register index.ts
```

## ChromeDevToolを開く

上記セクションのコマンドがうまく実行できてこんなログがでたら準備完了です。

```bash
# Debugger listening on ws://127.0.0.1:9229/e9aa838e-9711-4f7b-a52d-03cd37ff5f2e
```

この時、[chrome://inspect](chrome://inspect)へアクセスすると下のようになってます。
お目当てのターゲットで「inspect」をクリックすればChromeDevToolが開いて見慣れた感じでコードを見たり調べたりできます。

> ![chrome inspact page](https://qiita-image-store.s3.amazonaws.com/0/84144/97f515de-f785-1674-fba0-ffd3b309fc86.png)
>
> ![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f38343134342f32633965383530612d636231332d326438362d353037312d6433633462336237663664392e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/84144/d8190a50-9cb2-f0ff-31b8-f1c86c4c9ad3.png)

## 上記の工程が面倒くさい

そんな人は[NIM (Node Inspector Manager)](https://chrome.google.com/webstore/detail/nim-node-inspector-manage/gnhhdgbaldcilmgcpfddgdbkhjohddkj)がオススメ！これを使うと（デフォルト設定で）、`--inspect`した時、自動で対象のChromeDevToolを開いてくれます！

> ![node-inspect.gif](https://qiita-image-store.s3.amazonaws.com/0/84144/5b4cd8bc-027d-6162-be9e-a353ae709051.gif)


```text
----» やっぱりChromeDevToolが1番使いやすいです。😇 
```
VisualStudio デバッグ（ビルド）されないときの対策

フォームアプリケーションを作り、いざデバッグせんとはじめての実行をしたら、なぜかビルドに失敗。
無理やり続行させようとすると当然

![無題10.png](https://qiita-image-store.s3.amazonaws.com/0/194703/85ae3ea8-8f01-0ec5-842b-3fa86b2fe2ce.png)

こう出てしまう。
（「続行して最後に成功したビルドを実行しますか？」をクリックしても、最後に成功したビルドが存在しない（一度もビルド成功していない）ので、デバッグターゲットが見つからない）

エラー一覧には何も出力されていない、
もちろんコンパイルエラーなんぞない、おかしい！

混乱のさなか、なんとか自力解決したので方法をまとめる。



## 対策1　デバッグ構成を確認する

①ソリューションエクスプローラーを開く
②プロジェクト名を右クリック、「プロパティ」を開く
（メニュー→「プロジェクト」→「”プロジェクト名”のプロパティ」でも可）
③「デバッグ」を開き、「構成」を確認

![無題10.png](https://qiita-image-store.s3.amazonaws.com/0/194703/e4414523-fbfc-48cf-9732-fd6a3c9f7883.png)
ここが「Debug」になっているか確認する
ちなみに実行した際、ディレクトリに「exe」でなく「vshost.exe」で保存されてしまうといった場合も同様の設定で対応できる。

##対策2　ビルド構成を確認する
①上記設定ページの「ビルド」を開く
②「構成」を確認
対策1同様「Debug」になっているか確認

## 対策3　スタートページを確認する
①上記設定ページの「アプリケーション」を開く
②「スタートアップオブジェクト」に、アプリケーションを開いた際表示されるべきフォームが登録されているか確認

![無題10.png](https://qiita-image-store.s3.amazonaws.com/0/194703/f2b33599-f0f2-6703-f746-9e76ad0459e9.png)

（設定なし）だとビルドエラーになる。
ちなみに私はこの操作でデバッグができるようになった。





-------------

ちなみに環境は
Visualstudio2015
.NET 4.5.2
C#

なのでこの環境でない場合や他言語の場合、多少設定の文言等異なるかもしれない。
VBは専門外なためプロの方はぜひコメント等残してくださると、私のような迷い人の助けになるかも。
Intro to MyWeb

### **Main function of this web application**    
***  
#### **Posting** 
You can share your knowledge especially technical knowledge by posting via this application
 - Posting from left side bar [** Write a Post**](https://myweb.pro.vn/post/edit "Write a Post") menu    
![posting.gif-image-gif-136594bytes](http://myweb.pro.vn/images/user/post/5637-posting.gif-image-gif-136594bytes.png)
 - [My post](https://myweb.pro.vn/post/my) page is list of your post , you can [**Creat new post**](https://myweb.pro.vn/post/edit) or edit your post from this page    
![post_from_my_post.gif-image-gif-520062bytes](https://myweb.pro.vn/images/user/post/-5637post_from_my_post.gif-image-gif-520062bytes.png)  
 - Viewing [**your post**](https://myweb.pro.vn/post/my)   
![view.gif-image-gif-3219032bytes](http://myweb.pro.vn/images/user/post/5637-view.gif-image-gif-3219032bytes.png)
#### **Markdown Editor**   
- Editor in this application support markdown syntax,  for how to use markdown syntax please refer [**github page**](https://help.github.com/articles/basic-writing-and-formatting-syntax/), some function of Editor in this Application is list below :
  - **Emphasis** : **bold text** with `** **`, *italic text* with `* *`  
![markdown-bold-italic](https://myweb.pro.vn/images/user/post/5637-bold_italic.gif-image-gif-419086bytes.png)  
- **Heading**: `#` for <h1> tag, `##` for <h2> tag, `######` for <h6> tag  
![heading.gif-image-gif-172785bytes](https://myweb.pro.vn/images/user/post/5637-heading.gif-image-gif-172785bytes.png)  
- **Strikethrough** : `~~strikethrough text~~`
- **Table** 
![table.gif-image-gif-250168bytes](http://myweb.pro.vn/images/user/post/5637-table.gif-image-gif-250168bytes.png)
- **Link**: `[link](http://google.com)`  
![insert_link.gif-image-gif-493166bytes](http://myweb.pro.vn/images/user/post/5637-insert_link.gif-image-gif-493166bytes.png)  
- **Insert image link**:    
`![alt text](https://i.ytimg.com/vi/eE_pOfkPtIs/sddefault.jpg)`   
![insert_image_link.gif-image-gif-335017bytes](http://myweb.pro.vn/images/user/post/5637-insert_image_link.gif-image-gif-335017bytes.png)
- **Upload Image from local computer**  
![upload.gif-image-gif-1171640bytes](https://myweb.pro.vn/images/user/post/5637-upload.gif-image-gif-1171640bytes.png)  
- **Emoij icon** 
![emoij.gif-image-gif-2163344bytes](https://myweb.pro.vn/images/user/post/5637-emoij.gif-image-gif-2163344bytes.png)
- **Quotes text** 
 ![quotes.gif-image-gif-216664bytes](https://myweb.pro.vn/images/user/post/5637-quotes.gif-image-gif-216664bytes.png)  

#### [**News feed**](https://myweb.pro.vn)
naming > IsStarted() | IsOpen() or IsOpened() | IsClosed()

```txt:動作環境
C++ Builder XE4
```

### IsStarted / IsOpen

提供されたライブラリの関数に以下がある。

- IsStarted()
- IsOpen()

https://www.merriam-webster.com/dictionary/open
にはverb, noun, とadjectiveの例が掲載されている。

上記のIsOpenのOpenはadjectiveとしての命名なのだろう。

### IsStarted / IsOpened

一方で、以下の命名例もGitHub上のコードなどにある。

- IsStarted()
- IsOpened()

こちらの場合のOpenはverbなのだろう。Openedとして「Openしている状態」という使い方。

### IsClose / IsClosed

google検索: 「github "IsStarted" "IsClose"」 10件
google検索: 「github "IsStarted" "IsClosed"」 1470件

IsClosed()に合わせるとするとIsOpened()だろうか。
(対称性の観点から)
[Unity] カメラ領域からワールド領域を算出する


![unity.jpg](https://qiita-image-store.s3.amazonaws.com/0/127402/92c39d7f-b88b-3508-cc31-acfe403433b8.jpeg)
# はじめに
以下のように、
Orthographicカメラの描画範囲から、ワールド座標を取り出し、
かつどんなアスペクト比にも対応できるようなスクリプトを書いていきます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/127402/a3ca5d8a-644c-0883-36c6-b0e020412d94.gif" width=70%>

# 実装
UnityのOrthographicカメラを使用した場合、Sizeを選択するアトリビュートが出現します。

![2017-08-30_123646.jpg](https://qiita-image-store.s3.amazonaws.com/0/127402/4f2c5254-5c86-2dd2-ff3d-06384632e75b.jpeg)

ここでいうSizeとは、画面の縦**半分**に何ユニット入るかを意味します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/127402/b2540448-959a-3fa3-15a4-77b36beac511.jpeg" width=70%>


よって、カメラ側でアスペクト比を操作しても縦方向に含まれるユニット数は**一定**であるので、
画面の横半分に入るユニット数は、カメラのSizeとアスペクト比から計算可能です。

アスペクト比はウィンドウの「横幅 ÷ 縦幅」で表されますから、
横幅は「カメラのサイズ(縦ユニット数の半分) × アスペクト比 × 2」で計算できます。

以下のスクリプトを任意のオブジェクトにアタッチすると、
カメラの描画領域に一致した矩形ギズモが表示されます。

```csharp:GetWorldRegionFromCamera.cs
using UnityEngine;

public class GetWorldRegionFromCamera : MonoBehaviour {

    public float wallWidthHalf { get { return Camera.main.orthographicSize * Camera.main.aspect; } }
    public float wallHeightHalf { get { return Camera.main.orthographicSize; } }

    private void OnDrawGizmos() {
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireCube(Camera.main.transform.position, new Vector3(wallWidthHalf * 2, wallHeightHalf * 2, 0));
    }
}
```
RasPiでKeras/TensorFlowを動かす

RasPiでKeras/TensorFlowを動かすまでの試行錯誤をメモしておく。使った環境は以下の通り。

- [RaspberryPi 3 Model B](https://www.raspberrypi.org/products/raspberry-pi-3-model-b/)
- Raspbian August 2017
- 16GB SD card（いろいろツールを入れたので8GBでは足りなくなった）

![](https://www.raspberrypi.org/app/uploads/2017/05/Raspberry-Pi-3-462x322.jpg)

## まずはTensorFlowを入れる

### TensorFlow公式RasPiサンプルはビルドおそい

最初に[TensorFlow公式のRasPiサンプル](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/pi_examples/)を試したのだけど、C++のコードをゼロからビルドするので、非力なRasPiでは何時間待っても終わらない...ってグチをつぶやいたら、TensorFlowチームのPete Wardenが絶妙のタイミングでブログ記事[Cross-compiling TensorFlow for the Raspberry Pi](https://petewarden.com/2017/08/20/cross-compiling-tensorflow-for-the-raspberry-pi/)を書いていて、リンクをシェアしてくれた。この記事では、あらかじめビルド済みのパッケージを以下のコマンドでインストールする方法を紹介している。

```
sudo apt-get install libblas-dev liblapack-dev python-dev \
libatlas-base-dev gfortran python-setuptools
sudo ​pip2 install \
http://ci.tensorflow.org/view/Nightly/job/nightly-pi/lastSuccessfulBuild/artifact/bazel-out/pi/tensorflow-1.3.0-cp27-none-any.whl
```

このインストール方法も1〜2時間はかかる（途中で寝ちゃったので正確な時間はわからない）けど、公式サンプルより全然マシだ。ありがとうPete!!

### ヒートシンクは必須

しかし、このスクリプトでインストールを開始して数10分経ったところで毎回RasPiが固まってしまう。熱暴走っぽいので、[RasPi3用のヒートシンク](http://amzn.asia/cygrx7t)を付け、横に小さなファンを置いて空気を流してみた。

![](https://images-na.ssl-images-amazon.com/images/I/61U1409ynnL._SL1200_.jpg)

これでTensorFlowのインストールはうまくいった。

## つづいてKerasを入れる

Kerasは[ドキュメント手順](https://keras.io/#installation)どおりのpipコマンドですんなり入った。Kerasが使うh5pyも、

```
sudo apt-get install python-h5py
```

として入れておく。

### メモリが足りないのでスワップ領域を増やす

しかしここでKerasを動かすと、メモリ不足に起因するエラーが発生。以下のコマンドでスワップ領域のサイズを編集した。

```
sudo vi /etc/dphys-swapfile
```

デフォルトのサイズが100MBくらいなので、`CONF_SWAPSIZE=1024`と編集して1GBくらい用意しておいた。

```
sudo /etc/init.d/dphys-swapfile restart
swapon -s
```

を実行して、スワップ領域が大きくなったことを確認。これでKerasが動いた。

## GrovePi（オプション）

今回はDexter Industriesの[GrovePi](https://www.dexterindustries.com/grovepi/)というキットを組み合わせてRasPiにLEDや照度センサー等を付けた。

![](https://32414320wji53mwwch1u68ce-wpengine.netdna-ssl.com/wp-content/uploads/2015/07/GrovePi-Base-Kit-1-800x800.jpg)

このキットにはi2cまわりのPythonドライバが付属するので、Arduinoっぽい簡単なPythonコードを2、3行書くだけで周辺デバイスを扱えてとても簡単。ただし、Raspbian August 2017との組み合わせではアナログI/Oがうまく動かない不具合に遭遇したので、[このポスト](https://forum.dexterindustries.com/t/solved-grovepi-compiled-firmware-i2c-issue/3365)を参考に以下のパッチを当てる。

```
sudo rpi-update 52241088c1da59a359110d39c1875cda56496764
sudo reboot
```

以上。RasPi3でKeras/TensorFlowがうまく動いた。VGG16ベースのモデルで画像認識すると、1画像あたりおよそ2秒くらいかかる。

### ＜9/22追記＞

2秒という速さは素のARMより3倍くらい速い、って指摘をいただいたのでPeteに確認したら、[デフォルトでNEONを使ってる](https://twitter.com/petewarden/status/911121154215075840)とのことです。TensorFlowでGPU:0等の指定をしなくてもNEONが効く。NEON速い。

---
Disclaimer この記事は個人的なものです｡ここで述べられていることは私の個人的な意見に基づくものであり､私の雇用者には関係はありません｡
ActionMailer Preview のススメ

Railsでメールを送信するためには ActionMailer という機能がある。内容の確認には [letter_opener](https://github.com/ryanb/letter_opener) などの素晴らしいGemがある他、テストも作成できる。ここではメールの内容を確認するためのもう一つの方法、 `ActionMailer::Preview` (以下単に「プレビュー」)を紹介する。

# 作成

特別なコマンドはなく、 rails generate mailer の時に同時に作成される。

```
$ rails g mailer sample
      create  app/mailers/sample_mailer.rb
      invoke  slim
      create    app/views/sample_mailer
      invoke  rspec
      create    spec/mailers/sample_spec.rb
      create    spec/mailers/previews/sample_preview.rb
```

この中の `spec/mailers/previews/sample_preview.rb` がプレビューである。中身を見てみよう。

```spec/mailers/previews/sample_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/sample
class SamplePreview < ActionMailer::Preview

end
```

ActionMailer::Preview を継承したクラスであることが分かる。コメントにURLが書いてあるので、サーバーを立ち上げてアクセスしてみる。

![スクリーンショット 2017-08-30 10.16.08.png](https://qiita-image-store.s3.amazonaws.com/0/172883/e4a7594d-aaf7-3aef-b8aa-4bea0b37a2e9.png)

メールクラスの名前 "Sample" のみ表示されている。ここから内容を実装していく。

# 使い方

## 準備

プレビューの前にまずメールを実装する。シンプルにこんな感じ。

```app/mailers/sample_mailer.rb
class SampleMailer < ApplicationMailer
  def welcome(member)
    @member = member
    mail to: @member.email, subject: 'Sample mailer'
  end
end
```

```app/views/sample_mailer/welcome.text.erb
<%= @member.name_sei + ' ' + @member.name_mei %> 様

ご登録ありがとうございます。
```

## プレビューの実装

プレビューには、メールオブジェクトを return するメソッドを実装する。シンプルな例だとこうなる。

```spec/mailers/previews/sample_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/sample
class SamplePreview < ActionMailer::Preview
  def welcome
    member = Member.new(name_sei: '菅田', name_mei: '将暉', email: 'suda@example.com')
    SampleMailer.welcome(member)
  end
end
```

先ほどのURLにアクセスすると、項目が一つ増えている。

![スクリーンショット 2017-08-30 12.30.46.png](https://qiita-image-store.s3.amazonaws.com/0/172883/dfc334cc-70a6-b302-646c-058290808436.png)

リンクをクリックすると、メールの内容が確認できる。

![スクリーンショット 2017-08-30 12.32.31.png](https://qiita-image-store.s3.amazonaws.com/0/172883/10234080-9374-746e-2e23-73d0ec152926.png)

## 応用編

プレビューには、同じ(※)メーラーを呼び出す別のメソッドが定義されていてもよい。条件によって内容が変わるメールだと重宝する。
※違うメーラーを呼び出してもいいのだが、混乱の元なのでお勧めしない。
また、seedデータがあればそれも利用できる。

```spec/mailers/previews/sample_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/sample
class SamplePreview < ActionMailer::Preview
  def welcome
    member = Member.new(name_sei: '菅田', name_mei: '将暉', email: 'suda@example.com')
    SampleMailer.welcome(member)
  end

  def welcome_db
    member = Member.first
    SampleMailer.welcome(member)
  end
end
```

![スクリーンショット 2017-08-30 12.36.30.png](https://qiita-image-store.s3.amazonaws.com/0/172883/a6f7a2bb-09c9-32c9-73ae-f0155b1984ec.png)

# 使い所

メールを送る条件が複雑な場合、画面操作をすっ飛ばしてメールの内容が確認できる。これは letter_opener にない利点である。

- 項目の多い入力フォームを埋めて submit しなければ送信されないメール
- rake task で送信されるメール
- 特定の条件を満たす宛先にのみ送信されるメール etc...

特に業務システムの場合、メールの活躍機会はまだまだ多いはず。うまく使えば確認作業が大幅に楽になる `ActionMailer::Preview` をぜひ活用しよう。
pythonメモ：集合型でリストを集合的に扱う

#自己紹介
せっかく始めての記事なので。
- 名前：HotAllure
- 出身：機械工学系(修士)
- 趣味：推理小説、手芸、コーヒー
- 仕事内容1：新しい情報系の技術のトレンドに乗り、フットワーク軽く色々試す
- 仕事内容2：深層学習を身につけて、新しいサービスを考案すること

バリバリの情報系な職場に配属されましたが、上記のとおり大学の専攻が機械系で、プログラミングに触れた機会といえば授業でCをやったとか、研究室のワークショップでArduinoに触れたとか、研究の時に必要な統計処理を行うためにMatlabを使ったとか、その程度でした。

入社後は主に深層学習をやる上で大多数の人が使っているpythonを扱い始めて、Tensorflowを触ってチュートリアルモデルを改造してみたりしています。...が、基礎を確実にしてから応用に取り組まないと不安な性格も相まって、いきなり深層学習をバリバリ使いこなせるようになるほど、(少なくとも僕にとっては)甘い世界ではありません。

Qiitaの素晴らしい記事の数々にはすでに大変お世話になっていますが、未熟な自分を晒すのが気恥ずかしく、孤独に勉強をかじってみては詰まり、落ち込む日々を繰り返しているうちに、Qiitaを勉強の備忘録として使っている人を見かけ、なるほどと思いました。

まずは、自分がpythonを使っている上で、詰まったところとその解決方法の備忘録として使っていこうと思います。余裕が出たら他の記事も書けるといいな。

#メモ：リストの共通要素を取り出す
yamao2253さんの記事、3パターン目を参考にさせていただいた。
http://qiita.com/yamao2253/items/309fdaa74b8f9d38ac46
あとはこちら。
http://www.sejuku.net/blog/21923

python、集合型などという変数型があったのか。むむむ。

```Python:and_set.py
set1 = set(['a','b','c','d'])
set2 = set(['c','d','e','f'])

#set1とset2の積集合を得る
and_set = set1.intersection(set2)

print(and_set) #set(['c','d'])

#setをlistに戻すときは
and_list=list(and_set)
print(and_list) #['c','d']
```

メソッドintersectionと&演算子は同等のはたらきのようです。
#その他の集合演算について
https://docs.python.jp/3/tutorial/datastructures.html

```Python:set_method.py
#差集合 
dif_set = set1.difference(set2)              #(set['a','b'])
#和集合
uni_set = set1.union(set2)                   #(set['a','b','c','d','e','f'])
#対象差集合
symdif_set = set1.symmetric_difference(set2) #(set['a','b','e','f'])
```
他にもいろいろあるようですね。
#追記
中学一年生の __ zenbo __ さんによるpythonの勉強記事。
http://qiita.com/__zenbo__/items/9ed2db6dc7180e6ea1ff

若くして素晴らしい。僕も見習いたいです。
Cloud9上にLaravel5.4を導入する


最近Laravel+Vue.jsの組み合わせが流行っているので、時流に乗って勉強することにしました。
まずはLaravel5.4を環境構築が簡単なcloud9上にインストールしていきます。

やり方は以下の方とまったく同じですが自分用に記録しておきます。
http://qiita.com/zxcvdayo/items/46eb0b45b953c86a3360

## Cloud9の準備
Cloud9の登録は完了していることを前提とします。
Create a new workspaceを選択して新しいworkspaceを作成します。
workspaceに適当な名前をつけて、phpのテンプレートを選択してCreate workspaceボタンを押下します。
以下の例ではworkspaceの名前をlaravel-testとしています。
![laravel.png](https://qiita-image-store.s3.amazonaws.com/0/197560/c9a356e9-4035-bf86-1c57-8d1ac9fbcbdd.png)

以上でCloud9の準備は終了です。

## PHP 7のインストール
Cloud9のPHPパッケージにはPHP 5.5.9が入っていますが、Laravel 5.4のインストールにはPHP 5.6.4以上が必要になります。
なので、PHP 7をインストールしていきます。


```bash
#リポジトリの追加
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

#apacheのphpモジュールを追加・設定
sudo apt-get install libapache2-mod-php7.1
sudo a2dismod php5
sudo a2enmod php7.1

#phpの各種モジュールを追加
sudo apt-get install php7.1-dom
sudo apt-get install php7.1-mbstring
sudo apt-get install php7.1-zip
sudo apt-get install php7.1-mysql
```

以上でphpの準備は完了です。

## Laravel 5.4をインストールする
以下のコマンドでLaravelをインストールします。

```bash
$ cd ~/workspace
$ composer global require "laravel/installer"
$ export PATH=~/.composer/vendor/bin:$PATH
$ laravel new laravel

#以下のコマンドでLaravelのバージョン確認ができます。
$ php artisan --version
```
これでworkspace上にlaravelフォルダが作成されます。


## Laravel 5.4の動作確認
apacheの設定ファイル/etc/apache2/sites-enabled/001-cloud9.confを以下のように変更し、apacheのルートディレクトリをlaravelに変更します。

```diff:/etc/apache2/sites-enabled/001-cloud9.conf
- DocumentRoot /home/ubuntu/workspace/
+ DocumentRoot /home/ubuntu/workspace/laravel/public
```



ここまで実行したら、Cloud9上のRun Projectボタンを押し、ポップアップしたコマンドライン上のURLに接続すれば以下のような画面が現れるはずです。

## 追記
php5をpurgeしてsudo apt-get install phpでphp7を入れる方法でやってみたのですがうまくいかなかったので、上記のやり方に変更しました。
i18nextを使ってフロントエンドでお手軽ローカライズ


ランディングページのようなちょっとした静的ページをローカライズしたい時があると思います。
そんな時に便利なi18nextを導入してみて便利だったので共有します。

# i18nextって？
https://www.i18next.com/
Javascriptで書かれた国際化のためのフレームワークです。
プラグインが豊富で色々なフレームワークや環境で利用できるのがうれしいです。

# 使い方
今回はフロントだけでページを国際化対応される例で使い方を説明します。

## ダウンロード
bowerでダウンロードできます

```bash
bower install -D i18next
bower install -D i18next-browser-languagedetector
```

`i18next-browser-languagedetector`はブラウザの言語設定をいい感じに取得してくれるプラグインです。
豊富なプラグインの一覧は[こちら](https://www.i18next.com/plugins-and-utils.html)をご確認ください。

## html
次のようにresourcesで多言語化のためのリソースを設定して`i18next`を初期化します。
初期化後は`i18next.t`関数で指定したキーによって、ローカライズされた値を取得することができます。
これはページ表示後に`Hello World`をアラート表示するサンプルです。
日本語設定のブラウザで開けば`こんにちは、世界`と表示されます。

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="bower_components/i18next/i18next.js"></script>
  <script src="bower_components/i18next-browser-languagedetector/i18nextBrowserLanguageDetector.js"></script>
</head>
<body>

<script>
  // i18next初期化
  i18next
    .use(i18nextBrowserLanguageDetector) // ブラウザの言語設定をいい感じに解析して適切な言語を適用してくれる
    .init({
      fallbackLng: 'en',
      debug: true,
      resources: {
        en: {
          translation: {
            key: 'Hello World'
          }
        },
        ja: {
          translation: {
            key: 'こんにちは、世界'
          }
        }
      }
    });
  alert(i18next.t('key'));
</script>
</body>
</html>
```

# 属性にキーを指定する使い方
`i18next.t`関数で翻訳後のリソースを取得できるのは良いですが、全てのHTMLタグをJavascriptで取得したくは無いですよね。
`jquery-i18next`プラグインを使えは`data-i18next`属性にキーを指定できるので、要素ごとにJavascriptを書くことなく一括で多言語化することができます。

## 追加インストール
jqueryとjquery-i18nextパッケージをインストールします。

```bash
bower install -D jquery
bower install -D jquery-i18next
```

## html
次で示すコードのように、ある要素以下を全て多言語化することができます。

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="bower_components/i18next/i18next.js"></script>
  <script src="bower_components/i18next-browser-languagedetector/i18nextBrowserLanguageDetector.js"></script>
  <script src="bower_components/jquery/dist/jquery.js"></script>
  <script src="bower_components/jquery-i18next/jquery-i18next.js"></script>
</head>
<body>
<div id="container">
  <p data-i18n="hoge"></p><!-- 言語設定に応じたテキストが設定される -->
  <p data-i18n="piyo"></p><!-- 言語設定に応じたテキストが設定される -->
</div>

<script>
  // i18next初期化
  i18next
    .use(i18nextBrowserLanguageDetector) // ブラウザの言語設定をいい感じに解析して適切な言語を適用してくれる
    .init({
      fallbackLng: 'en',
      debug: true,
      resources: {
        en: {
          translation: {
            hoge: 'Hoge',
            piyo: 'Piyo'
          }
        },
        ja: {
          translation: {
            hoge: 'ほげ',
            piyo: 'ぴよ'
          }
        }
      }
    });
  $(function () {
    // jqueryI18next初期化
    jqueryI18next.init(i18next, $);
    $('#container').localize();
  });
</script>
</body>
</html>
```

`$('#container').localize();` で`container`をidにもつdivタグ以下の全ての要素を多言語化しているのがわかります。

# まとめ
フロントだけで多言語化対応できるのはよいですね。
導入もとても簡単なので色々な場面で使えそうです。

また一つ武器を手に入れた感
【tensorflowエラー】Variable hoge already exists, disallowed. Did you mean to set...


#原因
変数名が被ってる。
chainerだと名前とかつけてなかったから、あまり見なかったエラー。

#解決策
1.get_variableで変数名が被らないようにうまく生成する

```python:
with tf.variable_scope("my_scope2"):
    v4_init = tf.constant_initializer([4.])
    v4 = tf.get_variable("var4", shape=[1], initializer=v4_init)

print(v4.name)  # my_scope2/var4:0
```

http://qiita.com/TomokIshii/items/ffe999b3e1a506c396c8
https://deepage.net/tensorflow/2017/06/02/tensorflow-variable.html

2.tf.reset_default_graph()で初期化。

jupyterなどで該当の行を2回目実行してる場合は初期化をすると通る。
あるいはjupyter再起動。
https://github.com/kratzert/finetune_alexnet_with_tensorflow/issues/8
blockinfileとPHP7の組み合わせに注意

# TL;DR
PHP7 からは、/etc/php.ini 等の設定ファイルで **'#'** から始まるコメントを受け付けなくなりました。**blockinfile** で設定を変える場合は、マーカーを明示しましょう。

# Ansible Playbook で blockinfile を使う
CentOS 6/7 上で php71 を使う環境を作るにあたり、ansible で remi / webtatic を切り替えてプロビジョニングできるような playbook を作ろうとしています。

php-fpm から読み込まれる www.conf に日本語設定を追加しようと、以下のように設定しました。ansible-2.3 から使えるようになった、[blockinfile](http://docs.ansible.com/ansible/latest/blockinfile_module.html) ディレクティブを使っています。

```roles/php-fpm/tasks/main.yml
---
- name: roles/php-fpm/tasks/main.yml
  command: echo
（略）
- name: php-fpm.d/www.conf - add settings for use in Japan
  blockinfile:
    dest: "{{ PHP_INI_DIR }}/php-fpm.d/www.conf"
    insertafter:  '^;php_value[opcache.file_cache]'
    block: |
      ; Default values for use in Japan.
      php_value[date.timezone] = {{ TIME_ZONE }}
      php_value[mbstring.language] = Japanese
  become: yes
  notify: restart {{ PHP_FPM_SERVICE }}
```

これにより、/etc/php-fpm.d/www.conf の末尾に以下のブロックが追加されます。

```bash
$ tail -5 /etc/php-fpm.d/www.conf
# BEGIN ANSIBLE MANAGED BLOCK
; Default values for use in Japan.
php_value[date.timezone] = Asia/Tokyo
php_value[mbstring.language] = Japanese
# END ANSIBLE MANAGED BLOCK
```
## エラー発生

ところが、この後 restart php71-php-fpm でエラーでコケます。

```bash
RUNNING HANDLER [php-fpm : restart php71-php-fpm] ******************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to restart service php71-php-fpm: Job for php71-php-fpm.service failed because the control process exited with error code. See \"systemctl status php71-php-fpm.service\" and \"journalctl -xe\" for details.\n"}
```

原因は、どうも php-fpm（というか php）が、 **'#'** から始まるコメントを許していないらしいこと。**'#'** で始まる２行を取るとうまくいきます。

PHP マニュアルの[設定ファイル](http://php.net/manual/ja/configuration.file.php)に書いてありました。

> 7.0.0 ハッシュ記号 (#) をコメントとみなさないようになりました。

# 解決策

playbook で開始／終了マーカーを明示するようにしたらうまくいきました。

```yaml
    marker: "; {mark} ANSIBLE MANAGED BLOCK"
```

これで流したファイルは、以下のようになり、ます。

```bash
$ sudo tail -5 /etc/php-fpm.d/www.conf
; BEGIN ANSIBLE MANAGED BLOCK
; Default values for use in Japan.
php_value[date.timezone] = Asia/Tokyo
php_value[mbstring.language] = Japanese
; END ANSIBLE MANAGED BLOCK
```
Redux (redux-thunk) でサーバーとの非同期通信を試す

### Webアプリでよく使うサーバとの非同期通信をredux-thunkでミニマムに実装
redux-thunkでGETリクエストして、レスポンスをViewに表示するまでをできるだけ最低限の実装で。
通信のエラー処理とか、reactとreduxを連携させる部分、Reactからアクションを呼ぶところ、redux-thunkのインストール等は省略してます。

## 処理の流れを確認。
- redux-thunkを適用する(applyMiddleware)。
- 通信を行うためのaction（loadUsers）をdispatchする。
- loadUsersの中で非同期通信を実行
- success/errorによってactionをdispatchしてstateにレスポンスデータを反映する。

## 実装

``` store.js
import {applyMiddleware, createStore} from 'redux'
import thunk from 'redux-thunk'

//store生成時に、applyMiddlewareでredux-thunkを使えるように適用する。
const store = createStore(reducer, applyMiddleware(thunk))
```

``` actions.js
// ユーザ一覧に取得成功し、レスポンスデータをstateに反映するためのアクション
function successFetchUsers(result) {
    return {
        type: 'SUCCESS_FETCH_USERS', 
        users: result
    };
}

// 非同期でAPIをコールするアクション
export const loadUsers = () => {
    return (dispatch) => {
            fetch("http://localhost:3000/users")
              .then(response => response.json())
              .then(result => dispatch(successFetchUsers(result))
              .catch(error => console.log(error))
    }
}
```

dispatchしたactionを受けたreducerでstateを更新。

```reducers.js

initialState = {
  users: []
}

export const usersReducer = (state=initialState, action) => {
    switch (action.type) {
        case 'SUCCESS_FETCH_USERS':
            return Object.assign({}, state, {users: action.users})
        default:
            return state
    }
}

```

これに加えて、Viewで読み込み中…とかを表示するために通信状態をstateで管理したりするけど、今回は通信の部分だけをミニマムに実装したかったので、できるだけ不要な部分は省きました。
How to distinguish overloaded functions from each other when using dotConnect for PostgreSQL

## Stored Procedure Overloads

 eg. **StoredProcName:1**

Quantity of input parameters defines which stored procedure overload will be called when PgSqlCommand.Execute is called. If no proper overload can be found, an exception is raised in Execute or Prepare methods. You can obtain information on quantity of arguments for certain procedure by calling PgSqlCommandBuilder.DeriveParameters method which populates PgSqlCommand.Parameters collection with data obtained from server.

You can also use the following syntax for executing or describing specific overloaded procedure: "StoredProcName:1" or "StoredProcName:5". The first example executes the first overloaded stored procedure, while the second example executes the fifth overloaded procedure. This notation is only available when ParameterCheck is true. 



https://www.devart.com/dotconnect/postgresql/docs/Parameters.html
Latexitのプリアンブルに書いておくと便利なこと


Latexitを使えば簡単に数式の画像ができる。パワポに数式貼りたい時など便利。

プリアンブルには下記を記入しておくと何かと捗る。
```math
%\documentclass[10pt]{article}
\documentclass[platex, a4paper]{jsarticle}
\usepackage[usenames]{color} %used for font color
\usepackage{amssymb} %maths
\usepackage{amsmath} %maths
\usepackage[utf8]{inputenc} %useful to type directly diacritic characters

\usepackage{commath}
\usepackage[english]{babel} % English language/hyphenation
\usepackage{amssymb,amsfonts,amsthm,bm}
\usepackage{booktabs}

\DeclareMathAlphabet{\mathpzc}{OT1}{pzc}{m}{it}

\newcommand{\code}[1]{\lstinline[basicstyle=\ttfamily\color{green!40!black}]|#1|}
\newcommand{\units}[1] {\:\text{#1}}%
\newcommand{\SN}{S$_N$}
\newcommand{\cyclus}{\textsc{Cyclus}\xspace}
\newcommand{\Cyclus}{\cyclus}
\newcommand{\citeme}{\textcolor{red}{CITE}\xspace}
\newcommand{\cycpp}{\code{cycpp}\xspace}
\newcommand{\TODO}[1] {{\color{red}\textbf{TODO: #1}}}%

\newcommand{\comment}[1]{{\color{green}\textbf{#1}}}

\newcommand{\E}{\mathbb{E}}
\newcommand{\GP}{\mathpzc{GP}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\LWR}{\mathrm{LWR}}
\newcommand{\FR}{\mathrm{FR}}
\newcommand{\Total}{\mathrm{Total}}
\newcommand{\argmax}{\mathop{\rm argmax}\limits}
\newcommand{\argmin}{\mathop{\rm argmin}\limits}
\newcommand{\CYCLUS}{\mathrm{Cyclus}}
\newcommand{\DYMOND}{\mathrm{DYMOND}}
\newcommand{\I}{\mathbf{I}}
\newcommand{\K}{\mathbf{K}}
\newcommand{\stochastic}{\texttt{\`stochastic'}\xspace}
\newcommand{\innerprod}{\texttt{\`inner-prod'}\xspace}
\newcommand{\allflag}{\texttt{\`all'}\xspace}

\global\long\def\T#1{#1^{\top}}
```

## References
https://github.com/scopatz/fc-deploy-opt/blob/master/paper.tex
たとえば5分ごとにcronを実行しない

毎分実行していたcronを、別処理との関係上、5分ごとの実行は除外して欲しいと言われた。

改修案も提示してもらっていた。
`1-4,6-9,11-14,16-19,21-24,26-29,31-34,36-39,41-44,46-49,51-54,56-59 * * * *`
でも
`* * * * *`
からそれはあまりにも見栄えが悪いと思った。

`*/n`でn分置きに実行できることは知っていたし、

[cronを2分,7分,12分...みたいな半端なタイミングで動かす - Qiita]

も見ていたので、逆のことをもっと簡潔にできないかなーと思った。

5nで実行しないということは、5n以外を全部実行するということだから、
たとえば5n+1は絶対5nで実行されない記述になるはず。

あとは切片？mを増やせば網羅できそうで、直感的になんか

```math
1 \leqq m < 5
```

で網羅できる気がふんわりした。
そこは数学的に証明しろよとなるけれど、抜けが5の倍数と目視し易いし、範囲が1～60(0)と狭い範囲だったので、
コマンドを`date >> log`として5分刻みに出力がなくなっているかを確認した。
イけてそうだったので、

`1-4,6-9,11-14,16-19,21-24,26-29,31-34,36-39,41-44,46-49,51-54,56-59 * * * *`
から
`1-59/5,2-59/5,3-59/5,4-59/5 * * * *`
に短縮された。

```
1,6,11,16,21
2,7,12,17,22
3,8,13,18,23
4,9,14,19,24
```
手作業に見るにいけそう。

記述の意図がどっちの方が伝わりやすいかについては客観視できないので、置く。
…`1-4`形式であるとは思うんですが…長さがいただけない…と思っちゃうんですが…。


***

これもキーワード的に言語化の不自由と情報の海に埋もれてうまく検索できないシリーズになりそうですが、絶対あるとは言えなさそうな需要なので選外。

cronじゃなく数学ぽいところを探せばいいのかな？



# 参考

* [cronを2分,7分,12分...みたいな半端なタイミングで動かす - Qiita]
* [cronの実行時間微調整, @reboot - Qiita]

[cronの実行時間微調整, @reboot - Qiita]:http://qiita.com/tukiyo3/items/4b3a6ed5b5bc1208bf66

[cronを2分,7分,12分...みたいな半端なタイミングで動かす - Qiita]:http://qiita.com/yudoufu/items/2aecba975f9267af6f19
Pythonでファイル最終行の文字列をGoogle検索

研究していた時に必要になったのでメモ程度に
主に以下のものを参考にしました
http://qiita.com/code_monkey/items/0d38a92a2a2026f5ec82
http://qiita.com/Kodaira_/items/eb5cdef4c4e299794be3

# 準備
- Python2.7
- Google パッケージ

あらかじめGoogleパッケージを`pip install google`などで入れといてください


# コード
```py:search.py
import linecache
from google import search

def google_search(query, limit=1):
    for url in search(query, lang="jp", num=limit, stop=1):
            print url

def main():
    num_lines = sum(1 for line in open('hoge.txt'))
    target_line = linecache.getline('hoge.txt', num_lines)
    print(target_line)
    linecache.clearcache()

    google_search(target_line)

if __name__ == '__main__':
       main()

```

ファイルにはこんな感じ

```hoge.txt
hello python
ok google
hey siri
```


# 実行結果

```
hey siri

https://dekiru.net/article/5312/
```
Appleの公式のページが一番上に来ないんだね...orz


# 言い訳
他の記事のコードをそのまま流用し、秘伝のタレ注ぎ足しな感じで作りました
元々プログラミングから逃げてきた人が、急いで作ったコードなので色々ブサイクなコードだとは自分でも思ってる
固定ページでファイルサイズを取得しダウンロードボタン設置

# 固定ページでACFを使用してファイルサイズを取得してダウンロードボタンを設置
ACF = advanced custom fields

```php
function get_file_size($file){
	$mfile = str_replace( esc_url(home_url('/')),ABSPATH,$file );
	if ( is_file( $mfile ) ){
		$filesize = size_format( filesize( $mfile ) );
		return $filesize;
	}
}
function get_the_file($page_slug,$field_slug){

	$tdir = get_template_directory_uri();
	$page_id = get_page_by_path($page_slug);
	$page_id = $page_id->ID;
	$file_args = get_field($field_slug,$page_id);
	if ($file_args) {
		$file_url = $file_args['url'];
		$file_title = $file_args['title'];
		$file_data_size = get_file_size($file_url);
$html = <<< EOM
<p class="linkBlock">
<a href="{$file_url}" target="_blank">
<img src="{$tdir}/images/pdf_icon.png" alt="pdf">
<span>{$file_title}をダウンロード</span>
<span class="fileSize">
{$file_data_size}
</span>
</a>
</p>
EOM;
echo $html;
	}
	return false;
}
```

##ページslug、カスタムフィールドを指定して

```php
<?php get_the_file($page_slug,$field_slug); ?>
```

style

```sass
.linkBlock{
	width: 100%;
	a{
		margin: auto;
		padding: 0 30px 0 0;
		width: 440px;
		height: 60px;
		text-decoration: none;
		background: #ffae00;
		color: #fff;
		position: relative;
		text-align:right;
		line-height: 60px;
		display: block;
		position: relative;
		&:hover{
			color: #fff;
		}
		&:visited{
			color: #f0f0f0;
		}
		&:before{
			content: " ";
			position: absolute;
			top: 0;
			left: 0;
			width: 0;
			height: 0;
			border-width: 0 0 15px 15px;
			border-style: solid;
			border-color: #ce7706;
			border-bottom-color: transparent;
		}
		&:after{
			content: " ";
			position: absolute;
			bottom: -0;
			right: 0;
			width: 0;
			height: 0;
			border-width: 0 0 15px 15px;
			border-style: solid;
			border-color:transparent ;
			border-bottom-color: #ce7706;
		}
		&>img{
			margin-top:-20px;
			width:33px;
			height:40px;
			position: absolute;
			top: 50%;
			left: 50px;
		}
		span{
			margin:0 auto;
			line-height: 60px;
			&:first-child{
				margin:0 0 0 50px;
			}
		}
	}
	.fileSize{
		margin:0 0 0 30px;
	}

}
```
Chrome site can't be reached Microsoft sites

#問題
Micosoftのサイトでしばしばアクセスエラーが起こる

#対処方法
chromeのlocalcooikeとキャッシュを全部クリアするといいよってかいてある


#参考サイト

https://www.ghacks.net/2016/08/26/fixing-microsoft-site-cant-be-reached-error-in-chrome/

https://www.windowscentral.com/chrome-not-allowing-access-some-microsoft-sites-there-easy-fix
brewでマイナーバージョンを指定してFormulaを入れる方法

brewでマイナーバージョンを指定してFormulaを入れる方法
mysqlをマイナーバージョンを固定してインストールさせたかった時にハマったのでメモ。
別にmysql以外にも使える

# やりたかったこと

brew install mysql@5.6.37とかやりたかった

# 問題

- そもそもbrewにバージョンの概念はあんまりない。
- mysqlのあとにアットマークがついたものがあるのは、あくまで別パッケージとして配布されてるだけ

# 調べてわかったこと

- homebrewのパッケージの中身はrubyのスクリプト
- スクリプトの中でバイナリをakamaiとかから落としてコピーとかしてる
- homebrewの実態は、めちゃくちゃ大きいgitでrubyのスクリプト管理してるだけ(https://github.com/homebrew/homebrew-core/)
- パッケージの中身のスクリプトが更新され、新しいバージョンのパッケージがスクリプトの中から落とされるようになることでアップデートできる
- homebrewがgit cloneしてきたパッケージ全体は`/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core`以下にある。嘘だと思ったら上に書いてあるgithubリポジトリと見比べてみて。
- パッケージのrbファイルは`homrbrew/homebrew-core/Formula`にある(例: https://github.com/Homebrew/homebrew-core/blob/master/Formula/curl.rb)

じゃあ、gitの古いコミットから、入れたいマイナーバージョンの時のrubyスクリプトを見つけて、手元で実行するだけでいいんじゃ？

→それであってた

# やったこと

### githubで検索をかけて、mysql.rbのコミットを全部みた  

だめだった。タイムアウトが起こって（たぶん負荷が大きすぎた）、githubに「ちょっと荷が重いからお前自力でやれ！」って怒られた。

### とりあえず自分の手元(`/usr/.../homebrew-core/Formula`)で、`git log mysql@5.6.rb`してみた  

なんとlogが一個しか（最新版しか）表示されない。それもそのはず、homebrewでは高速化のために最新コミットしかダウンロードしてきてないらしい。

### `git fetch --unshallow` した

このコマンドで、リポジトリの全コミットを落としてこれると聞いたのでやってみた。
10分くらいかかった。

### もう一度`git log mysql@5.6.rb`してみた

ずら〜と出てきた。その中に自分が入れたいマイナーバージョンの最終コミットっぽいのがあったので、それのコミットIDをメモった。
> 例: 8a363290b68c1c6aa8fb22f90443f10b1fb70ecc

### githubの方で確認した

コミット番号からソースコードを確認するために、適当なコミットを開いて、URLのコミットIDを書き換えて、ページに飛んだ。
> 例: https://github.com/Homebrew/homebrew-core/blob/8a363290b68c1c6aa8fb22f90443f10b1fb70ecc/Formula/mysql@5.6.rb

### インストールしてみる

- 直接実行は難しそうだし、そもそもbrewの監視外になってしまう。
- 自分の手元でcheckoutする手もあるらしいけど、そもそもgit fetchにめちゃくちゃ時間かかるからみんなでやりたくない
- brew install にURL渡すとよしなに入れてくれるらしい←これに決定

とりあえずデータをそのまま見られるrawのURLをgithubから取ってくる。
> 例: https://raw.githubusercontent.com/Homebrew/homebrew-core/8a363290b68c1c6aa8fb22f90443f10b1fb70ecc/Formula/mysql%405.6.rb

そして、そのままbrew installに渡してみる。ここで注意なんだけど、chromeとかのアドレスバーからコピペすると、chromeが丁寧に@を%40にURLエンコードしてくれる。これだとうまく動かないので手動で@に直す。

```bash
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8a363290b68c1c6aa8fb22f90443f10b1fb70ecc/Formula/mysql@5.6.rb
```

インストールできた。めでたしめでたし。
Amazon Linuxのディスク容量をオンラインで拡張する

毎回調べてるので自分用メモ

1. AWSマネジメントコンソールからEBSのディスクを拡張する
1. その後インスタンスにログインし、下記の手順で拡張する

```
[ec2-user@hoge ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  20G  0 disk
└─xvda1 202:1    0  12G  0 part /
[ec2-user@hoge ~]$ sudo growpart /dev/xvda 1
CHANGED: disk=/dev/xvda partition=1: start=4096 old: size=25161694,end=25165790 new: size=41938910,end=41943006
[ec2-user@hoge ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1        12G   11G  1.1G   91% /
devtmpfs         2.0G   56K  2.0G    1% /dev
tmpfs            2.0G     0  2.0G    0% /dev/shm
[ec2-user@hoge ~]$ sudo resize2fs /dev/xvda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/xvda1 is now 5242363 (4k) blocks long.
[ec2-user@hoge ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvda1        20G   11G  8.6G   54% /
devtmpfs         2.0G   56K  2.0G    1% /dev
tmpfs            2.0G     0  2.0G    0% /dev/shm
```
個人的に珍しい？と思うHTMLタグを観察してみた

##はじめに
HTML5になってから大分時が経ちましたよね。
最近のwebブラウザでもHTML5が標準になっています。
私が最初にHTMLに触れたのはXHTMLでしたが、HTML5をメインに勉強してきました。
###が、
これいつ使うんだ...と思うタグ(個人的に)が多々あり疑問に思っていたので、
今更一部ではありますが、個人的に気になっていたタグを書いてみようかなと思います。
2012年時点で100~を超えるタグが存在しているみたいです(多いなぁ..)。

今回作った[デモ](https://sengokukun.github.io/html5_tag/)

##書いてみた！
###progress
...進捗状況を表すらしい。
現時点の状況をvalueに数値指定する。js等を使ってvalueをとってくれば面白いことできそう。

```html:index.html
<p>TRUNK CAMP<progress value="50" max="100">50%</progress></p>
```

###details,summary
...detailsで開閉式のウェジットを作成。
summaryはdetailsの要素や説明文を表す。
素直に感動した。

```html:index.html
<details open>
 <summary>TRUNK</summary>
  <details>
   <summary>TRUNK CAMP</summary>
   <ul>
    <li>TRUNK CAMP</li>
    <li>TRUNK CAMP</li>
    <li>TRUNK CAMP</li>
    <li>TRUNK CAMP</li>
    <li>TRUNK CAMP</li>
   </ul>
  </details>
  <details>
   <summary>TRUNK CAMP2</summary>
   <ul>
    <li>TRUNK CAM2P</li>
    <li>TRUNK CAMP2</li>
    <li>TRUNK CAMP2</li>
    <li>TRUNK CAMP2</li>
    <li>TRUNK CAMP2</li>
   </ul>
 </details>
</details>
```

###dialog
...閲覧者が操作可能なダイアログを表すらしい。
jsなどのアラートでええやんはここではNG

```html:index.html
<dialog id="log">
 <p>TRUNK CAMP</p>
 <button type="button" onclick="document.getElementById('log').close();">閉じるし閉じるし</button>
 </dialog>
 <button type="button" onclick="document.getElementById('log').show();">開くし開くし</button>
```

###dfn
...定義語を表すタグ。
abbrで定式名称
dl,dt,ddなどと組み合わせて使ったりできそう。
abbr(略称を表すタグ)と組み合わせることもできるらしい。
むずかすぃ..

```html:index.html
<p>
 <dfn title="HyperText Markup Language">HTML</dfn>
</p>
```

###fieldset,legend
...フォームなどの入力コントロールをまとめたりするタグ
fieldsetで内容をまとめてlegendで内容の見出しを付けるらしい。
名前カッコ良い

```html:index.html
<fieldset>
 <legend>TRUNK CAMP</legend>
 <label for="name">お名前</label><input type="text" name="name" id="name" value="">
 <label for="name">住所</label><input type="text" name="address" id="address" value="">
</fieldset>
```

###cite
...書籍や楽曲などの作品タイトルを表すタグ。
qタグと併用して使ったりもできるらしい。

```html:index.html
<p><cite>TRUNK CAMP</cite>TRUNK</p>
```

##まとめ
上記の他にもまだまだあるHTMLのタグ
なんだこのタグはぁ...と思うことが多々ありました。
正直覚えられる気がしないし他のタグで組むこともできるけど、知って損はないですよね。
奥が深いHTMLをこれからも追求していきたいと思います。

今回参考にした本[できるポケット HTML5&CSS3/2.1全事典](https://www.amazon.co.jp/%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88-HTML5-CSS3-2-1%E5%85%A8%E4%BA%8B%E5%85%B8-%E5%B0%8F%E5%B7%9D/dp/4844337394/ref=sr_1_9?ie=UTF8&qid=1504056823&sr=8-9&keywords=HTML5)

次はCSS3のプロパティもやってみようかなと思います。
Golangの append と copy はどっちが速いのか


Golang のスライスは、append と copy を使って内容を移すことができます。
果たしてどちらが速いのか？

## 環境

OS: macOS 10.12.6
Go version: 1.8.3

## ベンチコード

```go:main_test.go
package main

import "testing"

func BenchmarkAppend(b *testing.B) {
	size := 1000
	src := make([]int, size)
	dst := make([]int, 0, size)
	for i := 0; i < size; i++ {
		src[i] = i
	}
	for i := 0; i < b.N; i++ {
		_ = append(dst, src...)
	}
}

func BenchmarkCopy(b *testing.B) {
	size := 1000
	src := make([]int, size)
	dst := make([]int, size)
	for i := 0; i < size; i++ {
		src[i] = i
	}
	for i := 0; i < b.N; i++ {
		copy(dst, src)
	}
}
```

## ベンチ結果

```bash
$ go test -bench=. -benchmem
BenchmarkAppend-4       20000000                98.8 ns/op             0 B/op          0 allocs/op
BenchmarkCopy-4         20000000                97.1 ns/op             0 B/op          0 allocs/op
PASS
ok      github.com/kawasin73/sample/sample13    4.159s
$ go test -bench=. -benchmem
BenchmarkAppend-4       20000000                97.6 ns/op             0 B/op          0 allocs/op
BenchmarkCopy-4         20000000                97.0 ns/op             0 B/op          0 allocs/op
PASS
ok      github.com/kawasin73/sample/sample13    4.123s
$ go test -bench=. -benchmem
BenchmarkAppend-4       20000000                98.2 ns/op             0 B/op          0 allocs/op
BenchmarkCopy-4         20000000                98.6 ns/op             0 B/op          0 allocs/op
PASS
ok      github.com/kawasin73/sample/sample13    4.176s
```

## 結論

cap が同じ場合には速度は変わらない。
［Safari］inline-blockで横並びにするときの余白調整

`inline-block` で要素を横並びする際に`letter-spacing` でのみ余白の調整をしていたところ、
Safari で余白が詰まりすぎることがあったので、メモ。

# 今までの余白の詰め方
```html:HTML
<ul class="hoge">
  <li class="hoge_child">テキストテキスト</li>
  <li class="hoge_child">テキストテキスト</li>
</ul>
```
```css:CSS
.hoge {
  letter-spacing: -0.4em;
}

.hoge_child {
  display: inline-block;
  letter-spacing: 0;
}
```

# 対処方法
親要素に `font-size: 0` を追加する。
（子要素にテキストが入っている場合、子要素にも `font-size` を指定する。）

```css:CSS
.hoge {
  letter-spacing: -0.4em;
  font-size: 0;
}

.hoge_child {
  display: inline-block;
  letter-spacing: 0;
  font-size: 任意の値;
}
```
SquirrelMail で　メール振り分け

は自動で出来ないと思うので
サンダーバードでIMAP接続し
サンダーバードでメール振り分けをして
出来ればサンダーバードでメールやり取りして欲しいと
鯖缶の方から言われた気がするのでメモ失礼します。

あとで真偽を確認するために。