投稿

3月, 2021の投稿を表示しています

SQLで連続するレコードの比較をする(LeetCode Database)

イメージ
概要 問題 解法 概要 前回 に引き続きSQLです。 問題 +---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | recordDate | date | | temperature | int | +---------------+---------+ 今回用意されているテーブルは以上です。 以下のように、前日よりも気温が気温が高かった日のレコードの id を表示してください、という問題です。 解法 SELECT w1.Id FROM Weather w1, Weather w2 WHERE w1.Temperature > w2.Temperature AND subdate(w1.recordDate, 1) = w2.recordDate テーブルを二つ用意し、 subdate 関数を使うことで時間の差を求めます。 売り上げが前日よりも上の日とか抜き出すのに使えそうなSQLとなりました。 SQLは列の比較には強くても、行の比較は思ったより苦手ということを改めて感じました。

重複している要素をSQLで抜き出す(LeetCode Database)

イメージ
LeetCodeにDatabaseのカテゴリがある話。 問題 例 解法 LeetCodeにDatabaseのカテゴリがある話。 実はSQLの勉強にも使えるんですよね。 暇な時にEasyから潰したりしてます。 で、解くのはいいのですが、一度解いただけで解きっぱなしだとなんだかもったいない! あれ?記事として書いてパターン化しておいたら楽なんじゃない? と感じたので書いておきます。 問題 182. Duplicate Emails Person テーブルのEmail列に重複する文字列が存在するのでそれを抜き出して欲しい、という問題ですね。 例 ±—±--------+ | Id | Email | ±—±--------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | ±—±--------+ 仮に上記のテーブルなら以下の形で返すようにクエリを設計してください。 ±--------+ | Email | ±--------+ | a@b.com | ±--------+ 注意 : Email列は全て小文字です。 解法 # Write your MySQL query statement below SELECT Email FROM Person GROUP BY Email HAVING COUNT(Email) > 1 重複というのはつまり二つ以上存在する、ということなので GROUP BY で分類します。 その後に条件( HAVING 句)として上記の重複の条件を集計関数である COUNT で数え上げを行えば無事完了です。 つまり、重複する要素だけを抜き出したいときは # Write your MySQL query statement below SELECT カラム FROM テーブル GROUP BY カラム HAVING COUNT(カラム) > 1 で一般化できるということですね。 今回はここまで。お疲れ様でした。

Brave×電通のレポートから読み解くBraveブラウザの将来性

イメージ
お堅いタイトルにしましたが・・・ お堅いタイトルにしましたが・・・ Executive Summery 翻訳 所感 Brave ‘Ad Choosers’ 翻訳 所感 Lack of Clutter Means Results 翻訳 所感 おわりに この記事の中身は Brave and dentsu international Show that Advertisers’ Messages Resonate with Ad Choosers のより詳細なWhite paper,いわゆる「白書」ですね。こちらの翻訳と個人的な所感を書いたものになっています。 ちなみに白書のタイトルは Engaging with the New ‘Ad Choosers’ です。 まずは書いてあることを訳し、その後に個人的な感想などを書く、という感じになっています。 Executive Summery 翻訳 消費者(ここではブラウザの利用者)はますます自身のネット上でのプライバシーの保護やメディアプラットフォーム上での過剰な広告への対応に関心を集めている。 同時に、サードパーティークッキーは2022年には廃止されることになっている。 広告主(=広告を打つ人)はいわゆる"監視型のメディア製品"を使わずにメディアの成果を促進する方法を求められている。 Braveブラウザは月間約2500万人のアクティブユーザーを持つ、ユーザーのプライバシーを保護することを目的として構築された初めてのプライバシーベースの広告プラットフォームである。 電通インターナショナルはBrave上での広告が他のデジタルキャンペーンに比べて広告主のブランディング指標にどのような影響を与えるかを調査した。 その結果、従来の広告モデルを用いたパブリッシャーと比べて、Braveの広告は他の類似したデジタルキャンペーンよりも優れている、ということが判明した。 デジタル広告のエコシステムからサードパーティクッキーが削除されていく中で、広告主が成功するには「Ad Choosers」を尊重して広告を結び付けていくことが重要である。 所感 サードパーティークッキーの廃止に関しては Choroniumのブログ でリリースされていましたね

Groovyで初めてコードを書いたのでわからないことメモ

イメージ
書いてみた。 Groovyの環境構築をした話。 にある通り、環境構築をした。 それだけだとなんだか味気ないのでコードを写経した。 そこで初めて対面したGroovyについてのメモ。 コードは ここ 。 写経元は 実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ 。 class Order { def security def quantity def limitPrice def allOrNone def value def bs def buy ( su , closure ) { bs = 'Sold' buy_sell ( su , closure ) } def sell ( su , closure ) { bs = 'Sold' buy_sell ( su , closure ) } private buy_sell ( su , closure ) { security = su [ 0 ] quantity = su [ 1 ] closure ( ) def getTo ( ) { this } // 1.Hook to intercept calling unvalid method. def methodMissing ( String name , args ) { order . metaClass . getMetaProperty ( name ) . setProperty ( order , args ) } def getNewOrder ( ) ) { order = new Order ( ) } // 2.Clojure to express designated method of calculating price. def valueAs (

Groovyの環境構築をした話。

イメージ
Groovyやろう Groovyやろう インストール そうしよう。 実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ でDSLという領域に興味が湧いたので本を読んでいくと、最初はJavaでプログラムを書いていたが、途中からGroovyがより表現力豊かで適しているという記述が。 ひとまず試してみるかぁということでLet’sインストール。 インストール macOSなのでHomebrewを使います。 $ brew install groovy インストール完了後にバージョンチェック。 $ groovy -version Groovy Version: 3.0.7 JVM: 15.0.2 Vendor: Oracle Corporation OS: Mac OS X $ export GROOVY_HOME=/usr/local/opt/groovy/libexec ついでにパスを通しておきます。 そんでもって起動。 $ groovyConsole & すると無事起動。 試しにHello World print "Hello World" するとHello World。 これだけだった。 Javaの環境構築してないとJVMのインストールとか入るのかな。

「問題解決力を鍛える!アルゴリズムとデータ構造」とLeetCodeで学ぶ再帰と動的計画法(メモ化)

イメージ
再帰とメモ化 問題 再帰とメモ化 問題解決力を鍛える!アルゴリズムとデータ構造 というアルゴリズムとデータ構造を学ぶのに良い本があります。 LeetCodeの問題を解いていた時に、この本の中で解説されていた例とすごく被っている内容があったので、記事にしてみようと思いました。 問題 1137. N-th Tribonacci Number 難易度はEasy。 再帰の入門にうってつけです。 問題解決力を鍛える!アルゴリズムとデータ構造 の4章の解説にもある通り、再帰関数のテンプレートは (戻り値の型) func(引数){ if(ベースケース){ return ベースケースに対する値; } func(次の引数) return 答え } 問題解決力を鍛える!アルゴリズムとデータ構造 第4章 設計技法(2):再帰と分割統治法より引用 といったものです。 今回解く問題は、 トリボナッチ数列Tnは次のように定義される。 T0 = 0, T1 = 1, T2 = 1, そして n >= 0 で Tn+3 = Tn + Tn+1 + Tn+2 となる。 nが与えられたとき、Tnの値を返す。 という内容です。 では、こちらをPythonでかつ再帰で解いてみましょう。 class Solution: def tribonacci(self, n: int) -> int: if n == 0: return 0 elif n == 1 or n == 2: return 1 return self.tribonacci(n-1) + self.tribonacci(n-2) + self.tribonacci(n-3) # Time Limit Exceeded しかし、これだとnが 30の時に時間切れとなり、正解とは認められません。 これは再帰で同じ処理が重複し、関数の呼び出し回数がとてつもない回数になっているためです。 ではこれを解決してみましょう。 class Solution: def tribonacci(self, n: int) -> int: memo =

エンジニアがレアジョブで100時間英会話レッスンを受けた話。

イメージ
めでたい それぞれの期間に考えていたこととか。 1ヶ月目 読んでいた本。 2ヶ月目 読んでいた本。 3ヶ月目 本 4 ~ 5ヶ月目 読んでいた本とか。 6ヶ月目~現在 読んでいた本とか。 これから めでたい ということで。 昨年の8月22日に始めてから1日サボったのとサービスのお休み(クリスマスと正月)以外は毎日話し続けました。前回それ関連で書いた記事が レアジョブ英会話を100回受講した話。 で、ノートを取るようになると定着率が高くなってどんどん楽しくなってきたのでそこからは続けていたらあっという間でした。 なのでやっと到達した・・・っていうよりはあ、もう?って感じでした。 ひとまずそれぞれの期間に感じていたこととかその時やっていた勉強法とかまとめていきます。 それぞれの期間に考えていたこととか。 1ヶ月目 英語話せないと今後大変そうだなー、と思い、勢いで登録しました。 暇だから課金したったwww pic.twitter.com/KngkOnJsdu — くえはる (@KueharX) August 22, 2020 その時のツイート ちなみに開始時のTOEICのスコアは800で、受験でそれなりに勉強してTOEIC対策をそこそこやったんだろうなー、っていうスコア。まぁ全く話せませんでしたが。 海外に住んでいたことも留学したことはないので純ジャパです、いぇい。 当初はとにかく受けるのが億劫、受けてる最中は必死に言葉を話そうとするけど出てこない。結局それっぽい表現を日本語でググってその場をやり過ごす。 終わった後に英語なんて話せなくても困らないしやめようかなと悩む。 それでも自分のお金と時間を使って勉強すると決めたのだからなんとか続けようと毎日受け続けました。 読んでいた本。 【音声DL付】改訂版 英会話ペラペラビジネス100 単行本 個人的にかなり好きな本。 便利な表現覚えて使い倒せばそれっぽくなるというのは確かになと思った。 2ヶ月目 まだまだ受けることが苦痛。 とりあえずレッスンを入れてその時間にPCを開いて頑張る。 ちょいちょい使えそうな表現を先生が教えてくれるのでそれを使ってやり過ごす。ちょっとずつ話せるようにはなるものの、レッスン終わりのフィー

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