VSCodeのカーソル移動で先頭の単語の右側に行ってしまう設定を変更する

サクラエディタ秀丸などのテキストエディタでは、インデントされたスペースやタブがある状態では行頭からctrl+→でカーソル移動した際に最初の単語の左側(青矢印)で止まるが、VSCodeのデフォルトでは右側(赤矢印)で止まって非常に使いにくい。
f:id:ultra-genma:20210118232717p:plain

調べてもなかなか同じような情報が出てこなく、editor.wordSeparators設定に半角スペースが入っていないことが原因かと思いいろいろ試したが、キーボードショートカットの設定で変更できた。

設定>キーボードショートカットから以下の空のキーバインドに設定
cursorWordStartRight : Ctrl + RightArrow
cursorWordStartRightSelect : Ctrl + Shift + RightArrow

f:id:ultra-genma:20210118232943p:plain

VSCodeを再起動することなく設定が反映された

参考: github.com

iPadで完全ワイヤレスプログラミング

f:id:ultra-genma:20201117200631j:plain

完全にワイヤレスでプログラミングできるような机をつくった。iPadBluetoothキーボード、マウスでほぼパソコンと同じ使い方が出来るのでとても便利になった。
設定でCapsキーをCommandキーに変更出来るので簡単に使いやすくすることが出来た。またlogicoolのキーボードとマウスはボタン1つでデバイスを切り替えられるので、Androidスマホで触れることなくゲームしたりTwitterすることも出来るので非常におすすめ。

iPad Pro

・キーボード logicool K380マルチデバイスBLUETOOTHキーボード

・静音マウス logicool M590 MULTI-DEVICE SILENT

・E-WIN スタンディングデスク 昇降式テーブル

・ZenCT タブレットアーム 12.9インチ対応

[プログラミング環境] ・Raspberry Pi 3B+
webサーバー

・Panic Code Editor
開発用エディターアプリ

・Terminus
SSH接続アプリ

Windows10でソフトの日本語文字化けを直す

Windows10英語版をインストールしたパソコン
日本語言語パックインストール済み
表示言語日本語設定済み
でインストールしたソフトの文字がバグっていたので言語設定を見直して直した。

f:id:ultra-genma:20200126235609p:plain 設定の言語画面の右の「管理用の言語の設定」を押す。

f:id:ultra-genma:20200126235631p:plain 管理タブの「システムロケールの変更」を押す。

f:id:ultra-genma:20200126235857p:plain 現在のシステムロケールを日本語にする。

NASにsambaをインストール

LinkStationにdebian入れたサーバーにsambaをインストールした。 apt -y install samba

/dataを自動マウントするようにする

sudo vi /etc/fstab 最後の行に追加 のところ

/data is on /dev/sda4$$

UUID=XXXXX-XXXX-XXXX-XXXXXX /data ext4 errors=remount-ro 0 2

sambaの設定

行番号は目安 viは:set numberで行番号表示

user@debian:~# mkdir /data/share #ここは/dataをマウントしたかったけれどディレクトリを作らないとWIndowsからアクセスできなかった。
user@debian:~# chmod 777 /data/share
user@debian:~# vi /etc/samba/smb.conf

# 25行目:以下2行追記
unix charset = UTF-8
dos charset = CP932

# 30行目:必要があれば変更 (Windows側に合わせる)
workgroup = WORKGROUP

# 48行目:コメント解除しアクセス許可IP追記
interfaces = 127.0.0.0/8 192.168.0.0/24 #ここの192.168.0.0は自分のネットワークに合わせる。LAN内の全部のパソコンからアクセスできるように末尾は0にする。

# 55行目:コメント解除 & 追記
bind interfaces only = yes
map to guest = Bad User

# 最終行に追記
# 任意の共有名称を指定
[Share]
   # 共有フォルダ指定
   path = /home/share
   # 書き込みOK
   writable = yes
   # ゲストユーザーOK
   guest ok = yes
   # 全てゲストとして扱う
   guest only = yes
   # フルアクセスでファイル作成
   create mode = 0777
   # フルアクセスでフォルダ作成
   directory mode = 0777

user@debian:~# systemctl restart smbd 

参考 Debian 9 Stretch : Samba : フルアクセスの共有フォルダ作成 : Server World

増税前にRyzenでパソコン作った

前回の8%増税のときにパソコン作ったままだったので5年ぶりにパソコン作った。

旧パソコン

パーツ 型番 価格
CPU Core i7 4770K 40000円くらい
M/B Gigabyte Z87 UD3H 15000円くらい
Memory DDR3 16GB 12500円くらい
M.2 SSD AGI M.2 NVMe Type2280 512GB AGI512G16AI198 3500円くらい
Power Corsair VS550 550W PC電源ユニット 80PLUS STANDARD 5000円くらい

M.2 SSDは去年交換したもので、Z87は通常PCI接続のM.2を起動ドライブに設定できないため海外の人が作ったカスタムBIOSを使用。
電源は玄人志向の安いものを使っていたけれどコイル鳴きがしてうるさかったため2年位前に交換。

新パソコン

パーツ 型番 価格
CPU AMD Ryzen 7 3700X 34984円
M/B ASUSTeK TUF GAMING X570-PLUS 18125円
Memory CORSAIR VENGEANCE RGB PRO 2 x 8GB DDR4 3200MHz C16 ホワイト CMW16GX4M2C3200C16W 9530円

AMD Ryzen 7 3700X

ネットサーフィンとYou Tubeとアニメしか見ないので3700Xはオーバースペックすぎるのにやっぱりこれ以外は買えなかった。とても満足している。

ASUSTeK TUF GAMING X570-PLUS

X570はIntel Zシリーズと比べて全体的に高かったのでX470かB450にしようかと思っていたけれど、RGBで光らせたりまた5年位使うことを考えるとPCIe4.0使えるほうが良かった。X570で評判が良く比較的安いTUFシリーズにした。

・CORSAIR VENGEANCE RGB PRO 2 x 8GB DDR4 3200MHz C16 ホワイト

初めてOCメモリを買った。デフォルトではクロックが2666MHzで認識されるがUEFIから簡単に3200MHzに変更できた。

ベンチマークなど

CINEBENCH R20

f:id:ultra-genma:20191014222313p:plain
4572 ptsで4770Kの2.5倍くらいのスコアになった。非常に快適。

・Crystal Disk Mark

f:id:ultra-genma:20191014222208p:plain
Sequential Readで2000MB/s超えは驚いた。当時最安に近いSSDだったけれどもRAID組まずにこのスコアはとても良い。

CPU-z

f:id:ultra-genma:20191014222814p:plain
f:id:ultra-genma:20191014223117p:plain
メモリは1クロックで2回のデータ転送が可能なため、DRAM Frequencyの1596.8MHzは3200MHzのこと。ちゃんとOCされている。

Apache Tomcat 9がWindows 10で起動できない問題

Webサイトにアクセスして自動でボタンをポチポチするものを作ろうとしているけれど、Web系舐めていた。全然わからない。今までサーバー立ててApache入れるくらいでHTML少しいじって表示変わるの見てWeb系簡単だと思っていたのに動的なサイト作ろうと思ったらすごく難しかった。

やりたいことのためにApache Tomcatをインストールする必要がありそうだとわかったのでWindows 10にインストールしたらlocalhostにアクセスしても表示されない。exeでインストールするだけでできるものじゃなかった。

環境と使ったもの

Windows 10
apache-tomcat-9.0.20.exe
tomcat-native-1.2.21-openssl-1.1.1a-win32-bin
TCPView

問題

Tomcat 9をインストールしてブラウザからlocalhost:8080にアクセスしてもつながらない

やったこと

  1. jdk-11.0.3_windows-x64_bin.exeのインストール
  2. Tomcat 9のインストール
  3. 環境変数のユーザー変数に追加
    JAVA_HOME
    C:\Program Files\Java\jdk-11.0.3
  4. 環境変数のシステム変数に追加
    Path
    C:\Program Files\Java\jdk-11.0.3\bin

出たエラー

tomcatをインストールしたフォルダのlogsフォルダでcatalina.[日付].logを確認する。

NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
10-Jun-2019 22:20:25.800 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.20
10-Jun-2019 22:20:25.803 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 3 2019 22:26:00 UTC
10-Jun-2019 22:20:25.803 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.20.0
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 10
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            10.0
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\Program Files\Java\jdk-11.0.3
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.3+12-LTS
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\tomcat9
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         C:\tomcat9
10-Jun-2019 22:20:25.814 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
10-Jun-2019 22:20:25.814 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\tomcat9\conf\logging.properties
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
10-Jun-2019 22:20:25.816 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
10-Jun-2019 22:20:25.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
10-Jun-2019 22:20:25.818 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
10-Jun-2019 22:20:25.819 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\tomcat9
10-Jun-2019 22:20:25.820 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=C:\tomcat9
10-Jun-2019 22:20:25.820 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=C:\tomcat9\temp
10-Jun-2019 22:20:25.822 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk-11.0.3\bin;C:\Windows\Sun\Java\bin;C:\Program Files\Java\jdk-11.0.3\bin;(一部省略)]
10-Jun-2019 22:20:26.064 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
10-Jun-2019 22:20:26.150 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[HTTP/1.1-8080]]
        org.apache.catalina.LifecycleException: Protocol handler initialization failed
                at org.apache.catalina.connector.Connector.initInternal(Connector.java:983)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1059)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.startup.Catalina.load(Catalina.java:584)
                at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.base/java.lang.reflect.Method.invoke(Method.java:566)
                at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:304)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
        Caused by: java.net.BindException: Address already in use: bind
                at java.base/sun.nio.ch.Net.bind0(Native Method)
                at java.base/sun.nio.ch.Net.bind(Net.java:461)
                at java.base/sun.nio.ch.Net.bind(Net.java:453)
                at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
                at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
                at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:248)
                at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:222)
                at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1119)
                at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1132)
                at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:557)
                at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
                at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
                ... 13 more



エラー1

The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

これはTomcat Native Connectorのtcnative-1.dllがないせいらしい。Tomcatの公式ページへ行き、Apache Tomcat® - Tomcat Native Downloads から「Native 1.2.21 Windows Binaries zip (recommended) 」をダウンロードする。
解凍してtomcat-native-1.2.21-openssl-1.1.1a-win32-bin\bin\x64の中のtcnative-1.dllをTomcatをインストールしたbinフォルダに入れる。
なくても問題ないけれど、Tomcat9w.exeを起動してJavaタブのJava Optionsの一番下に追加する。

-Djava.library.path=c:\tomcat9\bin

f:id:ultra-genma:20190610224716p:plain



エラー2

Caused by: java.net.BindException: Address already in use: bind

アドレス(localhost127.0.0.1)が使われていると出る。Portの8080が使われているようなのでTCPViewというMicrosoftのツールで調べるとFirefoxのプロセスが8080でたくさんあったのでサーバーの設定を変更する。
Tomcatをインストールしたフォルダの中のconfフォルダにあるserver.xmlテキストエディタで開き、Connector portを他とかぶらない適当な80などの値にする。

<Connector port="80" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443" />



これでブラウザからlocalhostにアクセスするとTomcatのページが表示される。
f:id:ultra-genma:20190610225701p:plain



参考

・エラー1
eclipse - What does "The APR based Apache Tomcat Native library was not found" mean? - Stack Overflow

・エラー2
eclipse - How do I resolve the "java.net.BindException: Address already in use: JVM_Bind" error? - Stack Overflow

Tomcat Native Connector - 1.2
Apache Tomcat® - Tomcat Native Downloads

・TCPView v3.05
TCPView for Windows - Windows Sysinternals | Microsoft Docs

HTMLのボタンからPythonスクリプトでBrythonを使ってSeleniumをimportすることはできなかった

初めてHTMLとPythonとBrythonとSeleniumを使った。すべて初めてでなんにもわからなかった。 言葉の使い方すらあってるかわからない。

やろうとしたこと

  1. 自動でウェブサイトにアクセスしてボタンを押すPythonスクリプトをつくる
  2. 指定した時間にPythonスクリプトを実行する
  3. そのスクリプトに画面をつけるため、ブラウザからボタンを押してPythonスクリプトを実行するようにする

環境

windows 10 python selenium brython chromewebdriver

1について

自動でウェブサイトにアクセスするものの作り方を調べたらPythonSeleniumでできることがわかった。自分が見たいサイトと同じところにアクセスするものを作っている人がいたのでここまではすぐ出来た。 一部困ったところは以前はJavaScriptのボタンがなかったからSeleniumで楽にボタンを押すことが出来たみたいだったが、今は変わっていてボタンの押し方がわからなかったことだった。これはxPath FinderというFirefoxのアドオンを使ってボタン名を取得できたのですぐにやりたいことができるようになった。

2について

Pythonでパソコンの時刻を取得する方法はdatetimeをimportすれば良いことがわかった。またPythonでタイマーアプリ作ってるものなどを参考にして、スクリプトを実行したあと指定時間になるまでループし続けて待つ処理を追加した。

3について

Pythonスクリプトは"from Selenium import webdriver"を行って自動でブラウザが起動させることができた。これをブラウザから実行したかったので調べたら、PythonはBrythonを使ってHTMLのボタンから実行することができることがわかった。ここでBrythonとかPhantomJSとかJavaScriptとかDjangoとかいろいろ単語出てきたけれど一つもわからなすぎてとりあえずPython、Brython、HTMLだけを選択してつくることにしたが、ここから地獄だった。

最初は簡単にHTMLの入力欄とボタンを作って、文字を入力してボタンを押すとその文字を表示する画面を作った。ここまではうまく出来た。HTMLのボタンを押すと、Pythonに書いたhello()メソッドでreturn 'Hello'し、ブラウザにHelloが表示されるものだった。

このあとボタンを押してブラウザを起動できるようにするため、"from Selenium import webdriver"のたった一行を追加するだけでボタンが無反応になってしまって何が原因か全くわからなくなってしまった。デバッグ方法もわからないのでひたすら"brython selenium html"の単語を混ぜてググりまくった。全く情報が出てこなかったのでpythonデバッグ方法を調べ始めたけれどこれも全く知りたいことが出てこなくてもうほかの方法で作るしかないかと思ってDjangoとかAjaxとか調べ始めた。

それでもBrythonは諦めたとしてもなんでたった一行importするだけで動かなくなるのか原因しりたくていろいろ考えていたら、たまたまブラウザの開発者モードがあることを思い出した。試しにFirefoxでF12で開いていろいろいじっていたら偶然Consoleタブにエラーが出ることがわかった。 そしたらそこに

Traceback (most recent call last):
ImportError: No module named selenium brython.js:5887:9

と出ていた。デバッグ方法がわかってとてもラッキーだった。

ImportErrorだとわかったので「"ImportError: No module named selenium" brython」でググったらたった3件だけヒットし、BrythonではSeleniumを実行できないって書かれていたのでようやく諦めがついた。

また最初から別の方法をググらなきゃいけなくなった。