OmniAICreator/Qiita-1.07M huggingface dataset:
C言語で、UTF-8 の文字列から Unicode のコードポイントを取得するやりかた


## [GLib](https://developer.gnome.org/glib/stable/) の `g_utf8_to_ucs4_fast()` をつかう

UTF-8 の文字列から Unicode のコードポイントを取得するには、UTF-8 を UTF-32 (UCS4) に変換してあげれば良い。

`iconv(3)` をつかってもいいけど、GLib に [`g_utf8_to_ucs4_fast()`](https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-utf8-to-ucs4-fast) というそのものズバリな関数があったのでそれを使ってやってみた。

## ソースコード

```c:utf8_to_codepoint.c
#include <stdio.h>
#include <glib.h>

int main (int argc, char* argv[]) {

  // 引き数が渡されてなかったら終了
  if (argc < 2) {
    fprintf(stderr, "usage: %s text\n", argv[0]);
    return 1;
  }
  
  // 引き数として渡された文字列を代入
  char* utf8_text = argv[1];
  
  // テキストの文字数を取得
  glong length = g_utf8_strlen(utf8_text, -1);

  // UCS4に変換
  gunichar* codepoints = g_utf8_to_ucs4_fast(utf8_text, -1, NULL); 
 
  // 1文字づつ code point を出力
  for (int i = 0; i < length; i++) {
    printf("[U+%04X] ", codepoints[i]);
  }
  printf("\n");

  // 終了処理
  g_free(codepoints);
  return 0;
}

```

メインの部分は下記になります。

```c
// UCS4に変換
gunichar* codepoints = g_utf8_to_ucs4_fast(utf8_text, -1, NULL); 
```


## コンパイル（OS X の場合）
### glib が入ってなかったら `brew` でインストール

```bash
$ brew install glib
```

### コンパイルします

```bash
$ gcc -Wall -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -lglib-2.0 -o utf8_to_codepoint utf8_to_codepoint.c
```

## 結果

```bash
$ ./utf8_to_codepoint "UTF-8の文字列を変換"
[U+0055] [U+0054] [U+0046] [U+002D] [U+0038] [U+306E] [U+6587] [U+5B57] [U+5217] [U+3092] [U+5909] [U+63DB] 
```

無事、Unicode のコードポイントが取得できました。

↓サロゲートペアもOK

```bash
$ ./utf8_to_codepoint "????"
[U+2000B] [U+2123D] [U+2131B] [U+2146E] 
```

## `g_utf8_to_ucs4_fast()` について

>### 書式
>
>```c
>#include <glib.h>
>
gunichar* g_utf8_to_ucs4_fast(const gchar *str,
                              glong len,
                              glong *items_written);
```
>
>### 説明
> 有効なUTF-8の入力を想定して、UTF-8文字列から32ビット固定幅の UCS-4に変換します。この機能は、`g_utf8_to_ucs4()` より約2倍の処理速度ですが、入力値のエラーチェックをしません。変換された文字列の末尾に'\0'が追加されます。
>
>__`str`__ :　UTF-8 でエンコーディングされた文字列。
>
>__`len`__ :　`str` の有効長として使用。0 以下の場合は、文字列の有効長はヌル文字までとなります。
>
>__`items_written`__ :　結果をストアするポインタか NULL を指定。（省略可）
>
>__戻り値__  :　新しく割り当てられた UCS-4 文字列へのポインタ。この値は、`g_free()` で開放する必要があります。

## 参考
* [g_utf8_to_ucs4()](https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-utf8-to-ucs4)
* [超初心者のための Unicode（ユニコード） 入門](http://bearmini.net/blog/View.aspx?bid=1&aid=99)
* [UTF-32 (UCS4) - Wikipedia](http://ja.wikipedia.org/wiki/UTF-32)


以上。
EclipseからBitBucketへコミットする方法をメモ

1.[ウィンドウ]>[パースペクティブを開く]> [その他] から「Git リポジトリー・エクスプローラー」を選択する  

2.[Gitリポジトリー・エクスプローラー]から[リモート]>[origin]>[Pushするリモートリポジトリ名]を右クリックして、[表示]>[ヒストリー]を選択する  


3.最新の履歴を選択し、右クリックして[push commit]を実施する
Ebfly を使った Sinatra アプリケーションの AWS Elastic Beanstalk へのデプロイ

[AWS CLI を使った Sinatra アプリケーションの AWS Elastic Beanstalk へのデプロイ
](http://qiita.com/hakobera/items/bb94a8df75b275c96e21)

前回書いた記事の作業を簡単に実行できる Ebfly という gem を作成しました。

https://github.com/hakobera/ebfly

まだ、機能的には足りないことが多いのですが、アプリの作成からデプロイまではできるようになったので、公開しました。Ebfly を使うと、前回解説した作業がこのように簡単にできます。

## インストール

```
$ gem install ebfly
```

これで `ebfly` コマンド使えるようになります。
次に、`$HOME/.ebfly` にファイルを作成して、AWS の設定をします。

```
AWS_ACCESS_KEY_ID='...'
AWS_SECRET_ACCESS_KEY='...'
AWS_REGION='us-east-1'
```

環境変数で指定することもできます。

```
export AWS_ACCESS_KEY_ID='...'
export AWS_SECRET_ACCESS_KEY='...'
export AWS_REGION='us-east-1'
```

## アプリの作成からデプロイまで

### Step 1 作業用ディレクトリの作成

```sh
$ mkdir sinatraapp
$ cd sinatraapp
$ git init .
```

### Step 2 アプリケーションの作成

`ebfly app create` コマンドでアプリケーションを作成します。

```sh
# Usage: "ebfly app create <application-name>"
$ ebfly app create sinatraapp
```

### Step 3 Environment の作成

'ebfly env create' コマンドで Environment を作成します。

```sh
# Usage: "ebfly env create <environment-name> -a <application-name> -s <solution_stack_name> -t <tier-type>
$ ebfly env create dev -a sinatraapp -s ruby19 -t web
```

### Step 4 sinatra アプリの作成

前回と同じなので、解説省略

#### config.ru

```rb
require './helloworld'
run Sinatra::Application
```

#### helloworld.rb

```rb
require 'sinatra'
get '/' do
  "Hello World!"
end
```

#### Gemfile

```rb
source 'http://rubygems.org'
gem 'sinatra'
```

### Step 5 Bundle install して、コミット

```sh
$ bundle install
$ git add .
$ git commit -m "First commit"
```

### Step 6 デプロイ

指定したブランチを `ebfly env push` コマンドを使ってデプロイすることができます。
master ブランチをデプロイする場合はこう。

```sh
# Usage: "ebfly push <name> <branch or tree_ish>".
$ ebfly env push dev master -a sinatraapp
```

コマンド実行後、アプリケーションのステータスが `Ready` になるまで待ちましょう。
アプリケーションのステータスは `ebfly env info` コマンドで確認できます。

```
$ ebfly env info dev -a sinatraapp

=== environment info ===
application name:     sinatraapp
environment id:       e-XXX
environment name:     sinatraapp-dev
description:
status:               Ready
health:               Green
tier:                 WebServer Standard 1.0
solution stack name:  64bit Amazon Linux 2013.09 running Ruby 1.9.3
endpoint url:         awseb-e-w-XXXXXXXXXXXXXXXX-1111111111.us-east-1.elb.amazonaws.com
cname:                sinatraapp-dev-xyz.elasticbeanstalk.com
```

ステータスが `Ready` になったら、上記の `cname` のURLをコピペしてブラウザでアクセスしてみてください。
Mac OS は人は、'ebfly env open`コマンドを利用することで、同じことができます。

```
$ ebfly env open dev -a sinatraapp
```

### Step 7 後片付け

`ebfly app delete -f` で強制的にアプリを削除することができます。

```
$ ebfly app delete sinatraapp -f
```

## まとめ

ElasticBeanstalk は便利だけど、セットアップのわかりにくさとかもあって、あまり使われていないような気がしています。Ebfly を使えば、AWS CLI や eb コマンドよりは、手軽に始めることができると思います。みんな、ElasticBeanstalk を使うようになって、ノウハウが共有できれば良いな、と思う今日このごろです。
DBアクセス層の単体テスト用にデータソースを用意する

サーブレットコンテナで動くアプリを開発している時、DBアクセス層のテストをするのに毎回デプロイするのは面倒だし、テストのスコープが結合テストに近くなってしまう。

そんな時には、以下のようなデータソースを用意してやれば、DBアクセス層の単体テストをし易い。

```scala:LocalDataSource.scala
import javax.naming.Context
import javax.naming.InitialContext
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource

trait LocalDataSource {
  val JndiObjectName = "java:comp/env/jdbc/XXX"

  def createDS() = {
    System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory")
    System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming")

    // 既にあれば作らない
    val ic = new InitialContext
    try {
      ic.lookup(JndiObjectName)
      println("context already exists.")
    } catch {
      case e: Exception => {
        println("no context")
        create(ic)
      }
    }
  }

  private def create(ic: InitialContext) = {
    ic.createSubcontext("java:")
    ic.createSubcontext("java:comp")
    ic.createSubcontext("java:comp/env")
    ic.createSubcontext("java:comp/env/jdbc")
    val ds = new MysqlDataSource
    ds.setUser("your user name")
    ds.setPassword("your password")
    ds.setServerName("localhost")
    ds.setPort(3306)
    ds.setDatabaseName("your database name")
    ic.bind(JndiObjectName, ds)
  }
}
```
Windows対応のMarkdownエディタを使用した個人的な感想をメモ

1. MarkDown#Editor
> 私の記述方法が悪いのかリスト表示がうまくいかなかった。残念。

2. MetroTextual
> 個人的に画面のデザインは好きだが、私のPCのスペックが低いからか入力後の反応が遅く感じた。

3. CuteMarkEd
> リアルタイムに表示できるのと、スタイルの変更が[Ctrl]+テンキーで簡単にできるので便利。また、Markdown記述のフォーマットやテーブルなど記述方法を忘れてもアシストする機能があるので助かる。
WindowsからMacに乗り換えて"わからない"キー入力をメモ

##バックスラッシュ

```
option + ¥
```

##バックスペース

```
fn + delete
```

##画面キャプチャ（全画面）＋クリップボードコピー

```
control＋Command＋Shift＋3
```

##画面キャプチャ（選択画面）＋クリップボードコピー

```
control＋Command＋Shift＋4
```
Gitのリモートリポジトリサービスの無料範囲をメモ

## 1. [GitHub](https://github.com/‎ "GitHub")
無料範囲としてリポジトリをすべて公開する必要があることが特徴。
私の場合、勉強のために本に付属しているソースを入力することがあり、
のちのち問題になるのもいやなので今回は利用を断念。

| 項目 | 無料範囲 |
|------|---------|
| 容量 | 0.30GB以内 |
| リポジトリ数 | おそらく無制限（だだし公開のみ） |
| 共有人数 | 無制限（公開、非公開とも） |


## 2. [codebreak;](http://codebreak.com/ja/ "codebreak;")
和製GitHubで、かつ無料でなんでもできるのが特徴。
現時点ではサービス開始したばかりでネットの情報がまだ少ないように思う。

| 項目 | 無料範囲 |
|------|--------|
| 容量 | 無制限 |
| リポジトリ数 | 無制限（公開、非公開とも） |
| 共有人数 | 無制限 |


## 3. [Bitbucket](https://bitbucket.org/‎ "Bitbucket")
プライベートリポジトリがほしく、かつ共有人数が少ない場合は最適。GitHubとよく比較されている。
クライアントツール「SourceTree」を利用してビジュアル的にリポジトリ管理が可能。

| 項目 | 無料範囲 |
|------|--------|
| 容量 | 無制限 |
| リポジトリ数 | 無制限（公開、非公開とも） |
| 共有人数 | 5 |
MySQLにてError 'Table './mysql/proc' is marked as crashedのエラーが出力された時は

Error 'Table './mysql/proc' is marked as crashedのエラーが発生した場合、プロシージャを管理しているテーブルがぶっ壊れてしまっったということ・・。ちなみによく発生する

以下のコマンドで修復する

```
MySQL> repair table mysql.proc;
+------------+--------+----------+----------+
| Table      | Op     | Msg_type | Msg_text |
+------------+--------+----------+----------+
| mysql.proc | repair | status   | OK       |
+------------+--------+----------+----------+
```

ちなみに、MySQLをMASTERとして、SLAVEをMariaにしているレプリケーションを組んでいますが、このあたりで何か問題あるんですかね・・。
formのsubmit関数を使うときは、formタグの中にidまたはnameがsubmitとなっている入力項目を含めてはいけない

`id` または `name` 属性が `submit` となっている入力項目（input, select タグなど）が form タグ内に存在する場合、その form の `submit()` 関数を実行すると、

```text:
Uncaught TypeError: Property 'submit' of object #<HTMLFormElement> is not a function
```

というエラーが発生する。

```html:
<form id="form-1">
</form>

<form id="form-2">
    <input type="button" id="submit" />
</form>

<form id="form-3">
    <input type="button" name="submit" />
</form>

<form id="form-4">
    <div id="submit"></div>
</form>

<form id="form-5">
    <select id="submit"></select>
</form>
```

```js:
console.log(document.getElementById('form-1').submit);
// > function submit() { [native code] }
console.log(document.getElementById('form-2').submit);
// > <input type="button" id="submit" />
console.log(document.getElementById('form-3').submit);
// > <input type="button" name="submit" />
console.log(document.getElementById('form-4').submit);
// > function submit() { [native code] } 
console.log(document.getElementById('form-5').submit);
// > <select id="submit"></select>
```

`id` または `name` が `submit` となっている入力項目タグが存在する場合、 form の `submit` プロパティは関数ではなく、当該タグの DOM オブジェクトを指してしまっている。

今回このエラーに遭遇したときは、 jQuery の `submit()` 関数を使用していたが、これも結局は内部で form タグの submit プロパティを関数として実行しようとしているので、同じようにエラーになってしまう。

#参考
- [javascript - Property 'submit' of object &lt;HTMLFormElement&gt; is not a function - Stack Overflow](http://stackoverflow.com/questions/12540953/property-submit-of-object-htmlformelement-is-not-a-function)
LookAtパターン・改

[親と子の関係を表現するLookAtパターン](http://qiita.com/myuon_myon/items/1c1e1131f485d95f4fc6)の続きです。
前回のコードはlensを使うことを前提にすればもっとずっとすっきり書くことが出来ます。(その分柔軟性がなくなります)

```hs
{-# LANGUAGE TemplateHaskell, RankNTypes, GADTs, FlexibleContexts #-}
import Control.Lens
import Control.Monad.State
import Control.Monad.Operational.Mini
import Control.Monad.Operational.TH (makeSingletons)
import Data.Maybe (fromJust)

data Pattern p q x where
  Hook :: Lens' q a -> State a () -> Pattern p q ()
  Pick :: Lens' q a -> Pattern p q a
  Run :: State p () -> Pattern p q ()
  Self :: Pattern p q p

makeSingletons ''Pattern

type LookAt p q = Program (Pattern p q)

runLookAt :: Traversal' q p -> LookAt p q a -> State q a
runLookAt p = interpret (step p) where
  step :: Traversal' q p -> Pattern p q a -> State q a
  step p (Hook m f) = m `zoom` f
  step p (Pick m) = use m
  step p (Run f) = p `zoom` f
  step p Self = get >>= \f -> return $ fromJust $ f ^? p
  -- step p Self = use p

data Item a = Item {
  _name :: String,
  _content :: a
  } deriving (Eq, Show)
makeLenses ''Item

data ItemHolder a = ItemHolder {
  _items :: [Item a]
  } deriving (Eq, Show)
makeLenses ''ItemHolder

----------------------------------------
-- examples
----------------------------------------
duplicate :: LookAt (Item a) (ItemHolder a) ()
duplicate = do
  b <- self
  hook items $ id %= (b:)

nameReverse :: LookAt (Item a) (ItemHolder a) ()
nameReverse = run $ name %= reverse

rename :: LookAt (Item a) (ItemHolder a) ()
rename = do
  n <- (^.name) `fmap` self
  hook items $ id %= reverse . (\s -> label 0 n s [])

  where
    label :: Int -> String -> [Item a] -> [Item a] -> [Item a]
    label _ _ [] bs = bs
    label i n (a:as) bs
      | n == a^.name = label (i+1) n as ((a & name %~ (++ "(" ++ show i ++ ")")):bs)
      | otherwise = label i n as (a:bs)

main = do
  f <- return $ ItemHolder [Item "normal bag" ("bag", 100)]
  print $ flip execState f $ do
    runLookAt (items . ix 0) (duplicate >> duplicate)
    runLookAt (items . ix 2) nameReverse

  f2 <- return $ ItemHolder
    [Item "normal bag" ("bag", 95),
     Item "large desk" ("desk", 400),
     Item "small cellphone" ("phone", 10),
     Item "normal bag" ("bag", 120),
     Item "favorite book" ("book", 30)]
  print $ flip execState f2 $
    runLookAt (items . ix 0) rename
```

`LookAt p q`は相変わらずOperational Monadですが、`hook`, `pick`, `run`, `self`が前回の`liftGlobal`, `getGlobal`, `liftLocal`, `getLocal`に当たります。
これらは全てLensをベースにしているので、引数もLensの形です。`hook _1 $ do action`みたいにして使います。

さて、`runLookAt`の第一引数は`Traversal' s a`となっています。これが`Lens'`でないのは`ix n`によって得られるのが`Traversal'`になるからです。この`ix`のせいで24行目も本来なら`step p Self = use p`と書きたいところですがそれができません。よって`^?`を使って取り出しています。
このようにLensをベースにすると`ix`などのイレギュラーな函数が非常に使いにくくなります。しかしLensは`Rank2Types`拡張を使って定義されているので型クラスによって`runLookAt`の実装を分けたりすることはできません。(本来ならLensのときはこういう振る舞い、Traversalのときはこういう振る舞い、と書きたいところですが…)

Lensがそのままでは型クラスのインスタンスに使えないのはかなり致命的なので、この方法も柔軟性には欠けます。これらの欠点を克服する方法を考えるか、そもそもオブジェクトを親と子の上下関係で捉えるのをやめるしかないと思います。
何かよい方法があればコメント等で教えていただけると嬉しいです。
error: The requested URL returned error: 403 while accessing https://github.com/… が出た時の解決法


##解決方法

ユーザを指定してから git push を実行するとパスワードが聞かれてpushできるようになる


```
$ git remote set-url origin https://【ユーザ名】@github.com/…

$ git push -u origin master
```


##参考
[github - Pushing to Git returning Error Code 403 fatal: HTTP request failed](http://stackoverflow.com/questions/7438313/pushing-to-git-returning-error-code-403-fatal-http-request-failed)
jQueryオブジェクトの比較

HTMLElementかis()で比較できる。

```js
$(function(){
    
    var $hoge = $('#hoge');
    var _$hoge = $('#hoge');
    
    alert($hoge === _$hoge); // false
    alert(_$hoge.is($hoge)); // true
    alert($hoge[0] === _$hoge[0]); // true
    
});
```
クラスインスタンスを表すためのメタ名

（メモ）
クラスインスタンスを表すためのメタ名

```
klass

Ruby 887,317件
Java 59,032件
https://github.com/search?q=klass&ref=cmdform&type=Code
```

```
clazz

Java 396,515件
Ruby 16,431件
https://github.com/search?q=clazz&ref=cmdform&type=Code
```
ゴミコードを書いた


なかなかゴミを出す曜日を覚えられないもんだから、これは人間の脳で処理するものじゃないな、と思い、スクリプトを書いた。言語は Ruby で書いた。

実際の要件とはちょっと異なるんだけど、今回のエントリの説明用に単純化した要件は「ゴミ曜日の当日の朝に通知されてもバタバタしそうなので、前日の夜に通知したい」といったところ。

例として、このエントリでは、ゴミの収集曜日を以下のものとする。

- 可燃ゴミ : 水曜日・土曜日
- 資源ゴミ : 火曜日
- 不燃ゴミ : 第2第4月曜日

### Version 1

```gomi.rb
require "date"

message =
  case Date.today.wday
  when 0    # Sun
  when 1    # Mon
    "明日は「資源ゴミ」の日です"
  when 2, 5 # Tue, Fri
    "明日は「可燃ごみ」の日です"
  when 3    # Wed
  when 4    # Thu
  when 6    # Sat
  end
```

「第2月曜日、もしくは、第4月曜日」はややこしいな、と思い、そこは後回しにして、

- (火曜日は資源ゴミの日なので) 今日が月曜日だったら「明日は資源ゴミ」の旨を伝える
- (水・土は可燃ゴミの日なので) 今日が火・金だったら「明日は可燃ゴミ」の旨を伝える

の処理を書いた。これを、毎日の22時とかに実行すれば、明日のことが通知される、といった具合だ。

### Version 2

続いて「第n月曜日」の処理に取りかかろうと思ったのだけれど、ここで Version 1 のコードの筋が悪いと気が付く。「今日」の曜日にもとづいて処理を進めているのがよくない。今日が「第2火曜日」だとして、明日が「第2水曜日」とは限らなくて、もしかすると「第3水曜日」かもしれない。

だから「今日」ではなくて、素直に「明日」を扱った方がいい。

```gomi.rb
require "date"

tomorrow = Date.today + 1

message =
  case tomorrow.wday
  when 0    # Sun
  when 1    # Mon
  when 2    # Tue
    "明日は「資源ゴミ」の日です"
  when 3, 6 # Wed, Sat
    "明日は「可燃ごみ」の日です"
  when 4    # Thu
  when 5    # Fri
  end
```

これで、ゴミ収集曜日の表とコードの対応が取れるようになって、脳にやさしくなった。というか Version 1 が脳にやさしくなかった。

### Version 3

```gomi.rb
require "date"

tomorrow = Date.today + 1

message =
  case tomorrow.wday
  when 0    # Sun
  when 1    # Mon
    if [2, 4].include? (tomorrow.day.to_f / 7.to_f).ceil
      "明日は「不燃ゴミ」の日です"
    end
  when 2    # Tue
    "明日は「資源ゴミ」の日です"
  when 3, 6 # Wed, Sat
    "明日は「可燃ごみ」の日です"
  when 4    # Thu
  when 5    # Fri
  end
```

こうして書いてみると、「第2月曜日」「第4月曜日」という概念はだいぶ複雑なのでは… という気になってくる。パッと見でなにをしているコードなのか理解がむつかしいので、なんとかしたい気持ちになる。「7で割ったときの商が」とか言いたいわけじゃない。もっとこう、思考しているときに近い感覚で処理を書けるといいのに…！

### Version 4

```gomi.rb
require "date"

class Date
  (1..5).each { |n|
    define_method("第#{n}?") { (self.day.to_f / 7.to_f).ceil == n }
  }

  %w(日 月 火 水 木 金 土).each_with_index { |曜日, index|
    define_method("#{曜日}曜日?") { index == self.wday }
  }

  (1..5).each { |n|
    %w(日 月 火 水 木 金 土).each { |曜日|
      define_method("第#{n}#{曜日}曜日?") {
        self.send("第#{n}?") && self.send("#{曜日}曜日?")
      }
    }
  }
end

明日 = Date.today + 1

targets = []
targets << "資源ゴミ" if 明日.火曜日?
targets << "可燃ゴミ" if 明日.水曜日? or 明日.土曜日?
targets << "不燃ゴミ" if 明日.第2月曜日? or 明日.第4月曜日?

message = targets.empty? ? nil : "明日は%sの日です" % targets.map { |target| "「#{target}」" }.join
```

「明日.第2月曜日?」とか、だいぶ気軽に聞けるようになったんじゃないかなぁと思う。
PupSQLiteでSQLの実行時間の確認方法

コンソール版SQLiteでは.timer onのオプションにより実行時間が計測できますが、PupSQLiteでは実行結果のテーブルしか表示できないようでした。とりあえず、ストップウォッチを使って目視で計測することもできますが、計測したいSQLの前後に現在時刻を表示するSQLを埋め込む方法を以下に示します。

- 実行時間計測結果をためるテーブルtimerを作成。
```sql
 CREATE TABLE timer (log_time text);
```

- 計測したいSQLの前後に現在の時刻をテーブルtimerに格納する。（トランザクション開始と確定のSQLでくくっておく。）

```sql
 BEGIN;
 INSERT INTO timer SELECT STRFTIME("%Y-%m-%d %H:%M:%f START", "now", "localtime");
 SELECT recipe_all."recipeID", recipe_all."recipeTitle", recipe_material."materialName", recipe_material.volume FROM recipe_all INNER JOIN recipe_material USING ("recipeID") where "Mcategory" = 'パスタ';
 INSERT INTO timer SELECT STRFTIME("%Y-%m-%d %H:%M:%f END", "now", "localtime");
 COMMIT;
```

- 記録した実行時間計測結果を確認。（最後に実行したSQLのトランザクション開始と確定時刻を確認するため、最新の2件のみ表示。）

```sql
 SELECT * FROM timer ORDER BY log_time DESC LIMIT 2;
```

- [Pup's Atelier-Software](https://www.eonet.ne.jp/~pup/software.html)
javascriptで画像を切り抜き

[Lasso.Crop Preview](http://www.nwhite.net/2009/02/25/lassocrop-preview)
[How to Crop Image Using JavaScript and PHP](http://www.londatiga.net/it/how-to-crop-image-using-javascript-and-php/)
[HTML5 Image crop tool without server side using javascript](http://www.verious.com/tool/html5-image-crop-tool-without-server-side-using-javascript/)
[Objective-C] ARC有効時のコンパイラの挙動


[エキスパート Objective-C プログラミング](http://www.amazon.co.jp/gp/product/4844331094/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4844331094&linkCode=as2&tag=edom18-22)書籍の中でARC有効時にコンパイラがどういうコードを想定するか、擬似コードで紹介してくれています。

ARC有効時の各種修飾子がどうなるのか、見ておくと変なところではまらずに済むと思います。
いくつか大事な部分を抜粋、紹介させてもらいます。

##__strong修飾子

###alloc / new / copy / mutableCopy系

```objc
{
	id __strong obj = [[NSObject alloc] init];
}
```

**擬似コード**

```objc
// コンパイラによる擬似コード
id obj = objc_msgSend(NSObject, @selector(alloc));
objc_msgSend(obj, @selector(init));
objc_release(obj);
```

スコープを抜けた時点で自動的にreleaseされるようです。自動変数と同じように使える感じですね。

*書籍には明示されていないんですが、これらはおそらく文法によってARCが自動的に擬似コードに相当するものを挿入するようにできているんだと思います。（なので、メソッド名がallocやallocHogeなどではなく、allocateだと意味が違ってくる）*

→コメントで教えて頂きました。[Clang のドキュメント](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#method-families)にしっかりと記載されているみたいです。

###オブジェクト生成メソッド系

```objc
{
	id __strong obj = [NSMutableArray array];
}
```

**擬似コード**

```objc
// コンパイラによる擬似コード
id obj = objc_msgSend(NSMutableArray, @selector(array));
objc_retainAutoreleaseReturnValue(obj);
objc_release(obj);
```

こちらの例では`objc_retainAutoreleaseReturnValue`関数が呼ばれます。
これは、`retain`しつつ、`autoreleasepool`に登録されたオブジェクトを返す関数です。


##__weak修飾子

```objc
{
	id __weak obj1 = obj;
}
```

**擬似コード**

```objc
// コンパイラによる擬似コード
id obj1;
objc_initWeak(&obj1, obj);
objc_destroyWeak(&obj1);
```

`objc_initWeak`関数で初期化し、スコープ終了とともに`objc_destroyWeak`関数で破棄します。
`objc_initWeak`は以下を実行するようです。

```objc
obj1 = 0;
objc_storeWeak(&obj1, obj);
```

`objc_destroyWeak`関数は、上記を0を引数に呼び出します。

```objc
objc_storeWeak(&obj1, 0);
```

これは、weakテーブルと呼ばれる、参照カウントテーブルと同様に、ハッシュテーブルになっていて、__weak修飾子付き変数を管理しています。
`objc_storeWeak`関数によって、登録および解除を行うようです。


###__weak修飾子付き変数に直接インスタンスを生成すると？

例えば以下のコード。

```objc
{
	id __weak obj = [[NSObject alloc] init];
}
```

これは以下のように解釈されます。

```objc
// コンパイラによる擬似コード
id obj;
id tmp = objc_msgSend(NSObject, @selector(alloc));
objc_msgSend(tmp, @selector(init));
objc_initWeak(&obj, tmp);
objc_releae(tmp);
objc_destroyWeak(obj);
```

色々やっていますが、即座に解放されてしまっているのが分かります。


##感想

ARC以外にも、Blocksがどういう仕組みで動くのか、こちらも擬似コードを使って変数がキャプチャされる様子を詳細に解説してくれます。
ARC、Blocks、GCDについてとても分かりやすく解説してくれているので[おすすめの一冊](http://www.amazon.co.jp/gp/product/4844331094/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4844331094&linkCode=as2&tag=edom18-22)です。
特に、自分のようにARCしか触れたことない人にとっては、内部でどういうことがされているかを把握しておくのはデバッグにも役立つと思います。
VMWareFusionでUbuntuをインストールしたらDNSに失敗した話


なんかおまかせインストール的な手軽なインストール方法があるようだったので試してみたらあっさりインストールされたのだけど、ブラウザを開いたら名前が解決できないエラー。

デフォルトではVMの設定は「Macの接続を共有」(NAT)、Ubuntuのネットワークの設定はDHCPになっているようだ。

DHCPでIPアドレスはもらえていて、ping 8.8.8.8は成功するのに、DNSの情報は来ていない。

そこでUbuntuの中でネットワークの設定を「DHCP(IPアドレスのみ)」に変更してDNSに8.8.8.8を指定したらあっさり動くようになった。

thanks aodag
オブジェクトのライフサイクル中一度だけ処理を実行する


プロセスの起動中に一度だけ処理を行う場合、dispatch_onceを使うと思いますが、オブジェクトがインスタンス化されてから開放されるまで一度だけ処理を実行したい場面がありました。

```objectivec
#import <objc/runtime.h>

@interface NSObject (PerformOnce)

// オブジェクトが生きている間一度だけ実行される
- (void)performOnce:(void(^)())onceBlock;

@end

@implementation NSObject (PerformOnce)

- (void)performOnce:(void (^)())onceBlock
{
    if (![objc_getAssociatedObject(self, "performonce") boolValue]) {
        onceBlock();
        objc_setAssociatedObject(self, "performonce", @(YES), OBJC_ASSOCIATION_COPY);
    }
}

@end
```

objc_setAssociatedObjectはインスタンスのdeallocに合わせて関連オブジェクトも消してくれるので多分メモリリークは起きないと思います。
議事録を書いたことがない人向けの、説明メモ

# なぜ議事録を書くのか。
- 議事録を書くと、会議がスムーズに進みます。
- 議事録を書くと、スケジュールに安心できます。
- 議事録を書くと、いった・いわない問題で気を遣うことがなくなります。
- 会議に参加していない人とも情報を共有することができます。

# 議事録を書くにあたって整理すること

- 会議前に議題を共有
- 議論の会議なのか、報告の会議なのか
- 議事録はすぐメンバで共有

- 議論の会議なら、議論の経緯と結果をまとめる
- 報告の会議なら、報告内容とそれに対するアクションをまとめる

- 進捗報告なら
    - 以前の会議からやったこと
    - これからやること
    - 問題となっていること

# 議事録のテンプレート
- 会議の名称：
- 開催日時（開始〜終了）：
- 開催場所：
- 参加者：
- 議題：
- 議論：議論経緯、だれが、なにを
- 結論：だれが、いつまでに、なにをするか
- 次回までの作業

# 議事録の書き方の参考になるリンク集

- [書き方の基本から時間短縮のコツまで、使える「議事録」の書き方 - はてなブックマークニュース](http://b.hatena.ne.jp/articles/201010/1866)
- [議事録の書き方 基礎講座 : LINE Corporation ディレクターブログ](http://directorblog.jp/archives/50986750.html)
- [議事録作成が早くなると仕事が少しは楽しくなる（かもしれない）話 - インターネットの備忘録](http://d.hatena.ne.jp/hase0831/20130511)
- [誠 Biz.ID：3分LifeHacking：議事録を効率的に作成する専用ソフト](http://bizmakoto.jp/bizid/articles/1108/01/news053.html)
- [誠 Biz.ID：結果を出して定時に帰る時短仕事術：無駄な会議を削減するはてなやGoogleの方法――立ち会議、ホワイトボード、マイクロミーティング](http://bizmakoto.jp/bizid/articles/1009/13/news066.html)
- [誠 Biz.ID：1分間IT活用法：無駄にしない！ 定例ミーティング効率化への5つのコツ (1/2)](http://bizmakoto.jp/bizid/articles/1207/23/news096.html)
- [その打ち合わせ、ホントに必要？無駄な会議をなくす5つの質問 - Evernote日本語版ブログ](http://blog.evernote.com/jp/2014/11/27/45376)
- [ミニプロジェクトこそ管理せよ！ - まず議事録から始めよ、すべてのドキュメントに通じる第一歩：ITpro](http://itpro.nikkeibp.co.jp/atcl/column/16/092100208/092100003/)
- [ダラダラ会議を終わらせた、ザッカーバーグの2つの会議効率化戦略 ｜ ライフハッカー 日本版](http://www.lifehacker.jp/2016/03/160307zuckerberg_meeting_tricks.html)
VirtualBoxにUbuntuを入れようとしたらハングした話


Macbook AirにVirtualBoxを入れて、そいつにUbuntu-desktop-12.04-amd64を入れようとしたら、インストーラがクラッシュしたり、インストール中にマシンごとハングしたりという目に。

検索してみるとVT-xをOFFにしろとか書いてあったけど、OFFにしたら『無効な設定です』と怒られる。

そんなこんなで悩んでいたら「VMWare Fusionを買え」「自分がUbuntu Desktopで生きていけるか確認してから買おうと」「じゃあ試用版を使え」と教えてもらったので試してみたら、いままでの苦労は何だったんだってくらいあっさり動いた。

thanks tokibito, wozozo
FregIDE のインストール

Eclipse(Kepler)にFregIDE pluginを突っ込もうとしたら割とハマった、というだけの話。

# プラグイン・インストールのための更新サイト

基本的には http://fregepl.blogspot.jp/p/fregide-tutorial.html に書かれている通りなのだが、ハマりポイントが２つ：

1.  FregIDEが依存しているIMPプラグインの更新サイトが（SourceForgeサイトもEclipseサイトもGitHubサイトも）既に消滅している
→　Spoofax/IMP	http://download.spoofax.org/update/stable/ へ移転。


2.  FregIDEが依存しているLALR Parser Generatorプラグインの更新サイトも必要
→　LALR Parser Generator　http://lpg.sourceforge.net/updates/

両者を更新サイトに登録して後はチュートリアルの指示通り。

# 備忘メモ（Mac OS X）

あまり筋は良くないが、配布されているfregec.jar を標準で探索される外部ライブラリ用のクラスパス /Library/Java/Extensions/に突っ込んでおいて：

```bash:fregec
#!/bin/bash
/usr/bin/java /Library/Java/Extensions/fregec.jar $*
```

という内容のシェルスクリプトを/usr/local/binに突っ込んでおいた。

Javaとか10年以上前にMASを書くのに已むを得ず触ったきりだったので、思い出すというよりほぼスクラッチから調べて色々と苦労するなど。
How to install Phusion Passenger for Multiple rails app

サーバ名によって rails アプリを振り分けるために、Phusion Passenger をインストールしました(というか apache の設定をしたと言ったほうがいいのかな)。表記は zsh に準じてますので悪しからず。

# Phusion Passenger のインストール

```shell-session
$ sudo `whence gem` install passenger
$ sudo passenger-install-apache2-module
$ sudo `whence passenger-install-apache2-module`
```

必要なパッケージが足りないと、指示が表示されます。それに従った後、もう一度 `passenger-install-apache2-module` します。

```shell-session
$ sudo `whence passenger-install-apache2-module`
```

処理が終わると、`/etc/httpd/conf.d/passenger.conf` に書くべき内容が表示されます。それを作成します。

```
LoadModule passenger_module /usr/local/lib/ruby/gems/2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.1.0/gems/passenger-4.0.37
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>
```

# 振り分けの設定

`/etc/httpd/conf/httpd.conf` の以下の行を有効にします。

```
NameVirtualHost *:80
```

`/etc/httpd/conf.d/passenger.conf` に振り分け設定を追記します。

```
<VirtualHost *:80>
    ServerName www.app1.com
    DocumentRoot /webapps/app1/public
    SetEnv SECRET_KEY_BASE xxxxxxxxxxxxxx
    <Directory /webapps/app1/public>
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName www.app2.com
    DocumentRoot /webapps/app2/public
    SetEnv SECRET_KEY_BASE xxxxxxxxxxxxxx
    <Directory /webapps/app2/public>
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>
```

# apache の文法チェック

```shell-session
$ apachectl configtest
```

# プリコンパイル済みアセット作成

rails アプリそれぞれについて、プリコンパイル済みアセットを作成します (production 環境だから)。

```shell-session
$ sudo `whence rake` assets:precompile RAILS_ENV=production
```

# httpd 再起動

```shell-session
$ sudo service httpd restart
```

rails アプリのフォルダ, ファイルには、apache からアクセスできなければなりません。親フォルダのアクセス権もなければなりませんから、気をつけて下さい。

---
何故かログの出力先が /etc/httpd/logs/error.log になってしまうorz
Railsでのhtmlのsanitize & escape

## 概要
- xssなどの対策のためhtmlをescapeしたり、sanitizeするかと思います
- viewで行う分にはhelper使って行えばいいんですが、、、

### 方法
- viewでescape
	- <%=~ %>を使えば勝手にescape(rails3以降)
- 逆にviewでescapeしない

```html:escapeしない
<p>
<%= "html".html_safe %>
</p>
# or
<p>
<%= raw "html" %>
</p>
```
- viewでsanitize

```html:sanitize
<p>
<%= sanitize "html" %>
</p>
```
- controllerからhelperを呼ぶ方法

```ruby:controllerからhelperを呼ぶ
ApplicationController.helpers.hogehoge();
# or
view_context.hogehoge();
```

- controllerでescape

```ruby:escape
ERB::Util.html_escape("html");
```

- controllerでescapeしない

```ruby:escapeしない
ApplicationController.helpers.raw("html");
# or
view_context.raw("html");
```

- controllerでsanitizeする

```ruby:sanitize
ApplicationController.helpers.sanitize("html");
# or
view_context.sanitize("html");
```

## 参考
- [コントローラーからビューのヘルパーを呼ぶには？](http://qa.atmarkit.co.jp/q/96)
- [HTML特殊文字のエスケープ](http://www.rubylife.jp/rails/template/index7.html)
- [Railsドキュメント-サニタイズ(sanitize)](http://railsdoc.com/references/sanitize)
- [Rails の便利メソッド h, html_escape は ERB:Util にあった](http://www.metareal.org/2007/06/30/htmlescape-in-erb-util/)
iOSのバージョンによる分岐


## 実行時にフレームワークバージョンで判定する

AppleのiOS7移行ドキュメントにも書いてあったので``NSFoundationVersionNumber`` を使うようにしている。

``[UIDevice currentDevice].systemVersion`` を使うやり方もちらほら見かけるが、値が文字列であるためバージョンの大小判定としては実装を工夫する必要がある。``NSFoundationVersionNumber`` を使う方が可読性もあり、実装も楽である。``[UIDevice currentDevice].systemVersion`` は表示したりログとして残す方に使うと良いと思う。

```
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
    // Load resources for iOS 6.1 or earlier
} else {
    // Load resources for iOS 7 or later
}
```

iOS SDK 8時点での定義値。

```
#if TARGET_OS_IPHONE
#define NSFoundationVersionNumber_iPhoneOS_2_0	678.24
#define NSFoundationVersionNumber_iPhoneOS_2_1  678.26
#define NSFoundationVersionNumber_iPhoneOS_2_2  678.29
#define NSFoundationVersionNumber_iPhoneOS_3_0  678.47
#define NSFoundationVersionNumber_iPhoneOS_3_1  678.51
#define NSFoundationVersionNumber_iPhoneOS_3_2  678.60
#define NSFoundationVersionNumber_iOS_4_0  751.32
#define NSFoundationVersionNumber_iOS_4_1  751.37
#define NSFoundationVersionNumber_iOS_4_2  751.49
#define NSFoundationVersionNumber_iOS_4_3  751.49
#define NSFoundationVersionNumber_iOS_5_0  881.00
#define NSFoundationVersionNumber_iOS_5_1  890.10
#define NSFoundationVersionNumber_iOS_6_0  992.00
#define NSFoundationVersionNumber_iOS_6_1  993.00
#define NSFoundationVersionNumber_iOS_7_0 1047.20
#define NSFoundationVersionNumber_iOS_7_1 1047.25
#endif
```
GitHub が Markdown の処理をサボってて悲しい(のでなんとかしたい)

GitHub Flavored Markdown で使える便利な記法の一つに、**コミットの SHA をリンクにしてくれる** というのがある。

```
e14856b0b8d65ba90699fa0cc47093a19a630e3c
```

このように issue のコメント欄などに書くと、

![ScreenClip [7].png](https://qiita-image-store.s3.amazonaws.com/0/27795/2f5fcbad-7a95-1c73-02dc-3527e5f7394e.png)

変換されて表示される、というやつ。使ったことある方も多いのでは。

## 11個目以降の SHA は変換されない

![ScreenClip [8].png](https://qiita-image-store.s3.amazonaws.com/0/27795/cf8a2bed-5d30-23ed-37dc-5433607c1a1a.png)

大変悲しい。

[海外でも困ってる人がいるみたい][97]だし、なんとかしたい。

## Bookmarklet 作った

該当部分の HTML は以下の様な感じ。

```
<a href="%url%" class="commit-link"><tt>%commit SHA%</tt></a>
```

[My Utility－Make Link ジェネレータ](http://util.geo.jp/makelinks)を使って Bookmarklet を作ってみた。該当のコミットをブラウザで表示させた状態で bookmarklet を実行すると、上記のような HTML が良しなに表示される。

```
javascript:(function(){var ele=document.createElement('textarea');var hash=location.href.match(/\/commit\/(.......)/);ele.style.width='100%';ele.value='<a href="'+location.href+'" class="commit-link"><tt>'+RegExp.$1+'</tt></a>';document.body.insertBefore(ele,document.body.firstChild);ele.focus();ele.select();ele.ondblclick=function(){ele.parentNode.removeChild(ele);};ele.oncopy=function(){setTimeout(function(){ele.parentNode.removeChild(ele);},1);return true;}})()
```

[Pro Git 日本語版のリリースノート](https://github.com/progit-ja/progit/releases/tag/v20140225)がちゃんと表示され、とても満足しとります。

[97]: http://joshbranchaud.com/blog/2013/05/03/Limited-Commit-SHA-Auto-Linking-in-GitHub-Issues.html
Ubuntu13.4にVirtuosoをインストールする

### インストール
途中でWebDAV用のパスワードなどを聞かれるので、適宜入力する。

```bash
$ sudo apt-get update
$ apt-cache search '^virtuoso'
$ sudo aptitude install  virtuoso-opensource
```

追加でVAD packageをインストール

```bash
$ sudo apt-get install virtuoso-vad-{isparql,ods,cartridges,tutorial}
```

DBの場所

```bash
$ ls /var/lib/virtuoso-opensource-6.1/db
virtuoso.db  virtuoso.log  virtuoso.pxa  virtuoso-temp.db  virtuoso.trx
```

### サーバ起動

```bash
$ cd /usr/share/virtuoso-opensource-6.1
$ sudo virtuoso-t -fd
```

### 表示
[localhost:8890/conductor/](localhost:8890/conductor/)にアクセスすると以下が表示される。

![virtuoso_conductor.jpg](https://qiita-image-store.s3.amazonaws.com/0/6092/7e3681e6-b2d9-b34b-074a-92314b8ecab7.jpeg)
Eclipseをインストールしたら最初にやっておきたい設定


(気が向いた時に加筆します．)

何をすべきかというのは，好みの問題もありますが．

# 基本的な設定
## ワークスペースのテキストエンコーディング
Preferences の General - Workspace Text file encoding は，デフォルトの設定が，ホスト OS によって値が変わります．
複数人で開発する場合，または複数OSで使う場合には独り開発でも，文字化けファイルを作る原因になります．
設定する癖をつけたほうが安全です．

![ワークスペースのテキストエンコーディング](https://qiita-image-store.s3.amazonaws.com/0/5414/c7350d31-9071-2647-986a-2d09285e4bdb.png "ワークスペースのテキストエンコーディング")

ちなみに，プルダウンの選択肢には出てきませんが，「 EUC-JP 」と直打ちすることで，EUC-JP を使うこともできます．

その右隣りにある改行コードの設定も，開発チームの方針次第で，行っておくとよいかもしれません．
GASでAdmin SDKを利用する（Directory編）その２

## とりあえず、前置き
Google Appsの管理者の皆さん、こんにちは。
日々、Appsのユーザ管理や、状況把握について、頭を悩ませているのではないでしょうか。

前回に引き続いて、GASにAdmin SDKのAPIが追加されたようなので、使ってみました。
今回は、Directory APIでグループの追加／削除／取得の方法と、ユーザのグループへの追加方法を紹介します。

実行時の権限の承認や、APIの有効化は、[前回の記事](http://qiita.com/ttyokoyama/items/f41cd5f4f6c4dc2e9ee3 "前回の記事")を見てください。

## 本日のコード

架空の「第1営業部」というグループを作成／削除／取得とユーザの追加のコードをそれぞれ関数に分けています。

```js:コード.gs
function CreateGroup() {
  var res = AdminDirectory.Groups.insert({email: "[グループのEmailアドレス]", name: "第1営業部", description: "第1営業部のグループ"});
  Logger.log(res);
  
  return res.id;
}

function GetGroup() {
  var res = AdminDirectory.Groups.get("[グループのid]");
  Logger.log(res);
}

function DeleteGroup() {
  var res = AdminDirectory.Groups.remove("[グループのid]");
  Logger.log(res);
}

function AddToGroup() {
  var userEmail;
  
  // ユーザの取得
  var user = AdminDirectory.Users.get("[メールアドレス]");
  Logger.log(user);
  
  for(var i = 0; i < user.emails.length; i++) {
    if(user.emails[i].primary) {
      userEmail = user.emails[i].address;
    }
  }
  
  // グループの取得
  var group = AdminDirectory.Groups.get("[グループのid]");
  Logger.log(group);
  
  // グループにユーザを追加（オーナーとして）
  var res = AdminDirectory.Members.insert({email: userEmail, role: "OWNER"}, group.email);
  Logger.log(res);
}
```

## 解説
グループの追加は、`AdminDirectory.Groups.insert()`を使います。
引数には、

+ グループのメールアドレス（email）
+ グループ名（name）
+ グループの詳細（description）

が含まれるオブジェクトを指定します。

戻り値に作成されたグループのidや、グループの情報が含まれるので、利用する事が可能です。
特に、idはグループを取得する時に指定するので、保存しておいた方が良いです。

グループの取得は、`AdminDirectory.Groups.get()`を使います。引数には、グループのidを指定します。

グループの削除は、`AdminDirectory.Groups.remove()`を使います。引数には、get()と同じく、グループのidを指定して下さい。

ユーザの取得は、`AdminDirectory.Users.get()`を使います。引数は、メールアドレスを指定すると、オブジェクトが返されます。このユーザオブジェクトは、メールアドレスを複数持っているので、`user.emails[i].primary`がtrueのメールアドレスを使うようにしています。 **配列の0番目がプライマリとは限らない** ので、注意して下さい。

ユーザのグループへの追加は、`AdminDirectory.Members.insert()`を使います。
第1引数には、

+ メールアドレス（email）
+ 権限（role）

が含まれるオブジェクト、第2引数には、グループのメールアドレスを指定します。

権限には、
"OWNER"、"MANAGER"、"MEMBER"の3段階で指定できます。
"OWNER"は、グループの削除、グループの設定変更、メンバーの権限変更、メンバーの追加／削除、グループへのメッセージの送信ができます。OWNERはグループに1つしか作れません。
"MANAGER"は、Google Groups for Businessが使えるのであれば、有効になる権限で、OWNERと同じ権限があります。MANAGERはグループに複数作ることができます。
"MEMBER"は、グループのメンバーで管理権限はありません。

## 実行結果
ユーザのグループのページを開くと、sales1というグループに属している事が確認できました。
（Google Apps無料版でグループのリストって見れないんだろうか…。）

![グループ追加.png](https://qiita-image-store.s3.amazonaws.com/0/11925/5fff5096-b033-5540-8a31-58caa6d35762.png)
eclipse に emacs のキーバインドを設定


* help -> Install New Software

Emacs+ Eclipse Plug-in
http://www.mulgasoft.com/emacsplus/update-site

* setting
command + ,
General -> Keys -> Scheme -> Emacs+ Sheme

ctrl + space がバッティングしているので任意のキーに割り当てる必要あり

Content Assist で検索して変える

参考
http://ukoasis.tumblr.com/post/24785305675/eclipse-emacs
定義箇所にジャンプする


変数やクラスの定義箇所にすぐさま飛ぶ方法です。
覚えておくだけで作業の効率はかなり上がること間違いなしです。

以下の２つの方法があります。

* 定義箇所に飛びたい変数やクラスを`⌘+クリック`
* 定義箇所に飛びたい変数やクラスにカーソルを合わせて`⌘+Control+j`
[Ruby] メソッドが結果のブール値とエラーステータスを返したい場合のプラクティス


関数が成功/失敗ステータスを返したい場合は、よくあります。

```ruby
def test_method
  true
end
result = test_method
#=> result: true
```

失敗時にエラーに関する情報を戻したい場合も、ままあるかと。

```ruby
def test_method
  return false, {msg: 'something wrong', count: 999, target: 'database'}
end
result, err_status = test_method
#=> result: false
#=> err_status: { ... }
```

ただ、こうやって書いてしまうと、ステータスが不要な場合にも呼び出し側が受け取らなければならず、面倒。更にブール値が戻ってくることを期待していると配列が返ってくるので、事故りやすい。

```ruby
def ok?
  return false, {msg: 'NG!'}
end
"OK!" if ok?
#=> "OK!"
```

ステータスが欲しい場合に別メソッドで取得する形もあるけど、ステータスを保存しておいたり、何か気に喰わない。

```ruby
class TestClass
  def ok?
    @err_status = {msg: 'NG!'}
    false
  end
  def last_err_status
    @err_status
  end
end
x = TestClass.new
x.last_err_status unless x.ok?
#=> "NG!"
```

どうしようか悩んだけど、ブロックを使うと比較的スッキリ扱えるような気がした。

```ruby
def ok?
  err_status = {msg: 'NG!'}
  yield err_status if block_given?
  false
end
result = ok? do |err_status|
  p err_status[:msg]
end
#=> "NG!"
#=> reuslt: false
```

ステータス不要な場合には、普通に使えば良い。

```ruby
"OK!" if ok?
#=> nil
```

「自分は、こうやるよ！」などあれば、教えてください。
DB Error: unknown error を追いかける

# 背景

UNITテストがない本番稼働コードに手を入れなければならないのでUNITテストを実装して走らせると、

```
DB Error: unknown error (SQL: INSERT INTO hoge (blog_id, no, reg_date) SELECT ?, MAX(no) + 1, NOW() FROM hoge WHERE blog_id = ?)
```

何てエラーが出てくれます。

# 問題
本番稼働していて本番でエラーが起きているわけではないのでテスト環境に問題があるのだと思われるが、unknown errorじゃどうすりゃいいのかわからない。

# 解法

PEAR_Errorオブジェクトにもう少しましな情報はないかなと言うことでMWorks_PearExceptionをthrowする手前で、PEAR_Error::getDebugInfo()を呼んでみたら、

```
INSERT INTO hoge (blog_id, no, reg_date) SELECT 21742, MAX(no) + 1, NOW() FROM hoge WHERE blog_id = 21742 [nativecode=1137 ** Can't reopen table: 'hoge']
```

と教えてくれた。
テスト環境ではDBのtableをTEMPORARYにしているんですが、TEMPORARYテーブルは自己結合できなくてエラーになってたんですね。
UNITテストを導入するより前に実装されたコードなので致し方なしなのか・・・

# 参考リンク
http://dev.mysql.com/doc/refman/5.1/ja/temporary-table-problems.html
go で yaml 等を「map[interface{}]interface{}」型で読み込んだ際の動的型の参照方法




[前回](http://qiita.com/yamasaki-masahide/items/327ad9c423de1e35215f)の続きになるが、

[goyaml](https://godoc.org/launchpad.net/goyaml)を使うとyamlをmap[interface{}]interface{} な型で読み込める

```yaml:config
mail_from: hoge@fuga.com
to: [hoge@fuga.com]
var:
  c: 2
  d: [3, 4]
```
このyamlを以下のコードで読み込むと

```go:example.go
    m := make(map[interface{}]interface{})
    err = goyaml.Unmarshal([]byte(config), &m)
    if err != nil {
        panic(err)
    }
    //fmt.Printf("--- m:\n%# v\n\n", m)
    pretty.Printf("--- m:\n%# v\n\n", m)

```
以下のような形で読み込まれる

```Bash:
$ go run main.go
--- m:
map[interface {}]interface {}{
    "mail_from": "hoge@fuga.com",
    "to":        []interface {}{
        "hoge@fuga.com",
    },
    "var": map[interface {}]interface {}{
        "c": int(2),
        "d": []interface {}{
            int(3),
            int(4),
        },
    },
}
```

上記の場合toは、

```go:
fmt.Printf("--- m.to:\n%# v\n\n", m["to"])

```
でアクセスできるが、 
var.c を読みたい場合は、

```go:
fmt.Printf("--- m.var.c:\n%# v\n\n", m["var"]["c"])

```
ではm["var"]の型がinterface{}のためにそのままでは読めない。

以下のように[型アサーション](https://www.google.co.jp/search?q=golang+%E5%9E%8B%E3%82%A2%E3%82%B5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)を使ってアクセスすると読める

```go:
fmt.Printf("--- m.var.c:\n%# v\n\n", m["var"].(map[interface {}]interface {})["c"])

```
itertoolsによる順列、組み合わせ、直積のお勉強

itertoolsを使うと順列や組み合わせをスッキリ書くことができます。

```py3
>>> import itertools
```

(a, b, c, d, e)の並べ方を考えてみます。

```py3
>>> seq = ('a', 'b', 'c', 'd', 'e')
```

#順列、階乗
(a, b, c, d, e)の全ての並べ方は $5! = 5\times 4 \times 3 \times 2 \times 1 = 120 $通りです。
順列を求めるときにはpermutationsを使用します。

```py3
>>> list(itertools.permutations(seq))
[('a', 'b', 'c', 'd', 'e'),
 ('a', 'b', 'c', 'e', 'd'),
 ('a', 'b', 'd', 'c', 'e'),
 ('a', 'b', 'd', 'e', 'c'),
           中略
 ('e', 'd', 'c', 'a', 'b'),
 ('e', 'd', 'c', 'b', 'a')]
>>> len(list(itertools.permutations(seq)))
120
```

120個の要素を持つリストができたことが分かります。

次に、(a, b, c, d, e)の中から3つ選ぶ、並べ方を考えてみます。
全ての並べ方は $ _5 P _3 = 5 \times 4 \times 3 = 60$ 通りです。
今度はpermutationsの第2引数に3をいれます。

```py3
>>> list(itertools.permutations(seq, 3))
[('a', 'b', 'c'),
 ('a', 'b', 'd'),
 ('a', 'b', 'e'),
 ('a', 'c', 'b'),
       中略
 ('e', 'd', 'a'),
 ('e', 'd', 'b'),
 ('e', 'd', 'c')]
>>> len(list(itertools.permutations(seq, 3)))
60
```

#組み合わせ
並べる際の順序を無視する場合は組み合わせとなります。
例えば、(a, b, c)と(a, c, b), (b, a, c), (b, c, a), (c, a, b), (c, b, a)は全て同じとみなします。

(a, b, c, d, e)から5つ順序を無視して並べる方法、すなわち組み合わせは1通りです。
組み合わせを求める際はcombinationsを使います。 第2引数が必須なことに注意です。

```py3
>>> list(itertools.combinations(seq,5))
[('a', 'b', 'c', 'd', 'e')]
```

(a, b, c, d, e)から3つ選ぶ組み合わせを考えます。
組み合わせは、$ _5 C _3 = \frac{_5 P _3}{3!} = 10 $ 通りです 。

```py3
>>> list(itertools.combinations(seq,3))
[('a', 'b', 'c'),
 ('a', 'b', 'd'),
 ('a', 'b', 'e'),
 ('a', 'c', 'd'),
 ('a', 'c', 'e'),
 ('a', 'd', 'e'),
 ('b', 'c', 'd'),
 ('b', 'c', 'e'),
 ('b', 'd', 'e'),
 ('c', 'd', 'e')]
```

#直積
最後に直積を考えます。
直積とは A={a, b, c}, B={d, e}のような2つの集合が与えられたとすると
$A \times B = \lbrace (a, d), (a, e), (b, d), (b, e), (c,d), (c, e) \rbrace $
を返すような操作のことです。Aから一つ、Bから一つ要素を取り、組としています。

直積はproductを使用します。

```py3
>>> A = ('a', 'b', 'c')
>>> B = ('d', 'e')
>>> C = ('f')

>>> list(itertools.product(A, B))
[('a', 'd'), ('a', 'e'), ('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e')]

>>> list(itertools.product(A, B, C))
[('a', 'd', 'f'),
 ('a', 'e', 'f'),
 ('b', 'd', 'f'),
 ('b', 'e', 'f'),
 ('c', 'd', 'f'),
 ('c', 'e', 'f')]
```

何が嬉しいのかというと、直積を使うとfor文のネストを減らせます。

```py3
>>> for i in A:
...     for j in B:
...         print(i, j)
...
a d
a e
b d
b e
c d
c e

>>> for i, j in itertools.product(A, B):
...     print(i j)
...
a d
a e
b d
b e
c d
c e
```

n個のAの直積、$ A^n = A \times A \times \dots \times A $を求めるときは、キーワード引数repeatで指定します。
n = 3のときは次の通りになります。
いわゆる重複順列というやつと同じことです。

```py3
>>> for i in itertools.product(A, repeat=3):
...     print(i)
...
('a', 'a', 'a')
('a', 'a', 'b')
('a', 'a', 'c')
('a', 'b', 'a')
('a', 'b', 'b')
('a', 'b', 'c')
('a', 'c', 'a')
    以下略
```

## おまけ 重複組み合わせ
重複順列をやったので、重複組合せもついでにやっときます。
重複組合せはcombinations_with_replacementを使います

```py3
>>> list(itertools.combinations_with_replacement(A, 3))
[('a', 'a', 'a'),
 ('a', 'a', 'b'),
 ('a', 'a', 'c'),
 ('a', 'b', 'b'),
 ('a', 'b', 'c'),
 ('a', 'c', 'c'),
 ('b', 'b', 'b'),
 ('b', 'b', 'c'),
 ('b', 'c', 'c'),
 ('c', 'c', 'c')]
```
ubuntuにおけるuseradd

#ubuntuにおけるuseradd

##作成ユーザのホームディレクトリ

ubuntuでuseraddコマンドを使ってユーザ作成しようとした際に,作成したユーザのホームディレクトリが作成されないという問題に直面.
手順としては,

1.useraddコマンドのデフォルト値を確認

```
#useradd -D
```

2.INACTIVEを60に,SHELLをbashに設定

````
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
````

3.hogeユーザを作成

`````
#useradd hoge
`````

を踏んだがhogeユーザに変更した際に

`````````````````````````````````````
No directory, logging in with HOME=/
`````````````````````````````````````

と怒られてしまう.

## /etc/login.defs の設定

/etc/login.defsのCREATE_HOMEをyesに設定してやるとホームディレクトリが作成された.
RedHat系だとこれがデフォルトでyesになっているのだがubuntuではそもそもCREATE_HOMEの項目自体がなかったためuseraddしても自動でホームディレクトリが作成されなかった.
SNSから他のアカウントのSQSへメッセージを送るのをやってみる

* 別々のアカウントのCloudWatchのAlarmの通知を一箇所にまとめてみたかったのでやってみた
* 以下を見て実施したがややこしかったので手順をメモ
 * [Sending Amazon SNS messages to an Amazon SQS queue in a different account - Amazon Simple Notification Service](http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.cross.account.html)

## やったこと
* 全てManagementConsoleで実施
* _アカウントA_ ： SQSの受信側 <= __アカウントB__ ：SNSの送信側

----

1. __アカウントB__ にSNSのトピックを作成
2. __アカウントB__ で作成したSNSトピックに対して「View/Edit Topic Policy」でポリシーを設定
 * SubscribersのOnly these AWS usersを選択して _アカウントA_ のIDもしくはIAMユーザのARNを設定する
3. _アカウントA_ にSQSのキューを作成
4. _アカウントA_ で作成したSQSキューにPermissionsを設定
 * Effect：Allow
 * Principal：Everybody
 * Actions：SendMessage
 * Condition：StringEquals、Key：aws:SourceArn、Values：作成したSNSトピックのARN
5. 2.で指定した _アカウントA_ のユーザ(IDの場合はルートアカウント)でログインし、1.で作成したリージョンにあわせてからSNSで以下のようにCreate Subscriptionを実施
 * TopicARN： __アカウントB__ で作成したSNSトピックのARNを指定
 * Protocol：SQSを指定
 * Endpoint： _アカウントA_ で作成したSQSキューのARNを指定
6. __アカウントB__ で試しにSNSトピックを送信し、 _アカウントA_ のSQSキューにつまれることを確認する
備忘録：Objective-C クラスやインスタンスが、指定のプロトコルに適合しているかどうかをチェックする方法

以下のメソッドを使えば、あるクラスまたはインスタンスが指定のプロトコルに適合しているかどうかをチェックできる。

```objc
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
- (BOOL)conformsToProtocol:(Protocol *)protocol;
```

サンプル

```objc
id obj = ....;

if ( [obj conformsToProtocol:@protocol(FooProtocol)] ) {
  id<FooProtocol> fooObj = obj;
  ...
  ...
}
```
android:screenOrientation と android:launchMode の整数値

Android SDKに含まれている aapt コマンドを下記の様に使うと、
apk内に格納された バイナリ化された AndroidManifest.xml を可視化できるようになります。

ex.)
`aapt l -a hoge.apk`

ですが、screenOrientation 属性や launchMode 属性は、
バイナリ化の際に文字列型から整数値と変更されるようで、以下のように表示されます。


A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
とか
A: android:launchMode(0x0101001d)=(type 0x10)0x2
のように。

(どういうわけか) [Android Developers](http://developer.android.com/guide/topics/manifest/activity-element.html) にはどの値にマッピングされるのかは書いてないので
調べてみました。

## android:screenOrientation 

_unspecified_: -1(0xffffffff)
_landscape_: 0(0x0) 
_portrait_: 1(0x1) 
_user_: 2(0x2) 
_behind_: 3(0x3) 
_sensor_: 4(0x4) 
_nosensor_: 5(0x5) 
_sensorLandscape_: 6(0x6) 
_sensorPortrait_: 7(0x7) 
_reverseLandscape_: 8(0x8) 
_reversePortrait_: 9(0x9) 
_fullSensor_: 10(0xa) 
_userLandscape_: 11(0xb) 
_userPortrait_: 12(0xc) 
_fullUser_: 13(0xd) 
_locked_: 14(0xe) 



## android:launchMode

_standard_: 0(0x0)
_singleTop_: 1(0x1)
_singleTask_: 2(0x2)
_singleInstance_: 3(0x3)


（追記：ついでに以下も調べてみました）

## android:configChanges

_mcc_: 0x1
_mnc_: 0x2
_locale_: 0x4
_touchscreen_: 0x8
_keyboard_: 0x10
_keyboardHidden_: 0x20
_navigation_: 0x40
_orientation_: 0x80
_screenLayout_: 0x100
_uiMode_: 0x200
_screenSize_: 0x400
_smallestScreenSize_: 0x800
_layoutDirection_: 0x2000
_fontScale_: 0x40000000

※ 内部的にはビットフラグのようです


## android:uiOptions

_none_: 0(0x0)
_splitActionBarWhenNarrow_: 1(0x1)


## android:windowSoftInputMode

_stateUnspecified_: 0(0x0)
_stateUnchanged_: 1(0x1)
_stateHidden_: 2(0x2)
_stateAlwaysHidden_: 3(0x3)
_stateVisible_:  4(0x4)
_stateAlwaysVisible_:  5(0x5)
_adjustUnspecified_: 0x0
_adjustResize_: 0x10
_adjustPan_: 0x20

※ adjust＊ はビットフラグのようです。


（再追記）
## android:installLocation
_auto_ : 0(0x0)
_internalOnly_ : 1(0x1)
_preferExternal_ : 2(0x2)
msysのlsで文字化けする対策

.bashrcに
alias ls='ls --color=auto --show-control-chars'
を書いておく
msysのターミナル起動時に.bashrcが反映されないようであれば、
.profileに
exec /bin/bash
としておく。

あとは、export LANG=ja_JP.UTF-8あたり指定しておくのと、
当たり前ながら、フォントを日本語対応フォントにしておくこと。
MinGW+Git

追記
使用するMinGWのバージョンなどに依存がなければ、Git for Windowsを使わずに、以下の記事で紹介しているmsys2を利用したほうがよさそうである。
MinGWのバージョンなどに依存がないようであれば、現状では、msys2を利用することを推奨します。
なお、本記事投稿時点では、msys2の存在を知らなかったため、MinGWとGit for Windowsを併せて使用していた。
http://qiita.com/poad1010/items/d6252f1271934e7f17b4

http://qiita.com/poad1010/items/72a77d550c82649e822f
の手順では、Gitのバージョンが1.8.1と古い(現在の最新は1.9.0)ので、
最新版のGitを使用するための手順を記述する。
※ MinGW64bitを使う手順は未実施の環境または、本手順にて導入するMinGWと置き換えて読んで下さい

http://sourceforge.net/projects/mingw/
から Files -> Installer とたどり、mingw-get-setup.exeをダウンロードしてインストールする。

http://www.git-scm.com/
から Gitのインストーラーをダウンロードしてインストールする。

システム環境変数へ
C:\MinGW\bin;C:\MinGW\msys\1.0\bin;C:\Program Files (x86)\Git\bin
を追加する。

http://elfcobe.hateblo.jp/entry/2014/01/30/123011
を参考に、.profileおよび.bashrcを作成する。

.bashrcの以下を編集する　※ ここが最も重要！
source /etc/git-prompt.sh
↓
source /c/Program\ Files\ \(x86\)/Git/etc/git-prompt.sh

環境変数に「C:\Program Files (x86)\Git\bin」が通っていて、.bashrcでGitの「/etc/git-prompt.sh」がsourceで反映されていれば、普通に使えるっぽい。
なので、MinGWやmsysのインストール手順とかは実際はあまり関係ない？
ただし、公式の推奨手順かと聞かれたらNoである…（MinGWのmsysとは別にGitでmsysを持っている時点で、公式の推奨手順などないだろうけど）
Ruby 2.1.1インストール


## 1. brewアップデート

```
brew update
```

## 2. ruby-buildアップグレード

```
brew upgrade ruby-build
```

## 4. インストール可能リスト表示確認

```
rbenv install -l | grep "2\.1\.1"
----------
  2.1.1
  rbx-2.1.1
----------
```

## 5. Ruby2.1.1インストール

```
RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install 2.1.1
```

## 6. デフォルト使用設定

```
rbenv global 2.1.1
ruby -v
----------
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin12.0]
----------
```

## 7. バージョン確認

```
rbenv version
----------
2.1.0 (set by /Users/shu/.rbenv/version)
----------
```

## 8. インストールしたRubyやGemのパスを通す

```
rbenv rehash
```
はじめてのScala.js

Mac OS 10.7.5 (Lion)
Homebrew 、 git はインストールされている前提です。

## Scala と SBT のインストール

ScalaとSBTをbrewでインストールします。

```
$ brew scala
$ brew sbt
```

## Scala.js のサンプルダウンロード

githubからサンプルプロジェクトをダウンロードします。

```
$ git clone git@github.com:sjrd/scala-js-example-app.git
```

## packageJS 実行

サンプルプロジェクトに移動して、sbt packageJS を実行します。

```
$ cd scala-js-example-app/
$ sbt packageJS
```

index-dev.htmlをブラウザで表示します。 it works! と表示されれば成功です。

```
$ open index-dev.html 
```

## optimizeJS 実行

次に sbt optimizeJS で圧縮されたJSを出力します。

```
$ sbt optimizeJS
```

成功したら index.html をブラウザで表示します。 it works! と表示されれば成功です。

```
$ open index.html 
```

## OutOfMemoryError が発生した場合

自分は以下のようなエラーが発生しました。その場合は次の操作を試してみてください。

>
[info] Optimizing /git/scala-js-example-app/target/scala-2.10/example-opt.js ...
java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
・・・


sbt のコマンドを調べます。javaコマンドの引数がわかります。

```
$ cat `which sbt`
```

```
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.13.1/libexec/sbt-launch.jar "$@"
```

-Xmx512の値を変更したいのでsbtファイルを編集します。
sbtはシンボリックリンクなので元のsbtファイルに書き込み権限を加えて編集します。



シンボリックリンクが指す元ファイルを調べる

```
$ ls -al /usr/local/bin/ | grep sat
```

>
lrwxr-xr-x    1 user  admin        28  2 12 12:36 sbt -> ../Cellar/sbt/0.13.1/bin/sbt

元ファイルに書き込み権限があるか調べる


```
$ ls -al  /usr/local/Cellar/sbt/0.13.1/bin/sbt
```

>
-r-xr-xr-x  1 user  admin  142  2 12 12:36 /usr/local/Cellar/sbt/0.13.1/bin/sbt

書き込み権限をつける

```
$ chmod 755 /usr/local/Cellar/sbt/0.13.1/bin/sbt
```


以下のように  -Xmx1024M と修正する

```
$ sudo vi /usr/local/Cellar/sbt/0.13.1/bin/sbt
```

```
exec java -Xmx1024M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.13.1/libexec/sbt-launch.jar "$@"
```


ついでに SBT_OPTS でPermanent 領域サイズなどの指定を行います。

```
$ export SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:PermSize=256M -XX:MaxPermSize=512M" 
```

これで `$ sbt optimizeJS` が動くようになりました。
MinGW+Git環境構築メモ

※ この手順で導入可能なGitは1.8.1なので、最新版を使用したい場合は、
MinGW+msysとGit for Windowsを個別にインストールし、MinGW+msysにパスを通す必要がある。

http://www.devlog.alt-area.org/?p=2802
を参考に、x86_64-4.8.2-release-posix-seh-rt_v3-rev2.7zおよび、msys+7za+wget+svn+git+mercurial+cvs-rev13.7zをダウンロードし、
C:\mingw64配下に展開する（要7-Zip）

そして、
http://elfcobe.hateblo.jp/entry/2014/01/30/123011
を参考に、.profileおよび、.bashrcを作成する。
（これで、lsなどで日本語表示が可能となる）
mysqlで年齢計算

# 年齢計算のsql

> mysql> select (YEAR(CURDATE())-YEAR(date_of_birth)) - (RIGHT(CURDATE(),5)<RIGHT(date_of_birth,5)) AS age from users;
> +------+
> | age  |
> +------+
> |   36 |
> +------+
> 1 row in set (0.00 sec)

## 参考

http://dev.mysql.com/doc/refman/4.1/ja/date-calculations.html
共有レポジトリにPushしてしまったコミットをやり直す


まずはLocalのコミットを無かったことにする
以下のコマンドで一個前のコミットを無かったことに出来る

```bash:
#ファイルの変更を残す場合
$ git reset --soft HEAD^

#ファイルの変更を無かったことにする場合
$ git reset --hard HEAD^
```

次にこれらを共有レポジトリに反映させる

```bash:
$ git push -f origin HEAD^:ブランチ名
```

正しい変更を加えたものをPushしたい場合は```git push -f origin HEAD^:ブランチ名```する前に変更内容を commit しておいてください