UNDEFINED::NOTE

日々のつれづれ

hoge配下にnpmでhogeモジュールをインストールしてはいけない

とりあえずReactをはじめてみようとのことで、以下のようなことをやってみた

$ mkdir react
$ cd react/
$ npm init -y

Wrote to /Users/username/react/package.json:

{
  "name": "react",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

で、次にreactをnpmよりinstallしようとしたら、ダメだった

$ npm install --save react


npm ERR! code ENOSELF
npm ERR! Refusing to install package with name "react" under a package
npm ERR! also called "react". Did you name your project the same
npm ERR! as the dependency you're installing?
npm ERR! 
npm ERR! For more information, see:
npm ERR!     <https://docs.npmjs.com/cli/install#limitations-of-npms-install-algorithm>

Did you name your project the same as the dependency you're installing?
「あなたのプロジェクト名と同じ名前のモジュールをインストールしましたか?」とあります。
つまり、react 配下にreactはインストールできないんですね、というお話でした。

Java SE 8 Programmer I の資格を取りました

タイトルの通り資格を取りました。
Java SE 8 Silver のほうが日本語として通っていると思います。

とくにこれということはないのですし、ご報告というものでもないのですが、ご報告で。
ちなみに、今のところGoldの資格を取る気はありません。
Javaのリリースサイクルは半年になってしまったので、正直Oracle公認のJava 8でさえ古臭くなっていて、新しい資格がそのうちでるんじゃないかなあ、と予想しています。

今年はLPIC Level 1 を取りたいです。
以上。

京都旅行(201810)

京都旅行に行った。
美味しいお店、あまり観光はせず、ただただ食してばっかりだったけど、これはこれでいい楽しみ方なのかなと思った。

新福菜館 本店

黒いスープ。学生時代は行列を見つつスルーしていたあの店に突撃。醤油ラーメンは見た目ほどしょっぱくなく、気をつけないとスープを飲みすぎてしまう。何よりチャーハンがうまい。ラーメン×チャーハン、この組み合わせは、ストロングスタイル。

http://www.trip.kyoto.jp/plan/ramen_2016_0628/22/

手打ちそばみな川

塩をつけて食べる天ぷらはやはり贅沢の極み。と思ったら1800円と案外高くない。お蕎麦はのどごしがよく、つるつると食べられるのが良い。 奥さまは鴨南蛮を頼んでいた。こちらは汁がめちゃんこ美味い。秋のよるに優しい味。

minagawa-kyooike.owst.jp

京都ロビンソン 烏丸

ついついパンの匂いにひかれてしまう。たまごサンドを食べようと思っていたのに、行列に並んでいた。焼き立てのパンが食べ放題、それに並ばない理由はないよね。

かぼちゃのスープは素材の甘みを感じるのがグッド。これをパンに付けて食べて、満足。メインの鶏肉のディッシュ、に合わすのもパン。パンパンパン。メインはやはりパン。

やはり焼き立ては美味いなあ。甘いパンも、惣菜パンも、一口、二口で食べられるような大きさなので、いろいろな種類を食べられる。しかしそれでも食べきれないほどに、たくさんの種類。大満足でした。

おうちごはん中島屋

ポテトサラダ、まずこれが目についた。ポテトサラダが美味しいお店に外れはない。
それを食べながら、自家製ジンジャーで作ったシャンディガフをいただく。
牛すじ大根はだし汁まで飲む。絶品。
厚揚げの焼き物、豆腐をわざわざその場で揚げてから、さらに焼く。その手間に感服し、味にも感服。
秋の味覚、サンマはふっくらとした仕上がり。途中で頼んだご飯が進む。
からしレンコンの天ぷらは予測どおりの味、これはアルコールとちょうどいい。
唐揚げは、このぐらいの大きさのボリュームがうれしい。

ちびちびと、クリームチーズの味噌漬けを食べ、お酒を飲みながら、歓談。
ゆったりと、時間が過ぎていきます。

卵かけご飯。
鰹節は足りなくったらかけてください。つまり、無限鰹節。
最後の締めにTKGはいいじゃない。

ouchi-nakashimaya.com

京都はうまいもんでいっぱいである。
以上。

続けることに意味があるんだろうな、ということについて

なんかポエムっぽいタイトル。

今年で30歳になり、責任も増えて、でも髪の毛なんかは減っていくし、お金もたまらないしでああしんどいな、生きるって、ってセンチメンタルになります。 なんかポエムっぽいと書きましたが、たぶんポエムです。

近くのプールには50mの屋外プールがあって、今日泳いできた。 夏の終わり、それは生ぬるい水の中ではなくて、入ったときに冷たいと感じる温度。 それは僕が10代、20代のころは、毎日のように泳いでいたので、ただ泳ぐだけではつらいという感情を抱かなかった。 だけど体は正直者だから、今ではたった200mを泳いだだけで、腕が上がらない、回らない様になっている。

少しづつ、ゆっくりと泳ぎつつ、30分ほど水の中で過ごしたあとはプールサイドで他の利用者の様子を眺めていた。 親子連れ、小さい子どもたちはボールで遊んでいて、お父さんは子供の面倒を見ていた。お母さんの姿は少ない。東京だからだろう、日に焼けることを嫌う女性が多いから、お父さんに子供の面倒を任せたのだろう。

僕はプールサイドで思い出していた。四六時中プールで過ごした日々、日に焼けた肌は焦げて色を変え、日に当たらない場所との境界がくっきり見える、引き締まった若い体。 だけではなく、そのときの、何時間泳いでも疲れなど感じないようなあの頃。若さと体力にあふれるとは、まさにそれである。 日焼けした肌はもう焼けることもなく、かれこれ5年以上も日にあたっていない肌は白い。 そして、あの頃の体力も筋力も、消えてしまった。

もう少し、例えば週3回は体力維持をしていれば変わっていたのかもしれない。が、おそらくそれをしなかったのは、続けないことを選択したから。 一方で、働きだしても、仕事を、たとえばプログラミングの勉強もしかり、最新技術の動向をチェックするなど、それは少しではあるけれど続けている。 やめるのは簡単だけれど、じゃあいつやめるのだろう。 でも、やめる必要はないのだろう。続けていけばいいのだろう。やめる必要はないはずだ。

昔のことを記録する。 たとえば2012年に書いた恥ずかしくもなる過去の話。 もしかしたらそれが残っているのはいいことなのかもしれない。 なんて、今日ぼんやりしてたら思ったのでブログに残します。 中身なんて、何もないよ、それでいいでしょ。

vimrcを晒す

とりあえず晒してみる。 お客さん先とかで、普段使ってる設定を知りたいとき用のメモ。 あとオススメのプラグイン教えてください。

"deinが入っているとsyntax onが効かないらしい。deinの後に書くとよいらしい。
"syntax on
"backspaceを有効にする
set backspace=indent,eol,start
set autoindent
set expandtab
set tabstop=2
set shiftwidth=2
set number

"NERDTreeのキーマップ:vimを開いたときに、Ctrl+eでNERDTreeを開く
map <silent><C-e> :NERDTreeToggle<CR>

"コピーアンドペーストをしたときにvimが勝手に改行するのを制御する
if &term =~ "xterm"
    let &t_ti .= "\e[?2004h"
    let &t_te .= "\e[?2004l"
    let &pastetoggle = "\e[201~"
    
    function XTermPasteBegin(ret)
      set paste
      return a:ret
    endfunction

    noremap <special> <expr> <Esc>[200~ XTermPasteBegin("0i")
    inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("")
    cnoremap <special> <Esc>[200~ <nop>
    cnoremap <special> <Esc>[201~ <nop>
endif

" Note: Skip initialization for vim-tiny or vim-small.
if 0 | endif

if &compatible
  set nocompatible               " Be iMproved
endif

if has("mac")
  " lua is installed by homebrew
  set luadll=/usr/local/Cellar/lua/5.2.4_1/lib/liblua.dylib
end


" dein
" Vim起動完了時にインストール
augroup PluginInstall
  autocmd!
  autocmd VimEnter * if dein#check_install() | call dein#install() | endif
augroup END

" 各プラグインをインストールするディレクトリ
let s:plugin_dir = expand('~/.vim/')

" dein.vimをインストールするディレクトリをランタイムパスへ追加
let s:dein_dir = s:plugin_dir . 'repos/github.com/Shougo/dein.vim'
execute 'set runtimepath+=' . s:dein_dir

" dein.vimがまだ入ってなければ 最初に git clone
if !isdirectory(s:dein_dir)
  call mkdir(s:dein_dir, 'p')
  silent execute printf('!git clone %s %s', 'https://github.com/Shougo/dein.vim', s:dein_dir)
endif

"dein plugin settings
if dein#load_state(s:plugin_dir)
  call dein#begin(s:plugin_dir)
endif

" ここからインストールするプラグイン
call dein#add('Shougo/dein.vim')
call dein#add('Shougo/neocomplcache.vim')
call dein#add('Shougo/neocomplcache-rsense.vim')
call dein#end()

syntax on 


" neocomplcacheの設定
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0

" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1

" Use smartcase.
let g:neocomplcache_enable_smart_case = 1

" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'

let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1

" Rsense用の設定
if !exists('g:neocomplcache_omni_patterns')
    let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete

"rsenseのインストールフォルダがデフォルトと異なるので設定
let g:rsenseHome = expand("/Users/username/.rbenv/shims/rsense")
let g:rsenseUseOmniFunc = 1

『RHYMEBERRY ワンマンライブ SERIES 1 supported by WREP』を見てきた

RHYMEBERRY ワンマンライブ SERIES 1 supported by WREP』を見てきました。
まず思ったこと。

続きを読む

VBScriptでCreateObject関数を使ってみよう

バッチファイルでの処理ではどうにもしっくりこない。セキュリティポリシーの関係でどうしてもPowerShellが使えない。
そんなときに使いたくないけど使えるのがVBScriptWindowsの環境であればいつだってメモ帳でスクリプトが書けるのです()。

バッチファイルだと行えないオブジェクトの参照も、CreateObject関数を用いることで、かんたんにExcelIEの自動操作を行えます。CreateObject関数は、VBAのコードなどで見覚えがあるという方は多いかとは思いますが、今回用いるVBScriptでも使用できます。

Excelに記述されたマクロを実行させてみましょう。

' oExcel変数を宣言し、Excelを参照させる
Dim oExcel
Set oExcel = CreateObject("Excel.Application")

' ブックを開き、test_macroを実行する
oExcel.Workbooks.open "C:\test\test.xlsm"
oExcel.Run "test_macro"
' Excelマクロ側でApplication.Quitと書き起動させたアプリケーション側で制御すると良い

他にはTeraTermのマクロなども起動できたりします。
TeraTermマクロはパラメータを渡して、実行させることができるため、VBScriptで予めパラメータを編集しておくことでより柔軟なプログラミングも可能です。
が、まずは平易なパラメータを渡してみましょう。

Dim oShell
Set oShell = CreateObject("WScript.Shell")

' TeraTermマクロに渡す引数
' 引数1:test.ttl > 起動するマクロ名
' 引数2:test_user
' コマンドプロンプトで、以下のように実行するのと同じ内容になります
' > "C:\teraterm\ttpmacro" "test.ttl" "test_user"
command = """C:\teraterm\ttpmacro"" ""test.ttl"" ""test_user"""
oShell.Run command

もちろん正規表現も備えています。

Dim fso, regexp, folder, file
Set fso = CreateObject("Scripting.FileSystemObject")
Set regexp = CreateObject("VBScript.RegExp")

regexp.Pattern = ".*.txt"
Set folder = fso.GetFolder("C:\test")

' C:\testにある拡張子(.txt)のファイルを削除する
For Each file in folder.Files
  If regexp.Test (file.Name) Then
    ' fileオブジェクトの参照は削除により破棄されてしまうので先に名前を取得
    Dim name: name = file.Name 
    fso.DeleteFile "C:\test" & "\" & file.Name, True
    MsgBox name & "を削除しました"
  End If
Next

VBScriptに書いておくことで、わざわざExcelを開きマクロを実行させる必要がなくなるため、面倒くさがりな人たちもニッコリなのではないかと思います。
例えばTeraTermの接続先やユーザーの情報をExcelから取得し、その後TeraTermマクロを実行して接続先からデータを取得し、さらに別のExcelマクロを実行させてデータの自動編集などを行うなどもできるでしょう。
以上のように、CreateObject関数を用いてVBScriptに包んでおくことでワンクリックでやってくれるスクリプトが作成でき、レガシーでセキュアな現場でもちょっとは楽になるかもしれません。