Javascript function(){}とアロー関数()=>{}は違う

Javascriptfunction(){}と書くのをアロー関数()=>{}と書ける、と知ってこれは便利。
かっこいいと使っていたら、場合によっては思ったように動かないことがわかりました。

次のサンプルプログラムをやってみて下さい。

https://kalz2q.github.io/jsdemo/this.html

ここでは、2つのテキストボックスがあって、その中をマウスでクリックするとそれを感知して「フォーカスされました」と表示されます。

<input type="text" class="textbox" value="お名前" >
<input type="text" class="textbox" value="メールアドレス" >

スクリプトはこんな感じ。正確にはデベロッパーツールで見てください。

<script>
$(()=>{
        $(".textbox").focus(function (){
                 $(this).val("フォーカスされました!");
       });
 });
</script>

これの function (){}()=>{}とすると、thisの中身が変えられなくなって「フォーカスされました」と表示されなくなります。
var that = thisとかでどうにかならないかと思ったのですがいまのところすなおにfunctionと書いた方がいいみたい。

ubuntu 18.04へのupgrade

何台かのubuntu 16.04マシンを18.04へupgradeしました。

sudo apt update 
sudo apt upgrade
sudo apt dist-upgrade
sudo do-release-upgrade

としたら、

新しいリリースはありません。

と言われたので、2,3日待ったのですが、ネットを調べたら、-dをつけて、ちゃんと正規版が入るとのことなので、次のようにしました。

sudo do-release-upgrade -d

一台で、

インストールされたPythonが破損しています。シンボリックリンク '/usr/bin/python' を修正してください。 

というエラーがでたので、

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python2.7 /usr/bin/python

としたら無事通りました。

以上

Ubuntu 18.04ですべてのディスプレイにローンチャー

Ubuntu 18.04にしたらメインのディスプレイでない方のモニターのローンチャーやメニューが消えてしまいました。

それはそれでひろびろとしてていいのですが、不便です。

設定 -> DOC -> 配置 -> すべてのディスプレイ

を選択したらなおりました。

再起動も必要なかった。

追記:
ローンチャーはすべてのディスプレイに現れたけど、 メニューバー(トップバー)は出てきませんね。
もうすこし研究します。

追記:
Ubuntuデュアルディスプレイで使っています。
一番よく使うUbuntuBenqIODataで、それぞれ27インチです。
次によく使うUbuntuでは大昔のソニーの18インチと三菱の23インチを使っています。
で、27インチのはそれぞれ2万円を切っているのですが、大昔のソニーのは18万円くらいした覚えがある。
で、何を言いたいかというと大きくなってきれいになって価格は1/10で、生産性への寄与は莫大で、買わないともったいないと思う。
おすすめです。

Ubuntu 18.04でマウスポインターを大きくする

GNOMEコントロールセンター(設定)

ユニバーサルアクセス

カーソルの大きさ

をさがして、「最大」を選んだらとても大きくなりました。

という記事を書こうと思って、GNOMEコントロールセンターをアクティビティに入れて探すのに

gnomeでもcontrolでもcenterでも設定でも出てきました。

ので、問題ないと思います。

追記: アクティビティの検索窓は日本語変換が効かないみたいなのですが、日本語でペーストはできるので、実害はないみたいです。 自動起動するアプリケーション を起動するのに使いました。

プログラミング言語別コメント記法

コメントアウトするときのやり方が言語ごとに違うのでネットで探して一覧にしてみました。
ちゃんと表示できるかな。

C++ => // or /* */
swift => // or /* */
JavaScript => // or /* */
CSS => /* */
HTML => <!-- -->
Bash => #
R => #
Haskell => -- or {- -}
Elm => -- or {- -}
vim => "ダブルクォーテーションマーク
Ruby => # or =begin =end
Python => # or """ """ or ''' '''
C => /* */
Markdown => <!-- --> []()
GFM => <!-- --> []()
JSON => コメントはつけられない!!
Java => // or /* */ or /** */
XML => <!-- -->
bat => rem or ::
PHP => // or # or /* */
VBA => ' or rem
SQL => -- or /* */
Objective-C => // or /* */
Tex => % or ¥begin{comment} ¥end{comment}
Perl => # or =comment =cut
JSP => <%-- --%>
VBS => ' or rem
Smarty => {* *}
Scheme(Racket) => ;
ASP => '
Fortran => c or * or !
aspx => <%-- --%>
J(プログラミング言語) => NB.
Scala => //
Lisp(CLisp) => ;
Clojure => ;
Go => //
Hy => ;

JupyterでPythonの勉強

Jupyterでいろいろ遊んでいるのですが、

Jupyter-nbconvert --to markdown notebook.ipynb

でマークダウンに変換できるということしりました。
ダウンなので情報量が減ってしまうのですが、そこそこ感じがつかめます。
ので以下、ご紹介。
本物のノートブックはhttps://github.com/kalz2q/files.gitにあります。


Pythonが苦手です。どうやってべんきょうしたらいいですか。

なぜPythonが苦手と感じるかと自己反省してみると、この収拾のなさというかいい加減さが覚えにくい。
なんらかの思想で統一されているとそれを頼りに記憶のわくぐみをつくるのだが、とかなんとか言う前に勉強しよう。

というので立ち上げたJupyter notebookですのであまり期待しないで進みましょう。

文字列がわかりません。
質問 charはあるのですか。見つからないのでないのではないか。 まあいいいか。

変数は事前に定義するのかどうか。突然x=3とか使っていいの。
やってみてください。 べつにいいみたいです。
3 + "5"とかしたらさすがエラーになりました。

質問フラグと問題フラグについて。

あとで質問で検索したり、問題で復習したりするために、適宜質問と問題という表題を立てますが読むときはあまりきにしないでよい。

問題 色のリストについて文字数のリストを作る。append()を使う。

colors = ["yellow", "red", "green", "blue", "purple"]
colorlength = []
for color in colors :
    colorlength.append(len(color))
print (colorlength)

質問 連想配列(dict、hash)はどうやって作るのですか。
質問 リストからzipで簡単に作れますか。例えばzip(colors, colorlength)とか。
質問 いちいちprintした方がいいですか。それとも変数を素でうちこむのがいいですか。

zip()という関数があった。
思っていたのとはだいぶ違うが例を転記してみる。実験。うむ、これは便利かも。

days = ['Monday', 'Tuesday', 'Wednesday']
fruits = ['banana', 'orange', 'peach']
desserts = ['tiramisu', 'ice cream', 'pie', 'pudding']
drinks = ['coffee', 'tea', 'beer']
for day, fruit, drink, dessert in zip(days, fruits, drinks, desserts):
    print(day, ": drink", drink, "- eat", fruit, "- enjoy", dessert)
english = 'Monday', 'Tuesday', 'Wednesday'
french = 'Lundi', 'Mardi', 'Mercredi'
dict( zip(english, french))
list(zip(english,french))

list()とかdict()とか変な関数ですね。

range()list()で囲むと数列ができる。
おー、これは便利。

list(range(10, -1, -1))

さて、それ以前にPython dictionaryがわからないのでテキストを読む。

{}で作成する。

bierce = {
        "day": "A period of twenty-four hours, mostly misspent",
        "positive": "Mistaken at the top of one's voice",
        "misfortune": "The kind of fortune that never misses",
        }
bierce["day"]

問題 色のリストについて色名をキーに文字数をvalueにした辞書を作る。できた。

colors = ["yellow", "red", "green", "blue", "purple"]
colorlength = []
for color in colors :
    colorlength.append(len(color))

dict(zip(colors,colorlength))
{'blue': 4, 'green': 5, 'purple': 6, 'red': 3, 'yellow': 6}

ファイルを一度に読み込む方法

Jupyterを使ってC++を勉強しています。


Jupyter上なので標準入力の代わりに、stringからデータを読み込んであとの処理で使う、という方法をとっているのですが、テキストファイルを一度に文字列に取り込めないかな、と思い、調べてみました。

c++ read entire text file into string

とかで検索したところ、

std::ifstream t("file.txt");
std::stringstream buffer;
buffer << t.rdbuf();

という解答があったので、Jupyterのセルで実験してみました。

# include <bits/stdc++.h>
using namespace std;
string s;
ifstream ifs("./mycpp/input.txt");
stringstream ss;
ss << ifs.rdbuf();
s = ss.str()

これで、変数 s の中にファイルinput.txtの内容が、空白や改行も含めて全部取り込まれました。

成功です。