初心者のWEBデザイン

HTML,CSS、その他WEBデザインに関する事を記述していきます.

Raspberry Pi 初期設定 健忘録 ログインループ回避

ユーザーpiを別のユーザー名にスムーズに変更する方法

まずはpi以外のユーザーを追加
adduser ユーザー名(ex. tmp)#useraddは使用しない
gpasswd -a tmp sudo
passwd tmp #任意のパスワードを設定

sudo vi /etc/lightdm/lightdm.conf
autologin-user=piをコメントアウト

reboot
tmpでログインしpiのユーザー名を変更
usermod -l pi 変更したいユーザー名
mv /home/pi /home/ユーザー名
usermod -d /home/ユーザー名
groupmod -g pi ユーザー名
sudo visudo #ユーザー名を追加

.bash_profileに.bashrcがある場合に読み込む設定を記述


ちなみにラズパイでのログインループが良くあるみたいですね。

当方もちょっとハマったので解消方法を書いときます。
巷だとNvidiaの不具合と書かれているのが散見されますが

dpkg -l |grep nvidia

で見つからない方は一度試してみてもいいかもです。

一時的に作成したユーザーでCUIだとログイン出来る方で
GUIはログインできない方はこの方法で解消されるかも知れません。

useraddでルートディレクトリがない為、ログイン時に
デスクトップ表示などが出来ず、結果ログインループに
なってしまうことが濃厚だと考えられます。

当方もルートディレクトリのを作成したら解消されました。

Raspberry Piではまったこと健忘録

sshで操作する為、GPUなど不要なものを排除して
最小構成でインストールした場合、GPIOを操作するツールなども
インストールされていません。

WiringPi
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

これでGPIOが確認できます。

参考にさせて頂きました。
oohito.com
qiita.com

GPIOの状態を確認する
gpio readall
特定のGPIOのモードを変更する
gpio -g mode BCM番号 mode(in,out,alt)
特定のGPIOのin,outの設定
gpio -g write 数字


PyenvでVersionインストール中の下記のエラーが表示されたら
その下のサイトを確認しましょう。

ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

github.com

Shell Script デバッグ コマンドbashdbを使用する

bashdbを使用する

bashdbを使用すると1行1行ソースコードを読み込んだり
カレント行の変数の値を確認したりすることができます。
ブレイクポイントを設定したりそこまで処理を進めたりもできます。

コマンド名 別名 内容
step s 1ステップ実行する
print $変数名 pr $変数名 変数の値を表示する
break 行番号 b 指定した号にブレークポイントを設定する
clear 行番号 d 指定した行に設定されているブレークポイントを削除する
info breakpoints i b 設定されてるブレークポイントの一覧を表示する
continue c 次のブレークポイントまで進める
list l ソースコードを表示する
quit q または exit bashdbを終了する
help h ヘルプメッセージを表示する

Shell Script デバッグ コマンドbatsを使用する

Shell Scriptの静的コード解析でデバックするには
bashのオプションnoexecで行います。

静的コード解析は動作をさせるソースコードを実行せずに
問題があるか確認するデバック方法です。

#!/bin/bash
#noexec シェルオプションを有効にする
set -o noexec 

Shellcheckを使用する

ShellScriptを書く人は御用達の構文チェックサイトShellcheckで
チェックするのが、余計な手間いらずで簡単です。
www.shellcheck.net

batsコマンドを使用する動的テスト

batsコマンドのインストールは各OSのパッケージ管理ソフトで
インストールしてください。
Red-Hat系ならyumDebian系ならapt-get。Macならbrewとか。


テストを行うファイルの拡張子は.shではなく.batsとします。
冒頭にShebangは書かなくて大丈夫です。
Atomでパッケージで動作確認する場合にはShebangが記述されていると
Atombashだと認識してうまく動作しないことがあります。

@test テストの説明 {
  #Statement
  #Statement
}
@test 'True' {
  echo HelloWorld
}

@test 'False' {
  ech HelloWorld
}

#1..2
#ok 1 True
#not ok 2 False

bash 補完機能強化 Bash Completion設定方法

まずは各OSのパッケージ管理ソフトでインストールしましょう
Macbrew install bash-completion
Red-Hat系:yum install bash-completion
Debian系:apt-get install bash-completion

.bash_profile

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

書き込み終わったらsourceで読み込みましょう。

これで補完機能が追加できました。

Shell Script デバッグの方法

デバック時に使用するコマンドを詳細します。

set -oオプション 1文字のオプション 内容
verbose set -v コマンドを実行する前にコマンドラインの内容を出力する
xtrace set -x コマンドラインを展開した後の内容を出力する
nounset set -u 未定義の変数を参照した時にエラーとする
errexit set -e コマンドの終了ステータスが0以外であったら即座にシェルを終了する

verboseを使うより変数を展開して出力してくれるxtraceを使用しましょう。
またループ処理の場合の変数の増減変化を展開してくれる為、
処理を追う際に威力を発揮します。

xtraceの先頭の記号は環境変数PS4
exportすれば変更できます。
必要であれば.bash_profileに記述しておきましょう。

#.bashrc

export PS4="\[\e[1;35m\]->\[\e[0m\] "
verbose.sh
set -o verbose
cd /usr
ls
cd "$HOME"
ls

#出力結果
cd /usr
ls
bin		libexec		sbin		standalone
lib		local		share
cd "$HOME"
ls
Applications	Downloads	Pictures		Desktop		Dropbox		Movies		Documents	Library		Music		Public
xtrace.sh
set -o xtrace
cd /usr
ls
cd "$HOME"
ls

#出力結果
+ cd /usr
+ ls
bin		libexec		sbin		standalone
lib		local		share
+ cd /Users/ユーザー名 #$HOMEが展開されてる
+ ls
Applications	Downloads	Pictures		Desktop		Dropbox		Movies		Documents	Library		Music		Public
一部だけオプションを有効にする
set -o xtrace #オプションを無効にする
cd /usr
ls
set -o xtrace #オプションを無効にする

cd "$HOME"
ls

Vim ショートカット 健忘録

カーソル移動

コマンド 動作
行頭に移動 ctrl + a
行末に移動 ctrl + e
次の単語に移動 w
前の単語に移動 b

スクロール移動

コマンド スクロール方向 スクロール量 覚え方
上方向 半画面分 up
下方向 半画面分 down
上方向 一画面分 back
下方向 一画面分 forward
上方向 一行分
下方向 一行分
gg 上方向 ファイルの冒頭
G 上方向 ファイルの末尾

特定文字へのジャンプ

コマンド 動作
f任意の文字 任意の文字へカーソルを移動
t任意の文字 任意の文字の1つ手前へカーソルを移動
F任意の文字 任意の文字のところへカーソルを移動(右から)
T任意の文字 任意の文字の1つ手前へカーソルを移動(右から)

Javascript オブジェクト

Javascriptのオブジェクトとは、連想配列と機能的には同意義である。
その使用する場面や前後の文脈で呼び方を変えているだけ。

捉え方の違い
連想配列:各要素が一つ一つがメインである。
オブジェクト:そのものがメインであり各要素はオブジェクトを形成する特性や動作を表すための存在に過ぎない。


変数 基本型・参照型

基本型
  • 数値型
  • 文字列型
  • 審議型
  • シンボル型
  • 特殊型
参照型
  • 配列
  • オブジェクト
  • 関数
基本型

値渡し
const定数は値渡しの為、代入するとエラーが出る

var x = 1;
var y = x;
x = 2;
console.log(y)
//出力結果
//1

参照型

参照渡し
C言語でいうポインタアドレスを読み込んでる。
そのため、const宣言した定数も変更できる。
参照型の比較は参照先の値ではなく、アドレスを比較するので注意が必要。
値が同じでもアドレスが異なる為、falseが返される

var data1 = ['cat', 'dog', 'bird'];
var data2 = data1;
data1[1]  = 'lion'; //
console.log(data2)
//出力結果
['cat', 'lion', 'bird']; //要素の値が代入されているアドレスは変わらない

Vim .vimrcの設定方法

設定を何もしないVim

f:id:bellsmarket:20190225213620p:plain

カスタマイズしたVim

f:id:bellsmarket:20190225213617p:plain


$ mkdir -p ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
"----------------------------------------------------------
" Color Scheme Setting
"----------------------------------------------------------
syntax on
colorscheme molokai



"----------------------------------------------------------
" Character code Setting
"----------------------------------------------------------
set encoding=utf-8
scriptencoding utf-8
set fileencoding=utf-8
set fileencodings=ucs-boms,utf-8,euc-jp,cp932
set fileformats=unix,dos,mac
set ambiwidth=double



"----------------------------------------------------------
" Screen display Setting
"----------------------------------------------------------
set number
set laststatus=2
set cmdheight=2
set cursorline
set cursorcolumn
set autoindent
set noexpandtab
set ruler
set list listchars=tab:\|\
set listchars=tab:・・,trail:・,eol:¬,extends:・,precedes:«,nbsp:%



"----------------------------------------------------------
" Search function Setting
"----------------------------------------------------------
set wrapscan
set ignorecase
set smartcase
set incsearch
set hlsearch
set noshowmode
set nowritebackup
set nobackup
set wildmenu
set history=1000



"----------------------------------------------------------
" Tab・Indent Setting
"----------------------------------------------------------
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set expandtab
set softtabstop=2



"----------------------------------------------------------
" Highlight Setting
"----------------------------------------------------------

hi Normal ctermfg=253
hi String ctermfg=208
hi Identifier ctermfg=cyan
hi Function ctermfg=cyan
hi Conditional ctermfg=cyan
hi Repeat ctermfg=cyan
hi Statement ctermfg=41
hi Comment ctermfg=247
hi Keyword ctermfg=red
hi Boolean ctermfg=208
hi Number ctermfg=220
hi CursorLine cterm=bold  ctermbg=239  term=underline
hi LineNr ctermfg=253 ctermbg=25
hi CursorLineNr cterm=bold ctermfg=25 ctermbg=253
hi SpecialKey ctermfg=darkmagenta
hi NonText ctermfg=darkmagenta

"----------------------------------------------------------
" NeoBundle Setting
"----------------------------------------------------------
if 0 | endif

if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  " Required:
  set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

" Required:
call neobundle#begin(expand('~/.vim/bundle/'))


" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'
"----------------------------------------------------------
"NeoBundle Plug-Ins - Start
"----------------------------------------------------------

" StatusLine //You need "set laststatus=2"
NeoBundle 'itchyny/lightline.vim'

NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'scrooloose/nerdtree'
"----------------------------------------------------------
"NeoBundle Plug-Ins - End
"----------------------------------------------------------
call neobundle#end()

filetype plugin indent on

NeoBundleCheck


"----------------------------------------------------------
"neosnippet
"----------------------------------------------------------
"Self made Snippet Directory
let g:neosnippet#snippets_directory='/Users/bellsmarket/.vim/snippets'


" Plugin key-mappings.
" Note: It must be "imap" and "smap".  It uses <Plug> mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)

" SuperTab like snippets behavior.
imap  <expr><TAB>
    \ pumvisible() ? "\<C-n>" :
    \ neosnippet#expandable_or_jumpable() ?
    \ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
 
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
    \ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
 
if has('conceal')
  set conceallevel=2 concealcursor=i
endif

let g:neosnippet#snippets_directory='/Users/bellsmarket/.vim/bundle/neosnippet-snippets/neosnippets,~/.vim/snippets'
"----------------------------------------------------------
"neocomplete
"----------------------------------------------------------
let g:neocomplcache_enable_at_startup = 1

" 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\*'

" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
    \ 'default' : ''
    \ }

" Plugin key-mappings.
inoremap <expr><C-g>     neocomplcache#undo_completion()
inoremap <expr><C-l>     neocomplcache#complete_common_string()

" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
  return neocomplcache#smart_close_popup() . "\<CR>"
endfunction
" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><C-y>  neocomplcache#close_popup()
inoremap <expr><C-e>  neocomplcache#cancel_popup()
inoremap <expr><CR>  pumvisible() ? neocomplcache#close_popup() : "<CR>"

"----------------------------------------------------------
"Key Binding Setting
"----------------------------------------------------------
nnoremap  <C-a> <ESC>^
nnoremap  <C-e> <ESC>$
inoremap  <C-a> <ESC>^
inoremap  <C-e> <ESC>$


inoremap {<Enter> {}<Left><CR><ESC><S-o>
"inoremap ( ()<ESC>i
inoremap (<Enter> ()<Left><CR><ESC><S-o>


inoremap { {}<LEFT>
inoremap [ []<LEFT>
"inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
vnoremap { "zdi^V{<C-R>z}<ESC>
vnoremap [ "zdi^V[<C-R>z]<ESC>
"vnoremap ( "zdi^V(<C-R>z)<ESC>
vnoremap " "zdi^V"<C-R>z^V"<ESC>
vnoremap ' "zdi'<C-R>z'<ESC>

autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
"
"----------------------------------------------------------
"NERDTree"
"----------------------------------------------------------
let g:NERDTreeShowHidden=1
map <C-n> :NERDTreeToggle<CR>

Atom パッケージのバックアップ方法 別環境での設定

Atomをメイン環境と別環境を同じようにするために
パッケージのバックアップが必要になります。

apmコマンドを使ってAtomのパッケージを管理する

#パッケージリストを作成する
apm list --installed --bare > ~/任意のパス


#リストにあるパッケージをインストールする
apm install --packages-file パッケージリストファイルのパス

公式サイトでパッケージを管理する

GithubのアカウントがあればAtomの公式サイトで
インストール済みのパッケージを簡単に管理できます。
atom.io

#インストールしているパッケージをスター付きにする
apm star --installed


#スター付きのパッケージを表示する
apm stars


#スター付きのパッケージをインストールする
apm stars --install