2015年10月13日火曜日

[Elixir][Phoenix]hello Phoenixを試す。

はじめに

ElixirでWebサービスを作ることを目的として、まずはhelloworldからということで、hello Phoenixを試した。

環境

  • OS:Rasbian
  • Elixir:1.0.4
  • PostgreSQL:9.1.18
  • nodejs:v0.12.7
  • Erlang/OTP:18
  • Phoenix:v1.0.3

ハマりポイント

  •  LinuxログインユーザでPostgreSQLのpostgresユーザのDataBase(postgres)へpsqlコマンドでログインできないため、サービスが開始できない。
  •  apt-getでPhoenixの要件を満たすnodejsのVersion(>= 0.12.0)にならない。(Rasbian以外のOSなら問題ないと思う。)
  •  package.jsonにnameとversionの属性が書かれていない。

実行コマンド

$ mix phoenix.new hello_phoenix

↓(出力)

 :
 Fetch and install dependencies? [Yn] Y
 * running npm install && node node_modules/brunch/bin/brunch build
 * running mix deps.get
$ cd hello_phoenix
$ mix phoenix.server

↓(出力)

 :
==> hello_phoenix
Compiled lib/hello_phoenix.ex
Compiled web/web.ex
Compiled lib/hello_phoenix/repo.ex

 == Compilation error on file lib/hello_phoenix/endpoint.ex ==
** (CompileError) lib/hello_phoenix/endpoint.ex:1: function router/2 undefined
    (stdlib) lists.erl:1337: :lists.foreach/2

     (stdlib) erl_eval.erl:669: :erl_eval.do_apply/6
$ vim lib/hello_phoenix/endpoint.ex
:
34
35   plug :router, HelloPhoenix.Router  (Before)
35   plug HelloPhoenix.Router           (After)
36 end
$ mix phoenix.server
↓(出力)
Compiled lib/hello_phoenix/endpoint.ex
Generated hello_phoenix app
[info] Running HelloPhoenix.Endpoint with Cowboy on http://localhost:4000
[error] Could not start node watcher because script "node_modules/brunch/bin/brunch" does not exist. Your Phoenix application is still running, however assets won't be compiled. You may fix this by running "npm install".

 [warning] the :size option when configuring HelloPhoenix.Repo is deprecated, please use :pool_size instead

一応、動いた。しかし、以下の画面が表示される。期待と違う。。。

$ npm install
↓(出力)
npm ERR! Couldn't read dependencies.
npm ERR! Error: No 'name' field found in package.json
npm ERR!     at /usr/share/npm/lib/utils/read-json.js:253:13
:
$ vim package.json
↓(編集)
1 {
2   "name": "hello_phoenix",     (追加)
3   "version": "0.0.0",              (追加)
4   "repository": {

 5   },

$ npm install
↓(出力)
npm http GET https://registry.npmjs.org/brunch
npm http GET https://registry.npmjs.org/babel-brunch
npm http GET https://registry.npmjs.org/clean-css-brunch
npm http GET https://registry.npmjs.org/css-brunch
npm http GET https://registry.npmjs.org/javascript-brunch
npm http GET https://registry.npmjs.org/sass-brunch
npm http GET https://registry.npmjs.org/uglify-js-brunch

 npm ERR! Error: failed to fetch from registry: css-brunch
npm ERR!     at /usr/share/npm/lib/utils/npm-registry-client/get.js:139:12

npm ERR! node -v v0.6.19

$ node -v
v0.6.19
$ nvm ls

     v0.12.7
->    system
 stable -> 0.12 (-> v0.12.7) (default)
$ nvm use v0.12.7
$ npm install
→ 終わるまで時間がかかる。(20分くらい)
$ node node_modules/brunch/bin/brunch build
$ mix deps.get
$ mix phoenix.server
[info] Running HelloPhoenix.Endpoint with Cowboy on http://localhost:4000
[warning] the :size option when configuring HelloPhoenix.Repo is deprecated, please use :pool_size instead
12 Oct 22:06:44 - info: compiled 3 files into 2 files, copied 3 in 10285ms
想定通りに動いた!

2015年9月23日水曜日

[erlang]モニタerlang:monitorの戻り値は何か。

はじめに

erlangのモニタ erlang:monitor/2の戻り値は一体何なのかわからなかったが、やっとわかったのでメモする。

何なのか

監視対象の軽量プロセスを識別する一意のID。

図解

こんな感じだろうか。

Erlang/OTP 17 [erts-6.1] [source] [smp:4:4] [async-threads:10] [kernel-poll:false]

Eshell V6.1  (abort with ^G)
1> erlang:monitor(process, spawn(fun() -> timer:sleep(500) end ) ).
#Ref<0.0.0.30>
2> erlang:monitor(process, spawn(fun() -> timer:sleep(500) end ) ).
#Ref<0.0.0.35>

2015年8月16日日曜日

[RaspberryPi]ラズパイにMongoDBをインストールする。

注意

(2015/10/12追記)

下記実行コマンドでMongoDBをインストールできたはいいが、mongoコマンドでインタラクティブ環境へ入った後、show dbs; を実行すると、segmentation faultで落ちる事象が発生しており、解決できていません。

参考

Raspberry Pi2にMongoDB(2.1.1)をインストールする http://qiita.com/toru2220/items/8f8a16f86db6876d4b7b

実行コマンド

$ cd ~/Downloads
$ wget https://github.com/tjanson/mongodb-armhf-deb/releases/download/v2.1.1-1/mongodb_2.1.1_armhf.deb

$ sudo dpkg -i mongodb_2.1.1_armhf.deb
# 依存関係にあるもの(libboost何とか)が壊れていると言われた。インストールできず。

$ sudo apt-get -f install
# ↑修復をする。すべてyesで。

$ sudo dpkg -i mongodb_2.1.1_armhf.deb
# ↑既に違う方法でインストールしていたので、エラーとなった。

$ sudo deluser mongodb --remove-home --remove-all-files
# ↑mongodbユーザを削除する。それが所有するファイルやホームディレクトリも削除する
$ sudo /etc/init.d/mongod stop
# ↑mongodbが起動していたため、↑のdeluserがエラーとなる
$ sudo deluser mongodb --remove-home --remove-all-files
# 再実行
$ sudo dpkg -i mongodb_2.1.1_armhf.deb
# mongodbパッケージのインストール
### インストール完了。###

確認

$ sudo /etc/init.d/mongodb start

$ mongo
MongoDB shell version: 2.1.1
connecting to: test
>exit

$ sudo /etc/init.d/mongodb stop

[RaspberryPi]ラズパイ2のタイムゾーンを日本(東京)へ変更する。

参考

【Linux】タイムゾーン(Timezone)の変更 - Qiita http://qiita.com/azusanakano/items/b39bd22504313884a7c3

タイムゾーンを変更

$ cd /etc
$ sudo cp -p localtime{,.org}
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

タイムゾーン確認

$ date
Sun Aug 16 17:10:05 JST 2015   # JSTと表示されればOK

再起動しても、日本(東京)時間のまま。

2015年8月15日土曜日

[vim][RaspberryPi]Elixirのシンタックス設定 2時間ハマった。

はじめに

Raspberry pi 上でElixirで遊ぶため、vimを入れたので、シンタックスを設定しようとしたが、vimやNeoBundleについて知らなすぎたため、2時間ハマった。そのハマった点を忘れないよう記事にした。

環境

  • OS:Rasbian

原因

vimrc内に ”syntax enable" がなかったこと

手順

基本的な手順は1.の通りである。

  1. http://kaworu.jpn.org/vim/NeoBundle

セットアップ

$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

$HOME/.vimrc の設定

以下をファイルへ追記する。

set nocompatible
filetype off            " for NeoBundle

if has('vim_starting')
        set rtp+=$HOME/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
" ★

" ここから NeoBundle でプラグインを設定します
" NeoBundle で管理するプラグインを追加します。
NeoBundle 'Shougo/neocomplcache.git'
NeoBundle 'Shougo/unite.vim.git'
NeoBundle 'elixir-lang/vim-elixir'     " elixir のシンタックス

call neobundle#end()            " ★から移動
filetype plugin indent on       " restore filetype

syntax enable                   " これがなかったため、シンタックスが表示できず。。。

プラグインのインストール

  1. vimの起動。ファイル指定しなくともよい。
  2. NeoBundleInstallの実行(:NeoBundleInstall とコマンド実行)
  3. vimの終了

シンタックス確認

適当なelixirのファイルを開く。色が付いていればOK。

2015年7月20日月曜日

[Elixir][RaspberryPi]ラズベリーパイにElixirをインストールする。

ラズベリーパイ内にElixirをインストールするための手順を下記に示す。

参考:https://www.erlang-solutions.com/downloads/download-erlang-otp

        http://elixir-lang.org/install.html#distributions

手順(太字のコマンドを実行する)

# wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb

(何やら画面っぽいものが出てくる)

<Configuring erlang-solutions>
wheezy へ修正
(※squeezeではダメ!)

↓設定ファイルからでもOK
-- etc --
# su -
(input root passwd)

# vi  /etc/apt/sources.list
(下記をsources.listファイルへ追加する)
deb http://packages.erlang-solutions.com/debian wheezy contrib
--

# wget http://packages.erlang-solutions.com/debian/erlang_solutions.asc

# sudo apt-key add erlang_solutions.asc

# sudo apt-get update

# sudo apt-get install erlang

# sudo apt-get install elixir

[RaspberryPi]ラズベリーパイを買ったので、初期設定をやった。

ネットワークの勉強をしたかったので、小さく安いPCがないものか探していたら、ラズベリーパイというものがあった。 これを購入し、色々勉強しようと思った。 下記はそのときの設定についてである。

やりたかったこと

  1. Win7 - (SSH接続) -> ラズパイ
  2. ラズパイ自身が無線LAN接続でインターネット接続

環境

  • メインPC:Windows7
  • サブPC:ラズベリーパイ2 modelB
  • スマホのPocketWifi

基本的な設定手順

下記サイトを参考にさせていただいた。ほぼ同じことを行った。

こじ研(Raspberry Pi) http://www.myu.ac.jp/~xkozima/lab/raspTutorial1.html

基本的な設定手順内で今回と異なる手順

準備編(2):動作確認と初期設定

 Change Keyboard Layout: "Generic 105-key (Intl) PC" >
   変更前:Others
   変更後:Japanese - Japanese(OADG 109A)
 Advanced Options: 高度な設定 Hostname:
   変更前:kozPi
   変更後:nagPi

準備編(3):無線 LAN とリモートログインの設定

 無線LAN接続時のパスワードは暗号化しなかった。
 無線LANの設定
  /etc/wpa_supplicant/wpa_supplicant.conf には以下のように設定した。
  (GUIで無線LANの設定をしたことがあり、それと同じように設定した。)
  --- ここから ---
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1

    network={
      ssid="yourSSID"
      proto=RSN
      key_mgmt=WPA-PSK
      pairwise=CCMP
      psk="yourPassword"
    }
  --- ここまで ----

2015年6月30日火曜日

[Chrome OS]USBブートでChrome OSを体感する!

以下の記事を参考に、Chrome OSを体感しています。

http://www.atmarkit.co.jp/ait/articles/1408/27/news046.html

WindowsでWebブラウジングするより断然いい!快適にストレスなく動作します!

2015年6月21日日曜日

[Elixir]ファイルへ文字列を書き込む

IO.binwrite() を使って、開いたファイルへ文字列を書き込む。

開くファイルはローカルにあってもなくてもよい。

■やること

hello ファイルを開き、world文字列を書き込む。

defmodule MyModule do
    def write( word ) do
        case File.open "hello", [:write] do          # 開く
            {:ok, file} -> writeStr( file, word )    # 書き込む
                           File.close file           # 閉じる
            {:error, posix } -> IO.puts posix
        end
    end

    def writeStr( file, word ) do
        IO.binwrite file, word
    end
end

MyModule.write( "world" )

[Elixir]ファイルを読み込む

File.read()を使って、ファイルの内容を読み込む。

ファイルの中身(hightemp_1.txt)
高知県 江川崎 41 2013-08-12
埼玉県 熊谷 40.9 2007-08-16
岐阜県 多治見 40.9 2007-08-16

ファイルの内容を読み込み、表示するソース

defmodule MyModule do
    def fileRead( path ) do
        case File.read(path) do
            {:ok, body} -> body
            {:error, reason} -> reason
        end
    end
end

IO.puts MyModule.fileRead( "./hightemp_1.txt" )

実行結果

PS C:\Users\tomohiko\Documents\19_elixir> chcp 65001
Active code page: 65001
PS C:\Users\tomohiko\Documents\19_elixir> elixir .\fileread.exs
高知県     江川崎     41      2013-08-12
埼玉県     熊谷      40.9    2007-08-16
岐阜県     多治見     40.9    2007-08-16

2015年6月19日金曜日

[Elixir]文字列をシャッフルする

Enum.shuffle()を使って、文字列をランダムにシャッフルする。

defmodule MyModule do
    def shuffle( str ) do
        :random.seed(:os.timestamp)   # これがないと、いつもシャッフル後の文字列が同じとなる。
        shuf = Enum.shuffle( String.codepoints( str ) )
        Enum.join( shuf )
    end
end

str = "abcde"
IO.puts MyModule.shuffle( str )
IO.puts MyModule.shuffle( str )

出力例

PS C:\Users\tomohiko\Documents\19_elixir> elixir .\test_shuffle.exs
adbce
dbeac

2015年6月13日土曜日

2015年6月12日金曜日

[Elixir]リスト内要素を標準出力する

Enum.each()を使用し、リスト内要素を標準出力する。
iex(8)> Enum.each( ["I", "am", "tomohiko"], fn(x) -> IO.puts x end )
I
am
tomohiko
:ok

[Elixir]リスト内要素を特定の文字列で結合する

Enum.join()を使い、リスト内要素を結合する。
iex(1)> Enum.join( ["I","am","tomohiko."], " " )   # 空白で結合する
"I am tomohiko."
iex(2)> Enum.join( ["I","am","tomohiko."], "-" )   # ハイフンで結合する
"I-am-tomohiko."
iex(3)> Enum.join( ["I","am","tomohiko."])         # ただ結合する
"Iamtomohiko."

2015年6月8日月曜日

[Elixir] 比較対象値とリスト内要素を比較し、少なくとも1つ一致するものがあれば、trueを返す。

Oracleのin比較演算子と同じことができないものかと調べたら、あった。
リスト内の各要素に対し、比較したい値と比較し、同じものがあれば、trueを返す。
なければ、falseを返す。

以下に例を示す。
iex(1)> n = 1
1
iex(2)> Enum.any?([1, 5, 6, 7, 8, 9, 15, 16, 19], fn(x) -> x == n end )
true
iex(3)> n = 2
2
iex(4)> Enum.any?([1, 5, 6, 7, 8, 9, 15, 16, 19], fn(x) -> x == n end )
false
2015/06/24 追記
こちらが普通かもしれない。
iex(1)> Enum.member?([1,2,3,4],3)
true
iex(2)> Enum.member?([1,2,3,4],5)
false

2015/07/08 追記
いや、これではないか。
iex(7)> 1 in [1,2,3]
true

2015年6月7日日曜日

[Elixir] 文字列の分割

文字列の分割 空文字除かない場合と空文字を除く場合を示す。
↓ソース
str = "Now I need a drink,"
IO.puts "ex. " <> str

IO.puts "trim なし"
words = String.split(str,[","," "])               # 空文字は除かない
Enum.each( words, fn x -> IO.puts x end )

IO.puts "trim: true"
words = String.split(str,[","," "], trim: true)   # 空文字は除く
Enum.each( words, fn x -> IO.puts x end )
↓実行結果
Active code page: 65001
PS C:\Users\tomohiko\Documents\19_elixir> elixir .\split_test.exs
ex. Now I need a drink,
trim なし
Now
I
need
a
drink
                # 空文字が出力される=空文字は除かれていない
trim: true
Now
I
need
a
drink

2015年6月6日土曜日

[Elixir]PowerShellを使って、UTF-8日本語表示を行う。


コマンドプロンプトでは、UTF-8の日本語表示がうまくいかなかったので、PowerShellでやることにした。
手順
  1. PowerShellを起動する。(スタート-プログラムとファイル検索欄に[powershell]と入力し、Enterキー) 
  2. chcp 65001 と入力し、Enter これで日本語表示できる状態となる。

[powershell]「ディスクがありません」とエラー表示される。


調べても出てこないし、エラーのとおり(ツタヤで借りた)DVDをドライブディスクへ挿入して、PowerShellをもう一度起動したら、うまく表示された。 なんじゃこりゃと思った。

[Elixir]文字列を逆順にする

任意の文字列を逆順にする。
iex> String.reverse("stressed")
"desserts"

2015年4月12日日曜日

FFFTPの忘れたパスワードを解析する方法

友達の自営業のお店のHPをメンテナンスするにあたって、FFFTPのパスワードが必要になったが、友達はそれがわからないと言うので、解析方法を調べた。

やることはだいたいhttps://markkajiri.hateblo.jp/entry/2013/03/29/035717 の通りだが、Perlの実行環境をStrawberryPerlに変更した。なぜなら、ActivePerlの本家に接続できなかったから。

下記に自分が行った手順を示す。 なお、環境はWindows7である。

1.StrawberryPerlのインストール

下記サイトの通りにStrawberryPerlをインストールする。

 インストール参考:http://allabout.co.jp/gm/gc/408109/

 StrawberryPerl本家:http://strawberryperl.com/

2.FFFTPの設定ファイルを保存する

接続メニュー → 設定 → 設定をファイルに保存を選び、ファイル名を入力して保存する。

この保存ファイルの"Password"にある値が解析するパスワードである。

3.プログラム作成(コピー)

下記サイトのソースをコピーし、aaa.plとでも名前を付けて、デスクトップに保存する。(デスクトップでなくてもよいが)

 https://markkajiri.hateblo.jp/entry/2013/03/29/035717

4.プログラムの実行

デスクトップに保存したPerlを実行する。

手順は、コマンドプロンプトを開き(スタート>すべてのプログラム>アクセサリ にある)、下記を実行すること。

cd Desktop
perl aaa.pl
FFFTPのパスワード入力(2.のPasswordをコピペする)
マスターパスワードの入力(よくわからない人は、「DefaultPassword」と入力する。)

表示された文字列がFFFTPのパスワードである。

2015年3月29日日曜日

沼サンを作ってみた。

少し前に話題になったらしい、「沼サン」を作ってみた。
詳しくは以下リンクから
-ネットで話題の「沼サン」が簡単ウマそう!
https://matome.naver.jp/odai/2142484746502784001

↓実際に作ったもの

ゆで卵の量が多く、キャベツが見えない感じなので、沼サンぽくない。。。

2015年3月27日金曜日

EclipseでTocmcat Launcherをインストールしたら、Tomcat起動できなくなった。

ヘルプ>新規ソフトウエアのインストール… から http://eclipse.seasar.org/updates/3.2/と入力し、「Sysdeo/SQLI Tomcat Launcher」をチェックし、インストールした後、Eclipseを再起動すると、

選択された操作は現在使用できません

とメッセージ表示され、Tomcatが起動できなくなった。

ヘルプ>Eclipseについて から 「インストール詳細」ボタンでインストール済みのソフトウエア一覧を開き、「Sysdeo/SQLI Tomcat Launcher」を選択のうえ、アンインストールすると、元に戻る。

2015年3月26日木曜日

eclipse xml シンタックスハイライト

Eclipse内でXMLにシンタックスハイライトを付けて表示・編集したかった。

ダブルクリックでは、オール黒で文字が表示されたので。

シンタックスハイライトの付け方

  1. XMLファイルを右クリックする。
  2. アプリケーションから開く>その他 を選択する。
  3. エディタの選択画面が開くので、”XSLエディター”を選択する。

以上の操作で、シンタックスハイライトを付けて表示・編集することができる。

また、ファイルをダブルクリックして開いても、シンタックスハイライトが付く。



2015年3月22日日曜日

sublime text 2 で mayaa拡張子ファイルにJSPのシンタックスハイライトを指定する。

Sublime Text 2で特定の拡張子にシンタックスハイライトをデフォルト指定する。

http://hr-sano.net/blog/2012/09/28/640/

上のページのままやればよい。

つまり、View>Syntax>Open all ... >Java>Java Server Page を選択する。

1点注意しないといけない。

シンタックスハイライトを上の方法で設定した後、ファイルを”変更していなくとも”保存しないと、次回から設定したシンタックスハイライトが適用されないということ(これで何度もPlainTextのままハマった)。

2015年3月19日木曜日

GithubのWeb開発用エディタAtom インストール場所

(本記事は、「Atom」を触った感想を記載したものではない。)

GithubのWeb開発用エディタ「Atom」が盛り上がっているようで、私もインストールしてみた。

だがしかし、アプリケーションを閉じたら、デスクトップにショートカットもないし、スタートメニューにもないし、Program Filesフォルダにも見当たらないし、一体どこにインストールされたのか探した。

結局、私のPCでは以下にあった。

C:\Users\(ユーザ名)\AppData\Local\atom\app-0.187.0\Atom.exe
デスクトップにショートカットくらいはほしい!

職場でインストールしたら、デスクトップにショートカットが、スタートにAtomがあった。

2015年3月16日月曜日

IIS上でASP.NETを動かすもCSS変更が適用されないときの対処。

aspx内に記述されているCSSファイル名に対し、xxx.css?と"?"を拡張子の最後に付ける。

そして、サーバ上のaspxに上書きすると新しいCSSが読み込まれ、変更が適用される。

(※ サーバ上のCSSの実ファイルの拡張子には"?"を付けなくてよい。)

2015年3月12日木曜日

Eclipseでstruts-blank.warを動かしたら、メッセージリソース取得エラー

Eclipseでstruts-blank.warを動かそうとしたら、bean:messageでメッセージリソースが取得できず、エラーとなった。

そのときの解決法を以下に示す。

解決法を記述してある下記のサイトが参考になった。

http://blog.goo.ne.jp/whitil/e/b637917b1ee632e8f53973f84632e82e

”2、struts-config.xmlの記述”で解決した。

自分のローカル環境ではapplication.propertiesの場所が、WEB-INF\src\java\resources にあったが、struts-config.xmlのmessage-resourcesタグのparameterには”MessageResources”となっていた(parameter="MessageResources")。

そこで、parameterを"java.resources.application"と変更する。

Tomcatを再起動すれば、エラーなくJSPが表示される。

2015年3月7日土曜日

Google SpreadSheet で Excelのコピーした行の挿入と同じ操作をする方法

本記事では、Excelの”コピーした行の挿入”と同等の操作をGoogle SpreadSheetで行う方法を示します。

SpreadSheetでの手順

  1. 行を選択する。
  2. 行番号の上で、カーソルを”手のひら”のアイコンにする。
  3. ”手のひら”アイコンを左クリックを押し続けて、掴むアイコンにする。
  4. 挿入したい行まで、そのまま移動させ、左クリックを離す。

操作イメージ

(キャプチャがうまく取れなかったので、一部画像が加工されています。)

 1~3までの手順 (画像:手のひらを”掴む”アイコンにする。)


  4の手順 (画像:挿入したい行まで、そのまま移動させ、左クリックを離す。)


2015年3月4日水曜日

かん太カレーの野菜が美味しい!

今日は技術系の記事ではなく、食べ物の話です。

(特にこだわりがあるわけではなく、そちらよりの記事が多くなってしまうだけです。)

友達が鶴岡八幡宮で、神前結婚式をするということで招待されました。
招待されたといっても、結婚式を周りで観光客と一緒に観ていた感じです。

結婚式も終わり、友達とおしゃべりした後、一人昼食でもとって帰ろうとしていました。
鎌倉駅の前の小町通りを歩いていたら、呼び込みをしている人がいて、
鎌倉の野菜を使っているとわかったので、興味もあり、行ってみました。
(市販のしらすをかけたほうがおいしいと感じたので、しらす丼は絶対に食べないと誓っていました。)

「かん太カレー」を注文しました。
少なめのカレーライスとボリュームのある素揚げした鎌倉野菜が出てきました。
カレーは肉の繊維がボロボロになるほど煮込んだものでした。普通のおいしさでした。

この記事で言いたいのは、鎌倉野菜のジューシーさです。
大根やほうれん草、里芋、ごぼう等多種類の野菜がありました。
どれもみずみずしく、スーパーなどで買うものとは全然違いました。
また、ほんのりと塩味が効いているのがミソで、野菜の水分と塩が相乗効果を発揮して、
口の中においしさが広がります。
(個人的には、もうすこし塩味があるといいなと思いました。なので、卓上にある塩をふりかけました。)

お店は、小町通りの鶴岡八幡宮に近い方にあります。
鎌倉へ遊び・観光に行った際には、ぜひ寄ってみてはいかがでしょうか。

鎌倉野菜市場 かん太村
http://kamakuraleaf.com/%E3%81%8B%E3%82%93%E5%A4%AA%E3%81%8F%E3%82%93/

(写真1枚もなしとは!と思われるかもしれません。お店の料理を撮るのはあまり気が進まず、
撮っていません。)

2015年2月23日月曜日

DataGrid内のセルを結合する方法

目的

 表題のとおり、DataGrid内のセルを結合し、表示する方法を示す。

結合前後


  結合前



結合後





ソースのポイント

ItemDataBoundメソッド内以下の処理を行う。
  1. ColumnSpanプロパティの設定する
  2. あふれてしまう2列目(item2)の1~5のデータを削除する
        protected void MyGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if(e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)
            {
                e.Item.Cells[0].ColumnSpan = 2; // Colspanの設定
                e.Item.Cells.RemoveAt(1);       // ★ポイント:不要なデータの削除★
            }
        }

ソース全文


Default.aspx.cs -------------------------------
using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DataGrid_ColSpan
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            DataTable dt = new DataTable();
            DataRow dr = null;

            dt.Columns.Add(new DataColumn("item", typeof(string)));
            dt.Columns.Add(new DataColumn("item2", typeof(string)));

            for (int i = 0; i < 5; i++  )
            {
                dr = dt.NewRow();
                dr["item"] = i.ToString();
                dr["item2"] = (i+1).ToString();
                dt.Rows.Add(dr);
            }
            MyGrid.DataSource = dt;
            MyGrid.DataBind();
        }

        protected void MyGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if(e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)
            {
                e.Item.Cells[0].ColumnSpan = 2; // Colspanの設定
                e.Item.Cells.RemoveAt(1);       // ★ポイント:不要なデータの削除★
            }
        }


    }
}
-------------------------------

Default.aspx  -----------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DataGrid_ColSpan._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>DataGrid_ColSpan Sample</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DataGrid id="MyGrid" runat="server" OnItemDataBound="MyGrid_ItemDataBound" />
    </div>
    </form>
</body>
</html>
-----------------------------------

2015年2月20日金曜日

DataGrid内にDropDownListを文字列で設定する。

メモとして残す。
後で編集する予定。

################# Default.aspx.cs ################
using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DataGridInPanel
{
    public partial class _Default : System.Web.UI.Page
    {

        void BindDataGrid( DataView dv )
        {
            datagrid.DataSource = dv;
            datagrid.DataBind();
        }
        // 表示用のデータソース (DataView) を生成
        private DataView CreateDataSource()
        {
            DataTable dt = new DataTable();
            DataRow dr;

            dt.Columns.Add(new DataColumn("DropDownList", typeof(string)));

            for (int i = 0; i < 5; i++)
            {
                dr = dt.NewRow();

                dr["DropDownList"] = "<select name=\"blood\"><option value=\"A\">A型</option><option value=\"B\">B型</option></select>";

                dt.Rows.Add(dr);
            }


            DataView dv = new DataView(dt);
            return dv;
        }
           
         
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataView dv = CreateDataSource();
                BindDataGrid(dv);
            }
        }
    }
}


################# Default.aspx ################

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DataGridInPanel._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
 
        <asp:Panel ID="Panel1" runat="server">
            <asp:DataGrid runat="server" ID="datagrid" />
        </asp:Panel>
 
    </div>
    </form>
</body>
</html>

2015年2月15日日曜日

「本当に頭がよくなる 1分間勉強法」の弱点について

目的

「本当に頭がよくなる 1分間勉強法」は大変よい本だと思う。しかし、それにも弱点があった。
その部分を簡単に書いてみようと思う。

本の概要

本書は一言で言うと、「勉強は復習を短い時間でたくさんやること」ということ。
1秒1ページで目を通し、何回も頭に刺激を与え、長期記憶に記憶する方法を取っている。

弱点について

ただ、本書には弱点があると思う。それは★理解できないことは何度見ても理解できない★
部分が克服できていないことだ。
本内では、「カラーマジックという方法で克服できる」とあるが、それは間違いである。

カラーマジックとは、読んでいる本の大切だと思ったところを1枚の紙に書き写して、それを
何回も見ることだとある。なので、よくわからない部分を書き写して、何度も見れば克服できる
いうことになる。だが、それで理解できないものが理解できるほど単純なものだろうか。

著者が書かれている本が、英単語の本ばかりであることが、弱点を克服できていないことの
現れだと思う。

2015年2月8日日曜日

口内炎にはパープルショット!

上唇の裏側に1つ口内炎ができた。
麺類(ラーメン、うどん、そばetc...)を食べてすするときは痛かった。
時期的に風邪をひいて、喉が痛くなったときと重なった。このときパープルショットを購入した。
容器に口内炎も治せると書いてあったので、吹きかけてみたら、1週間治らなかった口内炎がパープルショットを付けたら、2~3日で治った。
これからは疲れなどで口内炎ができてしまったときは、パープルショットを吹きかけて治そうと思う。

2015年1月4日日曜日

ふるさと納税の仕組みを自分なりに理解した結果をまとめる。

定義
ふるさと納税とは自治体への寄附金のことで、 個人が2,000円を超える寄附を行ったときに、所得税と住民税から税額控除される制度。

仕組み
もともと所得税・住民税を払っている自治体Aから、ふるさと納税支払い先の自治体Bへ納税額の一部を支払うこと。

自己負担について
ふるさと納税の定義の「2,000円を超える寄付」の2,000円が自己負担分の金額となる。

2000円で特産品がもらえる仕組みの例
前提:

  1. 毎年、30万円自治体Aへ所得税・住民税を支払っている。今年も同額支払う。
  2. 自治体Bへ5万円ふるさと納税した。


2.と「自己負担について」から、自治体Bへ4万8千円税金を納付したことになる。
また1.より、今年自治体Aへ支払う税金の総額は30万-4万8千円=25万2千円である。

まとめると以下の合計額を税金として支払ったことになる。
  • 自治体A:25万2千円
  • 自治体B:5万円                  合計:30万2千円


納税額について整理すると

  • 去年まで:30万円
  • 今年:30万2千円                 → 2千円多く支払っている


だが、ふるさと納税により特産品がもらえた(e.g. お肉、お米etc)

結果、
去年までより2千円多く納税したが、特産品がもらえた