Hatena::ブログ(Diary)

マイノート

2018-04-22

鉄道から見える日本

探究この世界 2009年6-7月 (NHK知る楽/月)

探究この世界 2009年6-7月 (NHK知る楽/月)

第一回 鉄道紀行文学の巨人たち

 手段から目的へ

 強い意志を飄々と語る−−内田

 むっとする百

 汽車には友と乗る−−阿川弘之

 失敗を楽しむ−−宮脇俊三

第二回 沿線が生んだ思想

 京成線の風景に戦前を見る−−永井荷風

 横須賀線、屈辱の風景−−高見順

 鉄道から見たもの−−坂口安吾

 風がちがうのよ−−須賀敦子中井久夫

第三回 鉄道に乗る天皇

 鉄道による「視覚的支配」

 御料車運転制禦表示器

。。。

2018-04-14

河村瑞賢

https://kotobank.jp/word/%e6%b2%b3%e6%9d%91%e7%91%9e%e8%b3%a2-48362


河村瑞賢 (人物叢書)

河村瑞賢 (人物叢書)

河村瑞賢 (人物叢書)

目次

はしがき

1.家系とおいたち

2.奥羽海運の刷新

3.畿内の治水

4.越後における瑞賢の事蹟

5.晩年 附瑞賢の子孫

6.瑞賢と白石

7.余録

8.史料の解説

  略年譜


奥羽海運記

http://base1.nijl.ac.jp/iview/Frame.jsp?DB_ID=G0003917KTM&C_CODE=0204-003302

テスラは「生産地獄」から、ようやく抜け出したかもしれない

https://wired.jp/2018/04/08/tesla-model-3-production/

当の本人はというと、再び工場で寝泊まりしているらしい

自動車ビジネスはつらいよな」

2018-04-07

2018-04-02

高山の守備

https://www.daily.co.jp/tigers/2018/04/02/0011125023.shtml

中村外野守備走塁コーチは「(守備は)良くなってきている。追い方も良くなってきた。これから練習していかないと」と、高山の成長を認めながらも、さらなるレベルアップを求めた。

割とまっすぐに落下点に行ったと思うのでよかったよ。よくなってるよ!

nodeでsql serverに接続する

(mssql.query.js)

#!/usr/bin/env node

const sql = require('mssql');
var config = {
  user: 'sa',
  password: '******',
  server: '******', // You can use 'localhost\\instance' to connect to named instance
  database: 'AdventureWorks2017',
  stream: true, // You can enable streaming globally

  options: {
//    encrypt: true // Use this if you're on Windows Azure
//    encrypt: false// Use this if you're on Windows Azure
  }
}

sql.connect(config, function(err) {

  const request = new sql.Request();
  request.stream = true
  request.query('select * from adventureworks2017.HumanResources.Department')

  request.on('row', row => {
    console.log(row);
  });

  request.on('done', result => {
    process.exit();
  });

});

実行してみる

$ ./mssql.query.js 
{ DepartmentID: 1,
  Name: 'Engineering',
  GroupName: 'Research and Development',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 2,
  Name: 'Tool Design',
  GroupName: 'Research and Development',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 3,
  Name: 'Sales',
  GroupName: 'Sales and Marketing',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 4,
  Name: 'Marketing',
  GroupName: 'Sales and Marketing',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 5,
  Name: 'Purchasing',
  GroupName: 'Inventory Management',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 6,
  Name: 'Research and Development',
  GroupName: 'Research and Development',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 7,
  Name: 'Production',
  GroupName: 'Manufacturing',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 8,
  Name: 'Production Control',
  GroupName: 'Manufacturing',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 9,
  Name: 'Human Resources',
  GroupName: 'Executive General and Administration',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 10,
  Name: 'Finance',
  GroupName: 'Executive General and Administration',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 11,
  Name: 'Information Services',
  GroupName: 'Executive General and Administration',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 12,
  Name: 'Document Control',
  GroupName: 'Quality Assurance',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 13,
  Name: 'Quality Assurance',
  GroupName: 'Quality Assurance',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 14,
  Name: 'Facilities and Maintenance',
  GroupName: 'Executive General and Administration',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 15,
  Name: 'Shipping and Receiving',
  GroupName: 'Inventory Management',
  ModifiedDate: 2008-04-30T00:00:00.000Z }
{ DepartmentID: 16,
  Name: 'Executive',
  GroupName: 'Executive General and Administration',
  ModifiedDate: 2008-04-30T00:00:00.000Z }

参考:

https://www.npmjs.com/package/mssql

2018-03-25

「パックマン コネクト&プレイ」

レバー(?)が壊れてしまって、カーソルが左に移動し続けるようになってしまった。

今のは2台目だけど、前のも同じ壊れ方。。

f:id:tigerii:20180324220434j:image:w400


(内部)

f:id:tigerii:20180324220545j:image:w400



レバーを上下左右に倒すと、指の辺りにあるスイッチのようなものが押されて、カーソルが動く仕組みになっているようだ。左カーソルのスイッチを見ると、この部品が壊れててスイッチが押されている状態になっていた。

f:id:tigerii:20180324220833j:image:w400

前の1台目の正常なパーツを取り外し(ハンダを溶かして吸引)、2台目の壊れたところに取り付け、ちゃんと動くようになった!



<参考>

壊れた部品(ちょっとへちょってる)

f:id:tigerii:20180324221033j:image:w400

はんだ吸い取り器

f:id:tigerii:20180324221119j:image:w400

2018-03-21

egrep, fgrep: go back to shell scripts(2014-03-23)

http://git.savannah.gnu.org/cgit/grep.git/commit/?id=b639643840ef506594b6c46e5b24d9980a33e78e


CentOS Linux release 7.4.1708 (Core)

$ more /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

egrep

$ more /usr/bin/egrep 
#!/bin/sh
grep=grep
unset _EXECOPT _GREPOPT
case $0 in
  */*)
    dir=${0%/*}
    if test -x "$dir/grep"; then
      PATH=$dir:$PATH
      grep=grep
    fi;;
esac
if [ "$GREP_LEGACY_EGREP_FGREP_PS" = 1 ]; then
  _EXECOPT="-a egrep"
else
  _GREPOPT=-E
fi
exec $_EXECOPT $grep $_GREPOPT "$@"

fgrep

$ more /usr/bin/fgrep
#!/bin/sh
grep=grep
unset _EXECOPT _GREPOPT
case $0 in
  */*)
    dir=${0%/*}
    if test -x "$dir/grep"; then
      PATH=$dir:$PATH
      grep=grep
    fi;;
esac
if [ "$GREP_LEGACY_EGREP_FGREP_PS" = 1 ]; then
  _EXECOPT="-a fgrep"
else
  _GREPOPT=-F
fi
exec $_EXECOPT $grep $_GREPOPT "$@"

Ubuntu 16.04.3 LTS

@DESKTOP-J46UVNU:/mnt/c/Windows/System32$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial

egrep

@DESKTOP-J46UVNU:/mnt/c/Windows/System32$ more /bin/egrep
#!/bin/sh
exec grep -E "$@"

fgrep

@DESKTOP-J46UVNU:/mnt/c/Windows/System32$ more /bin/fgrep
#!/bin/sh
exec grep -F "$@"

2018-03-18

Javaのコメント行を削除する

Javaのコメント

https://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.7

flexを使う

flexインストールする

$ sudo yum install flex
$ sudo yum install flex-devel

(delete_java_comments.l)

%x COMMENT
%%
"/*"          { BEGIN(COMMENT); }
<COMMENT>"*/" { BEGIN(INITIAL); }
<COMMENT>.|\n
"//".*\n      { printf("\n"); }
.|\n          { printf("%s",yytext); }
%%
main(int argc, char **argv){
  yylex();
}

$ flex delete_java_comments.l 
$ cc lex.yy.c -lfl

(sample.java)

 /**
  * This is a block comment in Java.
  * The setToolTipText method registers the text to display in a tool tip.
  * The text is displayed when the cursor lingers over the component.
  *
  * @param text  The string to be displayed.  If 'text' is null, 
  *              the tool tip is turned off for this component.
  */
 public void setToolTipText(String text) {
    //This is an inline comment in Java. TODO: Write code for this method.
 }

https://en.wikipedia.org/wiki/Comment_%28computer_programming%29


実行してみる

$ ./a.out < sample.java 
 
 public void setToolTipText(String text) {
    
 }
$ ./a.out
/* aaa */ aaa bbb // ccc
 aaa bbb 
/* aaa */ ccc // ddd
 ccc 
aaa bbb /* ccc */ aaa /* // bbb */
aaa bbb  aaa 
aaa // bbb /* ccc */
aaa 

参照したURL

https://books.google.co.jp/books?id=3Sr1V5J9_qMC&pg=PA40&lpg=PA40&dq=flex+bison+COMMENT&source=bl&ots=WGGrg9lLKP&sig=JosppcSvfFuf3UYhIX4gwqD7zIs&hl=ja&sa=X&ved=0ahUKEwjaj7if5vXZAhWKWbwKHQ63AJgQ6AEIWDAE#v=onepage&q=flex%20bison%20COMMENT&f=false

https://books.google.co.jp/books?id=3Sr1V5J9_qMC&pg=PA31&lpg=PA31&dq=flex+start+state+newline&source=bl&ots=WGGrg9oILN&sig=teAeeXLlk6MDIljpZ0cqtcf0PBI&hl=ja&sa=X&ved=0ahUKEwi55vOq8PXZAhVFxrwKHdpVBYwQ6AEIUzAD#v=onepage&q=flex%20start%20state%20newline&f=false

Since a dot doesn't match a newline, ...

BEGIN(INITIAL) in flex parser

https://stackoverflow.com/questions/22527608/begininitial-in-flex-parser


$ man flex
..
パターン
       入力ファイルのパターンは拡張した正規表現を使って記述します。
       以下に示します:

           x          文字 'x' にマッチ。
           .          改行を除く全ての文字(バイト)。
..

PLY (Python Lex-Yacc)を使う

http://www.dabeaz.com/ply/ply.html


(delete_java_comments.py)

#!/usr/bin/env python
import sys
import ply.lex as lex

tokens = (
  'ANY',
)

def t_comment(t):
    r'(/\*(.|\n)*?\*/)|(//.*)'
    pass

def t_ANY(t):
    r'.|\n'
    sys.stdout.write("%s" % t.value[0])

def t_error(t):
    print("Illegal character '%s'" % t.value[0]),
    t.lexer.skip(1)

lexer = lex.lex()

data = sys.stdin.read()

lexer.input(data)

while True:
    tok = lexer.token()
    if not tok:
        break
    print(tok)

実行してみる

$ more sample.java 
 /**
  * This is a block comment in Java.
  * The setToolTipText method registers the text to display in a tool tip.
  * The text is displayed when the cursor lingers over the component.
  *
  * @param text  The string to be displayed.  If 'text' is null, 
  *              the tool tip is turned off for this component.
  */
 public void setToolTipText(String text) {
    //This is an inline comment in Java. TODO: Write code for this method.
 }
$ ./delete_java_comments.py < sample.java 
 
 public void setToolTipText(String text) {
    
 }
$ more delete_java_comments_test.txt 
/* aaa */ aaa bbb // ccc
/* aaa */ ccc // ddd
aaa bbb /* ccc */ aaa /* // bbb */
aaa // bbb /* ccc */
$ ./delete_java_comments.py < delete_java_comments_test.txt 
 aaa bbb 
 ccc 
aaa bbb  aaa 
aaa 

↑たまたまうまく動作したと思われる。


def t_comment(t)とdef t_ANY(t)の順番を逆にすると動かんようになった。。

本当は、ちゃんとstart conditionの定義をしないといけないんだろうなぁ。。

(delete_java_comments_fail.py)

#!/usr/bin/env python
import sys
import ply.lex as lex

tokens = (
  'ANY',
)

def t_ANY(t):
    r'.|\n'
    sys.stdout.write("%s" % t.value[0])

def t_comment(t):
    r'(/\*(.|\n)*?\*/)|(//.*)'
    pass

#def t_ANY(t):
#    r'.|\n'
#    sys.stdout.write("%s" % t.value[0])

def t_error(t):
    print("Illegal character '%s'" % t.value[0]),
    t.lexer.skip(1)

lexer = lex.lex()

data = sys.stdin.read()

lexer.input(data)

while True:
    tok = lexer.token()
    if not tok:
        break
    print(tok)

実行してみる

$ ./delete_java_comments_fail.py < sample.java 
 /**
  * This is a block comment in Java.
  * The setToolTipText method registers the text to display in a tool tip.
  * The text is displayed when the cursor lingers over the component.
  *
  * @param text  The string to be displayed.  If 'text' is null, 
  *              the tool tip is turned off for this component.
  */
 public void setToolTipText(String text) {
    //This is an inline comment in Java. TODO: Write code for this method.
 }

2018-03-12

2018-03-05

2018-02-25

openpyxlでexcelの結合セルの情報を表示する

openpyxlのインストール

$ sudo pip install openpyxl

https://openpyxl.readthedocs.io/en/stable/index.html


excelファイルを作成してみる

$ python
Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> 
>>> # grab the active worksheet
... ws = wb.active
>>> 
>>> # Data can be assigned directly to cells
... ws['A1'] = 42
>>> 
>>> # Rows can also be appended
... ws.append([1, 2, 3])
>>> 
>>> # Python types will automatically be converted
... import datetime
>>> ws['A2'] = datetime.datetime.now()
>>> 
>>> # Save the file
... wb.save("sample.xlsx")
>>> 

作成したファイル

f:id:tigerii:20180225163218p:image


A1:A2, B2:C2を連結して保存する

f:id:tigerii:20180225170552p:image


>>> from openpyxl import load_workbook
>>> wb = load_workbook(filename = 'sample.xlsx')
>>> ws = wb.active
>>> ws.merged_cells
<MultiCellRange [A1:A2 B2:C2]>
>>> ws.merged_cells.ranges
[<CellRange A1:A2>, <CellRange B2:C2>]
>>> 

2018-02-18

2018-02-12

南総里見八犬伝

https://tenki.jp/suppl/kous4/2017/11/06/27001.html

現代語訳 南総里見八犬伝 上 (河出文庫)

現代語訳 南総里見八犬伝 上 (河出文庫)

現代語訳 南総里見八犬伝 下 (河出文庫)

現代語訳 南総里見八犬伝 下 (河出文庫)

wikipedia:南総里見八犬伝

白井喬二訳 『現代語訳 南総里見八犬伝』(河出文庫(上下)、2003年)ISBN 4002002705

日本古典文庫19 南総里見八犬伝』(河出書房新社、1976年、新装版1988年)の文庫化。初刊は1956年

抄訳だが前半部はほぼ全訳、後半に行くほど省略が進み、終わりの方はほとんど筋書きに近い。

2018-02-08

2018-01-29

2018-01-25