<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5065578575961395462</id><updated>2024-10-07T14:16:38.183+09:00</updated><category term="JavaScript"/><category term="Server"/><category term="node"/><category term="Nitrous.IO"/><category term="editor"/><category term="bookreview"/><category term="C++"/><category term="Cling"/><category term="Python"/><category term="REPL"/><category term="Sublime"/><category term="text"/><category term="Algorithm"/><category term="C"/><category term="CIO"/><category term="CLang"/><category term="CMake"/><category term="Cloud9"/><category term="Java"/><category term="OSError"/><category term="Sort"/><category term="Tensorflow"/><category term="Windows&#xa;tips"/><category term="android"/><category term="aran cooper"/><category term="comminucation"/><category term="design"/><category term="eclipse"/><category term="esb"/><category term="hack-a-thon"/><category term="hawaii"/><category term="itunes"/><category term="jan"/><category term="llvm"/><category term="management"/><category term="smartphone"/><category term="swordfish"/><category term="terri"/><category term="windows"/><category term="x64"/><category term="xp"/><category term="アルゴリズム"/><category term="ジャン"/><category term="ソート"/><category term="テリ"/><category term="プログラミング"/><category term="書評"/><title type='text'>hanori on rails</title><subtitle type='html'>平仄を合わせるのに四苦八苦</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-4121703176942069211</id><published>2021-06-19T11:17:00.004+09:00</published><updated>2021-06-19T11:29:12.153+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OSError"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><category scheme="http://www.blogger.com/atom/ns#" term="Tensorflow"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Python 3.9環境でTensorflowインストールが失敗する（Windows10）</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_QCHmRY6rzmlhq_d2iZ_MWXx-P36tV1bKptDpTvMOOx89EejJJaydk6lVBMtqJk_42PEx_m19UO8xjnLvDnMMNISCHpFDrdiNAtFxoTyGlSLziyrtzSN4gn73ZjsSItmfLmx-Ll7fwZY/s1111/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-06-19+094956.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;621&quot; data-original-width=&quot;1111&quot; height=&quot;358&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_QCHmRY6rzmlhq_d2iZ_MWXx-P36tV1bKptDpTvMOOx89EejJJaydk6lVBMtqJk_42PEx_m19UO8xjnLvDnMMNISCHpFDrdiNAtFxoTyGlSLziyrtzSN4gn73ZjsSItmfLmx-Ll7fwZY/w640-h358/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-06-19+094956.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;TensorFlow2のインストールでエラー&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;

Windows版Python 3.9が導入された環境にTensorFlow2を&lt;a href=&quot;https://www.tensorflow.org/install?hl=ja&quot; target=&quot;_blank&quot;&gt;pipインストール&lt;/a&gt;しようとしたらエラーが出た。&amp;nbsp;&lt;div&gt;&lt;blockquote&gt;ERROR: Could not install packages due to an
OSError: [Errno 2] No such file or directory～client_load_reporting_filter.h
&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;ファイルが見付からないというエラーだった。&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;解決方法&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Window10ではデフォルトでファイルのパス名の長さが260までに制限されている。&lt;/div&gt;&lt;div&gt;その為に構成ファイルにアクセスができず、ファイルが見付からないというエラーとなっていた。&lt;/div&gt;&lt;div&gt;この問題を解決するには、ファイルのパス名の長さ制限を解除しなければならない。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ローカルグループポリシーエディタでファイルのパス名の長さ制限を解除できる。(Windows10 proの場合）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ファイル名を指定して実行＞gpedit.msc&amp;gt;「コンピュータの構成」＞「管理用テンプレート」＞「システム」＞「ファイルシステム」＞「Win32の長いパスを有効にする」の設定を変更する。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3dd0ayhrU2POZdy9b4Yu-eQFlboIOp2DKneS78cDc3SLYbwpHSVAli4gyB6WnN545TbMoGorQX-ivwmSl2vlziIV24wh914c9yB8fOx6HUOoYD4T2ZPpSFX8535iu_uPYW3TFAheKwFA/s911/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-06-19+110027.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;466&quot; data-original-width=&quot;911&quot; height=&quot;205&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3dd0ayhrU2POZdy9b4Yu-eQFlboIOp2DKneS78cDc3SLYbwpHSVAli4gyB6WnN545TbMoGorQX-ivwmSl2vlziIV24wh914c9yB8fOx6HUOoYD4T2ZPpSFX8535iu_uPYW3TFAheKwFA/w400-h205/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-06-19+110027.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;規定では「未構成」だったが、「有効」に変更して、新しいコマンドプロンプト（管理者権限）を開いて実行すると、インストールが成功した。&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxbUSZBD6SiZ1LF6ELTlAsl54K_WBpPCkB-dbfssywMSbmHOmKXOI01wZS0ZKitoSWdzmFjajSTtHWs1rX1C-AGPuCSCc-MVu_28FvSpSSPWxj_49NQVNLhpyrZ_XB-pA980tfFKWhauQ/s798/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-06-19+110549.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;322&quot; data-original-width=&quot;798&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxbUSZBD6SiZ1LF6ELTlAsl54K_WBpPCkB-dbfssywMSbmHOmKXOI01wZS0ZKitoSWdzmFjajSTtHWs1rX1C-AGPuCSCc-MVu_28FvSpSSPWxj_49NQVNLhpyrZ_XB-pA980tfFKWhauQ/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-06-19+110549.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;なお、ローカルグループポリシーエディタ以外には、レジストリエディタで下記の値を変更する事でも、パスの長さ制限を解除できる。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled の 0を1に変更。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;以上。&lt;/div&gt;&lt;div&gt;&lt;iframe style=&quot;width:120px;height:240px;&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; src=&quot;//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hanori-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B08YMT9K15&amp;linkId=bd7879dcbaea3f1de8e49987d0dbc633&quot;&gt;&lt;/iframe&gt;&lt;iframe style=&quot;width:120px;height:240px;&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; src=&quot;//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=hanori-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=4873119286&amp;linkId=dbca948d09940b30d17fd1c79be26b79&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/4121703176942069211/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2021/06/python-39tensorflowwindows10.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4121703176942069211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4121703176942069211'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2021/06/python-39tensorflowwindows10.html' title='Python 3.9環境でTensorflowインストールが失敗する（Windows10）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_QCHmRY6rzmlhq_d2iZ_MWXx-P36tV1bKptDpTvMOOx89EejJJaydk6lVBMtqJk_42PEx_m19UO8xjnLvDnMMNISCHpFDrdiNAtFxoTyGlSLziyrtzSN4gn73ZjsSItmfLmx-Ll7fwZY/s72-w640-h358-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-06-19+094956.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>日本</georss:featurename><georss:point>36.204824 138.252924</georss:point><georss:box>7.8945901638211566 103.09667400000001 64.51505783617884 173.409174</georss:box></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-9116649661054209249</id><published>2020-11-27T08:51:00.005+09:00</published><updated>2020-11-27T09:00:06.522+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows&#xa;tips"/><title type='text'>アプリケーションを常に「管理者として実行」させるには</title><content type='html'>&lt;h1 style=&quot;text-align: left;&quot;&gt;アプリケーションを常に「管理者として実行」させるには&lt;/h1&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;blockquote style=&quot;border: none; margin: 0 0 0 40px; padding: 0px;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;該当のExeのプロパティを開く ＞ プロパティウィンドウの「互換性」タブを開く ＞ 「設定」から、「管理者としてこのプログラムを実行する」を探し、チェックする。&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/9116649661054209249/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2020/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/9116649661054209249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/9116649661054209249'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2020/11/blog-post.html' title='アプリケーションを常に「管理者として実行」させるには'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-8343948484122782359</id><published>2019-02-09T16:22:00.001+09:00</published><updated>2019-06-10T21:28:08.702+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Algorithm"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Sort"/><category scheme="http://www.blogger.com/atom/ns#" term="アルゴリズム"/><category scheme="http://www.blogger.com/atom/ns#" term="ソート"/><category scheme="http://www.blogger.com/atom/ns#" term="プログラミング"/><title type='text'>【Java】配列やコレクションのソートいろいろ</title><content type='html'>&lt;html&gt;

&lt;head&gt;
  
  
  &lt;title&gt;Java配列をソートするコードを書く&lt;/title&gt;
  &lt;link href=&quot;https://stackedit.io/style.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;/head&gt;

&lt;body class=&quot;stackedit&quot;&gt;
  &lt;div class=&quot;stackedit__html&quot;&gt;
&lt;h1 id=&quot;【java】自前のアルゴリズムを書かないでソートを実現する&quot;&gt;
Java配列をソートするコードを書く&lt;/h1&gt;
いざJavaでコードを書かなければならないという時、配列のソートを思い出すのに苦労することが多いので、備忘も兼ねて、ここにアウトプットしてしまいます。&lt;br /&gt;

&lt;strong&gt;検討項目&lt;/strong&gt;&lt;br /&gt;

&lt;ul&gt;
&lt;li&gt;プリミティブ型な値を一つだけ持つ配列をソートする
&lt;ul&gt;
&lt;li&gt;ArrayListに変換した後、SortやparallelSortを使う&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;複数のフィールドを持つ要素の単一のフィールドをソートキーにしてソートする
&lt;ul&gt;
&lt;li&gt;SortやparallelSortを使う。Comparableを継承したフィールド定義クラスを作ったり、Comparatorクラスを実装した比較用クラスを作ったりする。lambdaも使える。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;複数のフィールドを持つ要素について、複数のフィールドを優先度付きソートキーにしてソートする
&lt;ul&gt;
&lt;li&gt;上記同&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;プリミティブ型な値を一つしか持たない配列をソートする&quot;&gt;
プリミティブ型な値を一つしか持たない配列をソートする&lt;/h1&gt;
arraysのソートを活用する&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;
import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    int score[] = { 4, 2, 0, 3, 1 };
    Arrays.sort(score);
    for (int item : score) {
      System.out.print(item + &quot; &quot;);
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
実行結果&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;java version &quot;1.8.0_31&quot;
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
0 1 2 3 4
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;複数のフィールドを持つ要素の単一のフィールドをソートキーにしてソートする&quot;&gt;
複数のフィールドを持つ要素の単一のフィールドをソートキーにしてソートする&lt;/h1&gt;
SortやparallelSortを使う。フィールドを持つComparableを継承したクラスも作る。&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Player implements Comparable&lt;player&gt; {
    private int ranking;
    private String name;
    private int age;

    public Player(int ranking, String name, int age) {
        this.ranking = ranking;
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Player o) {
        return (this.getRanking() - o.getRanking());
    }
    public int getRanking() {
        return ranking;
    }
    @Override
    public String toString() {
        return ranking + &quot; &quot; + name;
    }
}

public class Main {
  public static void main(String[] args) {
    List&lt;player&gt; footballTeam = new ArrayList&lt;player&gt;();

    footballTeam.add(new Player(23, &quot;たかし&quot;, 24));
    footballTeam.add(new Player(16, &quot;ひろし&quot;, 20));
    footballTeam.add(new Player(18, &quot;けんた&quot;, 22));

    System.out.println(&quot;Before Sorting : &quot; + footballTeam);
    Collections.sort(footballTeam);
    System.out.println(&quot;After Sorting : &quot; + footballTeam);
  }
}
&lt;/player&gt;&lt;/player&gt;&lt;/player&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/body&gt;&lt;/html&gt;
別解。既存かつ変更できないクラスに対し、Comparatorを使って、ソートする。（Java8以降）&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
import java.util.*;

class Player {
    private int ranking;
    private String name;
    private int age;
    public Player(int ranking, String name, int age) {
        this.ranking = ranking;
        this.name = name;
        this.age = age;
    }
    public int getRanking() {
        return ranking;
    }
    @Override
    public String toString() {
        return ranking + &quot; &quot; + name;
    }
}

class PlayerRankingComparator implements Comparator&amp;lt;Player&amp;gt; {
    public int compare(Player firstPlayer, Player secondPlayer) {
        return (firstPlayer.getRanking() - secondPlayer.getRanking());
    }
}

public class Main {
  public static void main(String[] args) {
    PlayerRankingComparator playerComparator = new PlayerRankingComparator();
    List&lt;player&gt; footballTeam = new ArrayList&amp;lt;Player&amp;gt;();

    footballTeam.add(new Player(23, &quot;たかし&quot;, 24));
    footballTeam.add(new Player(16, &quot;ひろし&quot;, 20));
    footballTeam.add(new Player(16, &quot;けんた&quot;, 22));

    System.out.println(&quot;Before Sorting : &quot; + footballTeam);
    Collections.sort(footballTeam, playerComparator);
    System.out.println(&quot;After Sorting : &quot; + footballTeam);
  }
}
&lt;/player&gt;&lt;/code&gt;&lt;/pre&gt;
ComparatorをLambdaにしてやれば、comparator継承クラスも必要なくなる。&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
import java.util.*;

class Player  {
    private int ranking;
    private String name;
    private int age;

    public Player(int ranking, String name, int age) {
        this.ranking = ranking;
        this.name = name;
        this.age = age;
    }

    public int getRanking() {
        return ranking;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return age + &quot; &quot; + name;
    }
}

public class Main {
  public static void main(String[] args) {
    Comparator&amp;lt;Player&amp;gt; byAge = (Player player1, Player player2) -&amp;gt; 
           player1.getAge() - player2.getAge();
    //Comparator&lt;Player&gt; byAge = Comparator.comparingInt(Player::getAge); こちらでも可
    List&lt;player&gt; footballTeam = new ArrayList&amp;lt;Player&amp;gt;();

    footballTeam.add(new Player(23, &quot;たかし&quot;, 24));
    footballTeam.add(new Player(16, &quot;ひろし&quot;, 20));
    footballTeam.add(new Player(18, &quot;けんた&quot;, 22));

    System.out.println(&quot;Before Sorting : &quot; + footballTeam);
    Collections.sort(footballTeam, byAge);
    System.out.println(&quot;After Sorting : &quot; + footballTeam);
  }
}
&lt;/player&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;複数のフィールドを持つ要素について、複数のフィールドを優先度付きソートキーにしてソートする&quot;&gt;
複数のフィールドを持つ要素について、複数のフィールドを優先度付きソートキーにしてソートする&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;import java.util.*;

class Player implements Comparable&amp;lt;Player&amp;gt; {
    private int ranking;
    private String name;
    private int age;

    public Player(int ranking, String name, int age) {
        this.ranking = ranking;
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Player o) {
        if (this.getRanking() == o.getRanking()) {
          return (this.getAge() - o.getAge());
        } else {
          return (this.getRanking() - o.getRanking());
        }
    }
    public int getRanking() {
        return ranking;
    }
    public int getAge() {
        return age;
    }
    @Override
    public String toString() {
        return ranking + &quot; &quot; + age + &quot; &quot; + name;
    }
}

public class Main {
  public static void main(String[] args) {
    List&amp;lt;Player&amp;gt; footballTeam = new ArrayList&amp;lt;Player&amp;gt;();

    footballTeam.add(new Player(23, &quot;たかし&quot;, 24));
    footballTeam.add(new Player(16, &quot;ひろし&quot;, 22));
    footballTeam.add(new Player(18, &quot;けんた&quot;, 20));
    footballTeam.add(new Player(16, &quot;しげき&quot;, 18));

    System.out.println(&quot;Before Sorting : &quot; + footballTeam);
    Collections.sort(footballTeam);
    System.out.println(&quot;After Sorting : &quot; + footballTeam);
  }
}
&lt;/player&gt;&lt;/player&gt;&lt;/code&gt;&lt;/pre&gt;
結果&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;java version &quot;1.8.0_31&quot;
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
Before Sorting : [23 24 たかし, 16 22 ひろし, 18 20 けんた, 16 18 しげき]
After Sorting : [16 18 しげき, 16 22 ひろし, 18 20 けんた, 23 24 たかし]
&lt;/code&gt;&lt;/pre&gt;
Lambdaで記載してみる。&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;import java.util.*;

class Player  {
    private int ranking;
    private String name;
    private int age;

    public Player(int ranking, String name, int age) {
        this.ranking = ranking;
        this.name = name;
        this.age = age;
    }

    public int getRanking() {
        return ranking;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return ranking + &quot; &quot; + age + &quot; &quot; + name;
    }
}

public class Main {
  public static void main(String[] args) {
    Comparator&amp;lt;Player&amp;gt; byRankAndAge = ( 
     (Player player1, Player player2) -&amp;gt; 
     {
       if (player1.getRanking() == player2.getRanking()) {
         return (player1.getAge() - player2.getAge());
       } else {
         return (player1.getRanking() - player2.getRanking());
       }
     }
    ); 

    List&amp;lt;Player&amp;gt; footballTeam = new ArrayList&amp;lt;Player&amp;gt;();

    footballTeam.add(new Player(23, &quot;たかし&quot;, 24));
    footballTeam.add(new Player(16, &quot;ひろし&quot;, 22));
    footballTeam.add(new Player(18, &quot;けんた&quot;, 20));
    footballTeam.add(new Player(16, &quot;しげき&quot;, 18));

    System.out.println(&quot;Before Sorting : &quot; + footballTeam);
    Collections.sort(footballTeam, byRankAndAge);
    System.out.println(&quot;After Sorting : &quot; + footballTeam);
  }
}
&lt;/player&gt;&lt;/player&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Java学習ならこの本。第3版には、LambdaやStreamなど、Java8から追加されたイディオムもしっかり載っています。オススメ。&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=hanori-22&amp;amp;language=ja_JP&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=as_ss_li_til&amp;amp;asins=4621303252&amp;amp;linkId=32a550e14b96251cca418ace1b24efa5&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt;


</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/8343948484122782359/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2019/02/java_7.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/8343948484122782359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/8343948484122782359'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2019/02/java_7.html' title='【Java】配列やコレクションのソートいろいろ'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-47562435930208848</id><published>2017-09-12T01:36:00.000+09:00</published><updated>2017-12-10T20:03:40.112+09:00</updated><title type='text'>究極の速読法 ～リーディングハニーⓇ6つのステップ～ を読んで、やる気が出た話（書評）</title><content type='html'>速読法は本当に存在するものなんでしょうか。&lt;br /&gt;
一冊10分とか、ビジネスリーダーが備えるべき技能で、とか、どうもうさんくさいですね。 &lt;br /&gt;
とはいえ、本が早く読めるというのは、様々な知識を僅かな時間で吸収できるということになるので、技能があれば、たしかに便利なはず。&lt;br /&gt;
&lt;br /&gt;
そこで速読法をためしてみたくなり、速読に関する本を探したわけす。&lt;br /&gt;
できるだけ「うさんくさくないの」というテーマで、私が辿りついたのが、この本です。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.amazon.co.jp/%E7%A9%B6%E6%A5%B5%E3%81%AE%E9%80%9F%E8%AA%AD%E6%B3%95-%E3%83%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%8F%E3%83%8B%E3%83%BC6%E3%81%A4%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-%E6%9D%BE%E5%B4%8E-%E4%B9%85%E7%B4%94/dp/4327377260/ref=as_li_ss_il?ie=UTF8&amp;amp;qid=1505138351&amp;amp;sr=8-1&amp;amp;keywords=%E7%A9%B6%E6%A5%B5%E3%81%AE%E9%80%9F%E8%AA%AD%E6%B3%95&amp;amp;linkCode=li3&amp;amp;tag=hanori-22&amp;amp;linkId=7d363f608b9600d6009dfbe6188e91a9&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4327377260&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=hanori-22&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=hanori-22&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=4327377260&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;
&lt;br /&gt;
&lt;br /&gt;
「うさんくさくないの」ですかね。これ。&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;速読以前に本が読めないという事がある&quot;&gt;
速読以前に「本が読めない」という事がある&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
若者の活字離れが叫ばれる昨今、実は、活字から離れているのは若者だけではなく、社会人全般、活字から離れているのが現状です。&lt;br /&gt;
&lt;br /&gt;
たとえば、ビジネスマンの中には信奉者の多い&lt;a href=&quot;http://amzn.to/2xWFCp3&quot;&gt;ピータードラッカー&lt;/a&gt;。 &lt;br /&gt;
彼の名前を知っている人は多いと思いますが、彼の書籍を通読出来た人は、実際そんなに居ないと思います。 &lt;br /&gt;
今回紹介する本でも、&lt;a href=&quot;http://amzn.to/2xWFCp3&quot;&gt;ドラッカー&lt;/a&gt;の本を通読できている人が非常に少ない点が指摘されています。その理由としては、難しくて内容について行けない、というのももありますが、そもそも読む為のスキルが足りてない、本を読むための基本のスキルが無いという事が多いのだと、この本は指摘しています。&lt;br /&gt;
本を読む為の基本的スキルが備わっていないと、途中で挫折する事になるというのです。&lt;a href=&quot;http://amzn.to/2xWFCp3&quot;&gt;ドラッカー&lt;/a&gt;を読もうと思った事は無いのですが、そのままやれば、自分もきっと挫折する一人でしょう。&lt;br /&gt;
&lt;br /&gt;
本書では、本を読むスキルには4つのステージがあるとしています。どんな本でも素早く読めるのが「ステージ4」、業務など自分の興味のあるテーマに関連する短く書かれた書籍なら読める、というのが、「ステージ3」になります。多くの人が、この「ステージ3」に位置する事になります。&lt;br /&gt;
そうです。大多数の人は、自分に関係のある本なら、文章量には依るものの、だいたい最後まで読み切る事ができるのです。 &lt;br /&gt;
&lt;br /&gt;
しかしながら、通読できるのは、自分の身近なテーマに限定されています。喫緊な必要性が無い（但し、長期的には必要な）テーマについて書かれた書物については、通読することができず、途中で挫折する事になるのです。挫折しない方法を身につけていることが、本書で言う、本を読むためのスキルです。つまり、&lt;br /&gt;
&lt;br /&gt;
「&lt;a href=&quot;http://amzn.to/2xVUGmu&quot;&gt;21世紀の資本&lt;/a&gt;」を読むにはスキルを要します。 （728ページだから）&lt;br /&gt;
「&lt;a href=&quot;http://amzn.to/2wV2zJI&quot;&gt;サピエンス全史&lt;/a&gt;」を読むにはスキルを要します。（上下巻それぞれ300ページだから）&lt;br /&gt;
&lt;br /&gt;
本書は、たとえこれら難解な本であっても、最後まで読み切れるのを目指します。これらの本を、一冊10分で読み切るような、超絶技能を身につける事は目指していません。&lt;br /&gt;
地に足の着いた、妥当な落としどころにフォーカスした本となっています。&lt;br /&gt;
&lt;br /&gt;
つまり「うさんくさくないの」です。&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;全部読まずにポイントを抑える&quot;&gt;
全部読まずにポイントを抑える&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
この表題で、「なんだスキミングの話か」と思った方も多いかと思います。 &lt;br /&gt;
実際、スキミングのテクニックを使用します。しかし、そのテクニックが登場するのは、本を読む工程の一部のみです。 &lt;br /&gt;
本書では、本を通読する為に、6つのステップを経ることとしています。 &lt;br /&gt;
6ステップの詳しい話は、本書を読んで頂きたいのですが、かいつまんで言うと、都合4回、最後まで本に目を通す事を繰り返します。 &lt;br /&gt;
その工程の中で、下記の状態を作って行きます。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;「何の話か理解出来ている状態」を作り出すこと &lt;/li&gt;
&lt;li&gt;「各章、各節に何が書かれているか」を知ること &lt;/li&gt;
&lt;li&gt;「話はどのように展開するか（＝全体の構成）」捉えること&lt;/li&gt;
&lt;/ul&gt;
これを、表層を読む最初のステップから、徐々に熟読していくステップを経て、記述されるポイントの輪郭が見いだしていきます。そのなかで、ポイントに関連が無い記述は、容赦なく読み捨てていきます。&lt;br /&gt;
この、関連が無い部分を読み捨てるというのが、本を読む上で、なかなか出来ないわけですが、一語一句しっかり読むのは時間のムダであり、本を読む上で苦痛しか生まない、というのが、本書のスタンスです。&lt;br /&gt;
&lt;br /&gt;
本書が示す6つのステップを行いながら、最終的に、 &lt;br /&gt;
「自分にとって大切なポイント」 &lt;br /&gt;
or &lt;br /&gt;
「著者の述べるポイント」&lt;br /&gt;
&lt;br /&gt;
上記のうち、どちらかを見いだします。両方ではありません。それは、読みたいと思っている本は、この二つのポイントのいずれかテーマにして手に取ったはずだからです。&lt;br /&gt;
「著者の述べたポイントは自分の仕事にも生かせるかもしれない」という読後感の本と、&lt;br /&gt;
「自分はそうは思っていなかったが、著者が述べるのはこういう事のようだ」という読後感の本とでは、根本的に書かれているテーマがそれぞれ異なっているはずだからです。&lt;br /&gt;
最終的に上記2つの状態のいずれかとなる事を、本から見いださなければなりません。それを見いだした上で、改めてポイントを深く理解する為に、必要に応じた時間を使う事になります。&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;難しい本に挑戦する意義&quot;&gt;
難しい本に挑戦する意義&lt;/h3&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
本書が提唱する6つのステップを活用すれば、難しい本が読めるかも知れません。難しい本とは、すなわち自分とはあまり関係の無い、専門外の領域の本です。 &lt;br /&gt;
本書では、自分の専門外の本を読むことには、大きな意義があるとしています。 &lt;br /&gt;
自分の専門技術を追求する為に役立つ本を読む事は重要です。技術の進歩は目覚ましく、その進歩について行くには、これまで以上に沢山の本を読まないと行けないでしょう。 &lt;br /&gt;
実際、技術者は、自分の専門技術だけではなく、専門分野以外の能力も強化しなければなりません。（技術者に成り立ての頃は除く）&lt;br /&gt;
本書の言うように、&lt;br /&gt;
&lt;strong&gt;ロケットを飛ばす技術を持っていても、政府との交渉を上手く進められなければ、ロケットを飛ばす事はできない。&lt;/strong&gt;&amp;nbsp;のです。&lt;br /&gt;
&lt;br /&gt;
政府との交渉の為には、交渉という、技術者にとって専門外の能力が必要になります。この能力を養うのが、専門外の難しい本に挑戦する意義です。専門外の書物も通読できるスキルが、専門分野の能力を発揮する為の環境を整えてくれると、本書では述べられています。&lt;br /&gt;
&lt;br /&gt;
なんだかやる気が出てきます。&lt;br /&gt;
&lt;br /&gt;
まさに、速読界隈ではむしろ異色とさえいえる、「うさんくさくないの」が、本書と言えます。</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/47562435930208848/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2017/09/6.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/47562435930208848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/47562435930208848'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2017/09/6.html' title='究極の速読法 ～リーディングハニーⓇ6つのステップ～ を読んで、やる気が出た話（書評）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-3308867189343120592</id><published>2017-09-08T01:24:00.000+09:00</published><updated>2018-06-14T17:11:33.932+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="Cling"/><category scheme="http://www.blogger.com/atom/ns#" term="REPL"/><category scheme="http://www.blogger.com/atom/ns#" term="書評"/><title type='text'>（書評）「C言語」ポインタが理解できない理由-2011年の本</title><content type='html'>&lt;b&gt;「C言語」ポインタが理解できない理由&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E-%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%8C%E7%90%86%E8%A7%A3%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1-%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E6%9C%9D%E4%BA%95/dp/4774146110/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1504796743&amp;amp;sr=1-1&amp;amp;keywords=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%8C%E7%90%86%E8%A7%A3%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84&amp;amp;linkCode=li3&amp;amp;tag=hanori-22&amp;amp;linkId=1319b47c91a752ef8720eef1f4a2dd6d&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4774146110&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=hanori-22&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=hanori-22&amp;amp;l=li3&amp;amp;o=9&amp;amp;a=4774146110&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;&amp;nbsp;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;筆者はC言語のポインタを理解しているつもりですが、かといって今、この場でC言語のプログラミングをしてみろ、と言われたら、100%バグを組み込むだろうという確信があります。&lt;br /&gt;&lt;br /&gt;普段仕事で使わない言語だとこともあります。とはいえ、さすがに今のご時世で、C言語は滅多に使わないので、気にしないことにしますが。&lt;br /&gt;&lt;br /&gt;とはいえ、ポインタという概念そのものは、これだけ時代が進んでも、まぁまぁ使われる気がするので、覚えるに越したことは無いと思います。&lt;br /&gt;&lt;br /&gt;多くのDBはCやC++でドライバ等が組まれていて、たとえどんなに小さなアプリケーションでも、DBを使わないものはそう滅多に無いと思います。&lt;br /&gt;&lt;br /&gt;DB利用アプリで、メモリ系のトラブルがあった時、ポインタとメモリアドレスの様子をすぐにイメージできれば、プロセスのメモリがどこにアサインされ、どのプロセスのデータセグメント上にあって、それがスタックなのかヒープなのか、といった筋道を立てた推理がしやすくなります。その点、ポインタの概念は、今後変わらない普遍的なものであり、&lt;b&gt;エンジニアが備えるべき教養&lt;/b&gt;とも言えます。&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;a href=&quot;http://amzn.to/2eODbRq&quot; style=&quot;font-weight: bold;&quot;&gt;「C言語」ポインタが理解できない理由&lt;/a&gt;は、このポインタの事だけに焦点を当てた本です。&lt;br /&gt;
ポインタの概念を理解しようとする上で、つまづくポイントは人それぞれです。&lt;br /&gt;
&lt;br /&gt;
「ポインタのポインタ」でつまづいた人もいれば、ほぼ基本となる「メモリの使い方」の段階で、つまづいた人もいるはずです。&lt;br /&gt;
こうしたつまづきを経験した人にとって、本書はうってつけの本です。&lt;br /&gt;
&lt;br /&gt;
本書を読む際、自分のハマりどころに直接ジャンプして、そこから読みすすむのも良いのですが、冒頭から読み進めるのをオススメします。&lt;br /&gt;
これは、筆者の個人的な体験からくるオススメであり「分かったつもり」をできるだけ排除する意味があります。筆者もそうだったのですが、ポインタについて、ある程度の難度まで習得したと思っていても、実はそれより前の段階で、理解や認識のモレがあった為に、つまづいてしまっていることがあり得るからです。これが「冒頭から順番に」をオススメする理由です。&lt;br /&gt;
本書のサンプルコードを試していきながら、ステップバイステップを実践していけば、ポインタの理解が深まることでしょう。&lt;br /&gt;
&lt;br /&gt;
なお、「今時、自分のPCにC言語の開発環境なんて無い」という方もおられるとおもいます。安心してください。&lt;br /&gt;
昨今はWeb上で、様々なプログラム言語によるコーディングができるサービスが公開されています。&lt;br /&gt;
&lt;br /&gt;
C言語のコード補完機能付きREPL※で、オススメしたいWebサービスは「r&lt;a href=&quot;https://repl.it/languages/c&quot;&gt;epl.it&lt;/a&gt;」です。&lt;br /&gt;
C言語を選択すれば、すぐにコーディング環境がWebから利用できます。（Githubアカウントが必要です）&lt;br /&gt;
&lt;br /&gt;
※REPL:&lt;span style=&quot;background-color: white; color: #545454; font-family: &amp;quot;arial&amp;quot; , sans-serif; font-size: x-small;&quot;&gt;Read-eval-print loop-読む、評価する、表示する、ループさせる、という一連のお試しコーディングができる環境の事&lt;/span&gt;&lt;br /&gt;
また、「自分のローカル」でREPLを構成したいと言う向きには、弊ブログの&lt;a href=&quot;http://hanorionrails.blogspot.jp/2015/&quot;&gt;過去記事&lt;/a&gt;にて、CERNが提供するClingというREPLについて記載してありますので、そちらを参考にしてください。&lt;br /&gt;
&lt;br /&gt;
本書の完全クリアで、是非ポインタをしっかり理解していただければとおもいます。</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/3308867189343120592/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2017/09/c-2011.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/3308867189343120592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/3308867189343120592'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2017/09/c-2011.html' title='（書評）「C言語」ポインタが理解できない理由-2011年の本'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-8921728353992174110</id><published>2017-08-31T21:39:00.002+09:00</published><updated>2017-09-06T21:17:10.443+09:00</updated><title type='text'>(書評)「仁義なきキリスト教史」と方言</title><content type='html'>&lt;a href=&quot;https://www.amazon.co.jp/%E4%BB%81%E7%BE%A9%E3%81%AA%E3%81%8D%E3%82%AD%E3%83%AA%E3%82%B9%E3%83%88%E6%95%99%E5%8F%B2-%E3%81%A1%E3%81%8F%E3%81%BE%E6%96%87%E5%BA%AB-%E6%9E%B6%E7%A5%9E-%E6%81%AD%E4%BB%8B/dp/4480434038/ref=as_li_ss_il?s=books&amp;amp;ie=UTF8&amp;amp;qid=1504332378&amp;amp;sr=1-1&amp;amp;keywords=%E4%BB%81%E7%BE%A9%E3%81%AA%E3%81%8D%E3%82%AD%E3%83%AA%E3%82%B9%E3%83%88%E6%95%99%E5%8F%B2&amp;amp;linkCode=li2&amp;amp;tag=hanori-22&amp;amp;linkId=cf93cfec31a20e31f752ff99f2199934&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4480434038&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=hanori-22&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=hanori-22&amp;amp;l=li2&amp;amp;o=9&amp;amp;a=4480434038&quot; style=&quot;border-image: none !important; border: currentcolor !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;
&lt;br /&gt;
誓って言うが、口論の時は理路整然と自分の主張を述べて、しかもそれが方言丸出しであったほうが怖い。&lt;br /&gt;
また、普段方言丸出しで怒鳴られたり、凄まれたりするほうが、標準語で怒鳴られるより数段怖い。&lt;br /&gt;
方言の別は問わない。たとえそれが、親しみやすさが高い東北弁や、おっとりした京都弁であっても。&lt;br /&gt;
その点、この本は怖い。何が強いって、広島弁で凄むヤクザしか出てこないから。広島弁マジに怖い。&lt;br /&gt;
&lt;br /&gt;
登場人物はキリストを含め、全て広島弁のヤクザである。&lt;br /&gt;
キリスト教は、キリストとヤハウェとの関係性を発端とした、本当に微妙な差異しかない宗教観の相違から、血で血を洗う抗争へと発展する。&lt;br /&gt;
&lt;br /&gt;
彼らの価値観の相違は、もうほとんど無視してもいいほど微妙すぎるいざこざから始まり、やれプライドを傷つけられたとか、筋を通したとか通さなかったとかで、やたらとモーダル化して表現し、指摘しあいながらお互いを責め合う。故に、抗争になる。これがいわゆるヤクザ世界で言う「仁義」というやつか。&lt;br /&gt;
&lt;br /&gt;
実際、キリスト教の歴史は、その始まりが太古の昔ゆえ、神話の世界感と同様になり、ファンタジー的な色合いが濃い。&lt;br /&gt;
ファンタジーなので、どの聖書にも人間同士の感情の交わりや衝突といった機微について描写があまり豊かではない。フロドとアラゴルンが、なぜ固い友情で結ばれるに至ったかがよく分からないのと同じように、ここは勝手な想像をするしかない。&lt;br /&gt;
この本「仁義なきキリスト教史」では、この想像するしかない局面を全て「仁義」の一言で片付けてしまっている。&lt;br /&gt;
ヤクザ抗争よろしく、とにかくよくわからない「仁義」という価値観、それにもとる人間の行動が着火点となり、宗教戦争に至る。この本では、シュールなヤクザ組織の衝突と宗教観の衝突とを同一視して、キリスト教の争いの歴史を実にユーモラスに描いている。&lt;br /&gt;
&lt;br /&gt;
ギャグ描写がとにかく軽妙で面白おかしく、そのおかげでキリスト教の歴史が、なかなか頭に入らない。その一方で、広島弁の運用方法、とりわけ、ヤクザにおける広島弁の運用方法が、しっかり頭に入る。&lt;br /&gt;
だからといって、この本を読む事で得た広島弁を、広島出身でもない人間が使うのはリスキーである。それは、関西出身でもないのに関西弁を使う人物に遭遇した時の、あの寒々しさと同じ事になる。方言という点からも、この本で得られる知識は劇薬といえよう。</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/8921728353992174110/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2017/08/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/8921728353992174110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/8921728353992174110'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2017/08/blog-post.html' title='(書評)「仁義なきキリスト教史」と方言'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-3006924556986955391</id><published>2015-12-29T19:10:00.002+09:00</published><updated>2017-09-25T16:35:51.031+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="CLang"/><category scheme="http://www.blogger.com/atom/ns#" term="Cling"/><category scheme="http://www.blogger.com/atom/ns#" term="CMake"/><category scheme="http://www.blogger.com/atom/ns#" term="llvm"/><category scheme="http://www.blogger.com/atom/ns#" term="REPL"/><title type='text'>Clingの助けを借りて、その数式をプログラムしてみる</title><content type='html'>&lt;h2&gt;
その数式、プログラムできますか？
&lt;/h2&gt;
&lt;a href=&quot;http://www.amazon.co.jp/gp/product/4798141100/ref=as_li_ss_il?ie=UTF8&amp;amp;camp=247&amp;amp;creative=7399&amp;amp;creativeASIN=4798141100&amp;amp;linkCode=as2&amp;amp;tag=hanori-22&quot; rel=&quot;nofollow&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=4798141100&amp;amp;Format=_SL110_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=JP&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=hanori-22&quot; /&gt;&lt;/a&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;1&quot; src=&quot;https://ir-jp.amazon-adsystem.com/e/ir?t=hanori-22&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=4798141100&quot; style=&quot;border: none !important; margin: 0px !important;&quot; width=&quot;1&quot; /&gt;
&lt;br /&gt;
この書籍を最近読み始めました。 &lt;br /&gt;
　&lt;br /&gt;
　数学的な課題を題材に、公式や定理が考案された歴史的背景や、解法を編み出した人物像と共に解説し、そしてそれを実際のコードに落とし込む場合どうなるかというのを、段階的に思考過程を示しながら、サンプルコードとともに示されています。&lt;br /&gt;
　なかなか面白い本だと思います。&lt;br /&gt;
　ただ、内容が自分には難しすぎて、実際にサンプルを入力しながら読み進めていかないとついて行くのがなかなか厳しい。さらに、サンプルコードはC++11を前提としており、手元のプライベートなMacbookAirには手軽に使える開発環境がありません。&lt;br /&gt;
　気合いで標準導入されたGCCを使うとか、Objective-Cに変換しながらコーディングしてみても良いですが、書籍のサンプルコードは、せいぜい数十行で、関数も単一のものが大半です。気合いを入れたり、統合開発環境をいちいち立ち上げたりなどは少し大げさな感じです。もう少し手軽にサンプルコードを試せる環境が欲しいところです。&lt;br /&gt;
　&lt;br /&gt;
　PythonではIPythonのようなREPLを使えば、その場その場で思い付いたコードを試す事ができます。この手軽さが理想。C++版のREPLがほしいところです。&lt;br /&gt;
　そして有り難い事に、&lt;a href=&quot;https://d35c7d8c.web.cern.ch/cling&quot;&gt;Cling&lt;/a&gt;というREPLおよびインタプリタを、CERNが公開していました。CERNは大型ハドロン衝突型加速器で有名なあのCERNです。早速導入してみます。&lt;br /&gt;
&lt;h2&gt;
&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;
Clingの導入&lt;/h2&gt;
Clingの導入は、ソースをgit cloneし、Buildする事で行います。Buildには、CERNが提供するBuildScriptを使う方法の他、&lt;a href=&quot;https://cmake.org/&quot;&gt;CMake&lt;/a&gt;やconfigure＋Makeを使って手動でBuildする方法があります。&lt;br /&gt;
&lt;br /&gt;
＜導入手順（英文）＞&lt;br /&gt;
&lt;a href=&quot;https://root.cern.ch/cling-build-instructions&quot;&gt;https://root.cern.ch/cling-build-instructions&lt;/a&gt;&lt;br /&gt;
　&lt;br /&gt;
　今回は、手元のmac環境にもともとCMakeが導入されていたので、CMakeを使って手動でBuildしてみました。&lt;br /&gt;
　英文が読める方は、手順の通り実施すれば多くの場合は問題ないかと思いますが、手動Buildでハマりました。Windowsであるのと、個人的にうっかりミスを誘う記載があり、余分な時間を使った箇所があったので、そのあたりを踏まえた手順を述べたいと思います。&lt;br /&gt;
　なお、Clangを全てソースからビルドするので、かなり時間が掛かります。他の作業と並行するなど、時間的な余裕をもっての実施をおすすめします。&lt;br /&gt;
&lt;h2&gt;
&lt;span style=&quot;font-size: 1em;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;h2&gt;
&lt;span style=&quot;font-size: 1em;&quot;&gt;ソースのビルド&lt;/span&gt;&lt;/h2&gt;
導入するディレクトリを任意の名称（仮に/Users/&amp;lt;login-acount名&amp;gt;/clingとします）で作成した後、まず、CERNのgitからソースをCloneします。&lt;a href=&quot;https://root.cern.ch/cling-build-instructions&quot;&gt;リンク&lt;/a&gt;の手順（Manual Build）の記載に従い、下記のコマンドを実行します。&lt;br /&gt;
&lt;br /&gt;
＜Building with CMake＞&lt;br /&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;git clone&lt;/span&gt; http:&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;//&lt;/span&gt;root.cern.ch&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;git&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;llvm.git src
&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd&lt;/span&gt; src
&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;git checkout&lt;/span&gt; cling-patches
&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd&lt;/span&gt; tools
&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;git clone&lt;/span&gt; http:&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;//&lt;/span&gt;root.cern.ch&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;git&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;cling.git
&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;git clone&lt;/span&gt; http:&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;//&lt;/span&gt;root.cern.ch&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;git&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;clang.git
&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd&lt;/span&gt; clang
&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;git checkout&lt;/span&gt; cling-patches
&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd&lt;/span&gt; ..　&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
さて、原文だと最後のcd ..で1階層上にカレントディレクトリを移動していますが、なぜこの操作が記載されているのか良くわかりません。ここは正しくは、「clangを1階層上に登る」ではなく、「最初に作ったディレクトリ配下に移動」が正しいです。ですので、もう2段上にカレントディレクトリを移動しましょう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd ..&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd ..&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;pwd &lt;/span&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;（※Windowsでは単にcd）&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;i&gt;(pwdの結果)/Users/&amp;lt;login-acount名&amp;gt;/cling&lt;/i&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
　以下のコマンドを実行していきましょう。&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #c20cb9; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;mkdir&lt;/span&gt; build&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd&lt;/span&gt; build
cmake -DCMAKE_INSTALL_PREFIX=&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;Install Path&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt; ..\src
&lt;/pre&gt;
3行目のコマンドについて、..&lt;span style=&quot;color: #6a6a6a; font-family: &amp;quot;arial&amp;quot; , sans-serif; font-weight: bold;&quot;&gt;\src　&lt;/span&gt;の記載箇所にちょっとした注意が必要です。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cmake -DCMAKE_INSTALL_PREFIX=&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;Install Path&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt; ..\src&lt;/pre&gt;
&lt;br /&gt;
　..&lt;span style=&quot;color: #6a6a6a; font-family: &amp;quot;arial&amp;quot; , sans-serif; font-weight: bold;&quot;&gt;\src　&lt;/span&gt;はCloneしたソースコード相対パスを示していますが、cernのページはWindowsを前提としているので、バックスラッシュつまり日本語OSでの¥マークであり、一方macなどではバックスラッシュではなく、ただのスラッシュでなければなりません。&lt;br /&gt;
&lt;br /&gt;
＜macでのcmakeコマンド実行＞&lt;br /&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cmake -DCMAKE_INSTALL_PREFIX=&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;Install Path&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt; ../src&lt;/pre&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
　最初のcmakeの処理が終わったら、以下のコマンドを順次実行していきましょう。&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cmake &lt;span style=&quot;background-color: transparent; border: 0px; color: #660033; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--build&lt;/span&gt; . &lt;span style=&quot;background-color: transparent; border: 0px; color: #660033; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--config&lt;/span&gt; &lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;Release&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;Debug&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;background-color: transparent; border: 0px; color: #660033; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--target&lt;/span&gt; clang&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cmake &lt;span style=&quot;background-color: transparent; border: 0px; color: #660033; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--build&lt;/span&gt; . &lt;span style=&quot;background-color: transparent; border: 0px; color: #660033; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--config&lt;/span&gt; &lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[&lt;/span&gt;Release&lt;span style=&quot;background-color: transparent; border: 0px; color: black; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/&lt;/span&gt;Debug&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;background-color: transparent; border: 0px; color: #660033; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--target&lt;/span&gt; cling&lt;/pre&gt;
&lt;div&gt;
　(※このあたりに時間が掛かります。のんびり待ちましょう)&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
　全ての手順が終わったら、ビルド後のbinディレクトリに移動して、clingコマンドを実行してみましょう。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;background-color: transparent; border: 0px; color: #7a0874; font-weight: bold; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cd&lt;/span&gt; bin&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;&lt;b&gt;./cling &lt;/b&gt;(※Windowsで&lt;/span&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;は単にcling)&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;
****************** CLING ******************&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;* Type C++ code and press enter to run it *&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type .q to exit &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;*******************************************&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;[cling]$&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
　clingの対話式コマンド入力モードになっていれば、導入は成功です。対話モードが不要になった時は&lt;i&gt;.q&lt;/i&gt;と入れれば、解除されます。&lt;br /&gt;
&lt;h2&gt;
&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;
Clingを使った最初の操作&lt;/h2&gt;
Clingで導入されたClangはC++11対応という事なので、lamdaがつかえます。&lt;br /&gt;
　lamda式のコードとともに簡単な操作を行ってみます。必要に応じてclingコマンドを実行し対話モードにしてください。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;&lt;b&gt;./cling &lt;/b&gt;(※Windowsで&lt;/span&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;は単にcling)&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;****************** CLING ******************&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;* Type C++ code and press enter to run it *&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type .q to exit &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;*******************************************&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]$ #include &amp;lt;stdio.h&amp;gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]$ auto f = []{printf(&quot;Hello, CLing\n&quot;); };&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]$ f()&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Hello, CLing&lt;/pre&gt;
REPL風に、includeからlamdaで記載された関数の定義と、その実行まで順次対話的に入力していきます。入力ミスによるエラーがあっても、行を確定した時点でフィードバックがあるので、再度入力しなおせば、最終的には実行が成功する事になります。&lt;br /&gt;
&lt;h2&gt;
&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;
サンプルの実行&lt;/h2&gt;
書籍「その数式、プログラムできますか？」から、足し算のみによってかけ算を実現する「エジプト乗法」というアルゴリズムのコードをサンプルとして、入力から実行までを行ってみます。&lt;br /&gt;
　下記のようなコードを入力してみます。 （コードは実際の書籍からアレンジしてます）&lt;br /&gt;
&lt;blockquote&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
auto odd = [](int n)-&amp;gt; bool { return n &amp;amp; 0x1; }&lt;br /&gt;
auto half = [](int n)-&amp;gt; int { return n &amp;gt;&amp;gt; 1; }&lt;br /&gt;
int mult_acc4(int r, int n, int a) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; while (true) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (odd(n)) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;r = r + a;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (n == 1) return r;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n = half(n);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = a + a;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int multiply4(int n, int a) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;while (!odd(n)) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = a + a;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;n = half(n);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;if (n == 1) return a;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;return mult_acc4(a, half(n -1), a + a);&lt;br /&gt;
}&amp;nbsp;&lt;/blockquote&gt;
&lt;/blockquote&gt;
コードを入力し、実行してみましょう。&lt;br /&gt;
　なお、途中出てくる.rawInputというのは、複数行からなる関数などを書く場合につかいます。行毎にコンパイルしないようにclingに指示するコマンドです。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;&lt;b&gt;./cling &lt;/b&gt;(※Windowsで&lt;/span&gt;&lt;span style=&quot;color: #7a0874;&quot;&gt;は単にcling)&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;****************** CLING ******************&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;* Type C++ code and press enter to run it *&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type .q to exit &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;*******************************************&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]$ auto odd = [](int n)-&amp;gt; bool { return n &amp;amp; 0x1; }
((lambda) &amp;amp;) @0x108afcb30
[cling]$ auto half = [](int n)-&amp;gt; int { return n &amp;gt;&amp;gt; 1; }
((lambda) &amp;amp;) @0x108afcbb0&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]$ .rawInput
Using raw input
[cling]! int mult_acc4(int r, int n, int a) {
[cling]! ? while (true) {
[cling]! ?     if (odd(n)) {
[cling]! ?         r = r + a;
[cling]! ?         if (n == 1) return r;
[cling]! ?         }
[cling]! ?     n = half(n);
[cling]! ?     a = a + a;
[cling]! ?     }
[cling]! ? }&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]! int multiply4(int n, int a) {
[cling]! ? while (!odd(n)) {
[cling]! ?     a = a + a;
[cling]! ?     n = half(n);
[cling]! ?     }
[cling]! ? if (n == 1) return a;
[cling]! ? return mult_acc4(a, half(n -1), a + a);
[cling]! ? }
[cling]! .rawInput
Not using raw input&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]$ multiply4(6,80)
(int) 480&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;[cling]$ multiply4(78,80)
(int) 6240&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class=&quot;bash geshifilter-bash&quot; style=&quot;background-color: #f8f8f8; border: 0px; color: #222222; font-size: 13px; line-height: 1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&amp;nbsp;&lt;/pre&gt;
&lt;br /&gt;
　無事、実行できました。Enjoy！</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/3006924556986955391/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2015/12/cling.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/3006924556986955391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/3006924556986955391'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2015/12/cling.html' title='Clingの助けを借りて、その数式をプログラムしてみる'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-2847448680890282654</id><published>2015-12-12T21:45:00.001+09:00</published><updated>2016-07-12T12:12:19.540+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hack-a-thon"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Python mini Hack-a-thonに参加しました</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://pyhack.connpass.com/event/22594/&quot;&gt;第59回Python mini Hack-a-thon&lt;/a&gt;に参加させていただいた。&lt;/p&gt;
&lt;p&gt;　Python全くの初心者で有りながら、miniとは言え、まがりなりにもハッカソンと名の付くイベントに無謀にも参加した感想を述べたいと思います。&lt;/p&gt;
&lt;p&gt;　まず、第一印象として、参加者全員がOpen Mindで、昨今の技術動向や業務上の相談事など、わりとフランクに話し合われていた。日本もここまで来た。(?)&lt;br /&gt;　こう言う議論が交わされる場があるというのが、IT勉強会の良いところ。貴重な情報収集の機会になります。 &lt;/p&gt;
&lt;p&gt;　本題のハッカソンですが、初心者とはいえ、JavaやCのほか、開発のベテランと自負している手前、開発の基本として何よりもまずはTestFirstの実現だ、とばかりに、Unittest2を意気揚々とpipインストール。&lt;/p&gt;
&lt;p&gt;　しかしすでにここが間違い。エラーが出る原因を聞いてみたら、今回使用しているPython3.5環境には、既にUnittestがバンドルされているとの指摘。さらにUnitest2は、Python3.2で組みこまれたUnittestをPython2で使用できるようにしたパッケージライブラリであり、Python3.5で動作させようとすること自体が間違い。要は、全面的に間違っていました。&lt;br /&gt;　すかさず、pip uninstall unittest2でアンインストール。追加パッケージを入れずともUnitTestのアサーションはしっかり動きます。最近になって初めてPythonを学習する人は、Python3から始める事も多いかと思います。ただPython2も未だに現役であって、Webの情報もPython2を前提として記載されているケースが多いかもしれません。Python2とPython3の差異がどの程度あるか把握しておいた方が、それぞれどのバージョンについての情報かといった点を切り分けられて、今後の学習でハマる要因を取り除けるので効果的かもしれません。&lt;/p&gt;
&lt;p&gt;　その後も、度重なるヘマをしながら、BeautifulSoupとRequestsといったライブラリを使用して、Webスクレイピングの簡単な例をどうにか作って、LTで発表させていただきました。&lt;/p&gt;
&lt;p&gt; 　個人的に、新しい言語を覚えるには、まずその言語の文字編集処理を学習する事から入るというスタイルを取る事が多いですが、Webスクレイピングでは文字列の部分抽出や検索などを駆使する点から、学習の初め方としては良かったように思います。&lt;/p&gt;
&lt;p&gt;　Pythonを使いこなす為に、今後もイベントに参加するなりを続けたい次第です。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/2847448680890282654/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2015/12/python-mini-hack-thon.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/2847448680890282654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/2847448680890282654'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2015/12/python-mini-hack-thon.html' title='Python mini Hack-a-thonに参加しました'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-5464980666866045210</id><published>2015-11-07T21:35:00.001+09:00</published><updated>2016-07-12T12:12:02.189+09:00</updated><title type='text'>セキュアプログラミング開発セミナに参加しました</title><content type='html'>&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://secure-app-group.connpass.com/event/22150/&quot;&gt;&amp;#12300;&amp;#12522;&amp;#12473;&amp;#12463;&amp;#12395;&amp;#32016;&amp;#20184;&amp;#12367;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12398;&amp;#12479;&amp;#12452;&amp;#12503;&amp;#12434;&amp;#35211;&amp;#12390;&amp;#12415;&amp;#12427;&amp;#12316;&amp;#12477;&amp;#12540;&amp;#12473;&amp;#12363;&amp;#12425;&amp;#35211;&amp;#12427;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#21839;&amp;#38988;&amp;#28857;&amp;#12398;&amp;#25226;&amp;#25569;&amp;#12316;&amp;#12301;&lt;/a&gt; &amp;#12371;&amp;#12385;&amp;#12425;&amp;#12395;&amp;#21442;&amp;#21152;&amp;#12375;&amp;#12414;&amp;#12375;&amp;#12383;&amp;#12290;&lt;br&gt;
&amp;#12288;&amp;#20170;&amp;#26085;&amp;#12398;&amp;#12486;&amp;#12540;&amp;#12510;&amp;#12399;&amp;#12289;Web&amp;#12450;&amp;#12503;&amp;#12522;&amp;#12465;&amp;#12540;&amp;#12471;&amp;#12519;&amp;#12531;&amp;#12398;&amp;#12475;&amp;#12461;&amp;#12517;&amp;#12522;&amp;#12486;&amp;#12451;&amp;#12395;&amp;#38306;&amp;#12377;&amp;#12427;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12434;&amp;#22914;&amp;#20309;&amp;#12395;&amp;#12375;&amp;#12390;&amp;#29305;&amp;#23450;&amp;#12377;&amp;#12427;&amp;#12363;&amp;#12392;&amp;#12356;&amp;#12358;&amp;#20869;&amp;#23481;&amp;#12391;&amp;#12377;&amp;#12290;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&amp;#12288;&amp;#12394;&amp;#12363;&amp;#12394;&amp;#12363;&amp;#33391;&amp;#12363;&amp;#12387;&amp;#12383;&amp;#12391;&amp;#12377;&amp;#12290;&lt;br&gt;
&amp;#12288;&amp;#26222;&amp;#27573;&amp;#12399;&amp;#31038;&amp;#20869;&amp;#12471;&amp;#12473;&amp;#12486;&amp;#12512;&amp;#21521;&amp;#12369;&amp;#12398;&amp;#12503;&amp;#12525;&amp;#12480;&amp;#12463;&amp;#12488;&amp;#12398;&amp;#38283;&amp;#30330;&amp;#12375;&amp;#12363;&amp;#12375;&amp;#12390;&amp;#12394;&amp;#12356;&amp;#12398;&amp;#12391;&amp;#12377;&amp;#12364;&amp;#12289;&amp;#12463;&amp;#12521;&amp;#12454;&amp;#12489;&amp;#29872;&amp;#22659;&amp;#21270;&amp;#12398;&amp;#27874;&amp;#12399;&amp;#12393;&amp;#12435;&amp;#12393;&amp;#12435;&amp;#25276;&amp;#12375;&amp;#23492;&amp;#12379;&amp;#12414;&amp;#12377;&amp;#12290;&amp;#12458;&amp;#12531;&amp;#12503;&amp;#12524;&amp;#12511;&amp;#12473;&amp;#12394;&amp;#29872;&amp;#22659;&amp;#12395;&amp;#23550;&amp;#24540;&amp;#12377;&amp;#12427;&amp;#12384;&amp;#12369;&amp;#12391;&amp;#12399;&amp;#28168;&amp;#12414;&amp;#12394;&amp;#12356;&amp;#29366;&amp;#27841;&amp;#12391;&amp;#12354;&amp;#12426;&amp;#12289;&amp;#12475;&amp;#12461;&amp;#12517;&amp;#12450;&amp;#12503;&amp;#12525;&amp;#12464;&amp;#12521;&amp;#12511;&amp;#12531;&amp;#12464;&amp;#38283;&amp;#30330;&amp;#12398;&amp;#30693;&amp;#35211;&amp;#12434;&amp;#24471;&amp;#12427;&amp;#24517;&amp;#35201;&amp;#24615;&amp;#12434;&amp;#24863;&amp;#12376;&amp;#12390;&amp;#12398;&amp;#21442;&amp;#21152;&amp;#12391;&amp;#12377;&amp;#12290;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&amp;#12288;&lt;br&gt;
&amp;#160; &amp;#20170;&amp;#26085;&amp;#12398;&amp;#12475;&amp;#12511;&amp;#12490;&amp;#12391;&amp;#12399;&amp;#12289;&amp;#12475;&amp;#12461;&amp;#12517;&amp;#12522;&amp;#12486;&amp;#12451;&amp;#21508;&amp;#31278;&amp;#22243;&amp;#20307;&amp;#12398;&amp;#27010;&amp;#35201;&amp;#12398;&amp;#35500;&amp;#26126;&amp;#12289;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12398;&amp;#20855;&amp;#20307;&amp;#20363;&amp;#12289;&amp;#12503;&amp;#12525;&amp;#12480;&amp;#12463;&amp;#12488;&amp;#38283;&amp;#30330;&amp;#32773;&amp;#12364;&amp;#12394;&amp;#12380;&amp;#12475;&amp;#12461;&amp;#12517;&amp;#12522;&amp;#12486;&amp;#12451;&amp;#12398;&amp;#20840;&amp;#20307;&amp;#20687;&amp;#12434;&amp;#30693;&amp;#12427;&amp;#24517;&amp;#35201;&amp;#12364;&amp;#12354;&amp;#12427;&amp;#12398;&amp;#12363;&amp;#12289;&amp;#12392;&amp;#12356;&amp;#12387;&amp;#12383;&amp;#28857;&amp;#12395;&amp;#12388;&amp;#12356;&amp;#12390;&amp;#35441;&amp;#38988;&amp;#12364;&amp;#25369;&amp;#12364;&amp;#12426;&amp;#12414;&amp;#12375;&amp;#12383;&amp;#12290;&lt;br&gt;
&amp;#12288;&lt;a href=&quot;https://www.ipa.go.jp/security/vuln/CWE.html&quot;&gt;&amp;#20849;&amp;#36890;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12479;&amp;#12452;&amp;#12503;&amp;#19968;&amp;#35239;CWE&lt;/a&gt;&amp;#12395;&amp;#12424;&amp;#12387;&amp;#12390;&amp;#12289;&amp;#20856;&amp;#22411;&amp;#30340;&amp;#12394;&amp;#12503;&amp;#12525;&amp;#12464;&amp;#12521;&amp;#12512;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12398;&amp;#12497;&amp;#12479;&amp;#12540;&amp;#12531;&amp;#12434;&amp;#30906;&amp;#35469;&amp;#12539;&amp;#23398;&amp;#32722;&amp;#12377;&amp;#12427;&amp;#20107;&amp;#12364;&amp;#12391;&amp;#12365;&amp;#12427;&amp;#28857;&amp;#12395;&amp;#12388;&amp;#12356;&amp;#12390;&amp;#12418;&amp;#35500;&amp;#26126;&amp;#12364;&amp;#12354;&amp;#12426;&amp;#12414;&amp;#12375;&amp;#12383;&amp;#12290;&lt;br&gt;
&amp;#12288;&amp;#21839;&amp;#38988;&amp;#12395;&amp;#30330;&amp;#23637;&amp;#12375;&amp;#12381;&amp;#12358;&amp;#12394;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12395;&amp;#12388;&amp;#12356;&amp;#12390;&amp;#12289;&amp;#26222;&amp;#27573;&amp;#12398;&amp;#35519;&amp;#26619;&amp;#12391;&amp;#12399;&lt;a href=&quot;http://cwe.mitre.org/index.html&quot;&gt;CWE&amp;#12469;&amp;#12452;&amp;#12488;&lt;/a&gt;&amp;#12434;&amp;#12473;&amp;#12509;&amp;#12483;&amp;#12488;&amp;#30340;&amp;#12395;&amp;#35211;&amp;#12427;&amp;#27231;&amp;#20250;&amp;#12399;&amp;#12354;&amp;#12426;&amp;#12414;&amp;#12375;&amp;#12383;&amp;#12290;&amp;#12375;&amp;#12363;&amp;#12375;&amp;#12289;&amp;#12394;&amp;#12395;&amp;#12375;&amp;#12429;&amp;#12464;&amp;#12525;&amp;#12540;&amp;#12496;&amp;#12523;&amp;#12394;&amp;#33521;&amp;#35486;&amp;#12469;&amp;#12452;&amp;#12488;&amp;#12394;&amp;#12398;&amp;#12391;&amp;#12289;&amp;#33521;&amp;#25991;&amp;#12434;&amp;#35501;&amp;#12416;&amp;#12398;&amp;#12364;&amp;#12388;&amp;#12425;&amp;#12367;&amp;#12394;&amp;#12387;&amp;#12390;&amp;#12289;&amp;#12377;&amp;#12368;&amp;#12395;&amp;#12506;&amp;#12540;&amp;#12472;&amp;#12363;&amp;#12425;&amp;#36864;&amp;#25955;&amp;#12377;&amp;#12427;&amp;#20107;&amp;#12364;&amp;#22810;&amp;#12363;&amp;#12387;&amp;#12383;&amp;#12391;&amp;#12377;&amp;#12290;&lt;br&gt;
&amp;#12288;&amp;#12375;&amp;#12363;&amp;#12375;&amp;#12418;&amp;#12358;&amp;#23569;&amp;#12375;&amp;#12384;&amp;#12369;&amp;#32048;&amp;#12363;&amp;#12367;&amp;#35211;&amp;#12390;&amp;#12356;&amp;#12367;&amp;#12392;&amp;#12289;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12398;&amp;#12354;&amp;#12427;&amp;#19981;&amp;#36969;&amp;#21512;&amp;#12467;&amp;#12540;&amp;#12489;&amp;#12420;&amp;#12289;&amp;#23455;&amp;#38555;&amp;#12398;&amp;#21839;&amp;#38988;&amp;#20107;&amp;#35937;&amp;#12398;&amp;#12469;&amp;#12531;&amp;#12503;&amp;#12523;&amp;#12392;&amp;#12356;&amp;#12387;&amp;#12383;&amp;#24773;&amp;#22577;&amp;#12364;&amp;#35914;&amp;#23500;&amp;#12395;&amp;#23384;&amp;#22312;&amp;#12375;&amp;#12390;&amp;#12362;&amp;#12426;&amp;#12289;&amp;#12475;&amp;#12461;&amp;#12517;&amp;#12522;&amp;#12486;&amp;#12451;&amp;#12395;&amp;#38306;&amp;#12377;&amp;#12427;&amp;#30693;&amp;#35211;&amp;#12434;&amp;#24471;&amp;#12425;&amp;#12428;&amp;#12427;&amp;#12469;&amp;#12452;&amp;#12488;&amp;#12384;&amp;#12387;&amp;#12383;&amp;#12398;&amp;#12391;&amp;#12375;&amp;#12383;&amp;#12290;&amp;#20170;&amp;#26085;&amp;#21021;&amp;#12417;&amp;#12390;&amp;#30693;&amp;#12426;&amp;#12414;&amp;#12375;&amp;#12383;&amp;#12290;&lt;br&gt;
&amp;#12288;&amp;#23455;&amp;#29694;&amp;#12375;&amp;#12424;&amp;#12358;&amp;#12392;&amp;#12377;&amp;#12427;&amp;#27231;&amp;#33021;&amp;#12395;&amp;#12399;&amp;#12289;&amp;#12393;&amp;#12398;&amp;#12424;&amp;#12358;&amp;#12394;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12434;&amp;#32068;&amp;#12415;&amp;#12371;&amp;#12416;&amp;#21361;&amp;#38522;&amp;#24615;&amp;#12364;&amp;#28508;&amp;#12435;&amp;#12391;&amp;#12356;&amp;#12427;&amp;#12398;&amp;#12363;&amp;#12289;&amp;#12392;&amp;#12356;&amp;#12387;&amp;#12383;&amp;#35251;&amp;#28857;&amp;#12363;&amp;#12425;&amp;#12522;&amp;#12473;&amp;#12463;&amp;#35201;&amp;#22240;&amp;#12434;&amp;#20107;&amp;#21069;&amp;#12395;&amp;#20104;&amp;#26399;&amp;#12539;&amp;#35469;&amp;#35672;&amp;#12391;&amp;#12365;&amp;#12383;&amp;#12394;&amp;#12425;&amp;#12289;&amp;#36969;&amp;#20999;&amp;#12394;&amp;#23550;&amp;#20966;&amp;#12364;&amp;#12391;&amp;#12365;&amp;#12414;&amp;#12377;&amp;#12290;&lt;br&gt;
&amp;#12288;&amp;#12381;&amp;#12398;&amp;#28857;&amp;#12391;&amp;#12289;&amp;#12354;&amp;#12425;&amp;#12422;&amp;#12427;&amp;#33030;&amp;#24369;&amp;#24615;&amp;#12497;&amp;#12479;&amp;#12540;&amp;#12531;&amp;#12398;&amp;#27010;&amp;#35201;&amp;#12434;&amp;#20307;&amp;#31995;&amp;#12384;&amp;#12390;&amp;#12390;&amp;#29702;&amp;#35299;&amp;#12375;&amp;#12390;&amp;#12362;&amp;#12367;&amp;#20107;&amp;#12399;&amp;#37325;&amp;#35201;&amp;#12391;&amp;#12377;&amp;#12290;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&amp;#12288;&amp;#26222;&amp;#27573;&amp;#12363;&amp;#12425;&amp;#12475;&amp;#12461;&amp;#12517;&amp;#12450;&amp;#12503;&amp;#12525;&amp;#12464;&amp;#12521;&amp;#12511;&amp;#12531;&amp;#12464;&amp;#12398;&amp;#30693;&amp;#35672;&amp;#12434;&amp;#24471;&amp;#12424;&amp;#12358;&amp;#12392;&amp;#12377;&amp;#12427;&amp;#24515;&amp;#12364;&amp;#12369;&amp;#12399;&amp;#12289;&amp;#12503;&amp;#12525;&amp;#12480;&amp;#12463;&amp;#12488;&amp;#12398;&amp;#21697;&amp;#36074;&amp;#12434;&amp;#39640;&amp;#12417;&amp;#12427;&amp;#12384;&amp;#12369;&amp;#12391;&amp;#12394;&amp;#12367;&amp;#12289;&amp;#12503;&amp;#12525;&amp;#12472;&amp;#12455;&amp;#12463;&amp;#12488;&amp;#12434;&amp;#25104;&amp;#21151;&amp;#12395;&amp;#23566;&amp;#12367;&amp;#28858;&amp;#12398;&amp;#12522;&amp;#12473;&amp;#12463;&amp;#12504;&amp;#12483;&amp;#12472;&amp;#12392;&amp;#12375;&amp;#12390;&amp;#24847;&amp;#32681;&amp;#12364;&amp;#12354;&amp;#12427;&amp;#12392;&amp;#24863;&amp;#12376;&amp;#12414;&amp;#12375;&amp;#12383;&amp;#12290;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&amp;#12288;&amp;#20170;&amp;#24460;&amp;#12418;&amp;#23450;&amp;#26399;&amp;#30340;&amp;#12395;&amp;#21193;&amp;#24375;&amp;#20250;&amp;#12395;&amp;#21442;&amp;#21152;&amp;#12375;&amp;#12390;&amp;#12356;&amp;#12365;&amp;#12383;&amp;#12356;&amp;#12392;&amp;#24605;&amp;#12358;&amp;#27425;&amp;#31532;&amp;#12391;&amp;#12377;&amp;#12290;&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/5464980666866045210/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2015/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/5464980666866045210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/5464980666866045210'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2015/11/blog-post.html' title='セキュアプログラミング開発セミナに参加しました'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-2482111400532435352</id><published>2014-09-15T10:40:00.001+09:00</published><updated>2016-11-12T21:38:15.901+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud9"/><category scheme="http://www.blogger.com/atom/ns#" term="editor"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Nitrous.IO"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><title type='text'>Cloud9を試す（２）-Nitrous.IOと連携</title><content type='html'>Sublime Textとtern.jsで、Node.JSを書いているのですが、Cloud9と比較し、コードの補完機能が物足りなく感じます。Cloud9のIDEを使って、Nitrous.IOのBOXにあるソースを編集できないものでしょうか。&lt;br /&gt;
Nitrous.IOとCloud9というキーワードで検索してみると、&lt;a href=&quot;https://coderwall.com/p/yk82wq&quot;&gt;こちら&lt;/a&gt;に行き着きました。 &lt;br /&gt;
エントリにはCloud9IDEとNitrous.IOのBoxをSSH接続で連携させる手順が書かれています。見るとCloud9のエディタでちゃんとコード補完されています。これは是非試したい。&lt;br /&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;cloud9でnitrousioのプログラムをコーディングする&quot;&gt;
Cloud9でNitrous.IOのプログラムをコーディングする&lt;/h1&gt;
英語がわかる人は、元のエントリの通りの手順を践めば問題はないはずです。以下には、少し引っかかった箇所を補足して手順を記載しています。&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Create a new NodeJS Box on Nitrous.IO &lt;br /&gt;
まず、Nitrous.IOにNodeJSのBOXを作成します。&lt;a href=&quot;http://hanorionrails.blogspot.jp/2014/07/sublime-textnitrousio_27.html&quot;&gt;こちら&lt;/a&gt;を参考にして下さい。既にNodeのBOXが在る場合はこのステップは不要です。&lt;/li&gt;
&lt;li&gt;Note the information about the new box &lt;br /&gt;
BOXのSSH URIを書き留めるか、クリップボードに記憶させておいて下さい。 &lt;br /&gt;
私の場合&lt;code&gt;ssh://action@apne1.nitrousbox.com:&amp;lt;ポート番号&amp;gt;&lt;/code&gt;でした &lt;br /&gt;
&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjt1Sp0SlB4rVSli41NXtLZHn80akMadAqXlpJZsQrGTm0b55Hz1Jr4uf9Z5wN0irEc07J-xs9vTPm7tJNOVFK6CJttZHu8HFhXaL67cb-I5rlv07njpER9Sk6Rof_dpSvusFaRh9tx78/s500/&quot; title=&quot;1.png&quot; /&gt;&lt;/li&gt;
&lt;li&gt;Add a new SSH Workspace on Cloud9 &lt;br /&gt;
Cloud9のダッシュボードから、SSH Workspaceの新規作成を実行します。なお、無課金の範囲でCloud9を使用する場合、SSH等プライベート領域で外部公開しないWorkspaceは、1ユーザに付き1つのみ作成可能となっています。既にプライベートWorkspaceを作成済であった場合は、Workspaceを削除するか、課金により、複数のプライベートWorkspaceを作成可能にして下さい。 &lt;br /&gt;
下記の様に設定して下さい。 &lt;br /&gt;
&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmmRqd06A8b8wz19PXsPyn4yzY3zd81gWJCquadZsVXNgD6GKPpz10E5Gbpp-tpyWMBmRYyQnrwtbtgZ-A3bspqcd6q5BLgbDkpUwYOotF2Jsj2wzvhOh4vI2QeIZpEJTpPyrolUbHqvc/s500/&quot; title=&quot;5.png&quot; /&gt;&lt;br /&gt;


&lt;ul&gt;
&lt;li&gt;HostName &lt;br /&gt;
　NitrousIOのBOXに対応するSSH URI、先ほど確認したやつから、ユーザID（action）を除いたものを設定します。 (例apne1.nitrousbox.com）&lt;/li&gt;
&lt;li&gt;Username &lt;br /&gt;
　”action”を設定します。 SSH URIの@より前の文字列が、ユーザIDとなっています。&lt;/li&gt;
&lt;li&gt;Node.JS Binary Path　 &lt;br /&gt;
　Node.JSが導入されたBOXに関して、Node.JSコアのバイナリがある場所を指定します。本エントリー記載の時点では、pathは&lt;code&gt;/home/action/.parts/packages/nodejs/0.10.26/bin/node&lt;/code&gt;でした。バージョンによってはこのpathは変更されるので、Nitrous.IOのコンソールから、実存するファイルか確認したほうが良いでしょう。&lt;/li&gt;
&lt;li&gt;Initial Path &lt;br /&gt;
任意で設定します。ログイン時にどのディレクトリをCloud9のWorkspaceエクスプローラの基点とするか設定します。　&lt;/li&gt;
&lt;/ul&gt;
なおLOGINTESTボタンを押してみたくなりますが、未だ押さないで下さい。次の手順を実施しないかぎり、おそらくログインは失敗します。&lt;/li&gt;
&lt;li&gt;Copy the SSH Key shown in the Cloud9 window &lt;br /&gt;
ここの手順について、本家の手順では、/home/action/.sshに、authorized_keyファイルを配置すれば良いような記載がされています。が、どうも本家の記載の通り実施しても、上手くいきませんでした。 &lt;br /&gt;
当方はNitrous.IOのPublicKeyにCloud9側のSSH Keyを登録して解決しました。&lt;br /&gt;


イ） NitrousIOのAdd Public Keyをクリック &lt;br /&gt;
 &lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzSvTl8Mw9N871nrsHKQOUwmGzLErorXPKuBuhY6Sb97TOS3w5y7TNMf1CrFSrRgQ8cSUf43WIAekBIotKWilr7X8hRkGFSqmvAzIqgKPqZqmsnHhR7v-fl9yG1aCweu8SCWhjK2sr47I/s500/&quot; title=&quot;2.png&quot; /&gt;&lt;br /&gt;


ロ） Cloud9側のYour SSH Key(SSH Setting画面に表示)をコピペする &lt;br /&gt;
&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZhrvCRN9xyPdP7HiACWv7I9iFm-V3vyd98QnIyEYWoPEEobc47_RwEbq5zfcdWAdpTH57KAmDqD5lunoUQZys-Mf4rNXQk6HHyZqz813NDvvDQX97gVVcPCVup1442iRMvBunQJ1a2ok/s500/&quot; title=&quot;4.png&quot; /&gt; &lt;br /&gt;
ここでは、Nameを仮にC9としておきます。Add keyボタンを押下します。&lt;/li&gt;
&lt;li&gt;You can now connect to the Nitrous.IO box via the Cloud9 IDE. &lt;br /&gt;
Cloud9側のSSH Setting画面に戻り、LOGIN TESTボタンを押下し、ログインできるか確認してください。ログインできない場合、指定しているパスに誤りがないか、NitrousIOのBOXがDeactiveになっていないかを確認して下さい。 &lt;br /&gt;
Cloud9に作成したWorkspaceを開く（最初は少し時間がかかります）と、NitrousIOに作成したWorkspaceが、Cloud9でも開けているのがわかります。 &lt;br /&gt;
&lt;img alt=&quot;enter image description here&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSScPXSuWuL_18RTVAVmy7gwSPIJWC__54K3qlVKVjLfCM4jUqgQtrT1AHMDK4S9mFKQYQmkNt6DY2dr3Hc_mTwS7l1KT0bY7qeR4bLBWU1OmKVIb5ZhsSbuaaoRpPccwHHFrtnL7Sqm4/s500/&quot; title=&quot;nitrousio - Cloud9 - Google Chrome.png&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
これで、Cloud9の強力なコード補完機能が、NitrousIO上のコード編集でも使えるようになりました。 &lt;br /&gt;
※コード補完が使えるようになるまでの時間が掛かる場合もあります。Cloud9がWorkspaceの補完候補をクローリングするに時間を要する為だと思います。&lt;br /&gt;
&lt;blockquote&gt;
Written with &lt;a href=&quot;https://stackedit.io/&quot;&gt;StackEdit&lt;/a&gt;.&lt;/blockquote&gt;
</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/2482111400532435352/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2014/09/cloud9-nitrousio.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/2482111400532435352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/2482111400532435352'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2014/09/cloud9-nitrousio.html' title='Cloud9を試す（２）-Nitrous.IOと連携'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjt1Sp0SlB4rVSli41NXtLZHn80akMadAqXlpJZsQrGTm0b55Hz1Jr4uf9Z5wN0irEc07J-xs9vTPm7tJNOVFK6CJttZHu8HFhXaL67cb-I5rlv07njpER9Sk6Rof_dpSvusFaRh9tx78/s72-c/" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-4849356413830563015</id><published>2014-09-14T19:31:00.001+09:00</published><updated>2014-09-16T00:06:02.455+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="editor"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Nitrous.IO"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><category scheme="http://www.blogger.com/atom/ns#" term="Sublime"/><category scheme="http://www.blogger.com/atom/ns#" term="text"/><title type='text'>Sublime TextとNitrous.IO環境でNode.JS開発環境を作成する（２）</title><content type='html'>&lt;p&gt;　&lt;a href=&quot;http://hanorionrails.blogspot.jp/2014/07/sublime-textnitrousio_27.html&quot;&gt;前回&lt;/a&gt;までは、Nitorus.IOでの開発環境の作成、NitorusDesktopの導入までを行いました。 &lt;br&gt;
　今回は、&lt;a href=&quot;https://www.nitrous.io/join/0coG5Pr8MFc?utm_source=nitrous.io&amp;amp;utm_medium=copypaste&amp;amp;utm_campaign=referral&quot;&gt;NodeJS&lt;/a&gt;を&lt;a href=&quot;http://www.sublimetext.com/&quot;&gt;Sublime Text&lt;/a&gt;で編集できるようにします。コード補完機能も使えるようにします。&lt;/p&gt;

&lt;hr&gt;

&lt;h3 id=&quot;nitorousdesktopのfilesyncの有効化&quot;&gt;&lt;i class=&quot;icon-pencil&quot;&gt;&lt;/i&gt;NitorousDesktopのfilesyncの有効化&lt;/h3&gt;

&lt;p&gt;　NitorusDesktopは、&lt;a href=&quot;https://www.nitrous.io/join/0coG5Pr8MFc?utm_source=nitrous.io&amp;amp;utm_medium=copypaste&amp;amp;utm_campaign=referral&quot;&gt;Nitrous.IO&lt;/a&gt;のデスクトップアプリケーションです。 &lt;br&gt;
　インストールしたNitorusDesktopを起動し、File Syncを有効にして下さい。&lt;/p&gt;

&lt;hr&gt;

&lt;h3 id=&quot;sublime-text-2にnodejs補完機能を導入する&quot;&gt;&lt;i class=&quot;icon-pencil&quot;&gt;&lt;/i&gt;Sublime Text 2にNodeJS補完機能を導入する&lt;/h3&gt;

&lt;p&gt;　Sublime Text2は、必要に応じてパッケージを導入することで、機能を強化する事ができます。しかしSublimeText2に最初から組みこまれた入力補完機能では少々もの足りないので、TernJsを導入して、&lt;a href=&quot;http://nodejs.org/&quot;&gt;NodeJS&lt;/a&gt;のコード補完機能を有効にさせます。以下の手順を実施します。&lt;/p&gt;

&lt;hr&gt;

&lt;h4 id=&quot;1-sublime-textへpackagecontrollerを導入する&quot;&gt;1. Sublime TextへPackageControllerを導入する&lt;/h4&gt;

&lt;p&gt;　Sublime Text をインストールした際に、最初に実施するのは、Sublime TextにPackegeManagerを導入する事です。 &lt;br&gt;
　パッケージマネージャは、Sublime Textでのパッケージの導入と管理を容易にします。 &lt;br&gt;
　Sublime TextのviewメニューからShowConsoleすると、画面下部に表示されたコンソールが表示されます。&lt;a href=&quot;https://sublime.wbond.net/installation#st2&quot;&gt;PackegeControllerの公式ページ&lt;/a&gt;に有るPythonコードをコピペするか、下記をコピペして下さい。導入が完了したら、一度Sublime Textを再起動して下さい。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import urllib2,os,hashlib; h = &#39;7183a2d3e96f11eeadd761d777e62404&#39; + &#39;e330c659d4bb41d3bdf022e94cab3cd0&#39;; pf = &#39;Package Control.sublime-package&#39;; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( &#39;http://sublime.wbond.net/&#39; + pf.replace(&#39; &#39;, &#39;%20&#39;)).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), &#39;wb&#39; ).write(by) if dh == h else None; print(&#39;Error validating download (got %s instead of %s), please try manual install&#39; % (dh, h) if dh != h else &#39;Please restart Sublime Text to finish installation&#39;)
&lt;/code&gt;&lt;/pre&gt;

&lt;hr&gt;

&lt;h5 id=&quot;2-ternjsを導入する&quot;&gt;2. TernJSを導入する&lt;/h5&gt;

&lt;p&gt;　&lt;a href=&quot;http://emmet.io/blog/sublime-tern/&quot;&gt;TernJS&lt;/a&gt;は、NodeJSのコード補完機能をSublime Textに組みこむ事ができるパッケージです。 &lt;br&gt;
　TernJSの公式ブログのアドレスは&lt;a href=&quot;http://emmet.io/blog/sublime-tern/&quot;&gt;こちら&lt;/a&gt;です。 &lt;br&gt;
　なおTernJSはEmmet社製のプラグインですが、既に他のEmmetのプラグインを導入されている方は、注意点があります（後述）。&lt;/p&gt;

&lt;p&gt;　PackageManagerを導入しSublime Textを再起動したら、メニューのTools&amp;gt;CommandPaletteを選択し、テキストボックスにInstallと入力します。インクリメンタルサーチされた一覧から、InstallPackegeという検索結果を選択します。 &lt;br&gt;
　少しすると、InstallPackageのテキストボックスが開いて、再度入力を促されます。 &lt;br&gt;
　今度はTernと入力すると、サーチ結果がドロップダウンされますので、TernJSを選択し導入します。 &lt;br&gt;
　導入が終わったらSublime Textを再起動して下さい。 &lt;br&gt;
　 &lt;br&gt;
　先述した注意点ですが、既に他のEmmetプラグイン導入済の環境では、pythonのパッケージPyV8が導入されている場合だと、コード補完が少し遅くなる事があるかもしれません。その場合は、PyV8パッケージをパッケージコントローラから削除してください。これにより、次回起動時に最適なバージョンPythonパッケージが導入されます。&lt;/p&gt;

&lt;h2 id=&quot;3-tern-projectファイルの作成&quot;&gt;3. Tern-Projectファイルの作成&lt;/h2&gt;

&lt;p&gt;　Sublime Textの再起動により、TernJSの導入が済んだら、これらのコード補完機能を有効に設定するための設定ファイルの更新を行います。&lt;/p&gt;

&lt;p&gt;　Sublime Textのメニューで、Preferenceメニューから、Settings - Defaultを選択し、&lt;code&gt;&quot;auto_complete&quot;: true&lt;/code&gt;になっている事を確認して下さい。trueなら、Sublime Text全般の自動補完機能が有効となっています。（デフォルトはTrue)&lt;/p&gt;

&lt;p&gt;　NitorusDesktopは、クラウド上に配置されたNodeJSの開発環境を、そのままローカルに同期する機能を持っています。 &lt;br&gt;
　同期はNitorusDesktopを呼び出すNアイコン(Windowsの場合タスクバーより、macの場合NitrousDesktopを起動後の通知バーより)をクリックし、Nitrous Desktop画面でBoxesがStart状態である時、FileSyncトグルボタンをDisable→Sync(Syncing)に切り替えます。すると同期が開始されます。 &lt;br&gt;
&lt;img src=&quot;http://help.nitrous.io/images/articles/nitrous-desktop-file-sync.png&quot; alt=&quot;enter image description here&quot; title=&quot;&quot;&gt; &lt;br&gt;
　同期フォルダを開いて、開発環境が所定のフォルダに同期された事を確認するには、Nアイコンを、今度は右クリック（Macの場合Nアイコンをクリック）し、Open Nitrous Folderを選択すると、ローカルの同期フォルダ（＜ユーザ＞\Nitrous）が開きます。 &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLPDMTDCLXwKMY48I3T9dGLUOG3GSW22M_gW8rSCHeiSURR94gc8s8EM5aaiLZCa6zWErn3SGfYgfzs-82F2ODLsJ2WGxAyc-sBPdt51_pvNabSeZuC9e9ALM-RKkcNzAr9Cu5Vhh7hbw/s0/blogparts.png&quot; alt=&quot;enter image description here&quot; title=&quot;blogparts.png&quot;&gt; &lt;br&gt;
　この同期フォルダにファイルを保存していくと、クラウド上のBOX（NitousIOの開発環境）に同期されるようになります。 &lt;br&gt;
　このフォルダに、TernJSの各種設定を記述したNodeProjectファイルを作成します。こうしておけば、異なる環境間、たとえば、自宅とオフィスのＰＣとの環境間で、都度プロジェクトの設定をしなおす手間がなくなります。&lt;/p&gt;

&lt;p&gt;　では、このフォルダのmynodeフォルダ（＜ユーザ＞\Nitrous\mynode）に、下記の記述で作成した&lt;code&gt;&quot;tern.sublime-project&quot;&lt;/code&gt;ファイルを配置して下さい。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
  &quot;auto_complete_triggers&quot;:
  [
    {
      &quot;characters&quot;: &quot;&amp;lt;&quot;,
      &quot;selector&quot;: &quot;text.html&quot;
    },
    {
      &quot;characters&quot;: &quot;.&quot;,
      &quot;selector&quot;: &quot;source.js&quot;
    }
  ],
    &quot;folders&quot;:
    [
        {
            &quot;follow_symlinks&quot;: true,
            &quot;path&quot;: &quot;.&quot;
        }
    ],

  &quot;word_separators&quot;: &quot;./\\()\&quot;&#39;-:,.;&amp;lt;&amp;gt;~!@#%^&amp;amp;*|+=[]{}`~?&quot;,

  &quot;ternjs&quot;: 
  {
      &quot;exclude&quot;: [&quot;wordpress/**&quot;, &quot;node_modules/**&quot;],
        &quot;libs&quot;: [&quot;browser&quot;, &quot;jquery&quot;,&quot;node&quot;],
              &quot;plugins&quot;: {
                &quot;requirejs&quot;: 
                {
                  &quot;baseURL&quot;: &quot;./js&quot;
                }
              }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;hr&gt;

&lt;h4 id=&quot;4-コード補完機能の確認&quot;&gt;4. コード補完機能の確認&lt;/h4&gt;

&lt;p&gt;　それでは、TernJSの補完機能を使って、実際にコーディングを行ってみます。 &lt;br&gt;
　Sublime Textを起動して、メニューバーから、Project &amp;gt; OpenProject とメニューを辿り、先ほど作成した&lt;code&gt;tern.sublime-project&lt;/code&gt;（＜ユーザ＞\Nitrous\mynode\tern.sublime-project）を開いて下さい。 &lt;br&gt;
　次にSublime Textから、プロジェクトフォルダとなる＜ユーザ＞\Nitrous\mynode\に &lt;br&gt;
&lt;code&gt;example.js&lt;/code&gt;というファイル名でJSのソースを作成します。ソースには、下記のフォルダをコピペし保存します。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var http = require(&#39;http&#39;);
http.createServer(function (req, res) {
  res.writeHead(200, {&#39;Content-Type&#39;: &#39;text/plain&#39;});
  res.end(&#39;Hello World\n&#39;);
}).listen(8888, &#39;0.0.0.0&#39;);
&lt;/code&gt;&lt;/pre&gt;



&lt;h6 id=&quot;httpnodejsorg-のan-example-webserverソースをnitrousio検証用に僅かに改変&quot;&gt;（&lt;a href=&quot;http://nodejs.org/&quot;&gt;http://nodejs.org/&lt;/a&gt; の「AN EXAMPLE: WEBSERVER」ソースをNitrous.IO検証用に僅かに改変）&lt;/h6&gt;

&lt;p&gt;　そして、コード補完機能が有効である事を確認します。先ほどコピペし、保存した&lt;code&gt;example.js&lt;/code&gt;の行末に、下記のコードを入れてみます。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;console.log(&#39;Server running at http://0.0.0.0:8888/&#39;);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;co･･･と入力したあたりで、TernJSのコード補完機能が一見働いたように、下記のような補完リストが表示される筈です。 &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgErJc5jrgLt1Dln9Nhm5IUGAWRncxkF2H_ciEUQrJMQBgPeLHrqz317uTPyqiP1lSrysMjzGxd_a-ydAux-LKyys0ynYQEzPMqtGQ9H7aBJ0NHzM3xRB7WSExWrSI3PcOd3DP3ajEuvEM/s0/CUsershanoriNitrousmynodeexample.js++%28tern%29+-+Sublime+Text+%28UNREGISTERED%29.png&quot; alt=&quot;enter image description here&quot; title=&quot;CUsershanoriNitrousmynodeexample.js  (tern) - Sublime Text (UNREGISTERED).png&quot;&gt; &lt;br&gt;
　しかし、この補完リストは、Sublime Textの標準の補完機能が表示しているものです。既出の文言から予測される入力を単に一覧で表示されているに過ぎません。　 &lt;br&gt;
　TernJSの場合本来は下記のように、もっと沢山の補完リストが表示される筈です。 &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg7rQ6NBLPEcdqjjb9c7H0mAc1teY7xfkAwY4vqX-2c0M0vteRyaPEpj5rUSGLUNQXDrJUefctfY9jB8OXGv-9hO_uOFHpNWBeDsLPf75i_KBcPx491HkUdIY2s_7LxXsQhq3mZOBohng/s0/CUsershanoriNitrousmynodeexample.js++%28tern%29+-+Sublime+Text+.png&quot; alt=&quot;enter image description here&quot; title=&quot;CUsershanoriNitrousmynodeexample.js  (tern) - Sublime Text .png&quot;&gt;&lt;/p&gt;

&lt;p&gt;　実は、新規作成したソースについては、TernJSはコード補完対象として認識しません。記載したソースをTarnJSの補完対象にするには、TernJS:Reloadというコマンドを実行して、新たに作成したソースをコード補完対象にしてやる必要があります。 &lt;br&gt;
　Reloadは、CommandPalletから実行します。Sublime Textのメニューから、Tools &amp;gt; Command Palatteを選択し、テキストボックスに、Reloadと打ち込むと、TernJS:Reloadが候補としてリストされるので、選択してTernJSをReloadします。  &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjNdxx42NA5u46Wt83B1wdVtxYVU37VVLPJRflI3M5fIAo2tWZiADAZJcUk_uFuSq_g32XkZbETQu8J1fMey1jD5ewXYkm-juHYV5M-biFKDg2FnDnBwjlzjWk52g4wypjKCS0HSbz_oU/s0/CUsershanoriNitrousmynodeexample.js+%28tern%29+-+Sublime+Text+%28UNREGISTERED%29.png&quot; alt=&quot;enter image description here&quot; title=&quot;CUsershanoriNitrousmynodeexample.js (tern) - Sublime Text (UNREGISTERED).png&quot;&gt; &lt;br&gt;
　 &lt;br&gt;
　今度は、補完されましたか？ &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg7rQ6NBLPEcdqjjb9c7H0mAc1teY7xfkAwY4vqX-2c0M0vteRyaPEpj5rUSGLUNQXDrJUefctfY9jB8OXGv-9hO_uOFHpNWBeDsLPf75i_KBcPx491HkUdIY2s_7LxXsQhq3mZOBohng/s0/CUsershanoriNitrousmynodeexample.js++%28tern%29+-+Sublime+Text+.png&quot; alt=&quot;enter image description here&quot; title=&quot;CUsershanoriNitrousmynodeexample.js  (tern) - Sublime Text .png&quot;&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;h4 id=&quot;5-nitrousioでの動作確認&quot;&gt;5. Nitrous.IOでの動作確認&lt;/h4&gt;

&lt;p&gt;　記述したコードをNitrousIOで実行してみます。 &lt;br&gt;
　Nアイコンをクリックし、NitorusDesktop画面を表示します。 &lt;br&gt;
　&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_ckMdXNmhuPe3Wq5POo60wfkM-lB5HUr1h-mUqrBZlap_qf26VpVttM2T2SCW2c0vru4U6VurLsFz5aKZy37DET5PhjMzCL0_kUvsr0riwZ6XTTro1rf_AUMjVk_N2vv65XWrhnDUlYg/s0/Nitrous+Desktop.png&quot; alt=&quot;enter image description here&quot; title=&quot;Nitrous Desktop.png&quot;&gt; &lt;br&gt;
　IDEボタンをクリックして、NitrousIOのIDEを開きます。 &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghygtifVi_wI7G1bib1IC5lovU2V6q1-MJ9sckEwk-IdapuAQEAW6Ib4O9YjCMh0IcTpnbm4V2h7H4fZyfD3uxu2XIrktpyOztxtYsJkx5HYJPPPSGlk-FIsrSqZf_CVPtKvjV1cPrQDM/s300/Nitrous.IO+-+Google+Chrome.png&quot; alt=&quot;enter image description here&quot; title=&quot;Nitrous.IO - Google Chrome.png&quot;&gt; &lt;br&gt;
　 &lt;br&gt;
　作成したソースが、クラウド上の開発環境に同期されているのが判ります。 &lt;br&gt;
　 &lt;br&gt;
　では、Example.jsを実行します。 &lt;br&gt;
　画面下部のConsoleのカレントディレクトリをWorkspaceに移動し、NodeJSを実行します。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd workspace/
node example.js
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;　正しく起動できた場合は &lt;br&gt;
　&lt;code&gt;Server running at http://0.0.0.0:8888/&lt;/code&gt;  が表示される筈です。 &lt;br&gt;
　この状態で、IDEのメニュー Preview &amp;gt; Port8888を選択して下さい。 &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5EvhESLDzfHLk0AOUUi1MljfxOTh8A2PzKclZty-feZTh0vuPa1519H1xDl2b2nyOPTGyvK2P14F74RL5b4jBJw5rK5iO5uos2gkrtErX-rgb5wQUbT3jMcEhaXpQ_TX3tNR75cK-DGE/s300/port8888.png&quot; alt=&quot;enter image description here&quot; title=&quot;port8888.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;　ブラウザのタグやウィンドウが開いて、下記の表示になれば成功です。 &lt;br&gt;
&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcIG5PnxBk8bGA-OIUHo_eUtcfpNFTFYWhGa8gdKfENyzAofgQ2iL3olMj-B_6_lB3ECPfPximLrh0WVAYlmk9hLqaWCgMzwETNU-JGgKe8EXFNVsAYoCVRZG8PU4PAp0-hvXhH4Zg6do/s300/mynode-130750.apne1.nitrousbox.com8888+-+Google+Chrome.png&quot; alt=&quot;enter image description here&quot; title=&quot;mynode-130750.apne1.nitrousbox.com8888 - Google Chrome.png&quot;&gt; &lt;br&gt;
　 &lt;br&gt;
　以上で稼動確認終了です。お疲れ様でした。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Written with &lt;a href=&quot;https://stackedit.io/&quot;&gt;StackEdit&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/4849356413830563015/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2014/09/sublime-textnitrousio.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4849356413830563015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4849356413830563015'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2014/09/sublime-textnitrousio.html' title='Sublime TextとNitrous.IO環境でNode.JS開発環境を作成する（２）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLPDMTDCLXwKMY48I3T9dGLUOG3GSW22M_gW8rSCHeiSURR94gc8s8EM5aaiLZCa6zWErn3SGfYgfzs-82F2ODLsJ2WGxAyc-sBPdt51_pvNabSeZuC9e9ALM-RKkcNzAr9Cu5Vhh7hbw/s72-c/blogparts.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-7780926108805370429</id><published>2014-08-11T00:16:00.001+09:00</published><updated>2014-09-14T19:42:02.101+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Nitrous.IO"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><title type='text'>NodeJSで気になる点</title><content type='html'>&lt;pre&gt;&lt;code&gt;var Iconv   = require(&quot;iconv&quot;).Iconv;
var cheerio = require(&#39;cheerio&#39;)
var urlutil = require(&#39;url&#39;);
var url_util = require(&#39;url&#39;);　//不本意な記述

var charsetDetector = require(&quot;node-icu-charset-detector&quot;);
&lt;/code&gt;&lt;/pre&gt;
特に問題はないコードと言えますが、気に入らないのは、var urlutil = require(‘url’);の箇所で定義した変数。&lt;br /&gt;
以降のコードには、&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;var getWebPageTitle = function(url, callback) {
    var urlElements = url_util.parse(url, false);
&lt;/code&gt;&lt;/pre&gt;
や&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;http.createServer(function (request, response) {
    var urlObj = urlutil.parse(request.url, true);
&lt;/code&gt;&lt;/pre&gt;
などと、別の使用局面で、同じような記述をする事になるのですが、なぜかurlutilはスコープ外完で使い回す事ができない。undefinedとランタイムエラーが起こる。今の記載のように局面毎に、別変数を定義してやる必要が有った.&lt;br /&gt;
　これはどうも、良くわからない仕様だと思った次第です。&lt;br /&gt;
&lt;blockquote&gt;
Written with &lt;a href=&quot;https://stackedit.io/&quot;&gt;StackEdit&lt;/a&gt;.&lt;/blockquote&gt;
</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/7780926108805370429/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2014/08/nodejs_11.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/7780926108805370429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/7780926108805370429'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2014/08/nodejs_11.html' title='NodeJSで気になる点'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-5206032706264547799</id><published>2014-08-03T12:23:00.001+09:00</published><updated>2014-09-14T19:42:21.258+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Nitrous.IO"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><title type='text'>iTemがNitorus.IOに接続出来なかった→解決</title><content type='html'>&lt;p&gt;　2時間ほど悩んだので、メモを兼ねて。 &lt;br&gt;
　Nitrous.IOは、ssh経由で、ローカル環境に導入されたターミナルから接続できます。 &lt;br&gt;
　普段私が使うターミナルは&lt;a href=&quot;http://iterm2.com/&quot;&gt;iTerm2&lt;/a&gt;ですが、Nitrous.IOのBoxにssh接続しようとしても、下記のエラーが出て、以前のように接続できなくなりました。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;$ ssh action@apne1.nitrousbox.com -p 20150 &lt;br&gt;
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &lt;br&gt;
  @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ &lt;br&gt;
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ &lt;br&gt;
  IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! &lt;br&gt;
  Someone could be eavesdropping on you right now (man-in-the-middle attack)! &lt;br&gt;
  It is also possible that a host key has just been changed. &lt;br&gt;
  The fingerprint for the RSA key sent by the remote host is &lt;br&gt;
  95:1c:0c:ed:15:13:a2:39:f2:f6:3e:2f:4a:be:dc:b0. &lt;br&gt;
  Please contact your system administrator. &lt;br&gt;
  Add correct host key in /Users/hanori/.ssh/known_hosts to get rid of this message. &lt;br&gt;
  Offending RSA key in /Users/hanori/.ssh/known_hosts:4 &lt;br&gt;
  RSA host key for [apne1.nitrousbox.com]:20150 has changed and you have requested strict checking. &lt;br&gt;
  Host key verification failed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;　思えば、接続しようとしたBoxは一度同名のBox名で作成して、一旦削除して再度作成しなおしたのでした。 &lt;br&gt;
　よって、Local側とBoxに登録されたSSH鍵認証の情報を再作成しなおさなければなりませんでした。 &lt;br&gt;
　&lt;a href=&quot;http://www.nitrous.io/desktop&quot;&gt;Nitrous desktop&lt;/a&gt;を使う方法であれば、比較的簡単に復旧する事ができます。&lt;/p&gt;

&lt;p&gt;下記がその手順になります。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;既存のSSHを削除する &lt;/li&gt;
&lt;li&gt;Nitrous DesktopからShellを起動&lt;/li&gt;
&lt;/ol&gt;

&lt;hr&gt;&lt;div class=&quot;se-section-delimiter&quot;&gt;&lt;/div&gt;

&lt;h3 id=&quot;1-既存のsshを削除する&quot;&gt;1. 既存のSSHを削除する&lt;/h3&gt;

&lt;p&gt;Nitrous.IOのホスト名によって登録された鍵を検索し、ssh-keygenにて削除します。 &lt;br&gt;
冒頭に引用したssh接続時のエラーメッセージには、下記の記載がありました。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;RSA host key for [apne1.nitrousbox.com]:20150 has changed and you have requested strict checking.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;　この[apne1~]がローカルにて管理されたSSHのホスト名になります。 &lt;br&gt;
　下記のコマンドを実行すれば、ローカルに鍵情報が存在する事を確認できます。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh-keygen -F [apne1.nitrousbox.com]:20150&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; # Host [apne1.nitrousbox.com]:20150 found: line 4 type RSA
 /Users/hanori/.ssh/known_hosts updated.[apne1.nitrousbox.com]:20150 ssh-rsa AAAAB3NzaC~（鍵情報）~El
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;　次に、登録された鍵を削除します。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh-keygen -R [apne1.nitrousbox.com]:20150&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Host [apne1.nitrousbox.com]:20150 found: line 4 type RSA/Users/hanori/.ssh/known_hosts updated.
Original contents retained as /Users/hanori/.ssh/known_hosts.old
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これで、ローカルから一旦、鍵の登録を削除する事が出来ました。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ssh action@apne1.nitrousbox.com -p 20150
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;上記のコマンドを実行してみて、接続できるかどうか確認して下さい。 &lt;br&gt;
私の環境では、この対処だけでは接続出来ませんでした。私と同様、Boxに接続出来無かった場合は、次に進んで下さい。&lt;/p&gt;

&lt;hr&gt;&lt;div class=&quot;se-section-delimiter&quot;&gt;&lt;/div&gt;

&lt;h3 id=&quot;2-nitrous-desktopからshellを起動&quot;&gt;2. Nitrous DesktopからShellを起動&lt;/h3&gt;

&lt;p&gt;　ローカルから鍵の登録を削除するだけで、接続できるようになる場合も在りますが、私の環境では、下記のエラーが出て、まだ接続できませんでした。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ssh action@apne1.nitrousbox.com -p 20150
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
  &lt;p&gt;The authenticity of host ‘[apne1.nitrousbox.com]:20150 ([176.34.56.246]:20150)’ can’t be established. &lt;br&gt;
  RSA key fingerprint is 95:1c:0c:ed:15:13:a2:39:f2:f2:f2:f2:f2:f2:dc:b0. &lt;br&gt;
  Are you sure you want to continue connecting (yes/no)? yes &lt;br&gt;
  Warning: Permanently added ‘[apne1.nitrousbox.com]:20150,[176.34.56.246]:20150’ (RSA) to the list of known hosts. &lt;br&gt;
  Permission denied (publickey).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;　Public Keyの更新が拒否されました。 &lt;br&gt;
　なぜPublic Keyの更新ができないのか判りません。sudoでルート権限下で、いままでの手順を繰り返してもやはりダメでした。 &lt;br&gt;
　最終的に、下記の手順で復旧しました。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nitrous Desktopを起動（既に起動している場合は再起動）&lt;/li&gt;
&lt;li&gt;NitrousDesktopで「SHELL」ボタンをクリックし、SHELLを起動 &lt;/li&gt;
&lt;li&gt;PublicKeyを置き換える(?)か聞いてくるので、OKをクリックする&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;iTerm2から、下記のコマンドを実行すると、接続が問題無くできるようになった事が確認できました。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt; ssh action@apne1.nitrousbox.com -p 20150
action@mynode-130750:~$ ls
README.md  tmp  workspace
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;　なお、下記のメッセージが出てしまう場合は、いろいろ対処しているなかで、無操作の一定時間経過によってBoxが既に停止してしまっている可能性があります。（無償利用時）&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;ssh: connect to host apne1.nitrousbox.com port 20150: Connection refused&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;　その場合はNetrous.IOのダッシュボードのページから、BoxをStartして、再度接続をしてみて下さい。&lt;/p&gt;

&lt;p&gt;以上です。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/5206032706264547799/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2014/08/itemnitorusio.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/5206032706264547799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/5206032706264547799'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2014/08/itemnitorusio.html' title='iTemがNitorus.IOに接続出来なかった→解決'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-8736209784575415976</id><published>2014-07-27T09:55:00.001+09:00</published><updated>2014-09-16T00:07:57.249+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="editor"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Nitrous.IO"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><category scheme="http://www.blogger.com/atom/ns#" term="Sublime"/><category scheme="http://www.blogger.com/atom/ns#" term="text"/><title type='text'>Sublime TextとNitrous.IO環境でNodeJS開発環境を作成する（１）</title><content type='html'>　Nitrous.IOとSublimeTextがあれば、コード補完機能付きの開発環境が入手できます。 &lt;br /&gt;
SublimeTextは、macやWindowsなどマルチOSで使える汎用テキストエディタです。 &lt;br /&gt;
　Nitrous.IOは、Nodejsを初め、ruby、pythonといった、現在主流の各種Web開発スクリプト系言語の開発環境が、僅かな操作でクラウド上に作成できます。 &lt;br /&gt;
　契約にはフリーミアムモデルを採用しており、一定の枠内で無償利用可能なWeb開発環境となっています。 &lt;br /&gt;
　Nitrous.IOには、ブラウザベースで操作できる統合開発環境が用意されていますが、言語を問わず汎用的に作られていることから、テキストエディタにコード補完機能はありません（2014/07/20現在）。 &lt;br /&gt;
　その為、コード補完機能を用いてコーディングしたい時は外部エディタを使う事になります。 &lt;br /&gt;
　今回は、SublimeTextでNodejsをコーディングする環境を整える事とします。&lt;br /&gt;
　下記の順序で説明します。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Nitrous.IOに登録する&lt;/li&gt;
&lt;li&gt;Node.JS開発環境をNitrous.IOに作成する&lt;/li&gt;
&lt;li&gt;Nitrous Desktopをインストールする &lt;/li&gt;
&lt;li&gt;SublimeTextをインストールする&lt;/li&gt;
&lt;li&gt;（Sublimeにコード補完機能を導入する）- &lt;a href=&quot;http://hanorionrails.blogspot.jp/2014/09/sublime-textnitrousio.html&quot;&gt;次回に続く&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h4 id=&quot;nitorousioに登録する&quot;&gt;
&lt;i class=&quot;icon-pencil&quot;&gt;&lt;/i&gt; Nitorous.IOに登録する&lt;/h4&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;enter image description here&quot; height=&quot;129&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnKL1oZSh6ODBXYeGmZd29Y3Ku7qRmn9vh9fW9Qvh0aw65nUmnYbonGfZpBN59tYQzKsIxhU2iEZ96YNa12D_yq6buYCdJkIhKhttUs3PSDaPz4P3XI4i3EDO0GBbw3aQvRxyzXY2tak/s0/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; title=&quot;www.nitrous.io.jpg&quot; width=&quot;320&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;アカウントの作成&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
登録はメールアドレスの他に、Linkedin、Github、Google+等のアカウントがあれば、簡単に登録できます。 &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;se-section-delimiter&quot;&gt;
&lt;/div&gt;
&lt;h4 id=&quot;nodejs開発環境をnitrousioに作成する&quot;&gt;
&lt;i class=&quot;icon-pencil&quot;&gt;&lt;/i&gt; Nodejs開発環境をNitrous.IOに作成する&lt;/h4&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;enter image description here&quot; height=&quot;97&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS7cj_byyG8_G0TUHis9FPasTbXjcQ2ZWSE4Ua5lvS4mo5Rqn21xEPRDVFUS-IXxgkbtn1naBxWN5Q0mXkiSwUrk0L8UbERd63G9Nr0hirsXjuzkltjk7n1MxYhNlrU58nd3CnEQoe2tw/s320/boxes.jpg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; title=&quot;boxes.jpg&quot; width=&quot;320&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;新しいBoxの作成&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;enter image description here&quot; height=&quot;483&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3CRE_GAnqtioDDbA7lvshLpkebf3mPsj3K8zQ36ujPsZDASYgYQEujEffbN2HN52g9f1Ij-ow7_qtAm0DEwO5DFRQRwxXC0xRJ8rCgCDdIUNHJ2fuoetVWIz8Gl4IRRK0WMKSWnC68PU/s0/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; title=&quot;new.jpg&quot; width=&quot;640&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;NodeJS開発環境の作成&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
クラウド上に、Boxと呼ばれる開発環境を作成します。今回は東アジアリージョンでNodejs開発環境のBoxを作成します。Boxは1分程度で作成されます。 &lt;br /&gt;
　 &lt;br /&gt;
　 &lt;br /&gt;
　Nitrous.IOの特徴として、ユーザアカウント毎に割り当てられるN2Oという単位があります。ユーザは割り当てられたN2Oを使って、Boxのメモリの割り当てを増やしたり、ディスクを増やしたりできます。N2Oをもっと増やしたければ、課金やソーシャルへのNitrous.IOおすすめ投稿などをする事になります。 &lt;br /&gt;
　また、無課金の範囲で使う場合の注意点として、開発環境は一定の時間操作されなかった場合には、環境そのものを自動的にシャットダウンします。ですので、次の日に開発の続きをする場合、再度Boxをスタートさせる必要があります。Boxのスタートは、Nitrous.IOの統合開発環境などから実行します。&lt;br /&gt;
&lt;h4 id=&quot;nitrous-desktopをインストールする&quot;&gt;
&lt;i class=&quot;icon-pencil&quot;&gt;&lt;/i&gt; Nitrous Desktopをインストールする&lt;/h4&gt;
Nitrous.IOは、先述の通り、Webベースの統合開発環境をすでに持っていますが、一方ターミナルや開発環境の起動と停止操作を行うといった機能を持つデスクトップアプリケーションも提供しております。また、作成したNodejs実行環境の$HOME以下のディレクトリを、ローカルのディスクにミラーリング・同期する機能を有しています。イメージとしてはDropboxでのフォルダ同期機能が一番近いものでしょうか。 &lt;br /&gt;
　クラウド環境と同期されたローカルのソースファイルは、当然、自身のローカルにインストールされたエディタで編集する事が可能です。 &lt;br /&gt;
　Nitrous.IOのデスクトップアプリケーション、NitrousDesktopは、Webページからリンクをクリックしてダウンロードできます。導入も通常のセットアップを行うだけなので、特に説明は不要かと思います。NitrousDesktopはツールバー（macの場合）か通知領域アイコン（Windows）の&lt;b&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;N&lt;/span&gt;&lt;/b&gt;アイコンから開きます。&lt;br /&gt;
　以下がNitrousDesktopを開いた時の画像です。&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYxcD9Xwiw_MmBQnbEycVUX8wGtfdAO-AA0Lzh1cH1f_PcKwMBQCQQBACRByelBll225VdocfD5ArhcRZvckwN3FHSgCRnLWDdnKGeewCywAv4mixz9Eu6qVLSSDjCQhxk81R_3DwcDGY/s1600/screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYxcD9Xwiw_MmBQnbEycVUX8wGtfdAO-AA0Lzh1cH1f_PcKwMBQCQQBACRByelBll225VdocfD5ArhcRZvckwN3FHSgCRnLWDdnKGeewCywAv4mixz9Eu6qVLSSDjCQhxk81R_3DwcDGY/s1600/screenshot.png&quot; height=&quot;207&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;NitorusDesktopを開く&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div class=&quot;se-section-delimiter&quot;&gt;
&lt;/div&gt;
&lt;h4 id=&quot;sublimetextをインストールする&quot;&gt;
&lt;i class=&quot;icon-pencil&quot;&gt;&lt;/i&gt; SublimeTextをインストールする&lt;/h4&gt;
SublimeTextは、mac,Windowsなど、クロス環境で使用できる多機能なテキストエディタです。アドオンを導入しカスタマイズしていく事で、あらゆるプログラム言語のコード補完機能を使えるようになります。Nitrous.IOが提供する統合開発環境は、コード補完機能がありませんが、クラウドとローカルが同期されているソースファイルをSublimeTextで編集できればコード補完機能によって生産性が向上します。 &lt;br /&gt;
　SublimeTextとググると、ダウンロードのリンクが出てくるので、特に説明は不要ですが、後ほどコード補完機能プラグインとして導入するTernJsは、現時点でSublimeText（Version）2への導入を前提としている為に、ここではSublimeText2を導入する事とします。&lt;br /&gt;
&lt;div class=&quot;se-section-delimiter&quot;&gt;
&lt;/div&gt;
&lt;h4 id=&quot;nodejsコード補完機能をsublimetextに導入する&quot;&gt;
&lt;i class=&quot;icon-pencil&quot;&gt;&lt;/i&gt; （NodeJSコード補完機能をSublimeTextに導入する）&lt;/h4&gt;
&lt;a href=&quot;http://hanorionrails.blogspot.jp/2014/09/sublime-textnitrousio.html&quot;&gt;次回&lt;/a&gt;に続きます。&lt;br /&gt;
&lt;a href=&quot;http://hanorionrails.blogspot.jp/2014/09/sublime-textnitrousio.html&quot;&gt;http://hanorionrails.blogspot.jp/2014/09/sublime-textnitrousio.html&lt;/a&gt;
&lt;blockquote&gt;
Written with &lt;a href=&quot;https://stackedit.io/&quot;&gt;StackEdit&lt;/a&gt;.&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/8736209784575415976/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2014/07/sublime-textnitrousio_27.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/8736209784575415976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/8736209784575415976'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2014/07/sublime-textnitrousio_27.html' title='Sublime TextとNitrous.IO環境でNodeJS開発環境を作成する（１）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnKL1oZSh6ODBXYeGmZd29Y3Ku7qRmn9vh9fW9Qvh0aw65nUmnYbonGfZpBN59tYQzKsIxhU2iEZ96YNa12D_yq6buYCdJkIhKhttUs3PSDaPz4P3XI4i3EDO0GBbw3aQvRxyzXY2tak/s72-c/" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-9091779313725325986</id><published>2011-05-05T21:04:00.001+09:00</published><updated>2015-12-29T19:24:40.363+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="editor"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="node"/><category scheme="http://www.blogger.com/atom/ns#" term="Server"/><title type='text'>Cloud9を試す（１）</title><content type='html'>&lt;a href=&quot;http://cloud9ide.com/&quot; target=&quot;_blank&quot;&gt;Cloud9&lt;/a&gt;と言うPaasとも言えるしSaasとも言えるWebサービスを使って、Ajaxを使ったWebアプリケーションを作ってみます。&lt;br /&gt;
国内には、同名だけど、おそらくそれとは全く異なる製品（NTT PC Com）があるので紛らわしい。&lt;br /&gt;
ここでのCloud9は、&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Ajaxを試す環境が既にクラウド上に用意されている  &lt;/li&gt;
&lt;li&gt;開発環境（IDE）もクラウド上に用意されている&lt;/li&gt;
&lt;/ul&gt;
といった特徴があります。&lt;a href=&quot;http://www.ajax.org/&quot; target=&quot;_blank&quot;&gt;Ajax.org&lt;/a&gt;が提供するサービスです。&lt;br /&gt;
仕事では使った事があるAjaxですが、理解しているかと言われると・・・。なので、まずはHelloWorldレベルから、このサービスを試してみます。&lt;br /&gt;
これから記載する内容は、Ｖｉｍｅｏの&lt;a href=&quot;http://vimeo.com/user5080401&quot;&gt;入門ビデオ&lt;/a&gt;と同じ事をするだけなので、英語が判る方はそちらをどうぞ。&lt;iframe frameborder=&quot;0&quot; height=&quot;300&quot; src=&quot;http://player.vimeo.com/video/18671962?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;400&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;a href=&quot;http://vimeo.com/18671962&quot;&gt;Cloud9 IDE Beta Signup&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/user5080401&quot;&gt;Fabian Jakobs&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com/&quot;&gt;Vimeo&lt;/a&gt;.&lt;br /&gt;
&lt;hr /&gt;
&lt;h5&gt;
&lt;u&gt;最初のChatアプリケーション&lt;/u&gt;&lt;/h5&gt;
&lt;a href=&quot;http://vimeo.com/18671962&quot;&gt;このビデオ&lt;/a&gt;でも言っているように、Cloud9を試すには、&lt;a href=&quot;https://github.com/&quot;&gt;Github&lt;/a&gt;のアカウントが必要なので、登録する必要があります。今回は既に持っているアカウントを使いました。&lt;br /&gt;
IDEの画面が開かれたら、「Don’t have a Git URL」を押して、サンプルプロジェクトのURLを入力欄に記入しStartEditingボタンを押します。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwt7bXej8NC7RdNnHnJ7DcHWEvOsQiuYeGWn1RDom4gSsg9AAswmTfqc61bt_GGBQjQWG_s6VKrLa5uZurCVthn79GLUv07mcRiZYgFm7H9ffOExscDxptAN9ktf4IRICbxsMj2igH5U/s1600-h/Cloud9%20-%20Your%20code%20anywhere%20%20anytime%5B2%5D.png&quot;&gt;&lt;img alt=&quot;Cloud9 - Your code anywhere  anytime&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLyU9jKzkF3VYJslK_7kOqK3oW-7TOHR4ioUuCbtgGRXVLETBuftemmIg_jlke_NQ0NeJGqTSaVa0gXr0JrXuZBKCPe3JyGDK5H9udA8CM6v5zdf2VHLTY4GzhivsA8PQ8KinLgmX2s6c/?imgmax=800&quot; height=&quot;192&quot; style=&quot;background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;Cloud9 - Your code anywhere  anytime&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
IDEが開かれ、プロジェクトを構成するファイル群がツリー表示されてます。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_TyHL6Y8xdf_g9dFdSILrRwGvjJZH7WJWip2DQSLB69WHHA0MKKCyE3rp0LHUEH8jpuQhGT25_t0oYZ_a8x0dH8KFFvlazR4KTETHpX1Ep_LTk7feplWZsCs6s5T0sFWJ-yAXonSpbps/s1600-h/shot2%5B2%5D.png&quot;&gt;&lt;img alt=&quot;shot2&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzuqFPC8R6xAtOOEpgQb-cUZ9wsNqNxcxkBYF4Jj8ytoLR1aZxWf0RgAKehQCFdBtxe5VNVwUi6K7IiY74j67OTorx6M3c8AgLZR-qkZOEOWkCCyiqvb8IiOvYRVvwtPfefIgk66-hvjc/?imgmax=800&quot; height=&quot;192&quot; style=&quot;background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;shot2&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
server.jsというJavaScriptファイルをダブルクリックし、エディタを開きます。&lt;br /&gt;
エディタ上部にあるrunボタンの右脇をクリックし、ドロップダウンメニューを表示し、Run Configurationを選択します。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfG27M0bJdsPDRlO8528YYcxgVg-R2BsBCBPXRb9QoXi9EdwKwQrZW_lWukIv-FX1Jycf1PoJMe7yYxiihFuBi55PTp8gdXNkecLksGJ0Jd8Sr7Qc_xWDQXEpB6nFI7ysweNWLY-50Atk/s1600-h/shot5%5B2%5D.png&quot;&gt;&lt;img alt=&quot;shot5&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4RKYYUXsc7lQhwLGFc_wKEXzpApQy43aYZEQlWdO7gfnTjYCCgp3tTxZkdC7ZV78embF1wkE9IPgw96NPLYdZgvBL8XnQJMvXMj-qvFTCdg8ugCFcC00WoqOJip4JouIVLMTRydOeeQM/?imgmax=800&quot; height=&quot;160&quot; style=&quot;background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;shot5&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
＋Addボタンをクリックし、実行ファイルを先ほどのserver.jsを実行ファイルとして設定します。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpncKd3afyq0H47ablgHJK0DqDUe81Rik1qkV32bSPosZ5_8eumAx0TNQQqWHh2VJR4X2th_IBwWYQHPMqpa1VD1AlUheSNGLSws_N20cSd_NXMiaKLuir6m5-rSs78q1gJiM7W2V_yFE/s1600-h/shot6%5B2%5D.png&quot;&gt;&lt;img alt=&quot;shot6&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgopuQmv8laNmjHGeofGyzip11MhPf29QNJfhhSHwn3jaNV92pj2PvAwmYAoBPQy0xjIaWynVra72omH6OO7zi1ZgB_aOVHaYKGNjA65jndFra3jci8vRE9gaZlhd_GwaePV6cKs6Tn29k/?imgmax=800&quot; height=&quot;231&quot; style=&quot;background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;shot6&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
RUNボタン押下で、出力結果ウィンドウにメッセージを出力してチャットサーバが起動します。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPz54Lpc9dfiTkyfT5NqUX3tEqn_ijC2V6aq5Jb7afbo-ftk60hdkC94Th5IJ9qyjuc8Z8XNPR47zagKaZRHHldi0K8UECBVd4yMcSLCxsOnugEMWucmDo2hJFxQBf8B7y3csks-X_jao/s1600-h/shot7%5B3%5D.png&quot;&gt;&lt;img alt=&quot;shot7&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeKokjw822wHsHxZpSebDfzIl_AZsV3xEjwH1fm8bAfc23ojB4mx_BKyDn89AUf4MrTAx4AvE0tJKK6B-FjBGK9bcQn1uoAlBRCkZkl4fam0lU1PKU3XhcTxc1e05I8tPhN39qZdGJQC0/?imgmax=800&quot; height=&quot;146&quot; style=&quot;background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;shot7&quot; width=&quot;420&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
“http://node_~”と書かれたリンクをクリックすると、チャットアプリケーションへのログイン画面が表示されるはずです。&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWDkbH_ILqVC426OAmh14cA6jTxIkevQ87Z5LjF1Buj82mK1m5Fmt2AeGQ9F1r-yjgIUX0cM9J6BhauMFxO40e9jsQZ3X2wy9sRA0KWpKxjuNhg_kT6iwP2MPTbldhdfMECJKFLgTqrxU/s1600-h/shot8%5B2%5D.png&quot;&gt;&lt;img alt=&quot;shot8&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifw7CfnPvgT3bXOaep1Da24WY5I4eS0YFbvp-eS99U4YuA9SneBeYydako3tR3nRKC-a4S48gpeGhs45owjHyiJLptABW-CnjHdaOTi4XWCqTaLjE82OKvo369RZ48u1Ia9GwUCNl341U/?imgmax=800&quot; height=&quot;122&quot; style=&quot;background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;shot8&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
適当なハンドルIDを入力し、チャットへアクセスできれば完成です。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidxW5mZz_o5O1DmNj2lMAo5E-vzYisxC4J0zvS_RWwogYqQo_KpC2X08acvSEUtFJMn_Iohv9D8ZEhq4mctyh9PB_7_9HROEApgjkHs4jUsH3pPzKXZLCrvsGtmcPaQh8YtrbYzfbGIvo/s1600-h/shot3%5B3%5D.png&quot;&gt;&lt;img alt=&quot;shot3&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGec_3C9L5csf5Lcf4R99Omh9HJyKaeAsESkHc9TECBffBfFLjKywDZnxKhEpvuHekDD84lCXKOlsZ6Xt6L-HthpuCQFG9XDo5024gM11S3r9-Xw0W1vq4zmoAmlYuA2wZK8VYV4D8okI/?imgmax=800&quot; height=&quot;190&quot; style=&quot;background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;shot3&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
ソースもなにもかも借り物のサンプルですが、もうアプリケーションが出来てしまいました。&lt;br /&gt;
このように、Cloud9をつかえば、統合開発環境や、DBサーバやアプリケーションコンテナをインストールしたりすることなく、Ajaxアプリケーションを作って試せます。&lt;br /&gt;
AJax学習に掛かる工数が大幅に削減できるので、これは便利。&lt;br /&gt;
&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7fbe85e9-5b89-47ca-abec-3c6a6856a3c1&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;
Technorati タグ: &lt;a href=&quot;http://www.technorati.jp/tag/AJax&quot; rel=&quot;tag&quot;&gt;AJax&lt;/a&gt;,&lt;a href=&quot;http://www.technorati.jp/tag/JavaScript&quot; rel=&quot;tag&quot;&gt;JavaScript&lt;/a&gt;,&lt;a href=&quot;http://www.technorati.jp/tag/Programming&quot; rel=&quot;tag&quot;&gt;Programming&lt;/a&gt;,&lt;a href=&quot;http://www.technorati.jp/tag/node.js&quot; rel=&quot;tag&quot;&gt;node.js&lt;/a&gt;,&lt;a href=&quot;http://www.technorati.jp/tag/Cloud9&quot; rel=&quot;tag&quot;&gt;Cloud9&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/9091779313725325986/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2011/05/cloud9.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/9091779313725325986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/9091779313725325986'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2011/05/cloud9.html' title='Cloud9を試す（１）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLyU9jKzkF3VYJslK_7kOqK3oW-7TOHR4ioUuCbtgGRXVLETBuftemmIg_jlke_NQ0NeJGqTSaVa0gXr0JrXuZBKCPe3JyGDK5H9udA8CM6v5zdf2VHLTY4GzhivsA8PQ8KinLgmX2s6c/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-7193215258966533867</id><published>2011-01-02T12:55:00.005+09:00</published><updated>2011-01-03T20:16:30.458+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aran cooper"/><category scheme="http://www.blogger.com/atom/ns#" term="bookreview"/><category scheme="http://www.blogger.com/atom/ns#" term="design"/><title type='text'>About face 3（書評）</title><content type='html'>&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:f45ac035-0890-40e8-bf2a-a9ce56ec7a3a&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4048672452/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;About Face 3 インタラクションデザインの極意&quot; src=&quot;http://ecx.images-amazon.com/images/I/410tSPYJGIL._SL500_.jpg&quot; /&gt;&lt;br /&gt;
About Face 3 インタラクションデザインの極意 Alan Cooper Robert Reimann David Cronin &lt;/a&gt;&lt;/div&gt;ソフトウェアのユーザーインターフェイスデザインを少しでも勉強した人で、「ペルソナ」という言葉を知らない人はいないでしょう。&lt;br /&gt;
また、VisualBasicのユーザー・インターフェイス・コンポーネントは、ある一人の技術者によってデザインされたものであり、その後長きにわたりソフトウェアのユーザー・インターフェイスにおける標準デザインとして、プログラミング言語・OSによらず、あらゆる場面に使われ続けているという事実を知る人も多いでしょう。（今となってはプログラミング言語自体に多少の陰りはありますが）&lt;br /&gt;
これらすべては、「アラン・クーパー」その人によって発明・提唱されたものであり、デマルコ、ワインバーグと並び称されるほど、ソフトウェア産業に多大な功績を与えた人物の一人といえます。&lt;br /&gt;
アラン・クーパー氏曰く、プログラマーという人種は、自分たちの作り易いようにユーザー・インターフェィスをデザインし、ユーザーに対しては、不当にそのデザインへの順応を強要、自身のデザインしたものが使えないのは、ユーザーが悪いのだと言い切ってしまうきらいが有ると指摘する。こうした考えは「ホモロジクス」すなわち自身の同族のみしか世界に存在してはならないとする、狭量な思考だと揶揄している。していた。下記の本では。&lt;br /&gt;
&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:8cf4b1d0-1acd-4dc1-8fa5-4caca582bda1&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/488135826X/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;コンピュータは、むずかしすぎて使えない!&quot; src=&quot;http://ecx.images-amazon.com/images/I/514R339J81L._SL75_.jpg&quot; /&gt;&lt;br /&gt;
コンピュータは、むずかしすぎて使えない! アラン クーパー &lt;/a&gt;&lt;/div&gt;超一級のプログラマーであり、ハッカー達が言うところの「ウィザード（魔法のようなコードを書くプログラマー）」である彼自身が、この本を出した1999年当時、あまりにお粗末、プログラマーご都合主義、ユーザー不在のインターフェイス・デザインの氾濫を大いに嘆いていました。彼のデザインに対するこだわりと熱意は、意味不明支離滅裂なデザインを作り続けるテクノロジおたくのエンジニアに対する怒りによって支えられていたといってもよいでしょう。&lt;br /&gt;
その怒りは、当時としては画期的に長い本のタイトルや、先ほどの本の原著の表紙にも象徴されています。&lt;br /&gt;
&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:063de73f-efbf-4c88-af99-4b5629c4741d&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/0672326140/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity (2nd Edition)&quot; src=&quot;http://ecx.images-amazon.com/images/I/51AGVJzr9LL._SL160_.jpg&quot; /&gt;&lt;br /&gt;
The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity (2nd Edition) Alan Cooper &lt;/a&gt;&lt;/div&gt;いや、ハッキリ言って、この本の表紙は怖すぎです。&lt;br /&gt;
アラン・クーパー氏は、認知科学やインダストリアルデザインの概念をソフトウェア・デザイン、とりわけグラフィカルユーザーインターフェイスに多く取り込み、その学際的なアプローチによって、さらに自身のデザイン手法を研ぎ澄ましてきました。その集大成が、1995年の初版から2008年で第3版を数える「About face 3」です。&lt;br /&gt;
氏の提唱するゴールダイレクテッド・デザインという原則は、ユーザーインターフェイスのゴールを、ユーザーをゴールへと直接導くことこそが第一優先であると定義し、500ページ強に徹頭徹尾貫かれています。&lt;br /&gt;
ユーザーインターフェイスデザインの初心者が陥る間違い「とにかくユーザーに優しく作る」という誤謬。それにより過ちを生み出さない為に、以下の点は肝に銘じるべきです。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;ソフトウェアは中級ユーザー向けの設計であること&lt;/li&gt;
&lt;li&gt;初級ユーザーが中級ユーザーになる為の助けとなる仕組みを入れること&lt;/li&gt;
&lt;li&gt;ユーザーインターフェイスは無いに越したことはない&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;事例も多数掲載。業界のペースセッターであり続ける氏の、比類なき経験値からくる示唆と分析が、シニカルかつユーモラスに語られており、問題提起とその具体的対策は多いに説得力があります。実在のソフトウェアプロダクトを例示し、これのココが不味いという議論を書上で臆面もなく展開できるのは、業界においてこの人だけではないでしょうか。&lt;br /&gt;
なかでも、Macの躍進は、単に画面とプリンタ印刷と同じ結果となる、いわゆるWisywigの利点のみだとし、デスクトップパソコンにおける「グラフィカルユーザーインターフェイス」の分野では、さほど良い成果を示していないと指摘する点は痛快です。&lt;br /&gt;
言われてみると、たしかに近年のAppleと言えば、iPhone・iPadといった携帯端末での発明は有っても、ことデスクトップアプリケーション分野では目立った活躍はありません。デスクトップアプリケーションの、とりわけビジネス分野に踏み込んだデザインに取り組んでいるのは常にMSやIBM（Eclipse等）であり、Appleはせいぜいウィンドウが吸い込まれるアニメーションに力をそそぐ程度です。iTunesは未だに使いづらいソフトウェアであり、ユーザーは常に同等機能を持つ別の優れたデザインのソフトウェアを探し求めています。きっとAppleはハードウェアベンダーであり、ソフトウェアベンダーでは無いので、しょうが無いのかもしれません。&lt;br /&gt;
先述の通り、500ページ強もある本書ですが、部分的にも適用可能な内容も多く、すべてを読まなくともインタラクション・デザインの要諦に触れる事ができます。ですが、コンピュータエンジニアを生業とする人が、ソフトウェアデザインのあらゆる局面でこの本の記載を想起できれば、もっと良い仕事ができるはずであり、できれば通読する事をおすすめします。&lt;br /&gt;
ユーザーインターフェイスの良し悪しは、結局のところ定量化が難しく、問題が発覚するのは常にユーザー先です。自分の作ったソフトウェアが「使いづらい」「ユーザーの事を理解していない（業務を判っていない、と同義）」と評価されるのは悲しいことです。どこにこだわるべきか、なににコストをかけるべきかを判断する明確な指針を持ちたいと考える向きには、おすすめ出来る本です。</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/7193215258966533867/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2011/01/about-face-3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/7193215258966533867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/7193215258966533867'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2011/01/about-face-3.html' title='About face 3（書評）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-2415097041904539959</id><published>2010-12-26T02:29:00.003+09:00</published><updated>2013-09-29T10:56:41.482+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bookreview"/><category scheme="http://www.blogger.com/atom/ns#" term="CIO"/><category scheme="http://www.blogger.com/atom/ns#" term="management"/><title type='text'>CIOのケーススタディ（書評）</title><content type='html'>&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:6c6c946f-7c55-423a-a789-961d3c71888f&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/482226243X/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;ビジネスリーダーにＩＴがマネジメントできるか -あるＩＴリーダーの冒険&quot; src=&quot;http://ecx.images-amazon.com/images/I/51xYzhBObyL._SL500_.jpg&quot; /&gt;&lt;br /&gt;
ビジネスリーダーにＩＴがマネジメントできるか -あるＩＴリーダーの冒険 Robert D. Austin Shannon O&#39;Donnell Richard L. Nolan &lt;/a&gt;&lt;/div&gt;
最近読んだ本です。非常に面白かったです。The Adventures of an IT Leaderの邦訳版であり、トム・デマルコのような、小説の形式を取ったマネジメント指南書に近い雰囲気ですが、違うのはCIO視点、すなわち、より経営に近い立場から見たITマネジメントという事で、どちらかと言えばイリヤフ・ゴールドラット本に近い内容と言えます。&lt;br /&gt;
&lt;br /&gt;
本の表紙は、私の今の職場付近の、おそらくボート上から撮影したもののようで、まぁ、撮る人がとれば、このあたりの風景も表紙になるんですね。&lt;br /&gt;
&lt;br /&gt;
ちなみに原書の表紙はこうです。&lt;br /&gt;
&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:770d07f0-efce-4721-8112-a086f442d4dd&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/142214660X/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Adventures of an It Leader&quot; src=&quot;http://ecx.images-amazon.com/images/I/511O47ONXEL._SL500_.jpg&quot; /&gt;&lt;br /&gt;
Adventures of an It Leader Robert D. Austin Richard L. Nolan Shannon O&#39;Donnell &lt;/a&gt;&lt;/div&gt;
「もっと真面目にやれ」、と言ってやりたい気もします。&lt;br /&gt;
&lt;br /&gt;
あと邦訳版には、「あるITリーダーの冒険」というタイトルの他に、最近の時流から、長めのサブタイトルがついてますが、これはあくまでサブタイトルです。いわばノイズであり、某マネジメント本のように、異様に両目の離れたブキミちゃんが、アニメ風の挿絵でマネジメントに大奮闘したりはしません。そっちのほうは読んでないから知らんけど。&lt;br /&gt;
&lt;br /&gt;
閑話休題。&lt;br /&gt;
&lt;br /&gt;
主人公のバートンはIVK社のCIO。成長が低迷する社の立て直しの為に呼ばれた新CEOウィリアムは、前CIOのデイビスをリストラ。ITとは全く異なる部署の責任者だった主人公バートンを、後任のCIOとして選出する所から物語が始まる。&lt;br /&gt;
ITのバックグラウンドを一切持たないバートンが、果たしてIT部門の執行責任者として務まるのか、「一年と持たない」と言い残して去った前CIOの予言通りになるのか、というところで、物語は展開していきます。&lt;br /&gt;
ITのバックグラウンドを持たない主人公が、如何にITが複雑なのか、如何に微妙な問題に常日頃さらされているかを知るにつれ、事の次第を理解するようになります。主人公が事ある毎に、だらしないその身なりやコミニュケーション能力を馬鹿にしてきた、前CIOに対し申し訳なく思うようにさえなります。&lt;br /&gt;
いざ自分がその立場になって、コストやらROIやら、経営層が求める言葉や数値だけで語れるほど、ITは単純な世界の話ではなかったのだと気づいたあたりから、IT部門の一員として技術者との結束が強まり始めます。そんな折、過去に自身が否定し、撤回させたプロジェクトが実施されなかった事で、社内システムのセキュリティ上の窮地ばかりか、自身の窮地をも呼びこむ事となります。&lt;br /&gt;
このあたりの筋書きが、物語になかなかの深みを与えています。&lt;br /&gt;
以前の主人公は、なぜIT部門が経営層と上手くやれないのか、マネジメントをまともにこなせないのか、まったく理解していませんでした。&lt;br /&gt;
実際、経営層とIT部門とのやりとりが円滑に進まない事は多い。IT部門が経営層の立場を理解していない事、ITの知識を持たない人間とIT責任者がうまくコミニュケーションできない事がその理由である、そういう指摘が、この本の要諦の一つです。&lt;br /&gt;
たしかに、ITに関する用語や概念は難解で、それをだれでも理解できるように説明できなければ、CIOどころかマネージャも務まらない。反面、でもなぜ、IT部門だけが歩み寄らなければならないのだろうか、という疑問も湧いてきます。&lt;br /&gt;
日々更新される新技術に食らいつきつつ、経営層にアピールする為に、さらに会計学や経営学も勉強する。結局はどちらも上手くいかず、偏って高い評価を得ているのは、ビジネス部門の知識に長けた人材であると気づくや否や、会計学をひたすら勉強し始めたりする。&lt;br /&gt;
IT固有の複雑さをすっ飛ばしてしまっているのに、経営層にしか響かないレトリックを駆使し、強引にプロジェクトを進めたりできちゃうので、出世は早い。その結果、IT部門に居ながらにして、プログラムが全く組めないマネージャを産みだす、そんな事態も起こりえます。けして良い傾向ではない。&lt;br /&gt;
企業の成長に欠かせないはずのIT部門、にも関わらず、ITに対する無理解が依然としてあり、それが企業に手痛いダメージを与えているという事実への警鐘が、主人公が取締役会で発する一言によって集約されています。これをビシッと言えなければならないのです。&lt;br /&gt;
&lt;blockquote&gt;
「将来、『私はITについてはよく知らない』というのは、『私は会計についてはよく知らない』という以上に、まずい事になる」&lt;/blockquote&gt;
CIOの仕事について緻密な筆致で臨場感高く語られており、経営層とIT部門との狭間で起こる問題をいかにして解決するかを学ぶケーススタディとしても活用できます。&lt;br /&gt;
自分がこの立場ならどうする、彼らの行動をどう理解するのか、章の末尾に書かれた問いかけによって、自身の思考の整理ができる点はよく考えられていると関心します。&lt;br /&gt;
&lt;br /&gt;
名著。</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/2415097041904539959/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2010/12/cio.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/2415097041904539959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/2415097041904539959'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2010/12/cio.html' title='CIOのケーススタディ（書評）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-6151370801555039721</id><published>2010-10-19T22:05:00.002+09:00</published><updated>2011-01-03T20:18:16.504+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="smartphone"/><title type='text'>スマートフォン</title><content type='html'>後れ馳せながら、スマートフォンを購入した。 &lt;br /&gt;
一度はiPhoneを予約したり、モバイルスイカの定期券の期間がかなり余っていて、結局購入を断念したり、(Suica定期の解約が必要。１２ヶ月定期で残り４ヶ月もあった）。最終的には、htcのアンドロイド携帯になりました。 &lt;br /&gt;
&lt;br /&gt;
いろいろ使ってみて思うのが、もっと早く購入するべきだったな、と。 &lt;br /&gt;
とりあえず、これで予定を取りこぼす事がなくなりそうです。 &lt;br /&gt;
Salesforceとgoogleカレンダーの組み合わせによって、スケジュール管理は万全。todoもWeb同期されるので、今までのように、情報が発散せず一元管理可能となったのがすばらしい。ガラパゴス携帯でそれを実現しよう、試行錯誤したあげく、結局諦めてしまったことが、いとも容易くできてしまったわけです。 &lt;br /&gt;
&lt;br /&gt;
これで、生活が変わるかもしれない、そんな気さえもしています。 &lt;br /&gt;
&lt;br /&gt;
さて、まがりなりにもソフトウェア開発者なので、アプリケーションの開発環境が気になるところです。 &lt;br /&gt;
もうしばらくは、このスマートフォンに魅了され続けるでしょう。 &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;clear: both; font-size: xx-small; text-align: center;&quot;&gt;Published with Blogger-droid v1.6.3&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/6151370801555039721/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2010/10/blog-post_19.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/6151370801555039721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/6151370801555039721'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2010/10/blog-post_19.html' title='スマートフォン'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-3906835871860984253</id><published>2010-09-05T10:57:00.000+09:00</published><updated>2010-09-05T10:57:19.382+09:00</updated><title type='text'>mingw-and-ndk - Project Hosting on Google Code</title><content type='html'>ndkをmingwにインストーﾙするバッチ。&lt;br /&gt;&lt;a href=&quot;http://code.google.com/p/mingw-and-ndk/&quot;&gt;mingw-and-ndk - Project Hosting on Google Code&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/3906835871860984253/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2010/09/mingw-and-ndk-project-hosting-on-google.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/3906835871860984253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/3906835871860984253'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2010/09/mingw-and-ndk-project-hosting-on-google.html' title='mingw-and-ndk - Project Hosting on Google Code'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-6554052607968741830</id><published>2010-06-07T00:19:00.002+09:00</published><updated>2014-07-21T00:10:33.816+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bookreview"/><category scheme="http://www.blogger.com/atom/ns#" term="comminucation"/><title type='text'>つい「しっかりやる」といってしまう自分（書評）</title><content type='html'>&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:edae5d81-e0e4-4643-880d-98fa2d1c4f89&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4478012822/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;伝える本。―受け手を動かす言葉の技術。&quot; src=&quot;http://ecx.images-amazon.com/images/I/41MHIPVtEpL._SL160_.jpg&quot; /&gt;&lt;br /&gt;
伝える本。―受け手を動かす言葉の技術。 山本 高史 &lt;/a&gt;&lt;/div&gt;
仕事でつい思わず、「きちんとやる」「しっかりやる」こんな言葉を使うことがある。上司にプロジェクトの進捗と残作業を報告する時などが多い。    &lt;br /&gt;
この本には、こんな尺度の曖昧な言葉に異議を唱えている。&lt;br /&gt;
本を読んだ感想などを書いてみようと思います。&lt;br /&gt;
&lt;br /&gt;
この本、最初の印象としては、正直読みづらいと感じた。文章には括弧書きや、モノローグ的が書かれているようなところが散見され、まるで携帯小説かティーンズノベルを読んでいるような気分。「だってそう思うでしょう」と、著者が読み手に対して語りかけるような文体です。ちょっとなれなしい。&lt;br /&gt;
ただ、人に伝えるという事の非常に本質的な考察については、納得させれるし、考えさせられもする。著者は広告界でコピーライターという職業を通して、言葉と真摯に向き合いたいと考えている。そして、その思いが伝わってくるから、自分はかなりぬるく軽々しく言葉を使っていたなと身につまされる。 &lt;br /&gt;
人にものごとを伝える時に、まず著者がやらなければならない事として挙げるのは、「主観に左右される言葉を使わない事」。    &lt;br /&gt;
悪い例として、この「きちんとやる」「ちゃんとやる」「しっかりやる」という言葉を挙げ、これらを使うべきではないと指摘している。それは、聞く人の主観によって「やる」という程度がどんなふうにもとれてしまうから。そして、そもそもこんな言葉は中身のないカラ言葉だ、と著者は言うのだ。&lt;br /&gt;
なるほど、どこかの国の元首相が連発していた「しっかりやる」には、国民に良いようにとってくれという甘えの言葉であり、なんの約束もしていないまさにカラ言葉。曖昧なので、とらえ方によっては「なにもしないとは言っていないでしょうが。ネガティブに取るほうが悪い。」と言っているようにもとれる。まったくひどい言いぐさだ。&lt;br /&gt;
さらに著者は「受け手の判断の尺度をあらかじめ明確にする」ことも大事だとしている。受け手も伝え手も、おなじ尺度での判断ができる言葉を使わないと、物事は伝わらないというのである。    &lt;br /&gt;
元首相の例で言えば、「しっかりやる」の連発で国民を煙にまき、混乱しているところに、さらに「腹案はある」である。これでとどめをさされ、いよいよ国民の空いた口はふさがらくなった。なんの情報も提供せず、受け手の判断の尺度が明確になるどころか「まぁ勝手に想像してくれ」とまで言い切ったのである。よほど画期的なアイディアでもなければ、まず口に出せない言葉でもある。    &lt;br /&gt;
結果的には普天間の問題は振り出しへ。 これが我が国の首相なのか・・・と頭を抱えるしかなくなった瞬間である。この経験はこれからの人生にトラウマとして影を落とすことでしょう。もうこれは国民に対する国家レベルのDV。    &lt;br /&gt;
・・・というのは言い過ぎとしても、一国の首相の言葉、自分本位で尺度の曖昧な言葉によって、これほどガッカリさせられた経験を持つ人種は、世界中で一体どれぐらいいるのだろうか。    &lt;br /&gt;
元首相の評判は予想通り急降下し、当人はあえなく職を失う事となった。    &lt;br /&gt;
著者がいう通り、言葉って本当に怖い。元首相がまさにそれを体現してくれたわけです。&lt;br /&gt;
軽々しく言葉というものを使っていた自分に反省しつつ、&lt;strike&gt;しっかりやっていきたい&lt;/strike&gt;「言葉の技術」を高めなければならない、そう感じて読み終わった。&lt;br /&gt;
この本は他にも、「受け手と同じ言葉を使う」「受け手の状況を把握して、ベネフィットを提案する」という事がものごとを伝える時には大事だと指摘。後者は、単純化して言えば、受け手が知りたい事を言うという事です。&lt;br /&gt;
当たり前の事が書かれているのが多いのでしょうが、ではなぜ、コミュニケーションではそうしなければならないのか、それが言葉を尽くして語られており、納得感が高い。コミニュケーションの基本がすっかり腹落ちし、最後にはすがすがしい気分にもなる、そんな良書だと思います。</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/6554052607968741830/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2010/06/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/6554052607968741830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/6554052607968741830'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2010/06/blog-post.html' title='つい「しっかりやる」といってしまう自分（書評）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-9186595818966518050</id><published>2010-05-31T02:44:00.003+09:00</published><updated>2011-01-03T20:19:16.775+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hawaii"/><title type='text'>ハワイが好き過ぎて</title><content type='html'>ワイキキビーチのデューク・カハナモク像前のライブカム映像から目が離せません。&lt;br /&gt;
&lt;a href=&quot;http://www.co.honolulu.hi.us/multimed/waikiki.asp&quot;&gt;http://www.co.honolulu.hi.us/multimed/waikiki.asp&lt;/a&gt;&lt;br /&gt;
ここで記念写真撮るカップルは、日本人くらいでは、というのは私の思い込みでした。ずっと観察していると、東洋西洋問わず、あらゆる人種が銅像の前でパチリパチリ。&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;自分たちも、こうしてネット越しの誰かに見られていたのかと思うと、かなり恥ずかしい・・・。&lt;/div&gt;でも、またいつか行きます。今度はセガレがもう少し大きくなってからかな。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFfQAZLPbc7IgpNRqKkKrnx4knMFkRRYX9qVGOc6FakBStt8bu0KouwDdca1N2fF5pnlbin_NClpPzxF0Z5IoLnFN9n_Jh6GzbdkzzoMWGM-miQEYYTFCmfwLQDwUKk-X6YnT7Efd0jzs/s1600/DSCN1392.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; gu=&quot;true&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFfQAZLPbc7IgpNRqKkKrnx4knMFkRRYX9qVGOc6FakBStt8bu0KouwDdca1N2fF5pnlbin_NClpPzxF0Z5IoLnFN9n_Jh6GzbdkzzoMWGM-miQEYYTFCmfwLQDwUKk-X6YnT7Efd0jzs/s640/DSCN1392.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;ダイヤモンドヘッド山頂より撮影&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/9186595818966518050/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2010/05/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/9186595818966518050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/9186595818966518050'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2010/05/blog-post.html' title='ハワイが好き過ぎて'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFfQAZLPbc7IgpNRqKkKrnx4knMFkRRYX9qVGOc6FakBStt8bu0KouwDdca1N2fF5pnlbin_NClpPzxF0Z5IoLnFN9n_Jh6GzbdkzzoMWGM-miQEYYTFCmfwLQDwUKk-X6YnT7Efd0jzs/s72-c/DSCN1392.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-4576549938447719386</id><published>2010-04-25T11:58:00.001+09:00</published><updated>2010-04-25T11:58:19.902+09:00</updated><title type='text'>会社の名前はマハロなのに・・・</title><content type='html'>&lt;div xmlns=&#39;http://www.w3.org/1999/xhtml&#39;&gt;&lt;p&gt;Jasonさんには、もっとアロハスピリットを学んでほしい。&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;内容: &lt;a href=&#39;http://jp.techcrunch.com/archives/20100424how-not-to-handle-a-resignation-gracefully/&#39;&gt;社員の辞職願いへのとってもまずい対応の例&lt;/a&gt; （&lt;a href=&#39;http://www.google.com/sidewiki/entry/hanori/id/ArFndHIAPw540Myrs2Tsa9kTHXU&#39;&gt;Google サイドウィキで表示&lt;/a&gt;）&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/4576549938447719386/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2010/04/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4576549938447719386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4576549938447719386'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2010/04/blog-post.html' title='会社の名前はマハロなのに・・・'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-5113115915230094400</id><published>2010-01-02T13:24:00.001+09:00</published><updated>2010-06-20T22:47:49.419+09:00</updated><title type='text'>Windows 7 64bitでrubyやmingwやPowershell ISEなどもろもろ（断念）</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;font face=&quot;HGP明朝E&quot;&gt;重要&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;HGP明朝E&quot;&gt;断念しました。現状gemをうまく動かせていません。rubyの64bitバイナリが独自ビルドされたものという事で、少しずつ環境を整備しながらの構築にはもっと時間とスキルが必要でした。最終的にはAptanaStudio+JRubyの方向に切り替えました。      &lt;br /&gt;以下は、断念するまでの記録という事になります。有用な情報でない事をあらかじめご了承願います。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;ruby64bitバイナリへのパスも通したし、zlibも導入、nmake（に限らずVCコンパイラ）へのパスも通したので、ここからgemの導入に移っていきます。&lt;/p&gt;  &lt;p&gt;まずはheroku用のgemのインストールから。&lt;/p&gt;  &lt;p&gt;ISEのプロンプトから、gem install herokuと入力してやります。    &lt;br /&gt;うまくいけば、これでmingwの環境にインストールされるはずですが、出てしまいましたエラーが。&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class=&quot;csharpcode&quot;&gt;PS B:\mingw\x86_64-w64-mingw32\bin&amp;gt; gem install heroku&lt;br /&gt;gem.bat : &lt;span class=&quot;kwrd&quot;&gt;ERROR&lt;/span&gt;:  &lt;span class=&quot;kwrd&quot;&gt;Error&lt;/span&gt; installing heroku:&lt;br /&gt;発生場所 行:1 文字:4&lt;br /&gt;+ gem &amp;lt;&amp;lt;&amp;lt;&amp;lt;  install heroku&lt;br /&gt;    + CategoryInfo          : NotSpecified: (&lt;span class=&quot;kwrd&quot;&gt;ERROR&lt;/span&gt;:  &lt;span class=&quot;kwrd&quot;&gt;Error&lt;/span&gt; installing heroku::&lt;span class=&quot;kwrd&quot;&gt;String&lt;/span&gt;) []、RemoteException&lt;br /&gt;    + FullyQualifiedErrorId : NativeCommandError&lt;br /&gt; &lt;br /&gt;    &lt;span class=&quot;kwrd&quot;&gt;ERROR&lt;/span&gt;: Failed &lt;span class=&quot;kwrd&quot;&gt;to&lt;/span&gt; build gem native extension.&lt;br /&gt;&lt;br /&gt;B:/ruby64/bin/ruby.exe extconf.rb install heroku&lt;br /&gt;creating Makefile&lt;br /&gt;&lt;br /&gt;nmake&lt;br /&gt;&lt;br /&gt;Microsoft (R) Program Maintenance Utility Version 10.00.21003.01&lt;br /&gt;Copyright (C) Microsoft Corporation.  All rights reserved.&lt;br /&gt;&lt;br /&gt;    cl -nologo -I. -IB:/ruby64/include/ruby-1.9.1/x64-mswin64_80 -IB:/ruby64/include/ruby-1.9.1/ruby/backwa&lt;br /&gt;rd -IB:/ruby64/include/ruby-1.9.1 -I. -MD -Zi  -O2b2xty-  -Zm600 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_&lt;br /&gt;NO_DEPRECATE -Foparser.obj -c -Tcparser.c&lt;br /&gt;parser.c&lt;br /&gt;B:\ruby64\include\ruby-1.9.1\x64-mswin64_80\ruby/config.h(2) : fatal &lt;span class=&quot;kwrd&quot;&gt;error&lt;/span&gt; C1189: #&lt;span class=&quot;kwrd&quot;&gt;error&lt;/span&gt; :  MSC version unm&lt;br /&gt;atch: _MSC_VER: 1400 &lt;span class=&quot;kwrd&quot;&gt;is&lt;/span&gt; expected.&lt;br /&gt;&lt;br /&gt;NMAKE : fatal &lt;span class=&quot;kwrd&quot;&gt;error&lt;/span&gt; U1077: &lt;span class=&quot;rem&quot;&gt;&#39;&amp;quot;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cl.EXE&amp;quot;&#39; : re&lt;/span&gt;&lt;br /&gt;turn code &lt;span class=&quot;rem&quot;&gt;&#39;0x2&#39;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;kwrd&quot;&gt;Stop&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gem files will remain installed &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; B:/ruby64/&lt;span class=&quot;kwrd&quot;&gt;lib&lt;/span&gt;/ruby/gems/1.9.1/gems/json-1.1.0 &lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; inspection.&lt;br /&gt;Results logged &lt;span class=&quot;kwrd&quot;&gt;to&lt;/span&gt; B:/ruby64/&lt;span class=&quot;kwrd&quot;&gt;lib&lt;/span&gt;/ruby/gems/1.9.1/gems/json-1.1.0/ext/json/ext/parser/gem_make.out&lt;br /&gt;&lt;br /&gt;Building native extensions.  This could take a &lt;span class=&quot;kwrd&quot;&gt;while&lt;/span&gt;...&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;csharpcode&quot;&gt;JSONの導入が失敗するようです。&lt;br /&gt;config.hのコンパイラバージョン指定が、VisualStudio2010を対象としていないようです。2010のclのバージョン（ファイルバージョン）は16になりそうですが、config.hの冒頭三行（下記）のバージョンチェック部分を削除してしまいます。&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;preproc&quot;&gt;#if&lt;/span&gt; _MSC_VER != 1400&lt;br /&gt;&lt;span class=&quot;preproc&quot;&gt;#error&lt;/span&gt; MSC version unmatch: _MSC_VER: 1400 &lt;span class=&quot;kwrd&quot;&gt;is&lt;/span&gt; expected.&lt;br /&gt;&lt;span class=&quot;preproc&quot;&gt;#endif&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;これでやっと、コンパイルが実行されるようになりました。herokuはJSONに依存しているようなので、JSONのGEMのみ段階的に導入することにしましたが、今度はJSONのビルドがうまく動かない。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;pre class=&quot;csharpcode&quot;&gt;checking &lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; ruby/st.h... B:/ruby64/lib/ruby/1.9.1/mkmf.rb:364:&lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; `try_do&lt;span class=&quot;str&quot;&gt;&#39;: The complier failed to generate an executable file. (RuntimeError)&lt;br /&gt;You have to install development tools first.&lt;br /&gt;    from B:/ruby64/lib/ruby/1.9.1/mkmf.rb:433:in `try_cpp&#39;&lt;/span&gt;&lt;br /&gt;    from B:/ruby64/lib/ruby/1.9.1/mkmf.rb:811:&lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; `block &lt;span class=&quot;kwrd&quot;&gt;in&lt;/span&gt; have_header&lt;span class=&quot;str&quot;&gt;&#39;&lt;br /&gt;    from B:/ruby64/lib/ruby/1.9.1/mkmf.rb:670:in `block in checking_for&#39;&lt;/span&gt;&lt;br /&gt;　　　　　　　　：&lt;br /&gt;　　　　　　　　：&lt;br /&gt;　　　　　　　　：&lt;br /&gt;　　　　　　（以下略）&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;csharpcode&quot;&gt;cppを実行しようとする箇所でエラーになっているようです。mswinの場合は、おそらく、cl -logoが呼び出されるはずですが、&amp;quot;You have to install development tools first”とメッセージが出力されるあたり、どうもうまく認識されていないようです。ISEのコマンドからclは実行できているのだが・・・&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:d0e83077-0130-4ccd-948c-8a14974d9f9c&quot; class=&quot;wlWriterEditableSmartContent&quot;&gt;&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4774133973/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;WEB+DB PRESS Vol.43&quot; src=&quot;http://ecx.images-amazon.com/images/I/617f2sNxNnL._SL75_.jpg&quot;&gt;&lt;br&gt;WEB+DB PRESS Vol.43 &lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  </content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/5113115915230094400/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2010/01/windows-7-64bitrubymingwpowershell-ise.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/5113115915230094400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/5113115915230094400'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2010/01/windows-7-64bitrubymingwpowershell-ise.html' title='Windows 7 64bitでrubyやmingwやPowershell ISEなどもろもろ（断念）'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-4525550983025000505</id><published>2009-12-30T21:01:00.006+09:00</published><updated>2012-03-05T17:36:31.800+09:00</updated><title type='text'>Windows 7 64bitでrubyやmingwやPowershell ISEなどもろもろ</title><content type='html'>&lt;b&gt;&lt;span style=&quot;font-family: hgp明朝e;&quot;&gt;重要(Update)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: hgp明朝e;&quot;&gt;以下に記載されたものは、環境構築がうまく行かず、最終的に断念しました。現状gemをうまく動かせていません。rubyの64bitバイナリが独自ビルドされたものという事で、少しずつ環境を整備しながらの構築にはもっと時間とスキルが必要でした。最終的にはAptanaStudio+JRubyの方向に切り替えました。     &lt;br /&gt;以下は、断念するまでの記録という事になります。有用な情報でない事をあらかじめご了承願います。&lt;/span&gt;&lt;br /&gt;
Win7にアップデートしたものの、プログラミングらしいことは何一つ行っていないことに気づき、せっかくの休みを使って勉強がてら。   &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;rubyはruby on railsでちょっとだけ触った事がある程度     &lt;/li&gt;
&lt;li&gt;mingwは使ったことがない     &lt;/li&gt;
&lt;li&gt;PowerShell ISEなんて、存在自体しりませんでした     &lt;/li&gt;
&lt;/ul&gt;
こんな状態で、Herokuにアプリケーションを作ってみようとするなんて、我ながら詰め込み過ぎ。ぶっ込みこそ我が人生。さらに、なぜか「64bitNativeにこだわる」、と初めてしまったので、着手そうそうから、すでに終わりが見えません。&lt;br /&gt;
とりあえず、実施した手順を示します。&lt;br /&gt;
手順（予測）はこんなところです&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;1.mingw環境を構築     &lt;/li&gt;
&lt;li&gt;2.mingw環境にruby on rails開発環境を構築     &lt;/li&gt;
&lt;li&gt;3.mingwにheroku環境を構築     &lt;/li&gt;
&lt;li&gt;4.herokuに&lt;a href=&quot;http://www.sinatrarb.com/&quot; target=&quot;_blank&quot;&gt;Sinatra&lt;/a&gt;を入れて静的ページでもよいから何か作ってみる      &lt;/li&gt;
&lt;/ol&gt;
前提条件としては、   &lt;br /&gt;・nmakeが実行可能であること。VCのコンパイラが使えること。    &lt;br /&gt;VisualStudioの開発環境が入っていれば、これらのモジュールへのパスを通してやればmingw上で動くrubyもこれらを使ってコンパイルするようになります。rubyのgemなどは、コンパイルとリンクにより環境に使用するモジュールパッケージ（gem）を入れるので、コンパイルの環境が必要になります。なお、私の環境にはVisualStudio 2010betaしか入っていないので、このコンパイル環境を拝借する事になります。     &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;mingwをインストール     &lt;br /&gt;&lt;a href=&quot;http://sourceforge.net/projects/mingw-w64/files/&quot;&gt;Browse MinGW-w64 - for 32 and 64 bit Windows Files on SourceForge.net&lt;/a&gt;      &lt;br /&gt;から、適当と思われるzipファイルをダウンロード。bz.tarなどのファイルがあったが、解凍ツールを導入する面倒さを考えれば、win標準のzipで使えるものにしたかった。       &lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWWz0NMDjQu9uijjcTWcAIv_6yy1zVK0UTZ9Sb5h203N7sz56SHGok6Mouc__qV_mCM-Kol9t9TZ752Ft1epngs7q2g1QbthlRLw7roDjmgcP8tNzYdO9ANKhp9Ma6ca9Gjxs4Lp5SZxg/s1600-h/screen%5B3%5D.png&quot;&gt;&lt;img alt=&quot;screen&quot; border=&quot;0&quot; height=&quot;189&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAH84eBqZ8KQXjBRIYw5RP9in7WnUinoOFM3C4XmyHmSIo9XQ7y4YjWlhPcvzC0eVWZN9mI4iTTw9eOI4sOQffZQ6lfrN4LfCVCrAipuj7Kw4_ogHkjw4Fmt-ruTuyl-7SNyAfQPS5Oqg/?imgmax=800&quot; style=&quot;border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;&quot; title=&quot;screen&quot; width=&quot;558&quot; /&gt;&lt;/a&gt;ちょっとよくわからないが、上の画像で選択されているzipを解凍すれば、\x86_64-w64-mingw32\binにgcc.exeとか、聞き覚えのあるプログラムがあるので、各プログラム単体では動きそうです。      &lt;br /&gt;まずはこのあたりから、ruby環境を構築していきます。なお、このBlogエントリ内では「B:\mingw」というフォルダをルートパスとします。 &lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;ruby 1.9.1をダウンロードします。x64ネイティブにすると誓いをたてた関係から、ruby本体も64bitバイナリを下記からダウンロードします。     &lt;br /&gt;&lt;a href=&quot;http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html&quot;&gt;Release - Ruby-mswin32 (ja)&lt;/a&gt;      &lt;br /&gt;リンクのコメントには32bitとありますが、64bit版も用意されています。      &lt;br /&gt;ダウンロードしたZIPは、適宜わかりやすいフォルダに展開しておきます。このblogエントリ内では「B:\ruby64」というフォルダをルートパスとします。      &lt;br /&gt;      &lt;br /&gt;      &lt;/li&gt;
&lt;li&gt;普通ならmsys+mingwが普通の取り合わせでしょうが、Powershellというのが有ったなと思い出しました。ですので、今回はWindows 7に標準搭載された&lt;a href=&quot;http://technet.microsoft.com/ja-jp/library/dd367858%28WS.10%29.aspx&quot; target=&quot;_blank&quot;&gt;Powershell ISE&lt;/a&gt;を使ってみます。      &lt;br /&gt;こんな画面です。&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbu9yfhh551IBZNMZ3ZvYYYuHYNgEEmApd47CMqTnLZanQQL9M_inYwN1Q6q1zobRcn0WMWQ7tDW8mBLbGX6m5-xw4eYIFi9gpgwUoa2HzilLluWgpLqd7C9uKwcoMtAMIZVup0ft1maA/s1600-h/screen_1%5B3%5D.png&quot;&gt;&lt;img alt=&quot;screen_1&quot; border=&quot;0&quot; height=&quot;308&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQtQc62VTz4RNFp0dDCuGBFn402bSIMgrHUWV3tN7G1SaqcRlSJVBElYkju93uRbiVXE8ZwC7FAiGBjygfJumWHYjyoQd601xS7cbfyMcMnThNQJH6TYeQkXLFHwrQl3SKTkeSu9c56X4/?imgmax=800&quot; style=&quot;border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;&quot; title=&quot;screen_1&quot; width=&quot;436&quot; /&gt;&lt;/a&gt;      &lt;br /&gt; スタートメニュー（Windows7はスタートという文字は出ていないが）から起動するPowerShell ISEの作業フォルダは「C:\Users\&amp;lt;ログインユーザーID&amp;gt;(実際の設定は%HOMEDRIVE%%HOMEPATH%)」で、起動のたびにいちいちパスを入れ直すことになり面倒なので、PowerShell_ISE.exeのショートカットを作り、作業フォルダをB:\mingw\x86_64-w64-mingw32\binなどとしてやると便利でしょう。（方法の詳細は割愛します）      &lt;br /&gt;      &lt;br /&gt;上の画像は、タイトルが「コマンドプロンプト」などとなっていたりしますが、作成したショートカットの名称が表示されているだけなので、あまり気にしないでください。ここまで至るまでの紆余曲折試行錯誤が現れているだけです。      &lt;br /&gt;      &lt;br /&gt;このISEには、作成したシェルスクリプトをデバッグする機能もあるようなので、今後の展開に期待できます。ただし、今回はそこまではしません。 &lt;/li&gt;
&lt;/ol&gt;
&lt;ol&gt;
&lt;li&gt;環境変数PATHにrubyのバイナリがあるパスを追加します。たとえばB:\ruby64\binなどと追加します。     &lt;br /&gt;      &lt;/li&gt;
&lt;li&gt;さらに環境変数PATHに、nmakeなどのVCコンパイル環境へのパスを追加します。私の場合、VisualStudio 2010betaの環境だったので、&quot;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64&quot;というパスを追加しました。 &lt;/li&gt;
&lt;li&gt;     &lt;br /&gt;      &lt;/li&gt;
&lt;li&gt;zlib.dllが必要です。ruby.exeが64bitネイティブである以上、dllも64bitにしてやる必要があります。このライブラリが無かったり、32bit版ライブラリしか無かった場合、多くのgem操作でエラーになります。64b itと32bitのそれぞれ別のアプリケーション実行空間を持っているといえるので、ｅｘｅとexeから呼ばれるdllは必ずビット数をそろえてやる必要があります。     &lt;br /&gt;ZLIBの64bitネイティブライブラリは下記からダウンロードできます。&lt;a href=&quot;http://www.winimage.com/zLibDll/index.html&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkjo4JnsG8FTNCINIH3h8BBCg9WNq2U3bzAM51LuOfFYO5Y-khaXjWqtSfzNAodnXg5eoECiXdPfuF69sHlNXK05l3X-VEUw1bCh_lGHx-0QYYBANeT-VPYdfHPH5VBm8CfAd5ZiCB5Fg/s1600-h/screen%5B7%5D.png&quot;&gt;&lt;img alt=&quot;screen&quot; border=&quot;0&quot; height=&quot;63&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkHV8Mylv5Kfrzmt2zL2cuYTHHt3S6QIr0fN7RXkgzoWDGiJQ6vNmOgiodGViVXoZ-7mU28QyHyWUburGSY4X9A7WOHnyBJ6y3K4rSmziqGJzX7-b40-9SXmMrb1Hbg9JCkbMZf0F1bWA/?imgmax=800&quot; style=&quot;border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;&quot; title=&quot;screen&quot; width=&quot;644&quot; /&gt;&lt;/a&gt;      &lt;br /&gt;&lt;a href=&quot;http://www.winimage.com/zLibDll/index.html&quot;&gt;ZLIB DLL Home Page&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;解凍後のzlib123dllx64\dll_x64フォルダにあるzlibwapi.dllを、rubyのbinフォルダ、たとえば、「B:\ruby64」以下のbinフォルダなどに追加してやります。先ほど環境変数PATHに同様のパスを追加したので、ここに配置するのが良いでしょう。 その際ライブラリのファイル名をzlibwapi.dllからzlib.dllに変えてやります。      &lt;/li&gt;
&lt;/ol&gt;
環境変数PATHを変更したので、すぐ反映させる為にも、一回再起動します。しました。 再起動は必須でないかもしれませんが、PATHの反映が遅れるケースもどこかで見た気もしたので、私の場合は都度再起動するようにしています。  &lt;br /&gt;
&lt;br /&gt;
眠さのあまり意識がもうろうとしてきたので、今日はここまで。明日に続きます。  &lt;br /&gt;
&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:0137be76-2edb-4859-84e5-f576696307be&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4797337362/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Windows PowerShell イン アクション [イン アクションシリーズ]&quot; src=&quot;http://ecx.images-amazon.com/images/I/41Iu2cQWlDL._SL75_.jpg&quot; /&gt;&lt;br /&gt;Windows PowerShell イン アクション [イン アクションシリーズ] Bruce Payette &lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:46b8ae99-2734-418c-b6d2-0729e236322b&quot; style=&quot;display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4274066428/cagylogic-22/ref=nosim&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;プログラミングRuby 第2版 言語編&quot; src=&quot;http://ecx.images-amazon.com/images/I/4151YFZ27NL._SL75_.jpg&quot; /&gt;&lt;br /&gt;プログラミングRuby 第2版 言語編 Dave Thomas Chad Fowler Andy Hunt &lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/4525550983025000505/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2009/12/windows-7-64bitrubymingwpowershell-ise.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4525550983025000505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/4525550983025000505'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2009/12/windows-7-64bitrubymingwpowershell-ise.html' title='Windows 7 64bitでrubyやmingwやPowershell ISEなどもろもろ'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAH84eBqZ8KQXjBRIYw5RP9in7WnUinoOFM3C4XmyHmSIo9XQ7y4YjWlhPcvzC0eVWZN9mI4iTTw9eOI4sOQffZQ6lfrN4LfCVCrAipuj7Kw4_ogHkjw4Fmt-ruTuyl-7SNyAfQPS5Oqg/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5065578575961395462.post-7348356140409903184</id><published>2009-12-30T19:12:00.002+09:00</published><updated>2009-12-30T19:17:24.580+09:00</updated><title type='text'>オーストラリアの首都ではないシドニー</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://hanorionrails.blogspot.com/2009/11/blog-post_19.html&quot;&gt;カンガルー&lt;/a&gt;見たさという訳でもないですが、ここ数年のうちに計２回ほどオーストラリアに行く機会に恵まれました。&lt;br /&gt;一回目は、首都っぽさ満載のシドニー。二回目は語学留学と称して１週間ほどホームステイしたケアンズ。&lt;/p&gt;&lt;p&gt;さすがに、シドニーが首都でない事くらいの前提知識はあったのですが、いざシドニー空港からおりてみると、その都会ぶりに驚いた。そして、ここが首都でないとはどうも信じられない。妻の言葉を借りれば「納得感が薄い」という事になる。&lt;/p&gt;&lt;p&gt;シドニーは、さまざまな魅力ある観光スポットが存在し、あらゆる人種が行き交い、その様子はまさに大都会そのもの。でも首都ではない。&lt;/p&gt;&lt;p&gt;一方キャンベラは首都としての歴史も浅いらしく（&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%99%E3%83%A9&quot; target=&quot;_blank&quot;&gt;1960年&lt;/a&gt;）付近に目立った観光スポットも無いようです。オーストラリアに出張などが無い限り、キャンベラだけを目指して旅行する機会はなさそう。&lt;/p&gt;&lt;p&gt;もう年の瀬。&lt;br /&gt;例年同様、首都でないシドニーでは花火やパレードなど、盛大な年越しパーティーが繰り広げられる模様。（&lt;a title=&quot;http://www.cityofsydney.nsw.gov.au/nye/2009/default.asp&quot; href=&quot;http://www.cityofsydney.nsw.gov.au/nye/2009/default.asp&quot;&gt;http://www.cityofsydney.nsw.gov.au/nye/2009/default.asp&lt;/a&gt;）&lt;br /&gt;残念ながらUstreamの中継で満足するしかないですが、一度は現場でオージーと一緒に新年を祝ってみたいものです。（この時期の馬鹿高い渡航費を払うほどの所得が必要！）&lt;/p&gt;&lt;p&gt;ケアンズでのバンジージャンプ体験については機会があれば後ほど。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://hanorionrails.blogspot.com/feeds/7348356140409903184/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hanorionrails.blogspot.com/2009/12/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/7348356140409903184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5065578575961395462/posts/default/7348356140409903184'/><link rel='alternate' type='text/html' href='http://hanorionrails.blogspot.com/2009/12/blog-post.html' title='オーストラリアの首都ではないシドニー'/><author><name>表示名</name><uri>http://www.blogger.com/profile/08451833658255930126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>