Ubuntu Windows共有フォルダをマウント

sudo apt-get install cifs-utils(ないとエラー)

sudo mount -t cifs -o user=s.okamura,password=1234 //192.168.102.4/Desktop /mnt/LIFEBOOK-A
mountは自動でマウントされない。

sudo umount /mnt/LIFEBOOK-A
アンマウント

自動接続するためには、
/etc/fstab
に記述する。

//192.168.102.4/Desktop /mnt/LIFEBOOK-A cifs username=s.okamura,password=1234 0 0

1列目: デバイス名
2列目: マウントポイント
3列目: ファイルシステム
4列目: マウント時のオプション
5列目: ファイルシステムをdumpするかどうか。0はdump不要
6列目: システム起動時のfsckチェック。0はチェックを行わない。
    ルートファイルシステムでチェックは1。ルートファイルシステム以外でチェックは2。

sudo mount -a
でfstabが正しいかどうか試験できる

 

UbuntuへのRuby、Railsのインストール Railsの使い方基本

必要であればPassengerも
Apache+PassengerでRailsを動かす

インストール

sudo apt-get update
sudo apt-get install ruby
ruby -v
gem -v (rubyのverによってはgemが入らない)
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev
sudo gem install nokogiri
sudo gem install rails
rails -v

プロジェクト作成

以下は普通の流れ。

rails new xxx(ここでxxxフォルダが作成される。初回のみsqlite関連のエラーがでる)
sudo apt-get install sqlite3
sudo apt-get install sqlite3 libsqlite3-dev
sudo gem install sqlite3
sudo apt-get install nodejs
bundle install
rails s -b 0.0.0.0

インストール後プロジェクト作成

ここから自分用

rails new xxx -B -C -T -d sqlite3
B:bundleスキップ
C:ActionCable関連生成しない
T:テスト関連生成しない

もしプロジェクトを別PCからのコピーする場合。コピーしたフォルダで
bundle update
rake db:migrate
を実行する必要がある。

タイムゾーン設定

/config/application.rb

config.time_zone = ‘Tokyo’
と追加。

Gemfileを編集

ここでは
Coffee-rails
を削除し、必要であればrubyのバージョンも指定して以下を追加する。
gem ‘bootstrap’
gem ‘tether-rails’
gem ‘font-awesome-sass’
を追加し、
bundle install
を実行。

bundlerはgemのバージョン管理をするプログラムで、
gemの依存関係が書かれたgemfile.lockを生成する。
手作業で編集するのはgemfileで、gemfile.lockはいじらない。
gemfile.lockのある場所でbundle installとすると、プロジェクトに必要なgemが入る。
bundlerが読んでいるのはlockのほうで、
bundle updateをするとlockを無視し、Gemfileを元にインスト、lockの再生成する。
Gemfileの中
‘=>1.3.0’ の表記は、1.3.0 以上という意味
‘~>4.1.0’ の表記は、4.1.0 以上 4.2以下

generators.rbの編集(rails gコマンドの設定)

config/initializers
の中に
generators.rb
を作成し以下を記述。
Rails.application.config.generators do |g|
 g.helper false
 g.assets false
 g.skip_routes true
 g.test_framework false
end

 cssの設定

/assets/stylesheets/application.css
をscssに変更して、さらに同フォルダにmain.scssを作成。

application.scssには、以下を記述。
@import ‘bootstrap’;
@import ‘font-awesome-sprockets’;
@import ‘font-awesome’;
@import ‘*’;

Javascriptの設定

/assets/javascript/application.js
の中に以下を追記
//= require tether
//= require bootstrap-sprockets

モデルの作成

rails g model member
(単数形)
ここでマイグレーションクスリプトができる。

テーブル名: members
クラス定義: Member
クラスファイル: member.rb
テスト: member_test.rb

config/routes.rb

resources :members
と記述する。

マイグレーションスクリプト設定

migrateスクリプトはテーブルを定義する。
/db/migrate/xxx

参考
http://railsdoc.com/migration

データベース関連

rails new のときにデータベース接続用のymlが自動で作成される。
config/database.yml
が設定ファイル。

データベース作成・削除

rake db:create
テスト、開発用ができる。

rake db:create RAILS_ENV=production
本番用だけできる。

rake db:dropb
テスト、開発を削除できる。

rake db:dropb RAILS_ENV=production
本番用を削除できる。

テーブルの作成

rake db:migrate
テスト、開発用

rake db:migrate RAILS_ENV=production
本番用

migrateコマンドを実施するとschema.rbができる。

テーブルを作成後変更の場合、
rails g migration クラス名
でできたファイルにadd_column等を書いて再度db:migrateでOK

テーブルのバージョンを戻す場合
rake db:migrate VERSION=2015xxxx(数字の部分だけ)
rake db:rollbak(ひとつ前のバージョン)

現在のバージョン
rake db:migrate:status

テーブルの破棄(マイグレーションの書き直し)

rake db:migrate:reset

rake db:drop
rake db:create
rake db:migrate
の3つと同じ効果がある。

ちなみに、
rake db:reset
は、
rake db:drop
rake db:create
rake db:schema:load
rake db:seed
と同じ効果がある。

rake db:setup
は、
rake db:create
rake db:schema:load
rake db:seed
と同じ効果がある。

シードデータ

アプリを作ったときにdb/seeds.rbができる。
中にスクリプトを書いて以下を実行。

i  = model_class.new
i.col_name = “xxx”
i.save!
というのが基本

rake db:seed
テストと開発

rake db:seed RAILS_ENV=production
本番

でデータが挿入される。

ルーティング

root “control_name#action_name”
はルートアクセス用。これは
:root
でこのパスが取得できるようになる。

基本は
request_type path => “control_name#action_name”

as: を付けることでシンボルで指定できる。

例1

routes.rb: 
get “bad_request/:a/:b/:c” => “top#bad_request”

top_controller.rb:
  def bad_request
  render :text => “hello world” + ” ” + params[:b] + ” ” + params[:a] + ” ” + params[:c]
end

以下のアドレスでアクセスすると
http://192.168.102.15/app1/bad_request/taro/Mr/123

ブラウザには以下のように表示される。
hello world Mr taro 123

get “lesson/:action(/:name)” => “lesson”
のようにパラメータに()を付けると省略可能。
:actionに入る名称がコントローラで、そのまま呼ばれる。

コントローラの作成

rails g controller members
リソース用のコントロール作成
(CRUDのような集合に対する操作をするのは複数形、それ以外は単数形)

クラス定義: MembersController
クラスファイル: members_controller.rb
テンプレートフォルダ: app/views/members/アクション名
テスト: members_controller_test.rb

コントローラでは以下を定義していく。
index /members
new /members/123
create /members/new
show /members/123/edit
edit /members – POST
update /members/123 – PATCH
destroy /members/123 – DELETE

rails gの変更をしていなければ、コントローラ作成と同時に5個のファイルが生成される。
controllers/top_controller.rb
views/top/index.html.erb
helpers/top_helper.rb
assets/javascript/top.js
assets/stylesheets/top.scss

変更したい場合は、generators.rbを修正する。

ビューの作成

/views/controller_name/method_name.html.erb
が自動で呼ばれる。

アクションの定義がなくてもビューは呼び出される。

テンプレートの作成

全体を囲うテンプレートは、
views/layouts
に入っている。
application.html.erb
ビューが入るのは
<% yield %>

ただし、
views/layouts/controller_name.html.erb
が存在する場合、
application.html.erbより優先して、
上記のファイルが読まれる。

アクション内で
render layout: false
とすると、テンプレートが読み込まれない。
ビューは読まれる。
アクション内で、
render :text => “xxx”
とすると、xxxだけでビューもテンプレートも呼ばれない。

ヘルパーメソッド

app/helper
の中で定義する。

ビューの中で自由に使えるメソッド

バリデーション

モデルの中に書く。以下のような感じ
validates :number,presence: true, length:{ オプション }

saveが呼ばれたタイミングで登録しようとした値が正しいかチェック。

モデルの更新方法

モデルのクラスメソッド

ファインダーメソッド
find: 主キー(id)を渡す
find_by: カラム:値のハッシュを渡す

クエリメソッド
where: カラム:値のハッシュを渡す
find_by_sql: SQLを渡す。

findなどレコードで取得するのがファインダーメソッドで、モデルに直接使う(クラスメソッド)
レコードはモデルオブジェクトとなる。

whereなどのクエリメソッドだとリレーションオブジェクトが返ってくる。検索条件を保持している。
リレーションオブジェクトにはファインダーメソッドが使える。

開発時のモード

development: 開発
test: 自動テスト用
production: 本番

railsやrakeコマンドは実行時に
RAILS_ENV
の中の環境変数によって動作が変わってくる。

コードの中でも
Rails.env.development?

Rails.env.production?
などでtrue/falseで確認できる。

 

Sambaのインストール

sudo apt-get install samba

必要なフォルダ作成

mkdir xxx
chmod ugo+rwx /xxx
フルアクセスにする。

設定ファイル

sudo vim /etc/samba/smb.conf

[global]
の中に以下追記。

netbios name = xxx (現在は使えない)
unix charset=UTF-8
dos charset=CP932

security = user(デフォルト)

ゲストアカウントの許可について、
security=shareはverによってはダメなので、
代替として「security=user」+「map to guest=Bad User」の組み合わせ

securityの選択肢、
security = share パスワードだけ(Samba 3.6.0以降deprecated)
security = domain ドメインコントローラ
security = server ほかのSMBサーバにより
security = ads AD(アクティブディレクトリ)ドメインのドメインコントローラ
などある。

guest account = nobody
ゲストをどのLinuxアカウントとして扱うか。

map to guest = bad user (もともと記述済み)
不正なパスワードは拒否だが、ユーザが存在しない場合ゲストとして扱う。

map to guest
の選択肢、
Never = 不正なパスワードによるユーザーのログイン要求を拒否。
Bad User = 指定されたユーザーが存在しなかった場合はguest accountで指定したユーザーとして扱う。
Bad Password = 不正なパスワードによるユーザーのログイン要求を guest accountで指定したユーザーとして扱う。

以下を最終行に追加。

[share]
[]は共有名となる。
path = /home/xxx
writable = yes
guest ok = yes (public = yesのエイリアス)
force create mode = 0777 (作成したファイルに付加されるアクセス権)
force directory mode = 0777 (作成したディレクトリに付加されるアクセス権)
share modes = yes (他人が開いているかどうかチェック。verによっては使えない)
vfs objects = recycle (ゴミ箱機能)

ちょっと設定が違うタイプ。

[private]
path = /home/xxx
writable = yes
guest ok = yes
force create mode = 0777
force directory mode = 0777
share modes = yes
vfs objects = recycle
browseable = no

・アクセスについて

sambaのアカウントとlinuxのアカウントは別管理される。sambaでフォルダごとのユーザー管理が手間の場合、browseable = noとすると見えなくはなる。

Winから手動アクセスがないのなら、フォルダのアクセス管理で対応するのもひとつ。
chmod ugo+rwx /xxx

・コンピュータ名について

現在はSMBv1が停止しているので、netbios nameでは表示できない。WSDをスクリプトで対応する方法があるらしい。

現在、SMBのどのバージョンでコネクションしているか
PowerShell>get-smbconnection
でわかる。

ちなみに、現在のPCに接続してきているセッションは、
PowerShell>get-smbsession
現在のPCが共有化しているフォルダは、
PowerShell>get-smbshare
でわかる。

起動

testparm
で設定をチェックできる。

sudo /etc/init.d/smbd start
sudo /etc/init.d/nmbd start

Win7では接続できてWin10で接続できないのでWin10で色々やってみた。

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi

を走らせてSMB1とした。

処理後、管理ツール、サービス、Workstation、依存関係から確認できる。
が、接続できない。空のパスワードがダメかと思ったがHOMEのためローカルセキュリティポリシーが使用できないため、「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\limitblankpassworduse」
の設定値を0にしてみた。が、接続できない。

そういえばsambaとは関係なく以前も同じような症状があったと思い出し、資格情報マネージャ、Windows資格情報に、ユーザー名:guest、パスワード:空白で追加してみたら繋がった。

設定

comment
共有フォルダのコメント設定。
path
共有したいディレクトリのパス名を設定。
public
パスワードなしでのアクセスを認める。securityをshare以外に設定したときは意味を持たない。
guest ok
ゲストユーザでの接続を許可。
guest only
ゲストユーザのみ接続を許可。
guest account
ゲストとして接続するときのユーザ名を設定。
read only
共有フォルダへの書き込みを許可しない。
writable
共有フォルダに書き込めるように設定。
create mask
共有フォルダに作成されるファイルのパーミッションを3桁で指定。
directory mask
共有フォルダに作成されるディレクトリのパーミッションを3桁で指定。
force user
接続したときのユーザ名を無視して、指定したユーザとして操作。ファイルを作成したときは指定したユーザの所有になる。
browseable
共有フォルダの一覧に表示させる。noを指定すると隠し共有になる。
valid users
指定したユーザだけが利用できる。
invalid users
指定したユーザは利用できない。
write list
指定したユーザだけに書き込みを許可。
hosts allow
指定したホスト(IPアドレスも可)だけに利用を許可する。
hosts deny
指定したホスト(IPアドレスも可)からの利用を拒否する。

CentOSの場合(抜粋)

インストール
yum install samba

インストール確認
systemctl status smb nmb

自動起動
systemctl enable smb nmb

自動起動確認
systemctl is-enabled smb nmb

ファイアーウォール確認
firewall-cmd –list-all

ファイアーウォール追加
firewall-cmd –add-service=samba –permanent

ファイアーウォール再起動
firewall-cmd –reload

設定ファイル
/etc/samba/smb.conf

ファイル名を指定して実行

Win10の場合、
Win+S
からでもほぼ同じ動作ができる。また、
Ctrl+Shift+Enter
で管理者権限で起動できる。

Win10の設定は、
ms-settings:
という形式となる。

***

・バージョン情報
ms-settings:about

・Windows Update
ms-settings:windowsupdate

・Microsoft Store
ms-windows-store://home

・Bluetoothとその他のデバイス
ms-settings:bluetooth

・すべてのアプリ
shell:appsfolder

ストアアプリのショートカットを作成する場合ここから

・ユーザーアカウント

Windows ユーザー関連

・デフラグ
dfrgui

・Windowsの機能
optionalfeatures

・サービス
services.msc

・MMCスナップイン
mmc

ファイル>スナップインの追加と削除
ファイル>名前を付けて保存

・プログラムの追加と削除
appwiz.cpl

・管理ツール
contorol admintools

・コンピューターの管理
compmgmt.msc

・システム構成ユーティリティ
msconfig

・システムのプロパティ (環境変数)
sysdm.cpl

・タスクスケジューラ
taskschd.msc

・入力設定
control input.dll
Ctrl + F10

Google日本語入力の場合

・共有フォルダ
fsmgmt.msc

・インターネットオプション
inetcpl.cpl

・デバイスマネージャ
devmgmt.msc

・イベントビューワ
eventvwr

・WIndows Update(Win7)
wuapp

・ファイアーウォール
firewall.cpl
wf.msc

・フォルダオプション
control folders

・電源オプション
powercfg.cpl

・ディスククリーンアップ
cleanmgr

・システム復元
rstrui
sysdm.cpl>システムの保護>システムの復元

・バックアップと復元(Windows 7)
sdclt

・タブレットモード
ms-settings:tabletmode

・資格情報
control keymgr.dll
rundll32.exe keymgr.dll,KRShowKeyMgr

・拡大鏡
magnify

・日付と時刻
timedate.cpl

・プリンタ
shell:PrintersFolder
control printers
rundll32.exe printui.dll,PrintUIEntry

Vim コマンド

操作基本

u, Ctrl+R
アンドゥ、リドゥ

gg
画面トップ

G
画面末尾

w, e, b
単語単位での移動

Ctrl+V
矩形選択

Shift+j
行結合

>>,  <<
インデント

Ctrl+u, Ctrl+d, Ctrl+f, Ctrl+B
スクロール

*
カーソル下の文字を検索

: を入力後、Ctrl+R, Ctrl+W
コマンド下の文字をvimgrep

split, vsplit
:sp xxx名, :vsp xxx名
画面の分割

:e.
ファイラで開く

Ctrl-W, W
分割画面の移動

Ctrl+U, Ctrl+D
スクロール

Ctrl+i
進む

Ctrl+o
戻る

言語設定

e ++enc=utf-8
指定文字コードで開きなおす

set fenc=shift_jis
指定文字コードに変更

set encoding=utf-8
Vim自体の言語設定

:verbose highlight cursorline
設定を見れる

置き換え

:%s/old/new/gc

‘g’ を加えると行の先頭だけではなく行の中全て
‘c’ を加えると置換の度に確認を求める

sが置き換えの意味、%が現在開いているファイルの意味。

ただし、通常の正規表現とは違うエスケープが必要らしい。
以下は、#から始まる行と、改行だけの行を削除。
:%s/^#.*\n\|^\n//g

Vimgrep

正規表現のパターン

:vim {pattern} app/**
:vim {pattern} **/*
が基本の書き方。

パスの指定は、先ず検索したいパスを指定して、それに、
*
**
*.txt
**/*.txt
の組み合わせの何れかがくっつくイメージ。

| cw で渡して、 :copen で開く。

Ctrl-w, w
移動

:q
閉じる。

ちなみに通常のgrep基本

grep -rn xxx *
等記述する

G
通常正規表現

E
拡張正規表現

P
Perl互換正規表現

r
階層下のファイル内を対象

n
行番号

VBA SQL実験用①(Access(mdb))

SQLの挙動を調べるのにエクセルから手軽にSQLを発行

C# DirectShow

DirectShow導入

以下のコマンドを走らせると、QuartzTypeLib.dllができる。
“C:\Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\TlbImp.exe” “C:\windows\System32\quartz.dll”
できたら、参照設定に直接追加する。

ちなみに、DirectShowでmp4を再生する場合、
ffdshow
をインストールする。
DirectShowフィルタのみチェックでOK。

Haali Media Splitter
をインストールする。
Disable MPC internal Matroska splitter
のチェックを外す。

GraphEdit

DirectShowを確認できるソフトだが、Microsoft SDKs\WIndows\V7.1\Bin\
には見つからなかった。最終的にGraphStudioNextというのが近いらしく、これを利用することに。

非公式だが、以下からだとgraph editが行けるらしい。
http://www.digital-digest.com/dvd/downloads/showsoftware_graphedit_141.html

とりあえず動画の再生

Access メモ

DBエンジン(JET)

JETはOS32bit専用(JET自体32bitのみ)なのでOS64bitで動かす場合、
32bitプログラムまたは32bitOfficeで動かす。(WOW64で動かす)
また、JETはaccdbを使えない。
(Accessから直接mdb/accdbを操作する場合は関係なく、64bitAccessからmdbを開くことも可能)

以前はOS標準で搭載されていたため、追加で再頒布可能コンポーネントをインストールする必要がなく便利だったが、現在は非推奨。

・OS64bit/64bitプログラム
利用できない。
・OS64bit/32bitプログラム(32bitOffice)
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xxx.mdb”
は利用できる。
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xxx.accdb”
は利用できない。

DBエンジン(ACE)

ACEはOS32/64bit(ACE自体が32/64bit存在する)でも使える。
mdb/accdbが使える。

・OS32bit/32bitプログラム(32bitOffice)
・OS64bit/32bitプログラム(32bitOffice)
・OS64bit/64bitプログラム(64bitOffice)
“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=xxx.mdb”
“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=xxx.accdb”
すべて利用できる。

パスワード付きのmd/accdbを開く場合、
“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=xxx.mdb/accdb;” & “Jet OLEDB:Database Password=xxx”
OS64bit/32bit、OS64bit/64bitプログラムどちらでも利用できる。

OS標準で入らないので、Accessや再頒布可能コンポーネントなどが必要。
※32bitのOfficeが入っている場合、AccessDatabaseEngine_x64.exe /quiet

DBエンジン確認

にて確認できる。32bitを確認したい場合、
%systemroot%\syswow64\windowspowershell\v1.0\powershell.exe
のPowerShellを起動する。

ADOとDAOの違い

DAOはJETエンジンを対象に開発され、Access専用。
ADOはAccess以外も対象。OLEDBを利用する。

VBA(ADO)での利用

取得方法の種類

OLEDBドライバがない

ExcelからAccess接続したいなと思ったら、インストール可能な ISAM ドライバが見つかりませんでしたと言われた。

どうやら以下を読むと、2016/32bit(サブスクリプション)がクイック形式で入っていて、ドライバが入らないということらしい。

https://blogs.technet.microsoft.com/officesupportjp/2016/09/06/not_available_access_odbc_oledb_outside_c2r_applications/

https://blogs.technet.microsoft.com/officesupportjp/2016/09/08/howto_c2r_or_msi/

MySQLへのエクスポート

DSNを作っておくと自動でエクスポートできるとのこと。

http://dev.mysql.com/downloads/connector/odbc/
からmsiファイルでインストール。

コントロールパネル>管理ツール>ODBCデータソース>ユーザー DSN>追加
Accessを起動してテーブルデザインをエクスポート先のMySQLと合わせる。
テーブルを選択し、
右クリック>エクスポート>ODBC データソース
(すでに存在しているテーブルに上書きはできない)

ストアドプロシージャ

SQLServer

・定義

create procedure ストアドプロシージャ名
@パラメータ名 型
as
begin
処理
end

・変数

宣言
declare @変数名 型

データ型
varchar:文字列
int:数値
decimal:小数
date:日付

代入
set 変数 = 値

・カーソル
1行ずつループして処理する方法。

カーソルの宣言
declare カーソル名 cursor for (select 文)

カーソルを開く
open カーソル名

データの取得
fetch next from カーソル名 into 変数リスト

ループ処理の実行

while 条件式
begin
処理内容 where current of カーソル名
end

※ループの定番
while @@fetch_status = 0

カーソルを閉じる
close カーソル名

カーソルの開放
deallocate カーソル名

MySQL

CREATE ROUTINEの権限が必要。

・基本
create procedure sample01()
select now();
mysql>call sample01;

・削除
mysql>drop procedure sample01;

・一覧
show procedure status;

・中身
show create procedure sample01;

・引数をとる
create procedure sample01(in a int, in b int)
select a + b;
mysql>call sample01(10,5);

・返り値
create procedure sample01(out x int)
set x = 3;
mysql> call sample01(@var);
mysql> select @var;

・複数のクエリを発行
delimiter //
create procedure sample01()
begin
select 1;
select 2;
end//
delimiter ;
mysql> call sample01;

・IF文
delimiter //
create procedure sample02(in x int)
begin
if x = 1 then
select “inp 1”;
elseif x = 2 then
select “int 2”;
else
select “inp else”;
end if
end //
delimiter ;
call sample02(1);

・select~into文で変数へ
delimiter //
create procedure p(in a int, out sum int)
begin
select a * 2 into @tmp;
set sum = @tmp;
end //
delimiter ;
call p (4,@sum);
select @sum;

・カーソル単位で処理する

declare xxx cursorという形で宣言する。
for select でselectの結果を定義する。
fetch cursor for カラムで代入。
処理前にopenして最後にcloseする。

 

Windows ロック画面変更

ロック画面の変更

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI \ Background

右ペインの何もないところを右クリックし、メニューから<新規>→<DWORD値>と選択して、DWORD値「OEMBackground」を作成します。

DWORD値「OEMBackground」をダブルクリックします。

値のデータを「1」に変更

%windir%\system32\oobe」が開いたら、「info」というフォルダを作成。その中に、「backgrounds」フォルダを作成します。

「backgroundDefault.jpg」同フォルダ内にコピーします。

250KB以下にしないとダメ