投稿

Braveブラウザの同期機能をiPhoneで設定した話。

イメージ
Braveブラウザを使い始めて結構経った 設定 1 .同期ページを開く 2.QRコードの表示 3.iPhoneで読み取る Braveブラウザを使い始めて結構経った Google Domainsで独自ドメインを持っているBloggerをBrave Creatorsに登録した話。 この記事を書いた頃から僕はBraveしか使わなくなっちゃいましたね〜。 広告がないとネットサーフィンが捗りますし、Braveの直接クリエイターに貢献できるような仕組みが特に気に入っています。Blogger,ひいてはGoogle的にどうなんだって話もありそうですけど、ただのユーザなのでそんなのは気にせず便利なものは使います。 それで本題です。 タイトルのように今回同期機能を設定しました。 余計なことをしていたせいで少しハマったので設定ついでに誰かが困ったときに役に立つように設定方法を残しておこうかと思います。 ちなみにこちらの記事はPCの同期にiPhoneを追加するという設定方法についての解説です。iPhone→PCの同期方法などはまた別の話のようです。 設定 1 .同期ページを開く ブラウザのタブの右上にある上矢印のマークをクリックすると以下のような項目が表示されます。 こちらの同期という欄をクリックします。 すると以下のページが表示されます。 自動的に設定ページの中の同期欄が表示されるわけですね。 2.QRコードの表示 同期欄に同期済みのデバイスを管理という欄があるのでそちらをクリックします。 すると以下のようなページが表示されるのでそちらの中の新たなデバイスを追加、スマホ/タブレットという順にクリックしていくとQRコードが表示されます。 これでこのステップは完了です。 3.iPhoneで読み取る このQRコードをiPhoneで読み取っていく訳ですが、このQRコードはプリインストールされているQRコードで読み取っても正しく処理してくれません。 書いてある通り、iPhoneのBraveブラウザで読み取って上げる必要があります。 なのでひとまずiPhoneでBraveブラウザを開き、画面右下の**•••**という所をタップしてください。 すると上から二番目に歯車アイコンの設定が表示されますのでそちらをタップします。 初期表示で画面中部に表示さ

SMTPサーバのテストをしたくなったのでDockerで環境を作った話。

イメージ
SMTPサーバのテストをしたくなったので 環境 手順 1.イメージをビルドする 2.コンテナを起動する 3.telnetで接続する SMTPサーバのテストをしたくなったので ということ、ありませんか? 僕は最近試してみたいなぁと思いました。 なのでみんな大好きDockerで構築してみます。よくある動機ですね。 それで、調べてみるとDocker Hubに良さげな イメージ があったのでさくっと環境構築してみます。 なお、今回はDockerはインストール済みとしています。以下の環境で動かしています。 環境 Mac OS Catalina 10.15.7 Docker version 20.10.2 手順 1.イメージをビルドする こちら のDocker Hubに記載されているようにすれば基本的には起動できます。 本編とは関係ないですが、よくみたら最後に更新されたのが5年前になっていますね。 $ sudo docker pull catatnight/postfix 2.コンテナを起動する sudo docker run -p 25:25 \ -e maildomain=mail.example.com -e smtp_user=user:pwd \ --name postfix -d catatnight/postfix これでSMTPサーバが立ち上がりました。 一応 docker ps コマンドでコンテナが起動しているかを確認します。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ********** catatnight/postfix "**/**/** '/**/**…" 3 minutes ago Up 3 minutes 0.0.0.0:25->25/tcp postfix 無事起動していますね。 3.telnetで接続する telnetで起動したSMTPサーバに接続しましょう。 なお、今回はMac OSです。 Mac OSではtelnetはプリインストールされていないのでHomebrewを使ってインストールします。 $ brew inst

LeetCodeのDatabaseカテゴリで見つけたTRUNCATE TABLEについて

イメージ
LeetCodeのDatabase問題にて。 181. Employees Earning More Than Their Managers という問題を解いた時の話。 LeetCodeのDatabaseカテゴリの問題では SQL Schema という欄があり、どういったクエリを実行して該当テーブルが作成されているか、またその中に入っているデータはどういったものかを見ることができる。 その中に TRUNCATE TABLE Employee という一文を見つけた。 Employeeはテーブル名なので TRUNCATE TABLE テーブル名 という使い方をするものなのだろう。 恥ずかしながら知らなかったので調べてみたところ、指定したテーブルの全てのデータを削除するという内容らしい。 これまではそういった操作はDELETE文で実行していたが、どうやらTRUNCATE TABLE文には以下のようなメリットがあるらしい。 オートインクリメントの初期化 大量のデータが存在する場合はDELETE文よりも高速であること オートインクリメントの初期化がされるのは知りませんでした。確かにDELETE文だと初期化されなかった記憶があるので助かります。 削除が高速なのはDELETE文はあくまで特定のデータを削除することに特化しているからなのだろうか?確かに全て消去しかないのと特定の条件を付けられるものだと後者の方が処理は複雑になる傾向があるが。ここら辺も根本的な理由を調べる機会を設けたいな。 一方で、DELETE文を実行した際のログなどを記録するようなトリガーを設定していても、TRUNCATE TABLE文はDELETE文とは関係ないので当然追跡はできません。そこには注意が必要ですね。

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した

イメージ
タイトル通りのエラーが出た。 Chromeの拡張機能を作っていたところ試しに作った拡張機能をインポートした時にエラーが出た。 調べてみるとmanifest.jsonでエラーが起こっているようで、タイトルのように、"Invalid value for 'content_scripts[0].matches[0]': Empty path."と表示されている。 manifest.jsonの中に書いたmatchesのインデックスの0番目がどうやら空のパスになっているらしい。 ちなみにmanifest.jsonは設定ファイルのようなもので、ここで定義している 'content_scripts[0].matches[0]'はGoogleのURI。 { "name" : "Example Extension" , "version" : "1.0.0" , "manifest_version" : 2 , "description" : "Sample Extension" , "content_scripts" : [ { "matches" : [ "https://www.google.com" ] , "js" : [ "content.js" ] } ] } という内容で、このディレクトリには他に content.js のみ。 なんぞやということで色々調べてみると単純に末尾にスラッシュが足りなかっただけのよう。 { "name" : "Example Extension" , "version" : "1.0.0" , "manifest_version" : 2 , "description" : "Sample Extension" , "content_scrip

特定の値まで素数を生み出すアルゴリズム in Python3

イメージ
特定の値まで素数を生み出すアルゴリズムとか 以下のようにリストで真偽値を管理するやり方で書くといいらしい。 Elements of Programming Interviews in Python  より。 # Given n, return all primes up to and including n. def generate_primes(n): primes = [] is_prime = [False,False] + [True] * (n-1) for p in range(2,n+1): if is_prime[p]: primes.append(p) for i in range(p*2,n+1,p): is_prime[i] = False return primes n = 100 print(generate_primes(n)) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

オンライン英会話(レアジョブ)を始めてほぼ毎日英会話をする生活が6ヶ月目に突入したわけですが。

イメージ
地道に継続中・・・ オンライン英会話だけの限界 実はこうなることはわかっていたのさ! 地道に継続中・・・ はい。 オンライン英会話を始めたのが8月でもう2月です。6ヶ月目に突入しました。 初期に一回サボったのとサービス自体のお休み(クリスマスと正月)以外は毎日何かしらのトピックについて英語で会話しています。 まぁこの記事読む人は「お前6ヶ月近く毎日やってるならちょっとは喋れるんだろ?お?」っていう感じの人が多いかと思います。 なんか収益化しているブログとかだと「英会話を続けた効果が凄すぎた・・・!!」みたいに色んな効果とかを派手に装飾したりSEOに特化したりとかでアクセス数を上手に稼いでいますが、このブログは今の所Google Adesenseの認可すら降りていないのでアクセスを集めたところで何の意味もないです。 なので一般人が英会話を地道にやってたらどうなるのかをリアルに書いていくのがいいのかなーって感じです。 それにしても僕もお金が欲しいのでAdesense申請したんですよね。でも申請してからかれこれ3ヶ月くらいGoogleさんから返事ないけど、僕の申請は次元の狭間にでも落っこちて帰ってこれなくなったんですかね。 Googleさんお返事くださいお願いします。 オンライン英会話だけの限界 ある程度詰まらずに話せるようにはなってきました。 僕が受けているのが実践ビジネスっていうビジネス英会話(月1万くらいだったはず)のコースなので、それっぽい表現を覚えたりとか、あとは困ったときに単語をググったらコミュニケーションで困らないくらいにはなっています。 これは嬉しい。 継続は力なりですね。 一方で、同じ語彙ばかり使っている、というのが(個人的に)かなり目立つようになってきました。 便利な表現を覚えるとそれ頼みになりがちなんですよね。 個人的に好きな英会話本で ペラペラビジネス という本があるんですが、そこで便利な定型文の一部だけ変えて使い倒せ!みたいなことが書いてあるんですね。 こと言語に関してはまさにその通りだと思うんですけど、僕の場合はそこの便利さにかまけて語彙とか表現を増やそうという努力をしてなかったというのが大きいです。 とにかく受け身で受けているだけ、そんな感じでした。まぁ少しづつ増えてはいるんですけどね ペー

Pythonでリストの中から被っている値を見つけよう!!LeetCodeの解法例あり

イメージ
リストの中から被っている値を見つけよう!! 基本 問題 解法 改良前 改良後 リストの中から被っている値を見つけよう!! という話。 見つけてその値を削除するなり、被っている値の数を数えるなり、被っている値は何なのかを返すなりは別にいいとして、個人的な方法をメモ代わりに取っておく。 基本 今回は考えやすいようにLeetCodeの問題を例に考えてみます。 問題 例えばこちら。 287. Find the Duplicate Number 難易度はMediumです。 問題としては与えられた数字のみのリストの中に1つだけ2つ存在する値があるのでそちらを探して欲しいという問題です。 例としては以下のような感じ。 Example 1: Input: nums = [1,3,4,2,2] Output: 2 Example 2: Input: nums = [3,1,3,4,2] Output: 3 Example 3: Input: nums = [1,1] Output: 1 Example 4: Input: nums = [1,1,2] Output: 1 解法 改良前 これの解放としてパッと思い浮かぶものとしては、二つのfor文で二つの値を比較しながら被っている値があれば行いたい処理を行う、というもの。 ただ、与えられたリストがソートされていないのでまずソートしないとその比較はできなくなります。 試しにPython3で書いてみました。 class Solution : def findDuplicate ( self , nums : List [ int ] ) - > int : ans = 0 nums = sorted ( nums ) for i in range ( len ( nums ) ) : for j in range ( i + 1 , len ( nums ) ) : if nums [ i ] == nums [ j ] : ans =

Arrayでのインクリメント方法で詰まったのでメモる。

イメージ
Arrayでのインクリメント スパッと思いつかなかったのでメモメモ。 ちなみに具体例としては、 array1 = [1,1,1] array2 = [1,7,9] だったら array1 = [1,1,2] array2 = [1,8,0] みたいな感じになるやつ。 実はLeetCodeでも解いたことがあったけど、 Plus One どうせならPythonっぽい答えを作ってみたかったので色々調べた感じ下のやつが良さげ。 def increment ( A : List [ int ] ) - > List [ int ] : A [ - 1 ] += 1 for i in reversed ( range ( 1 , len ( A ) ) ) : if A [ i ] != 10 : break A [ i ] = 0 A [ i -1 ] += 1 else : if A [ 0 ] == 10 : A [ 0 ] = 1 A . append ( 0 ) return A といった感じで行ける。あと読みやすい。 実行してみたら速度も気のせいか少し速くなった。 元々の解答 class Solution : def plusOne ( self , digits : List [ int ] ) - > List [ int ] : if digits [ - 1 ] < 9 : digits [ - 1 ] += 1 return digits elif digits [ 0 ] == 9 and len ( digits ) == 1 : return [ 1 , 0 ] else : digits [ - 1 ] = 0 digits [ 0 : - 1 ] = self . plusOne ( digits [ 0 : - 1 ] )

Apple Watch SEを買った話。

イメージ
Apple Watch買ったよ!! どのモデル? 使い心地どうなん? Apple Watch買ったよ!! という話です。 SEが出てから気になってはいたのですが、他に欲しいものを買ったりしていたので買っていませんでした。 少し残業の時間が増えて残業代で何か買うかーとなって家電量販店で実物を見たら超絶欲しくなりました。 手に入ると思うとそのことばかり考えてしまって精神的にめんどくさくなったので思い切って買っちゃった☆ どのモデル? SEの44mm です。 Series6を買う勇気はないが、Series3はもう古そうでなんか嫌だったのでSEに。 38mmは実物が思ったより小さくて数千円の差なら大きい方を買った方が見やすいかなーと。 後、運動(主に筋トレ)をすることが多く、特に最近は有酸素運動をすることが多かったのでNikeモデルにしました。 店員さんに聞いたら 本体の壁紙(Nikeロゴの壁紙は限定らしい?) ベルトが違う(ゴムの穴があいているやつ) くらいの差しかないらしいです。 まあ汗かくだろうし壁紙にNikeのロゴ入るとかええやん?素敵やん?という感じがしたのでNikeモデルにしてみました。 使い心地どうなん? 買ってよかったです。 やっぱり運動の情報が可視化されるのはモチベーションに大きく寄与するなあとしみじみと感じる今日この頃。 細かい歩数とか、消費カロリーを算出してくれるのはiPhoneではしてくれませんでした。 Apple Watchをつけているとその日の運動量に応じて、あ、少し消費カロリー少ないな。ちょっと歩くかー、とか、今日は十分動いたからもう休もう。みたいな感じで細かい調節ができる点が分析好きな僕にはあっています。 個人的な不満としてはジムの一部の有酸素マシンの消費カロリーを正確に測定してくれないところ。 あと、有酸素前にワークアウトをセットすると心拍数とかの測定をしてくれるものの、マシンの方の測定値と少し数値の開きが起こる。 動きを検知してくれない場合に途中でワークアウト終わった?みたいな通知が飛んでくるのも少しウザい。 後筋トレのメニューのカロリーを測る方法はなさそう?まああってもいちいちセットするのはめんどくさいし、多分測らないんだろうけど。 あ、あと心電図機能はついてないみたいで

Traceback (most recent call last): File "docker-compose", line 3, in File "compose/cli/main.py", line 67, in main File "compose/cli/main.py", line 123, in perform_command File "compose/cli/command.py", line 69, in project_from_options File "compose/cli/command.py", line 132, in get_project File "compose/cli/docker_client.py", line 43, in get_client File "compose/cli/docker_client.py", line 170, in docker_client File "site-packages/docker/api/client.py", line 188, in __init__ File "site-packages/docker/api/client.py", line 213, in _retrieve_server_version docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))というエラーが出た話

イメージ
docker-compose upをしてもこれしか出ないので色々調べてみた。 OSX Catalinaでのこと。 Traceback (most recent call last):   File "docker-compose", line 3, in <module>   File "compose/cli/main.py", line 67, in main   File "compose/cli/main.py", line 123, in perform_command   File "compose/cli/command.py", line 69, in project_from_options   File "compose/cli/command.py", line 132, in get_project   File "compose/cli/docker_client.py", line 43, in get_client   File "compose/cli/docker_client.py", line 170, in docker_client   File "site-packages/docker/api/client.py", line 188, in __init__   File "site-packages/docker/api/client.py", line 213, in _retrieve_server_version docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) 権限が足りない、など色々な記事がヒットしたが、根本的にそもそもDockerアプリを起動してないのが問題だったというオチ。 ちゃんとメニューバーにDockerのアイコンが表示されていてDocke

レアジョブ英会話を100回受講した話。

いぇーい。 タイトルの通り、100回続きました。 ツイートにある通り、101日で100回消化しました。 飽き性だけどレアジョブ100回続いてて良かった ちなみに101日で100回消化したのでまあまあ過密スケジュール 最低限の英会話ができて今後も英語を勉強する意欲のあるITエンジニアに興味がある企業さん、いかがですか?(満面の笑み) pic.twitter.com/jy4Uf4AwgT — くえはる (@KueharX) November 29, 2020 留学経験とかないので恐らく今までの人生の中で最も英語を話した101日でした。 いうて100回がどれくらいすごいかといっても50時間しか話してないんですけどね。 個人的にはまだまだ英会話弱々マンで結構困ることも多いです。 続け方とか。 何も考えずにただ朝起きて夜寝るまでの間に予約をぶち込んで受けるだけです。 学習効率とか発音とか気にせずにとにかく受ける。 そのためにはお気に入りの先生を見つけることが手っ取り早くて、やりやすいなって人を見つけて、お気に入り登録して、レッスンが終わったら次の日もその先生で受講可能かを見る。無理そうだったら総合評価なりブックマーク件数が多い順にソートして予約。あーだこーだ考えるよりも経験を積むことを意識した方がええんちゃう、知らんけど。 後、僕はビジネス英会話のコースなので地味に1万くらい月に払ってるんですよ。決して高くはないけど1万あったらまあまあ色んなことできますし、元を取ろうとする貧乏人根性も一つ要因としてあったかと。お金は大事!! とかこれだけ色々いってますけど、101日の内1日サボってるんですよね。これは仕事終わりに外食に行った時に食べたものが当たったみたいで、腹痛でとてもじゃないけど受けられなかった時です。しょうがないね。 続けると何がいいかって、英会話が当たり前の日常として定着してくるところですかね。 最初の方はまた英会話しないといかん・・・鬱だ・・・って感じで苦手意識しかなかったんですけど、今やそれが当たり前。なんなら今日こういうフレーズ使おう!みたいになってるあたり、こうやって人間って成長していくんだなぁと(しみじみ)。 これから。 語学の勉強に終わりはないって良く聞くので、まぁ一先ず続けていくつもりではあるんですが、どこかのタイミングで英語を使って仕事をできる環境に身