OmniAICreator/Qiita-1.07M huggingface dataset:
第26回オフラインリアルタイムどう書く「三種類の境界線」の ruby と C++ による実装


問題 http://nabetani.sakura.ne.jp/hena/ord26tribo/
解答リンク集 http://qiita.com/Nabetani/items/8a973a47633558f54ba8
イベント  http://yhpg.doorkeeper.jp/events/15316

当日お見せした実装。

まずは ruby から。

```ruby
def solve(s)
  positions = s.chars.map { |c| c.ord - 'a'.ord }.sort
  bo = [positions.size] * 3
  positions.each do |po|
    h = Math.sqrt(po).floor
    next if  (po - h**2).even? # 上が尖った三角は無視
    [-1, +1, -h * 2].each.with_index do |delta, ix|
      bo[ix] -= 2 if positions.include?(po + delta)
    end
  end
  bo.join(',')
end

DATA.map do |line|
  id, src, expected = line.split(/\s+/)
  actual = solve(src)
  (actual == expected).tap do |ok|
    puts '***NG*** : %s %s->%s ( %s )' % [id, src, actual, expected] unless ok
  end
end.all?.tap { |r| puts(r ? 'ok' : 'NG') }

__END__
0 bdelmnouy 5,7,9
1 a 1,1,1
2 q 1,1,1
45  abcdefghijklmnoqrstuwxy 5,7,7
46  abcdeghijklmnopqrstuvwxy  6,6,6
```

いつも通り、テストデータの大半は省略。

実装戦略は。

* 線を数えていく。
* 隣にあるから線がないとかいうことを度外視して全部数えてから、ここは線がないよね、と、減らしていく。

の二通りがある。

あと、セルとセルの関係をどこまで算術的にやるのか、どこまでデータを持つのかという部分もいろいろある。

この実装の場合は、減らしていく方向で、全部算術的に求めている。
減らしていく境界線なのかどうかを判断する際、下向き三角だけを見るようにしている。
そうすると「bの左にはセルがない」という状況に対処する必要がなくなり、ちょっと楽になる。

で。
当日、C++ に移植した。
アルゴリズムはまったく同じ。

```cpp:C++
// clang++ -std=c++11 -Wall
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <sstream>

using namespace std;

vector<int> get_positions( string const & src )
{
  vector<int> positions;
  for( auto ch : src ){
    positions.push_back( ch - 'a' );
  }
  return positions;
}

string solve( string const & src )
{
  vector<int> positions = get_positions( src );
  int s = positions.size();
  int borders[3]={s,s,s};
  for( auto po : positions ){
    int h = static_cast<int>( floor( sqrt( po ) ) );
    if ( (po-h*h)%2==0 ){
      continue;
    }
    for( int ix=0 ; ix<3 ; ++ix ){
      int delta = (vector<int>{-1,1,-h*2})[ix];
      if ( positions.end() != find( positions.begin(), positions.end(), po+delta ) ){
        borders[ix] -= 2;
      }
    }
  }
  return (stringstream()<<borders[0]<<","<<borders[1]<<","<<borders[2] ).str();
}

void test( string const & src, string const & expected )
{
  string actual = solve( src );
  bool ok = actual==expected;
  cout
    <<( ok ? "ok " : "***NG*** " )<< src << " => " << actual;
  if ( ! ok ){
    cout << " != " <<  expected;
  }
  cout  << endl;
}

void test_all()
{
/*0*/ test( "bdelmnouy", "5,7,9" );  
/* 略 */
/*46*/ test( "abcdeghijklmnopqrstuvwxy", "6,6,6" );
}
int main()
{
  test_all();
}
```

`get_positions` が、STL をちゃんと使えばもっとシンプルになると思うんだけど、STL力が足りず、こんなところで。
行数では、ruby の 3倍ぐらいの感じ。そんなもんかな。
ArchLinuxでLXCを動かしてみた

dockerは使いやすいが、lxcもたまには使おう。openvzのことはもう忘れたい。。

## ネットワーク設定

* [ArchLinuxでネットワーク設定 (ブリッジ、bonding) - Qiita](http://qiita.com/tukiyo3/items/08c8b0180eae29055736#2-3)


## パッケージインストール

```bash:必須パッケージ
pacman -Sy lxc bridge-utils wget rsync
yaourt -S --noconfirm yum
```

```bash:vagrant用lxcプラグインインストール(vagrant使いたい人だけ。自分は入れない)
pacman -Sy vagrant
vagrant plugin install vagrant-lxc
export VAGRANT_DEFAULT_PROVIDER=lxc
```

## コンテナ作成

```bash:centos7のコンテナの作成
MIRROR=http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/os/x86_64/ \
  sudo /usr/share/lxc/templates/lxc-centos -n centos7 -R 7
```


## コンテナ起動の前準備

```diff:/var/lib/lxc/centos7/config
+ lxc.network.type = veth
+ lxc.network.flags = up
+ lxc.network.link = br0
```

## コンテナ起動

```bash:コンテナのrootユーザのパスワード設定
sudo chroot /var/lib/lxc/centos7/rootfs passwd
```

```bash:
sudo lxc-start -f /var/lib/lxc/centos7/config -n centos7
# root:先ほど設定したパスワード でログイン
```

```bash:コンテナ操作
切断: ctrl-a, q
接続: sudo lxc-console -n centos7
```

## lxcコンテナのネットワーク設定

```diff:/etc/sysconfig/network-scripts/ifcfg-eth0
- BOOTPROTO=dhcp
+ BOOTPROTO=static
+ IPADDR=192.168.100.60
+ NETMASK=255.255.255.0
+ GATEWAY=192.168.100.1
```

```bash:設定反映
service network restart
```

* [Linux Containers - ArchWiki](https://wiki.archlinux.org/index.php/Linux_Containers)
* [Ubuntu - LXC (Linux Container) を使い超軽量仮想環境を手に入れよう - Qiita](http://qiita.com/tukiyo3/items/672d556c6cf8e7458563)
* [Hachulog: LXCにArchLinuxを入れる](http://hachulog.blogspot.jp/2013/03/lxcarchlinux.html)


* わかりやすい概念図

![system.png](https://qiita-image-store.s3.amazonaws.com/0/25728/03472f31-735b-a72c-75b8-84e978d0905a.png)

* ブリッジ設定を作る前に構築したKVMがある場合、設定を以下に変更しないと起動できないので注意。

![スクリーンショット 2014-10-05 8.38.41.png](https://qiita-image-store.s3.amazonaws.com/0/25728/1d902e9b-f626-01e5-e60b-d66fef2098c0.png)
[baserCMS][cache]ページ閲覧時に他のページの内容が表示されてしまう問題



キャッシュ動作が有効の際に、閲覧する固定ページの内容に、他のページ内容が表示されてしまう場合が稀にあります。

- キャッシュが有効なのは通常動作
- 管理側にログイン中は再現されない（閲覧時にキャッシュが利用されないため）
- debugモードが 1 の場合は再現されない（閲覧時にキャッシュが利用されないため）

キャッシュの利用を抑制することでお手軽に解決できますが、表示パフォーマンスが落ちるため原因を調べてみました。

```install.php
Configure::write('Cache.disable', true);
```


## 発生したタイミングと環境

固定ページのキャッシュが生成されたあと、そのキャッシュファイルが、他の固定ページ表示（URLの表示）のタイミングで利用されてしまうとき。

### 環境

- 大塚商会: アルファメールプレミア: http://www.alpha-prm.jp/
 - PHP 5.3.3
 - baserCMS 3.0.5


## 原因

Inflector::slug() での文字列生成に失敗している。

```/lib/Baser/Routing/Filter/BcCacheDispatcher.php
$path = strtolower(Inflector::slug($path));
```

ここで生成される文字列は、固定ページ用のキャッシュファイル名となっている。
例：/app/tmp/cache/views/hoge_fuga.php
※「/」はアンダースコアに変換される


## 対策

/lib/Cake/Utility/Inflector.php の slug() をcake 1.2.12（/cake/libs/inflector.php）の内容にする。

- /lib/Cake/Utility/Inflector.php を /app/Utility/Inflector.php にコピーする
- slug() の内容を以下に書換える

```/app/Utility/Inflector.php
	public static function slug($string, $replacement = '_') {
		if ($_SERVER["SERVER_NAME"] == 'example.com') {
			// 本番環境で cacheファイルが正しく生成されないため、
			// cake 1.2.12（/cake/libs/inflector.php）のコードを適用
			App::uses('String', 'Utility');
			$map = array(
				'/à|á|å|â/' => 'a',
				'/è|é|ê|ẽ|ë/' => 'e',
				'/ì|í|î/' => 'i',
				'/ò|ó|ô|ø/' => 'o',
				'/ù|ú|ů|û/' => 'u',
				'/ç/' => 'c',
				'/ñ/' => 'n',
				'/ä|æ/' => 'ae',
				'/ö/' => 'oe',
				'/ü/' => 'ue',
				'/Ä/' => 'Ae',
				'/Ü/' => 'Ue',
				'/Ö/' => 'Oe',
				'/ß/' => 'ss',
				'/[^\w\s]/' => ' ',
				'/\\s+/' => $replacement,
				String::insert('/^[:replacement]+|[:replacement]+$/', array('replacement' => preg_quote($replacement, '/'))) => '',
			);
			return preg_replace(array_keys($map), array_values($map), $string);
		} else {
			$quotedReplacement = preg_quote($replacement, '/');

			$merge = array(
				'/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
				'/[\s\p{Zs}]+/mu' => $replacement,
				sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
			);

			$map = self::$_transliteration + $merge;
			return preg_replace(array_keys($map), array_values($map), $string);
		}

	}
```

## 確認

- /app/tmp/cache/views 内に生成されるキャッシュファイルが、URLをベースにしたファイル名で生成されていればOK
- 固定ページのキャッシュ生成後、閲覧する固定ページの内容に、他のページ内容が表示されなければOK


## 参考情報

http://dxd8.com/archives/209/
【ShellShock】攻撃が行われたかどうかをhttpdのログから確認するコマンドのメモ（自分用）

「ShellShock」と呼ばれるGNU bash の脆弱性への攻撃や確認が行われたかどうかをhttpdのログから確認するコマンドのメモ（自分用）

## コマンド
```
grep '() { :; };' access_log
```

## 注意事項、制限事項、その他補足事項
※あくまで簡易的な確認方法。一般的な設定のWebサーバーのログに残らない形で攻撃することもできるそうです。
※おそらくroot権限が必要なので、頭に```sudo```つけたりする必要があるかも。
※httpd(Apache)のアクセスログ「access_log」があるのは、「/var/log/httpd」あたり。
※nginxの場合、ファイルは「access.log」といった名前のようです。
※最低限マッチさせるのに必要なのはパターンのは、```() {```ぐらいまでで良いかも。


## 参考にさせていただいたページ
* https://www.jpcert.or.jp/at/2014/at140037.html
* http://www.netagent-blog.jp/archives/51996406.html
* http://emeth.jp/diary/?p=257
Eclipseに新規プロジェクトをimportしたい場合のメモ

Eclipseに新規プロジェクトをimportしたい場合のメモ

## tightVNCをプロジェクトとして入れたい

![Screen Shot 2014-10-05 at 4.42.31.png](https://qiita-image-store.s3.amazonaws.com/0/30325/5965540b-6485-c30c-228d-71494bd56617.png "Screen Shot 2014-10-05 at 4.42.31.png")

* こっからprojectを取ってくる。
* importするには、.projectがないといけないみたい。
* 既存プロジェクトから.projectを引用。
* それをプロジェクト直下に追加。

## Packageの編集

Packageがうまく分割されていない場合エラーが出る。

* プロジェクトを右クリック。
* [ New ] > [ Source Folder ]
* 適切なpathを入れる(エラーが出ている内に、エラーマークをクリックしてみると、適切な場所にソースコードを移動してくれるからそれを参考に Source Folder を作るといいかも)。
* 自動で残りのPackageを割り振りしてくれた。


## Build Pathの編集

* プロジェクトを右クリック。
* [ Build Path ] > [ Configure Build Path… ]

### Librariesタブ

##### JRE System Libraryを追加

* Add Library… を選択。
* JRE System Libraryを選択。
* Workspace default JREを選択。

##### External JARを追加

* Add External JARs… を選択。
* プロジェクト下の、src > libs > jsch-0.1.50.jarを選択。

### Order and Exportタブ

* 追加した項目にチェックマークを入れる。

---

これでエラーは消えた・・・！
Homebrew CaskにPrott追加しておきましたよ

Homebrew CaskにPrott追加しておきましたよ！

Homebrew Cask
https://github.com/caskroom/homebrew-cask

Prott
https://prottapp.com/

それだけです。

アジャイル開発に使いやすそうで、早速使ってみます:)


PS.
QiitaにiPhoneから投稿すると、改行が2回されてしまうバグあるっぽいですね…
Doxygenから奇麗なPDFで出力する方法


-
一度、RTFで出力

```doxygen
GENERATE_RTF           = YES
RTF_HYPERLINKS         = YES
```

-
MicrosoftWORD経由でRTFを読み込み

-
Ctrl-A 全選択でFontを変更

-
PDFで保存
これまでの投稿の組み合わせ技 - Clojure で アニメ情報をtweetする

たまにはブログに誘導してみてもいいんじゃないだろうか :smiley: 

http://fscoward.hateblo.jp/entry/2014/10/05/024545

# ポイント

doall で 遅延シーケンス の要素をすべて評価

っていうかそれ以外にやる方法あれば教えて下さい(*´ω｀*)
vSphere CLIのperlでXML処理が遅い時の確認事項

## 概要

vSphere CLIに含まれるperlでは、インストール直後の状態ではXML::SimpleがパーサとしてXML::SAX::PurePerlをパーサとして使うので、XML読込処理速度が遅い。

## 詳細

### 背景

Windows用vSphere CLIは、（少なくとも5.5版までは）実質的に[ActivePerl](http://www.activestate.com/activeperl) 5.6＋VMware社製ライブラリおよびスクリプトである。vSphere CLIをインストールした環境で、管理者が効率化のためperlスクリプトで管理ツールを開発、追加することは少なくないだろう。

Perlには複数のXMLライブラリ、およびそれらがXML解析に使用するXMLパーサライブラリがあり、これらはインターフェースがそれぞれに異なるほか、処理速度にも大きな開きがある（参考1、2）。インターフェースの違いを吸収するラッパーとしてXML::Simpleがあり、管理者はXMLを処理する際、XML::Simpleライブラリを使いたいと思うこともすくなくないだろう。

XML::Simpleの処理速度については、内部では前述のライブラリ群のいずれかが使われ、したがってどれが使用されるかで処理速度が変わる。実際に管理ツールを作成してvSphere CLI 5.0上で実行したところ、明らかに処理は遅かった。

### vSphere CLIで使用されるXMLパーサ

XML::Simpleが実際にどのパーサを使用するかを調べる方法が、ブログエントリ「[iandeth. - XML::Simple は遅い説における意外な落とし穴](http://iandeth.dyndns.org/mt/ian/archives/000589.html)」の「デフォルトで呼ばれるXML::SAXパーサーの確認方法」ブロックで紹介されている。vSphere CLIのコマンドプロンプトで、以下のワンライナーを実行すれば、同等の結果が得られる。

    perl -MXML::SAX -e "print map { $_->{'Name'} . qq(\n) } @{XML::SAX->parsers}"

vSphere CLI 5.0環境で実施したところ、XMLパーサとしてインストールされているのはXML::SAX::PurePerlだけだった。

### XML処理速度の改善

以下を行えば、XML読込処理速度を改善できることになる。

1. XML::LibXMLなどの高速なライブラリをインストールする。
2. 環境変数「XML_SIMPLE_PREFERRED_PARSER」またはパッケージ変数「$XML::Simple::PREFERRED_PARSER」にてパーサーを指定する。

詳細は前述のブログエントリ「iandeth. - XML::Simple は遅い説における意外な落とし穴」を参考にすること。

## 参考

1. [Perl で XML の処理はどれが速いかベンチ : NDO::Weblog](http://naoya.dyndns.org/~naoya/mt/archives/001209.html)
2. [XML::Simple におけるパーサーの実行速度比較 - naoyaのはてなダイアリー](http://d.hatena.ne.jp/naoya/20050801/1122884138)
3. [iandeth. - XML::Simple は遅い説における意外な落とし穴](http://iandeth.dyndns.org/mt/ian/archives/000589.html)
vSphere 5.1または5.5への接続がHandshake failureで失敗する時の対処

## 概要

特定のWindows OSとvSphere 5.1または5.5の組み合わせで、vSphere ClientまたはPower CLIでの接続がHandshake failureで失敗する。この問題はWindowsのHotfixの適用で解消できる。

## 詳細

vSphere 5.5でのセキュリティ強化の影響で、Windows XPおよびWindows 2003からの接続は失敗することがある。この際、サーバ側では「No matching cipher suite」エラーになり、クライアント側では「Handshake failure」になる。この問題は「[VMware KB: vSphere Client and vSphere PowerCLI may fail to connect to vCenter Server 5.1 and 5.5 due to a Handshake failure (2049143)](http://kb.vmware.com/kb/2049143)」にまとめられている。

### Hotfix適用による解消方法

Windows 2003またはWindows XP 64bit版では、WindowsのHotfixの適用で解消できる。OSへのナレッジに記載されているMSのHotfix適用で回避できる。適用すべきHotfixについては、上記KB:2049143にて確認する。Windowsのアーキテクチャによって、IA64用、x64用、i386用と分かれているので、注意すること。

### Hotfix適用ができないときのワークアラウンド

何らかの理由でHotfixを適用できない場合、vCenterおよびESXiの許容するセキュリティ（暗号化）強度を弱めることもできる。以下の二点の修正を行う。

* vCenter Serverの構成ファイル vpxd.cfg に <cipherList>ALL</cipherList> を追加する。
* ESXiの /etc/vmware/rhttpproxy/config.xml に <cipherList>ALL</cipherList> を追加する。

こちらも詳細は上記KB:2049143で確認する。vCenter Serverについては、Windows OS上にvCenter Serverをインストールしているときと、vCenter Server Applianceを使用している場合で説明が分かれているので、注意すること。

なお、このワークアラウンドはセキュリティを犠牲にするものであることは承知しておくこと。

## 参考

* [VMware KB: vSphere Client and vSphere PowerCLI may fail to connect to vCenter Server 5.1 and 5.5 due to a Handshake failure (2049143)](http://kb.vmware.com/kb/2049143)

本投稿内容も、本文中に説明しているように、上記参考先の情報に基づいて作成した。正確な情報が必要な場合は、必ずこれらの一次情報を確認すること。
Ubuntu14.04+Java8でSpring ROO のエラーが出る

rooのファイルを解答して、$ROO_HOME/bin にPATHを通して、 roo.shを実行すればいいだけのはずなのだが・・・

```
ERROR: Bundle org.springframework.uaa.client [81] Error starting file:/home/newgyu/dev/roo/1.2.5/bundle/org.springframework.uaa.client-1.0.2.RELEASE.jar (org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.uaa.client [81]: Unable to resolve 81.0: missing requirement [81.0] package; (package=javax.xml.parsers))
org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.uaa.client [81]: Unable to resolve 81.0: missing requirement [81.0] package; (package=javax.xml.parsers)
	at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3564)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:1797)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1192)
	at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:266)
	at java.lang.Thread.run(Thread.java:745)

```

なんだこれ。
ググると一件だけそれっぽいのが。
http://stackoverflow.com/questions/25777637/cannot-run-spring-roo-shell-unable-to-resolve-missing-requirement-packa

どうやらROOに同梱されているfelixというやつの不具合っぽい。Java8との相性なのか？

> I downloaded the Apache Felix Framework Distribution here and from the felix distribution, I moved the file bin/felix.jar into spring-roo.1.2.5.RELEASE/bin. After that, everything works!

とあるように、http://felix.apache.org/downloads.cgi#framework からFelix Framework Distributionをダウンロードして、その中のbin/felix.jarを$ROO_HOME/bin/org.apache.felix.framework-3.2.2.jar と差し替えると動いた。
muttrcの設定

muttでメールを現在使っているユーザーは~/に設定する。
また今後の追加されるユーザーにいちいち追加するのは面倒臭いので。
/etc/skel/.muttrcに設定しておくと、良い。

```vim:.muttrc
auto_view text/html

color normal green default

# pager
color hdrdefault cyan default
color header yellow default ^(From|Subject):
color quoted cyan default
color signature red default
color attachment blue default
color body magenta default "(ftp|http)://[^ ]+" # point out URLs
color body magenta default [-a-z_0-9.]+@[-a-z_0-9.]+ # e-mail addresses
color search black yellow # how to hilite search patterns in the pager
# Maildir
set mbox_type="Maildir"
set folder="~/Maildir/"
set spoolfile="~/Maildir/"
```
rails consoleでreadline(LoadError)が出た場合の対処


railsプロジェクトを作って、 ```rails console``` をしたら以下のようなエラーが出た。

```
$ bundle exec rails console
~/.rbenv/versions/2.1.3/lib/ruby/2.1.0/irb/completion.rb:9:in `require': dlopen(~/.rbenv/versions/2.1.3/lib/ruby/2.1.0/x86_64-darwin13.0/readline.bundle, 9): Library not loaded: @@HOMEBREW_PREFIX@@/opt/readline/lib/libreadline.6.dylib (LoadError)
  Referenced from: ~/.rbenv/versions/2.1.3/lib/ruby/2.1.0/x86_64-darwin13.0/readline.bundle
  Reason: image not found - ~/.rbenv/versions/2.1.3/lib/ruby/2.1.0/x86_64-darwin13.0/readline.bundle
        from ~/.rbenv/versions/2.1.3/lib/ruby/2.1.0/irb/completion.rb:9:in `<top (required)>'
```


単純にインストールし忘れたと思ったけど、違った。

```
$ brew install readline
Warning: readline-6.3.8 already installed
```

どうやら、rb-readlineが必要らしいので、Gemfileに```gem 'rb-readline'``` を追加してインストール

```
$ bundle install --path vendor/bundle
```

もう一度実行。

```
$ bundle exec rails console
Loading development environment (Rails 4.1.6)
irb(main):001:0>
```

成功！
.bash_profileや.bashrcをフラグメントする(.bash.d)

Qiitaのどこかで見た気がするのだけど、探しても見つからないので書いておきます。
完全に人のふんどしですが「ナイスアイデア！」と思ったので。。
http://mattintosh.blog.so-net.ne.jp/2012-10-07-4

.bash_profileとか.bashrcってどんどん増えてきますよね？
また、Ansibleとかで.bash_profileに追記をしようと思うとsedを駆使したりしてちょっと面倒くさかったりしますよね？

```bash:.bash_profile
# .bash.d fragment
if [ -d "${HOME}/.bash.d" ] ; then
    for f in "${HOME}"/.bash.d/*.sh ; do
        [ -x "$f" ] && . "$f"
    done
    unset f
fi
```

こう書いておくと、.bash.dの中を順々に読み込みます。

```
.bash_profile
.bash.d
├── 100_android.sh
├── 200_go.sh
├── 300_ruby.sh
├── 400_node.sh
└── 500_playframework.sh
```

この方法のメリットは、

* 見通しが良くなる
* ファイル名の付け方で読み込み順序を制御できる
* chmod で +-x することで一時的に読み込まないようにしやすい
* Ansibleなどでファイルをcopyするだけでいいのでplay-bookが書きやすい

というところです。

デメリットは、

* インストールスクリプトで.bash_profileを追記するようなものは相性が悪い

というところでしょうか。
.gitignore を晒す



```.gitignore
#Logs
application/logs/*.php

# Content types
/application/xml/types/*.xml

# Custom builds and generated php files
/core/documentation/build
/core/views/admin/content/translations.php

# Attachs and cache files #
*.tmp
/attach/cache/
/attach/
/application/cache/_bancha/*.css
/application/cache/_bancha/*.js

*.o
*tmp*.txt
tagjmp
tags

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.opensdf
*.unsuccessfulbuild
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#MonoDevelop
*.pidb
*.userprefs

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*
*.sass-cache

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

#NuGet
packages/

#ncrunch
*ncrunch*
*crunch*.local.xml

# visual studio database projects
*.dbmdl

#Test files
*.testsettings

#xcode
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
**/*.xcodeproj/*
!**/*.xcodeproj/project.pbxproj
!*.xcodeproj/default.*
!*.xcworkspace/*
!*.xcworkspace/contents.xcworkspacedata**/*.xcodeproj/default.*
```
brew bundleが使えなくなったのでとりあえず使えるようにした

以前からWarning: brew bundle is unsupportedと表示されていたhomebrewのbrew bundleがついに使えなくなったっぽいので、
その場しのぎですが、公式リポジトリのbrew-bundle.rbをコピーして使えるようにしました。

```bash
brew tap matsu-chara/brew-bundle
install brew-bundle
```

とすれば、

```bash
brew bundle
```

できるはずです。

何も手を加えてないので、そのうち問題が発生すると思いますが、とりあえずこんな感じで対処しました。

#### 追記

[homebrew/boneyard](https://github.com/Homebrew/homebrew-boneyard/)に、今までの廃止されたコマンドとformulaが保存されているようです。

bundle以外のもろもろも含めた入れたい場合は、上記の方法の代わりに

```bash
brew tap homebrew/boneyard
```

とすることでbrew bundleが使えるようになります。（この場合は`brew install brew-bundle`は不要です）

# 追記2

brew bundleが削除（boneyardに移動）されることになったのかについての議論はhttps://github.com/Homebrew/homebrew/issues/28657 にあります。

ざっくり言うと、contributeされたコマンドについてのissuesやプルリクを受けるメンテナーがいないために、特に`brew service`を中心に問題が色々と発生しているので、contribコマンドは全部coreのコードから切り離して管理を楽にしよう（使いたい人は外部でコマンドごとに専用リポジトリ立てて、そこでメンテしてね）というのが目的のようです。


#### 参考

[Homebrewのコマンドを作る方法
](http://rcmdnk.github.io/blog/2014/08/14/computer-homebrew-mac/)

[Homebrew用のパッケージの簡単な作り方
](http://rcmdnk.github.io/blog/2013/09/17/computer-mac-homebrew/)

[caskroom/homebrew-cask](https://github.com/caskroom/homebrew-cask)
CASを使ったロックフリー(Lock-free)共有カウンタの作成方法

# CASとは何か
CAS = Compare And Swap
すなわち比較と交換をアトミックに行う命令のこと。 
 
## 共有カウンタの利用方法
以下の順に従ってカウンタを操作する。
1. 共有カウンタをローカル変数oldに読み込む
2. oldの値に+1したものをローカル変数newとする
3. **共有カウンタの値がoldと一致したら**、newの値を共有カウンタに書き込む

3.がCASの命令そのもの。

## コードの例

シチュエーションは、共有カウンタを一つインクリメントした値が欲しい場合。
こんな感じで書く。

```c
int global;

int cnt_inc(){
    int old,new;
    do{
        old = global;
        new = old+1;
    }while(!cas(&global,old,new));
    
    return new;
}
```
## C++でのCASの利用方法について

### c++11を使える環境の方
compare_exchange_weak()を利用するとよい。
既にありました。
http://qiita.com/episteme/items/9e6e17512ecadb2ccb40

### c++11を使えない環境の方
__sync_bool_compare_and_swap()を利用するとよい。


### どっちも使えるけど...

compare_exchange_weak()を利用する場合、CASしたい変数をatomic型でwrapして操作しないといけない。

```cpp
int global;
atomic<int> global_atomic(global);
```

構造体のあるメンバに対してCASしたいという時は、いちいちatomic型の変数を用意する必要があるためやや面倒なので\_\_sync\_\_bool\_compare\_and\_swap()を使うと良いかもしれない。
どちらがパフォーマンス的に優れているか等はちゃんと調べてないので分からないです。ごめんなさい。


## 参考資料
冬のLock free祭り safe
http://www.slideshare.net/kumagi/lock-free-safe
Google admob SDK 6.12.0でEventKit、EventKitUIフレームワークが必須に

# Google admob SDK はEventKit と EventKitUIフレームワークが必要になりました

```
Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_EKEvent", referenced from:
      objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
  "_OBJC_CLASS_$_EKEventEditViewController", referenced from:
      objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

こんなエラーが出たら
プロジェクトにEventKitとEventKitUIフレームワークを追加しましょう。

追加後はcleanしてからbuildで確認を
はじめてのQiita


　今までread onlyでQiitaを利用してきた。MacJournalを利用して今までの経験を蓄積してきたけれども、output先をここに変えることで新しいまとまりも生まれると思って今日からチャレンジしてみる。

# Kobito

　ログインをするときに困った。
　普段はGitHubアカウントを使ってQiita記事を読んでいたけども、そのままだとKobitoアプリからはログインできない。起動時に表示されるウィンドウから「パスワード未設定」をクリックして、ウィンドウ左のダイアログを進めるとログインできるようになる。
　IDはGitHubのものと同じで、パスワードはそのときに設定したものになる。
SSIでmilkcocoaハッカソンを行いました。

##SSIでmilkcocoaハッカソンを行いました。


_milkcocoaとは
JavaScriptを数行書くだけでバックエンドを提供してくれるクラウドサービス
フロントのコーディングだけでアプリケーションを作ることができます。_


![写真 2014-10-04 13 18 52.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/1e3f0d38-047f-8a0c-8a3c-da778a472106.jpeg)



http://bd937566c2d179a9bc480c61b1.doorkeeper.jp/events/14805

今回は１６名近く集まりました。
参加してくださり、ありがとうございます。
![写真 2014-10-04 13 13 46.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/5f86c048-e3e8-5aeb-da18-4b42ddbd9107.jpeg)


今回は、jThreeさんもハッカソンを盛り上げてくださりました。




![写真 2014-10-04 13 56 58.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/de55660a-e002-bc54-3fa9-97b9bec404c7.jpeg)
（松田さんの画像を上げると、なぜか反転しちゃう。
反転させてアップするとそのまま反転させた状態なので__反転させたままにしておきます。__）

![写真 2014-10-04 16 01 36.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/9931f46b-3725-d131-20f4-c4b940fe0153.jpeg)




<h1>ミクちゃん可愛い。</h1>



この初音ミクを踊らせたり、歌わせたりします。
このエディタを使うと便利です。
http://editor.jthree.jp/?id=vI0Tfw


参加者の方でリコーのエンジニアさんがtheta360を紹介してくださりました。

![スクリーンショット 2014-10-04 22.23.58.png](https://qiita-image-store.s3.amazonaws.com/0/54243/7da75bfc-f485-1aed-d9e5-7bd42bab6aec.png)

https://theta360.com/ja/
ぼくはtheta360の素材を使って製作を行います。



##作品たち





theta360のサイトから素材を引っ張ってきてチャット機能を追加
http://bee-omuk4ync.mlkcca-app.com/

![スクリーンショット 2014-10-04 15.13.55.png](https://qiita-image-store.s3.amazonaws.com/0/54243/6c18ccf7-6c5a-b06a-760f-1f1106d67a44.png)

画像を選んで送信すると以下のような感じに
とってもおしゃれな感じ。画像を入れ替えてみたいですね。
![写真 2014-10-04 17 53 22.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/3d8bf443-7962-fcd6-bc14-2adfc671c463.jpeg)

こちらの作品は初音ミクが踊っている周りに３色のオブジェクトをリアルタイムに配置出来るというもの。
以下のurlで実際に試すことができます。
http://editor.jthree.jp/?id=KcYnng

![写真 2014-10-04 17 55 25.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/a4444ce4-24f0-7b13-e698-f4c4ca653880.jpeg)

次の作品はサイトの見ている場所をシンクさせるというもの。
遠隔でサイトを説明すると伝わりにくかったりするかと思うのですが、これさえあれば同じページに強制的に見せることができるので楽チンですね。

デモ：
http://takemikami.com/milkcocoa-browsersync-demo/
ソースコード：
https://github.com/takemikami/milkcocoa-browsersync-demo

![写真 2014-10-04 17 58 57.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/86a03a80-b20c-f216-fe62-9c68e677b533.jpeg)

最後の作品。
![写真 2014-10-04 18 03 22.jpg](https://qiita-image-store.s3.amazonaws.com/0/54243/6e4dfd2a-155d-345c-c99e-7666bbe5cb88.jpeg)

初音ミクの下にケモノなのでしょうか。**FFのラスボスみたいですね。**


<blockquote class="twitter-tweet" lang="ja"><p>面白かったのでまた参加したい <a href="https://twitter.com/hashtag/mlkcca?src=hash">#mlkcca</a></p>&mdash; Hiromichi Ema (@ema_hiro) <a href="https://twitter.com/ema_hiro/status/518334985548222465">2014, 10月 4</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>



<blockquote class="twitter-tweet" lang="ja"><p>これくらいのを２時間ちょっとで作れる。jThree＆Milkcocoa、熱い。</p>&mdash; もし (@moshisora990) <a href="https://twitter.com/moshisora990/status/518327691192188928">2014, 10月 4</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


##次回は渋谷です。１０月１８日か１９日のどちらかに行います。（もしかしたら、両日行うかも？）再度、告知します。
【初心者向け】Raspberry Pi Hackason 備忘録

# Raspberry Pi Hackason

Raspberry Pi B+でハッカソンしてきました！  
その際に使用したModuleを備忘録

* 使用OS  
Raspbian

## Default Config

* launch config
`sudo raspi-config`  

* I2C(アイ・スクエア・シー) 
Raspberry PiとModuleを接続する際に使用
[参考画像](http://www.rs-online.com/designspark/electronics/jpn/blog/introducing-the-raspberry-pi-b-plus)
 - /etc/moduleの編集  
 `i2c-dev`の１行を追加  
  /devi2c-\*が有効になる

 - /etc/modprobe.e/raspi-blacklist.confの編集  
 `blacklist i2c-bcm2708`の１行をコメントアウト(#) 

 - i2c-toolsのインストール  
 `sudo apt-get install i2c-tools`

 - デバイスアドレスの確認  
 `sudo i2cdetect 1`

* Reference
 - http://openrtm.org/openrtm/ja/content/pirt-unit_with_i2cdevices

## Module

### LED module

* LED光らせる(super user only)
 - 25pinを使用の場合  
 `/home/pi# echo 25 > /sys/class/gpio/export`
 - ディレクトリ移動  
 `/home/pi# cd /sys/class/gpio/gpio25`
 - GPIO25を出力に設定
 `/sys/class/gpio/gpio#25 echo out > direction`
 - 光らせる  
 `/sys/class/gpio/gpio#25 echo 1 > value`
 - 消灯
 `/sys/class/gpio/gpio#25 echo 0 > value`

* Reference
 - http://lchikaamazon.hatenablog.com/entry/2013/11/18/171637

### 気圧 module
* 使ったmodule
 - LPS331

* 起動確認
WHO_AM_Iが表示されるか

* Reference
 - http://technology-memo.seesaa.net/article/373660825.html
 - http://d.hatena.ne.jp/beiz23/20140726/1406378550
 - http://mutsumi3memo.blog.fc2.com/blog-entry-25.html

### LCD module

* 文字を表示する
 - I2Cで接続して表示
 - ASCIIで表示する

* Reference
 - http://sea-mountain.hatenablog.jp/entry/2013/09/21/231242
Atom Shell v0.17.1でデスクトップキャプチャーを最速で試す

# やり方

- Atom Shellを起動してDevToolsを表示する
- コンソールに以下を打ち込む
 - location.href="http://kjunichi.github.io/atom-shell/desktopCapture.html";

# 関連記事

- [Atom Shellでデスクトップキャプチャーを最速で試す！: misc](http://kjunichi.cocolog-nifty.com/misc/2014/10/post-73c9.html)

# 関連投稿

- [atom-shell - Atom Shellを簡単に試す方法 - Qiita](http://qiita.com/kjunichi/items/261bd33bb8c5ff5a126b)
Ruby | Aun | 阿吽の呼吸。「ツー」といえば「カー」など A に呼応して B のメッセージを返却するための Aun gem を作成（出来心。用途なし） #ruby #aun

# Ruby | Aun | 阿吽の呼吸。「ツー」といえば「カー」など A に呼応して B のメッセージを返却するための Aun gem を作成（出来心。用途なし） #ruby #aun

## 概要
「ツー」といえば「カー」など A に呼応して B のメッセージを返却するための Aun gem を作成しました。
出来心で作ったので、 **特に用途はありません(重要)** 。

## デモ
こんな感じです

![aun.gif](https://qiita-image-store.s3.amazonaws.com/0/43480/9e82f915-cad7-cec4-5e4a-5f80fac8512b.gif)

## 操作方法について
GitHub の README をご確認ください。

[Aun GitHub README](https://github.com/tbpgr/aun/blob/master/README.md)

## 参照
* [Aun GitHub](https://github.com/tbpgr/aun)
* [Aun RubyGems](http://rubygems.org/gems/aun)
Writing Fast Ruby

[Writing Fast Ruby by Erik Michaels-Ober](https://speakerdeck.com/sferik/writing-fast-ruby)のまとめ。

！！！基本的に用途が違うもの同士を比較しています。間違っても、「こう書いた方が速いらしいからこう書こう」とは思わないでください！！！

#Proc#call 対 yield

```rb
=begin
* Proc#call vs yield
* yield が5倍以上速い
=end

def slow(&block)
  block.call
end

def fast
  yield
end
```

#Block 対 Symbol#to_proc

```rb
=begin
* Block 対 Symbol#to_proc
* Symbol#to_proc が20%速い
=end

def slow
  (1..100).each {|i| i.to_s }
end

def fast
  (1..100).each {$:to_s}
end
```

#Enumerable#map and Array#flatten 対 Enumerable#flat_map

```rb
=begin
* Enumerable#map and Array#flatten 対 Enumerable#flat_map
* Enumerable#flat_map が4.5倍以上速い
=end

enum.map do
 #do something
end.flatten(1)

enum.flat_map do
 #do something
end
```

#Hash#merge 対 Hash#merge!

```rb
=begin
* Hash#merge 対 Hash#merge!
* Hash#merge! が3倍以上速い
=end

enum.inject({}) do |h, e|
  h.merge(e => e)
end

enum.inject({}) do |h, e|
  h.merge!(e => e)
end
```

#Hash#merge! 対 Hash#[]=


```rb
=begin
* Hash#merge! 対 Hash#[]=
* Hash#[]= が2倍以上速い
=end

enum.each_with_object({}) do |h, e|
  h.merge!(e => e)
end

enum.each_with_object({}) do |h, e|
  h[e] = e
end
```

#Hash#fetch 対 Hash#fetch with block

```rb
=begin
* Hash#fetch 対 Hash#fetch with block
* Hash#fetch with block が2倍以上速い
=end

{ :rails => :club }.fetch(:rails, (0..9).to_a)
{ :rails => :club }.fetch(:rails){ (0..9).to_a }
```

#String#gsub 対 String#sub

```rb
=begin
* String#gsub 対 String#sub
* String#sub が5割速い
=end

"http://railsclub.com".gsub("http://","https://")
"http://railsclub.com".sub("http://","https://")
```

#String#gsub 対 String#tr

```rb
=begin
* String#gsub 対 String#tr
* String#tr が5倍以上速い
=end

"slug grom title".gsub(" ", "_")
"slug grom title".tr(" ", "_")
```

#並列代入 対 個別代入

```rb
=begin
* 並列代入 対 個別代入
* 個別代入が4割速い
=end

def slow
 a, b = 1, 2
end

def fast
 a = 1
 b = 2
end

```

#例外処理 対 条件分岐

```rb
=begin
* 例外処理 対 条件分岐
* 条件分岐入が10倍以上速い
* (まあそうだろうけど…)
=end

begin
  rails
rescue NoMethodError
  club
end


if respond_to?(:rails)
  rails
else
  club
end
```

#Array#each_with_index 対 while文

```rb
=begin
* Array#each_with_index 対 while文
* while文が8割速い
* (いやさ…)
=end

ary.each_with_index do |num. index|
  # do something with num & index
end

index = 0
while index < ary.size 
  # do something with num & index
  index += 1
end

```
Clojure で 自分のTweet を取得する

http://fscoward.hateblo.jp/entry/2013/12/28/032821
の焼き直し

# 下準備
## twitter4j
dependencies に `[org.twitter4j/twitter4j-core "3.0.5"]`を追加します。

```clj:project.clj
(defproject tweet-anime-clj "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.twitter4j/twitter4j-core "3.0.5"]]
  :main tweet-anime-clj.core)
```

### twitter4j.properties
ともかく twitter の api を使えるように consumerkey とか取得しないと話になりません。
[twitter app](https://apps.twitter.com/)で取得しましょう。


取得した key は twitter4j.properties にペタッと貼り付け。

```text:twitter4j.properties
debug=true
oauth.consumerKey=xxxxxxxxxxxxxxxxxxx
oauth.consumerSecret=xxxxxxxxxxxxxxxx
oauth.accessToken=xxxxxxxxxxxxxxxxxxx
oauth.accessTokenSecret=xxxxxxxxxxxxx
```

## 配置
![スクリーンショット 2014-10-04 21.02.36.png](https://qiita-image-store.s3.amazonaws.com/0/39243/0957cd77-b266-9d53-8856-f110fbc6fb0c.png)

# ソースコード
```clj:core.clj
(ns tweet-anime-clj.core
  (:import [twitter4j TwitterFactory Query TwitterException]))

;; Twitter からつぶやきを取得
(defn getTweet []
  (try
    (let [twitter (.getInstance (TwitterFactory.))
           userTimeline (.getUserTimeline twitter)]
      (->> 
           userTimeline
           (map #(.getText %))
           (map println)
           doall))
    (catch TwitterException e (println (.getMessage e)))))

(defn -main []
  (getTweet))
```
スレッディングマクロ(->>)使うとmapのところが綺麗に書けます。

- つぶやきたいときは

```clj
;; tweet
(defn tweet []
  (let [twitter (. (TwitterFactory.) getInstance)]
    (.updateStatus twitter "test")))
```

## 参考
[スレッドマクロを整理する](http://tyano.shelfinc.com/post/76007113565/threading-macros)

# 終わりに
twitter4j 久しぶりに使おうとすると twitter4j.properties を忘れます。
あと、なんか twitter develop のページが変わってて https://apps.twitter.com/ に辿り着くまでに時間かかりました。
Elixir Alias

# Elixir Alias

## 概要
Elixir の Alias について。

## Alias

~~~
alias SomeModule, as: Alias
~~~

上記の文法で、モジュールに別名を付けて利用できます。
レキシカルスコープでの利用になるため、
モジュール内や関数内に限定して利用できます。

as: Alias を省略すると、 alias に指定したモジュールの最後のモジュール名が
割り当てられます。
例えば

~~~
alias Hoge.Hige.Hage # => alias Hoge.Hige.Hage, as: Hage と同じ
alias Hoge.Hige # => alias Hoge.Hige, as: Hige と同じ
~~~

のようになります。
Alias 利用前のモジュールにアクセスする場合は Elixir.モジュール名 で利用します。

### サンプル

~~~
defmodule Hoge.Enum do
  def count(list) do
    Enum.count(list) * 2
  end
end

defmodule Hoge.List do
  def to_atom(list) do
    List.last(list)
  end
end

defmodule Hoge do
  alias Hoge.Enum, as: Enum

  def count(list) do
    Enum.count(list)
  end

  def orig_count(list) do
    Elixir.Enum.count(list)
  end

  def to_atom(list) do
    alias Hoge.List
    List.to_atom(list)
  end

  def orig_to_atom(list) do
    List.to_atom(list)
  end
end

IO.inspect Hoge.count([1,2,3])
IO.inspect Hoge.orig_count([1,2,3])
IO.inspect Hoge.to_atom('test')
IO.inspect Hoge.orig_to_atom('test')
~~~

## 出力

~~~
6
3
116
:test
~~~

## 参照
* http://elixir-lang.org/getting_started/13.html
Rails4でRESTfulな6アクションを実装する

RESTfulなアプリケーションをよく作るのでメモ。
Rails4でのRESTfulな6アクションの実装例。

* [Rails4でRESTful（第1回）：indexアクションで記事一覧機能を作る](http://blog.enogineer.com/2014/10/03/rails-restful-index)
* [Rails4でRESTful（第2回）：showアクションで記事表示機能を作る](http://blog.enogineer.com/2014/10/03/rails-restful-index)
* [Rails4でRESTful（第3回）：newアクションで記事投稿フォームを作る](http://blog.enogineer.com/2014/10/03/rails-restful-index)
* [Rails4でRESTful（第4回）：createアクションで記事を作成する](http://blog.enogineer.com/2014/10/03/rails-restful-index)
* [Rails4でRESTful（第5回）：editアクションで記事編集フォームを作る](http://blog.enogineer.com/2014/10/03/rails-restful-index)
* [Rails4でRESTful（第6回）：updateアクションで記事を更新する](http://blog.enogineer.com/2014/10/03/rails-restful-index)
注文検索APIの証明書利用について

Yahoo注文検索APIの証明書の利用方法についてお教え下さい。
http://developer.yahoo.co.jp/webapi/shopping/help.html

上記URLの「PHPの場合（サンプル）」ように証明書を設定実行しましたが以下のエラーが返却され、注文情報を取得できません。証明書を使用するにあたり何か他に設定する項目があるのでしょうか。
また、具体的な使用方法をお教え頂けると助かります。

[ エラー内容 ]
curl_errno : 60
curl_error : Peer certificate cannot be authenticated with known CA certificate.

初歩的な質問で申し訳ございませんがよろしくお願い致します。
スレッド間で局所脱出を使うとどうなるか

別のスレッドのスタック上のアドレスを読み込もうとしてエラーになるのかな?
リスタートが何もないのでよくわからない。
GDBとかローレベルデバッガで接続しないとわからないかな...

``` cl
(ql:quickload :bordeaux-threads)
(tagbody
  (bt:make-thread (lambda () (go :escape)))
  :escape
  (print :hi!))
;; -->
Unhandled memory fault at #x0.
   [Condition of type SB-SYS:MEMORY-FAULT-ERROR]

Restarts:

Backtrace:
  0: (SB-SYS:MEMORY-FAULT-ERROR)
  1: ("foreign function: call_into_lisp")
  2: ("foreign function: post_signal_tramp")
  3: ("no debug information for frame")
  4: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD ..
  5: ("foreign function: call_into_lisp")
  6: ("foreign function: new_thread_trampoline")
```
【iOS, UI】iOSアプリ UIデザインパターンまとめサイト

※ まだまだ編集中です。

## pttrns
http://www.pttrns.com/

一番有名どころのデザインカタログサイトかなと。
左カラムにあるところから、目的に応じたUIデザインパターンの一覧に遷移することができて便利。
個人的には、「ログイン画面」「設定画面」とかのリストを眺めるのは楽しい。

## MOBILE MOZAIC
http://www.mobilemozaic.com/

左カラムにあるところから、目的に応じたUIデザインパターンの一覧に遷移することができて便利。

## UX Archive
各UIのパターンを、画面遷移のシーケンスに沿って見ることができるので、ユーザ体験の全体像との関係性でUIパターンを見ることができて、参考になる。
個人的に最もオススメに思う。

http://uxarchive.com/

## lovely ui
http://www.lovelyui.com/


## ULTRAUI
http://ui.theultralinx.com/


## iOSpirations
http://www.iospirations.com/

上述サイトよりももっと、
フラットっぽいデザインというか、アイコンっぽいデザインというか、
それ系のデザインのカタログサイトな印象。
第26回オフラインリアルタイムどう書くの問題をRubyで解く

問題はこちら
http://nabetani.sakura.ne.jp/hena/ord26tribo/

2つの方法で解きました。

解答１

```rb
NB=[
    [/bc/,/ef/,/gh/,/jk/,/lm/,/no/,/qr/,/st/,/uv/,/wx/],
    [/cd/,/fg/,/hi/,/kl/,/mn/,/op/,/rs/,/tu/,/vw/,/xy/],
    [/a.*c/,/b.*f/,/d.*h/,/e.*k/,/g.*m/,/i.*o/,/j.*r/,/l.*t/,/n.*v/,/p.*x/],
]

def solve(q)
  NB.zip([q.size]*3).map{|nb, n|
    nb.each{|r|
      n -= 2 if q =~ r
    }
    n
  }*(',')
end

DATA.readlines.each do |line|
  no,q,a = line.strip.split(/\s+/)
  ans = solve(q)
  print no + "\t" + ans
  puts ans == a ? ' o' : ' x'
end
__END__
0	bdelmnouy	5,7,9	
1	a	1,1,1	
2	q	1,1,1	
3	t	1,1,1	
4	i	1,1,1	
5	fg	2,0,2	
6	gh	0,2,2	
7	gm	2,2,0	
8	fgh	1,1,3	
9	fghm	2,2,2	
10	fhm	3,3,3	
```

解法２

```rb
TR=[
    ['-','-','-','-','-','-','-','-','-','-','-'],
    ['-','-','-','-','-','a','-','-','-','-','-'],
    ['-','-','-','-','b','c','d','-','-','-','-'],
    ['-','-','-','e','f','g','h','i','-','-','-'],
    ['-','-','j','k','l','m','n','o','p','-','-'],
    ['-','q','r','s','t','u','v','w','x','y','-'],
    ['-','-','-','-','-','-','-','-','-','-','-'],
]

def get_y_x_d(c)
  pos = TR.flatten.index(c)
  y, x = TR.flatten.index(c).divmod(TR[0].size)
  d = (x + y).even?
  [y,x,d]
end

def solve(q)
  a = [0, 0, 0]
  q.chars.each{|c|
    y, x, d = get_y_x_d(c)
    if d
      a[0] += 1 unless q.include?(TR[y][x+1])
      a[1] += 1 unless q.include?(TR[y][x-1])
      a[2] += 1 unless q.include?(TR[y+1][x])
    else
      a[0] += 1 unless q.include?(TR[y][x-1])
      a[1] += 1 unless q.include?(TR[y][x+1])
      a[2] += 1 unless q.include?(TR[y+-1][x])
    end
  }
  a*(',')
end

DATA.readlines.each do |line|
  no,q,a = line.strip.split(/\s+/)
  ans = solve(q)
  print no + "\t" + ans
  puts ans == a ? ' o' : ' x'
end
__END__
0	bdelmnouy	5,7,9	
```
第26回オフラインリアルタイムどう書くの問題


オフラインでリアルタイムに「どう書く」をやるイベント( http://yhpg.doorkeeper.jp/events/15316 )を行っています。

問題は「三種類の境界線」という名前で、詳細は
http://nabetani.sakura.ne.jp/hena/ord26tribo/
です。

出題者の気分としては、問題を読み始めてから解けるまで1時間ぐらいあれば足りるかな、と思ってますが、ひとそれぞれで。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。

似たような問題をもっと解きたいという方は、
https://nabetani.hatenadiary.com/entry/yhpg_list
に過去問リンク集がありますので、そちらをご覧になると良いと思います。
raspberryをmacのwifi経由でインターネット接続する


## mac側の設定
### インターネット共有をOnにする
* 共有する接続経路: wifi
* 相手のコンピュータが使用するポート: Ethernet

### ifconfigでmac側のinetを確認
```
bridge100: flags=xxxx　...
```
という所の`inet　xxx.xxx.x.x`をメモ

### ネットワーク設定のEthernetを変更
IPアドレス xxx.xxx.x.x
サブネットマスク 255.255.255.0

## raspberry側の設定
### `/etc/network/interfaces`に記述
```
#iface eth0 inet dhcp
iface eth0 inet static

address xxx.xxx.x.y
netmask 255.255.255.0
gateway xxx.xxx.x.x
```
※ x と y　は別の数字にする。 x != y


## ssh 接続でmacからraspberrypiに接続出来るか確認
```
>ssh pi@xxx.xxx.x.y

password: raspberry
````
ログイン出来たら成功

## mac側のwifiを使ってraspberryもインターネット接続が出来ているか確認
```
ping yahoo.co.jp
```
## 参考資料
[あらきんぐさんのiphone開発ブログ](http://araking56.blog134.fc2.com/blog-entry-125.html)

## 最後に
@yuji_shimodaさん、@tanaka4410さんに困っている時に助けてもらいました。ありがとうございます！
Zend\InputFilter クロージャを使ったカスタムバリデーション


汎用バリデーションライブラリとして Zend\InputFilter を使います。
http://framework.zend.com/manual/2.3/en/modules/zend.input-filter.intro.html

## Composer でインストール

```composer.json
{
    "require": {
        "zendframework/zend-inputfilter": "~2.3"
    }
}
```

インストールします。

```
$ composer install
```

## クロージャを使ったカスタムバリデーション

Zend\InputFilter でクロージャを使ったカスタムバリデーションを実装します。

クロージャを使ったカスタムバリデーションを実装するには、Callback バリデータを利用します。

下記が、実装例です。

`validators` キーの要素となる連想配列にて、`name` キーで `callback` を指定しています。これで Zend\Validator\Callback クラスを利用することになります。

`options` キーでは、必要なパラメータを渡します。

`callback` キーが、バリデーションを実行するクロージャです。引数にバリデーションを行う値が代入されるので、bool 値で結果を返します。

`messages` キーがエラーメッセージの指定です。これは、エラーの原因毎にメッセージが指定できるので、ここでは、値がバリデーションに適合しなかった事を表す `Zend\Validator\Callback::INVALID_VALUE` のメッセージを設定しています。Zend\Validator\Callback クラスでは、他にバリデーションでエラーが発生したことを示す `Zend\Validator\Callback::INVALID_CALLBACK` のメッセージが指定できます。


```zend.php
<?php
require_once __DIR__ . '/vendor/autoload.php';

use Zend\InputFilter\Factory;

$factory = new Factory();
$inputFilter = $factory->createInputFilter([
    'values' => [
        'required' => true,
        'validators' => [
            [
                'name' => 'callback',
                'options' => [
                    'callback' => function($value) {
                        return is_array($value);
                    },
                    'messages' => [
                        \Zend\Validator\Callback::INVALID_VALUE => '配列じゃない！',
                    ],
                ],
            ]

        ],
    ],
]);

$inputs = [
    'values' => 1, // not array!
];

$inputFilter->setData($inputs);
if ($inputFilter->isValid()) {
    echo 'valid' . PHP_EOL;
} else {
    print_r($inputFilter->getMessages());
}
```

では、実行してみます。出力値を見ると、エラーメッセージに対象フィールドと、バリデーションが適合しなかった原因がキーとして示されており、エラーメッセージが格納されています。

```bash
$ php zend.php
Array
(
    [values] => Array
        (
            [callbackValue] => 配列じゃない！
        )

)
```

## Zend\InputFilter（Zend/Validator）で実装されているバリデーションルール

ここでは、汎用的な Callback を利用しましたが、多くのルールが標準で実装されています。これらが利用できる場合は、こちらを使うのが良いでしょう。

http://framework.zend.com/manual/2.3/en/modules/zend.validator.set.html
GitHubからのissue通知メールに対してiOSの標準メーラ/GMail Webで日本語返信する方法


GitHubでWatchしているリポジトリについて、issueが更新されたりすると、電子メールで通知してくれるサービスがある。

これに対して、メールで返信すると、返事を書くことができる。

私はiOSのメーラで移動中などなどにさっと処理してしまいたいと考えたりするタイプなので、ぜひともこれを活用したい！

# 文字コードはUTF-8で！

が・・・、日本語文字を送ると文字化けて残念なことに。どうやら電子メールを **UTF-8**で遅ればいいらしい。

# UTF-8設定方法

## GMail

1. GMailをブラウザで開く
1. 右上の歯車で設定画面へ
1. 全般タブ > 最下段の送信メールのエンコード を **送信メールに Unicode (UTF-8) エンコードを使用する** にする

## iOSのメーラ

文字コードを設定することができない！が、メール文中にUTF-8の記号があると、UTF-8で送信してくれる。 → [参考URL](http://d.hatena.ne.jp/NAOI/20120516/1337145807)

> iPhoneのキーボードから簡単に入力できる文字のなかでcharset=UTF-8にするために使えるものとしては、「◉（まる）」「⌘（こまんど）」「♡（はーと）」などがある*2。

UTF-8の空白を使うという手があるらしいのですが、それ自分もわからなくなってしまうので、私は **「✉(メール)」** を使うことにしました。

1. iOSの設定 > メール/連絡先/カレンダー
1. 中段ぐらいにある 署名
1. すべてのアカウント or GitHubに返信したいメールアカウントの署名を **✉ from iPhone** へ

# 幸せに！

後で返事しよう・・・系は、私は大抵、忘れて二度と見ないタイプなので、さっさと返事しちゃいたいと考えてたのですがこれでハッピーになれました。よかった。
rubyを使ったarduinoの動的制御


## dinoというgemを利用
[dino (github)](https://github.com/austinbv/dino)
``` gem install dino ```
## Arduino IDEを使ってdu.inoを基盤にアップロード
#### duフォルダを作成
```dino generate-sketch serial```
duフォルダが出来、その中にdu.inoファイルが作成されています。
#### du.inoをArduino IDEで開いてコンパイル&アップロード

## pry(or irb)でLEDを光らすテストをしてみる。
```
pry) require "dino"
pry) board = Dino::Board.new(Dino::TxRx.new)
pry) led = Dino::Components::Led.new(pin: 3, board: board)
pry) led.send :on
```

## 最後に
このままだと、一度電源を抜いて再度つなげて実行したときに自動でLEDを光らす等が出来ません。

du.inoを改良して、起動時に実行するスクリプトをオンライン経由で見つけて実行するという仕組みを入れればいけますので、興味がある方は作成してみてください。

(参考資料)
[はてなブログ](http://d.hatena.ne.jp/hiroe_orz17/20130414/1365933792)
bootstrap datepickerを、動的に追加したタグで実行する

bootstrap datapickerを使うサンプルは、ほとんどの場合、こんな感じになってます。

```index.js
$('#button1').datepicker({
    format: 'dd/mm/yyyy',
    autoclose: true
});
```
しかし、この方法だと、id='button1'のタグが予め存在している必要があります。
id='button1'のタグを動的に追加した場合では、この方法ではいけません。
以下のように実装します。
ポイントは、showメソッドを明示的に書いている所かと。これが無いと、一度目のクリックでは表示してくれません。

```index.js
$('body').on('click','#button1',function(){
    $(this).datepicker(
    {
        format: "yyyy/mm/dd",
        autoclose: true
    });
    $(this).datepicker("show");
})
```
ALTER TABLEでパーティションを作るときの地味な文法エラー

MySQLでカラム追加とパーティション作成を同時に行おうとしたところ、文法エラーが出ました。下記は例文です。

```mysql
ALTER TABLE users ADD COLUMN column1 INT, ADD COLUMN column2 INT, DROP COLUMN column3, 
  PARTITION BY RANGE COLUMNS(ID) (
    PARTITION p1 VALUES LESS THAN MAXVALUE
  )
```
PARTITION BYの前にあるカンマがエラーの原因でした。複数のADDなどはカンマで繋いで書くことができますが、同じようにPARTITION BYの前にカンマを書いてしまうと文法エラーになります。

```mysql
ALTER TABLE users ADD COLUMN column1 INT, ADD COLUMN column2 INT, DROP COLUMN column3 
  PARTITION BY RANGE COLUMNS(ID) (
    PARTITION p1 VALUES LESS THAN MAXVALUE
  )
```

ちなみにPARTITION BYは最後に記述しないと、これもまた文法エラーとなります。
zshの補完ファイルの中で呼ばれているコマンドを差し替えてカスタマイズする

## 何がしたいか
Qiitaに次の投稿がありました。

[Capistranoのタスクをzshで補完したい - Qiita](http://qiita.com/catatsuy/items/4209f952f42041c8ebfb)

[zsh-completions/_cap](https://github.com/zsh-users/zsh-completions/blob/master/src/_cap)を使うと、zshでcapコマンドの補完ができるようになります。しかし、capコマンドをグローバルにインストールしたのではなく`bundle install`でインストールしている状態ではうまく補完ができない、という問題です。これを解決します。

## なんでだめなのか
なぜうまくいかないのでしょうか。\_capの中身を見てみると分かります。

```zsh:src/_cap
cmds=( ${(f)"$(_call_program commands cap -T 2> /dev/null | sed -e '/ # /!d; s/:/\\:/g; s/cap \([A-Za-z0-9\\:_-]*\) .*# /\1:/')"} )
```

この`cap -T`という箇所がポイントです。`cap -T`は、Capistranoのタスク一覧を表示するコマンドです。

```
% cap -T
cap deploy                         # Deploy a new release
cap deploy:check                   # Check required files and directories exist
cap deploy:check:directories       # Check shared and release directories exist
(...以下省略...)
```

\_capファイルの中では、`cap -T`を呼び出してタスク一覧を取得して、それを元に補完候補を作成しています。capがグローバルにインストールされているときはこれで問題ないのですが、`bundle install`でインストールしているときは`cap -T`を実行してもエラーで実行できません(`bundle exec cap -T`としないと実行できません)。そのために補完候補が作成できていなかったのです。

## どうやって対応するか
それでは、この問題にどうやって対応すればよいのでしょうか。一つは\_capファイルの中身の`cap -T`を`bundle exec cap -T`に書き換えることです。ただし、この修正をしても将来\_capファイルが更新されたときに上書きされてしまうので、その都度改めて直す必要があります。

実は、これには別の修正方法があります。元の\_capファイルをもう一度よく見てみると、`_call_program commands cap -T`というふうに書かれています。この`_call_program`は、補完関数から呼び出す外部コマンドを差し替え出来るようにするための仕組みです。

\_call\_programは「\_call\_program <タグ名> <コマンド>」という形式で使います。そして、<コマンド>を呼び出すが、もし<タグ名>によって別のコマンドが指定されていたら代わりにそれを呼び出す、という処理を行います。

今回の例の場合は、タグ名は「commands」、コマンドは「cap -T」です。このコマンドを「bundle exec cap -T」に差し替えればうまくいきます。

具体的には、次の行を.zshrcに書きます。

```zsh:.zshrc
zstyle ':completion::*:cap:*:commands' command 'bundle exec cap -T'
```

これで\_call\_programで呼び出されるコマンドが`bundle exec cap -T`に置き換わります。さっそく試してみましょう。

![zsh_cap.png](https://qiita-image-store.s3.amazonaws.com/0/204/a9256a7f-5283-fcdd-30b8-5372efee007a.png)

うまく補完されています。

## 指定方法についてのもう少し詳しい説明
さきほどのコマンドを差し替える方法について、もう少し詳しく説明します。この指定方法は、補完対象となるコマンド名などによって書き方が変わります。具体的には、次の形式で指定します。

```
zstyle ':completion::*:<補完コマンド名>:*:<タグ名>' command <呼び出したいコマンド>
```

タグ名は補完ファイルの中を見て確認します。今回の例の場合は<補完コマンド名>はcap、タグ名はcommandsです。<呼び出したいコマンド>は、使用している環境によって変わります。今回の例はbundle exec capでcapコマンドを起動するようになっているので「bundle exec cap -T」と指定しました。

他の例を見てみましょう。rakeの補完ファイルはzshに標準で含まれています。たとえば僕のUbuntu環境では、/usr/share/zsh/functions/Completion/Unix/\_rakeに補完ファイルがあります。これもcapコマンドと同じように、bundle installでインストールしているとrakeのタスクが補完されません。

\_rakeファイルの中を見ると、次のように書かれています(`$words[1]`は現在のコマンドラインの先頭の単語を表します)。

```zsh:_rake
targets=( ${${(f)"$(_call_program targets $words[1] -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]} 2>/dev/null)"}/(#b)rake ([^ ]##) ##\# (*)/${${match[1]}//:/\\:}:${match[2]:l}} 
```

\_call\_programが使われているので、\_capのときと同じ要領でコマンドを差し替えできます。次の行を.zshrcに追加します。

```zsh:.zshrc
zstyle ':completion::*:rake:*:targets' command 'bundle exec rake -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]}'
```

少し長いですが、元の`$words[1]`のところを`bundle exec rake`に置き換えただけです。これでbundle installしているときにうまく補完できるようになりました。

zshはこうやって補完の動作をカスタマイズできるようになっているので、試してみてください。
Vim外部コマンド実行で困った

##ターミナル上の実行とVimの外部コマンド利用での実行で動作が違う問題
　pipでpythonの新しいモジュールをインストール後、ターミナル上ではモジュールが動くのに、Vimの外部コマンドでは上手く動かなかった。
　ずっとプリインストールされていたVimを利用していたので、brewでインストールしたpythonとうまくいってないのかなってことで、再インストールしたものの、うまくいかず。
　
##調査
　たぶん、Vim側の環境変数が違うのだろうなと、それぞれ環境変数を表示するとやっぱり違かった。


```lang:ターミナル
% echo $path
```

```lang:vimの外部コマンド
:! echo $path
```

##zshの環境変数
　結論はzshの環境変数設定によるものでした。
　現在、僕はシェルにzshを利用しているのですが調べてみると、環境変数の設定ファイルが複数あるみたいですね。
　参考：[zshでログイン・ログアウト時に実行されるファイル](http://qiita.com/yuku_t/items/40bcc63bb8ad94f083f1)
　
　.zshenv：一番最初に読み込まれる
　.zshrc：インタラクティブシェルの時に読み込まれる

　僕のPCだと、zshrcに環境変数を設定していたので、ターミナルのときにしかうまいこと動かなかったみたい。
　てことで、ホームディレクトリにあるzshrcをそのまま名前変更。

```lang:
cd ~
mv .zshrc .zshenv
```

　うまくいきました！！
CakePHP + MAMP でbakeするとDB接続エラー


`database.php` の設定をしてTOPページでは

CakePHP is able to connect to the database.

と出ているのに bake するとDB接続エラーになってしまう場合。

```
Error: Database connection "Mysql" is missing, or could not be created.
```

`host` を `localhost` から `127.0.0.1` に変更して解決しました。

```database.php
<?php
public $default = array(
        'datasource' => 'Database/Mysql',
            'persistent' => false,
            'host' => '127.0.0.1',
            'login' => 'root',
            'password' => 'root',
            'database' => 'db',
            'prefix' => '',
            'encoding' => 'utf8',
            'port' => 8889,
            'unix_scoket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
       );
```
Swift vs. C# : Deinitialization


> A deinitializer is called immediately before a class instance is deallocated. 

> You write deinitializers with the deinit keyword, similar to how intializers are written with the init keyword. 

> Deinitializers are only available on class types.

# How Deinitialization Works

Swift:

- deinit{}

> You are not allowed to call a deinitializer yourself.

> Superclass deinitializers are inherited by their subclasses

> and the superclass deinitializer is called automatically at the end of a subclass deinitializer implementation

> Superclass deinitializers are always called, even if a subclass does not provide its own deinitializer.

C#:

- [デストラクタ](http://msdn.microsoft.com/ja-jp/library/66x5fx1b.aspx)
- [Object.Finalize()](http://msdn.microsoft.com/ja-jp/library/system.object.finalize.aspx) (デストラクタと同じ)

> Destructor implicitly calls the Finalize method, they are technically same. Dispose is available with those object which implements IDisposable interface.


- [Dispose()](http://msdn.microsoft.com/ja-jp/library/fs2xkftw.aspx)


> The programmer has no control over when the destructor is called because this is determined by the garbage collector. 

- GC対象ではないシステムリソースをホールドしているのであれば、クラスにIDisposeを実装して、解放する機会を得る事ができます。



# Deinitializers in Action

- スクリプトで実行

~~~
class Employee{ 
   var name: String?
   init(){ println("Hello");}
   deinit{ println("Good Bye") }
}

Employee()
~~~

~~~
Hello
Good Bye
~~~

- REPL

~~~
  7> var e : Employee? = Employee() 
Hello
e: Employee? = Some {
  name = nil
}
  8> e = nil
Good Bye
~~~

- ちなみにオプショナル変数は "!" が必要

~~~
 10> e!.name
$R0: String? = nil

 11> e!.name = "Bill Gates"
 
 12> e!.name
$R1: String? = "Bill Gates"

 13> e.name
/var/folders/3n/0lk686q1129clzkw38blpwdc0000gp/T/lldb/24300/repl24.swift:2:1: error: 'Employee?' does not have a member named 'name'
e.name
^ ~~~~
~~~


C#:

~~~
public class Point {
   public int X ;
   public int Y ;
   public Point():this(9,9){ } 

   public Point(int x , int y)
   {
        X=x ; Y =y;
   }

   ~Point()
   {
        _.Print("destructed X ={0}, Y={1}", X, Y );
   }
}

Point x = new Point();

destructed X =9, Y=9
~~~
textareaで<TAB>入力したい

こういうhtmlがあったとして

```html
<textarea id="tab"></textarea>
```

こう書くといいかんじ
（DOM取得周りとか`addEventListener`と`attachEvent`の差異は適当に埋めてください）

```js
document.getElementById('tab').addEventListener('keydown', function (e) {
  var elem, end, start, value;
  if (e.keyCode === 9) {
    if (e.preventDefault) {
      e.preventDefault();
    }
    elem = e.target;
    start = elem.selectionStart;
    end = elem.selectionEnd;
    value = elem.value;
    elem.value = "" + (value.substring(0, start)) + "\t" + (value.substring(end));
    elem.selectionStart = elem.selectionEnd = start + 1;
    return false;
  }
});
```

おまけ: CoffeeScriptだとこう（上記コードの変換元）

```coffeescript
document.getElementById('tab').addEventListener 'keydown', (e) ->
  if e.keyCode is 9
    e.preventDefault() if e.preventDefault
    elem = e.target
    start = elem.selectionStart
    end = elem.selectionEnd
    value = elem.value
    elem.value = "#{value.substring 0, start}\t#{value.substring end}"
    elem.selectionStart = elem.selectionEnd = start + 1
    false
```