自炊続けてもう直ぐ1ヶ月が経過しようとしている
前回の2週間経過した時の記事からさらに2週間が経過し、もうかれこれ1ヶ月が経過しようとしている。
正直記事を読み直して感じたことは、2週間が経過した時の達成感の方が大きかったということ。
1ヶ月が経過しても、それがもはや当たり前になって、やらない自分が許せなくなる状態と言うのだろうか、そんな感情に陥った。
でもこれ、今まさに記事を書いていて、ふとある事を思い出したのだが、そう、あのナポレオンヒルも言っていたように(定かではない)、習慣化をすることが出来れば人生逆転する的なことを言っていたような…忘れたけど。
でも、これやっぱり実体験してみて初めてこんな感覚になったのは、ある意味自分の中では大成功だったんじゃないかな、とさえ感じている。
だって、普通に考えて三十路男が自炊を毎日続けるなんて普通じゃあり得ないし、ましてや体重も1キロ落とせて、BMI指数的にも改善できて、とにかく素晴らしきかなこの人生、みたいなことになってるんですもの!!!
で、この調子でどんどん苦手なこととかやりたかったけどなかなか一歩が踏み出せずにいた、あんなことやこんなこともやってみようと思ってきた。
次やることも、自分への戒めとして宣言しておこう。
今度は業務で使えるようなことにしたいな。
最近はケータイでゲームばっかやってる生活を続けてちょっと無駄な時間を過ごしてしまっているなと感じている。
例えばこんなやつ系にはまっている。
無双系ゲームってほんと気持ち良い気分にさせてくれるし、何より自分って凄いんじゃないかって勘違いしてしまうような感覚に陥る。
だからと言うわけじゃないけど、敢えてそう言う類のことをやめてみて、その代わりにアプリの管理サイトみたいなやつを、最近はやりのnginx unitとか言うnginx上で動かせるアプリケーションをgoとかで書いてみたいな。
勉強になったこととかはブログにメモしよ。
自論。プレイングマネージャーの役目、心構え、働き方
プレイングマネージャーになったぞ
今の自分の立場上、組織の中のプレイングマネージャーという立場でメンバーをリードしながら自らも開発を行っている。
プレイングマネージャーってM(マネージャー)に重きを置くか、P(プレイヤー)に重きを置くか、その時々の状況や人それぞれなところもある。
自分はどちらかと言うと、マネージャー業務が7割で、プレイヤー業務が3割。もちろん平均するとって話。
プロジェクト全体の進捗管理が思わしくないときは、プレイヤーを一時中断する。責任の重さで測ったとき、マネージャーとしての役割がやっぱり大きい。その責任が果たせていないと、とんでもない事態に陥ってしまう。
その後にのしかかる重圧もとんでもない。もっと上の人たちからのね。
プレイングマネージャーは、プレイヤーに傾いてしまうと、僕はそのチームは絶対良い状態ではないと思う。もしくはとてもヌルいチームかのいずれかだ。
本当に難しい。
プレイングマネージャーの心構え
だから僕の考えるプレイングマネージャーとしての心構えはこう。
プレイングマネージャーは実質マネージャー。つまり責任者である。責任を全うするために、開発遅延が発生しそうなところや、今後起こりうるであろうリスクを最小限にとどめる仕事だ、と。
だからこそ、そのために必要なことが開発作業そのものであれば、先回りして解決に向かう。そう言ったモチベーションで常にプロジェクトの安定化を図ることが大事なんじゃないかな、と。
我ながら、ものすごくよくできた考え方だと思う。
プレイングマネージャーのもう一つ重要な役目・役割は、プロジェクトの目的を常に意識すること。これもかなり大事なことだ。目的は現場ではついつい忘れてしまいがちで、目の前の課題に対する思考で頭がいっぱいになってしまう。
マネージャーはそれが当たり前のようにできているだろうが、プレイングマネージャーはその点が甘いのではないか?と周囲を見ているとよく感じる。
現場では目の前の次々と起こりうる課題を解決することもメチャクチャ大事なこと。それをしないとスケジュール遅延に拍車がかかる。
そんな時に、鶴の一声をプレイングマネージャーがかけてあげ、ダメ押しで、目的に立ち返って見る、と言うことをしてあげられたら、神様だと崇められるに違いない。
最後に
なお、今の自分は、そんな理想的なプレイングマネージャーの1/1000000000くらいの実力だ。
MySQLでカテゴリー(グループ)ごとのTOP3(ランキング上位3つ)ずつ抽出する
MySQLでグループごと上位N件を取得するのは無理という話
MySQLに限らずOracle、PostgreなどのRDBMSにおいて、命題に対する実装は1クエリーでは不可能ということは有名な話です。
あるカラムに設定されているグループコードごとのスコアや数値順に並べた時、そのグループごとにN件抽出する場合、少なからず複数のクエリーを発行することになるのですが、その手法はいくつかあります。
要はサブクエリーを書いたりInnerJoinする方法などの中で、もっとも負荷やパフォーマンス的にこれだ!というものを採用するのがベストプラクティスなのですが、調査するには実行計画をみるしかないですね。
まずは準備段階として、下記のような欧米の町ごとの人口を管理するテーブルを例に作成して話を解決してみます。
CREATE TABLE cities ( city VARCHAR(80), country VARCHAR(80), population INT ); INSERT INTO cities VALUES ('New York', 'United States', 8175133); INSERT INTO cities VALUES ('Los Angeles', 'United States', 3792621); INSERT INTO cities VALUES ('Chicago', 'United States', 2695598); INSERT INTO cities VALUES ('Paris', 'France', 2181000); INSERT INTO cities VALUES ('Marseille', 'France', 808000); INSERT INTO cities VALUES ('Lyon', 'France', 422000); INSERT INTO cities VALUES ('London', 'United Kingdom', 7825300); INSERT INTO cities VALUES ('Birmingham', 'United Kingdom', 1016800); INSERT INTO cities VALUES ('Leeds', 'United Kingdom', 770800); // 確認 mysql> select * from cities; +-------------+----------------+------------+ | city | country | population | +-------------+----------------+------------+ | New York | United States | 8175133 | | Los Angeles | United States | 3792621 | | Chicago | United States | 2695598 | | Paris | France | 2181000 | | Marseille | France | 808000 | | Lyon | France | 422000 | | London | United Kingdom | 7825300 | | Birmingham | United Kingdom | 1016800 | | Leeds | United Kingdom | 770800 | +-------------+----------------+------------+ 9 rows in set (0.00 sec)
ここで、アメリカ、フランス、イギリスそれぞれの市区の人口を多い順に並べた時、それぞれの国の市区を2つまで抽出して取得したいと思います。
SELECT city, country, population FROM (SELECT city, country, population, @country_rank := IF(@current_country = country, @country_rank +1, 1) AS country_rank, @current_country := country FROM cities ORDER BY country, population DESC ) ranked WHERE country_rank <= 2;
このクエリの結果は下記のようになります。
city | country | population |
---|---|---|
Paris | France | 2181000 |
Marseille | France | 808000 |
London | United Kingdom | 7825300 |
Birmingham | United Kingdom | 1016800 |
New York | United States | 8175133 |
Los Angeles | United States | 3792621 |
動作説明
MySQLでは行番号を取得するROW_NUMBER()が用意されていません。(Oracle、Postgreなどはこれを利用する方が効率が良い) 一方MySQLではユーザ変数やセッション変数などが利用できます。
この変数は初期化が不要で、なおかつ計算結果取得のためにも利用できます。また、中間結果の保持も可能です。
@current_country := country
この行は、実行途中のrow(行)ごとに(foreach的なこと)そのcountryカラムの値を保持しておくことができます。
次に
@country_rank := IF(@current_country = country, @country_rank + 1, 1)
この式の意味するところは、すでに取得した@current_countryが行ごとに実行されたcountryカラムと一致した時に@country_rank + 1
した結果を返します。それ以外の場合は1を返却します。
MySQLのIF(a, b, c)の補足
MySQLのIF文は三項演算子的な見え方に近いです。aは条件式で、真の場合bを返却。偽の場合cを返却。
話を戻しますと、 実際にこのサブクエリー部分のみを実行すると下記のような結果になります。
mysql> SELECT city, country, population, -> @country_rank := IF(@current_country = country, @country_rank + 1, 1) AS country_rank, -> @current_country := country -> FROM cities -> ORDER BY country, population DESC -> ; +-------------+----------------+------------+--------------+-----------------------------+ | city | country | population | country_rank | @current_country := country | +-------------+----------------+------------+--------------+-----------------------------+ | Paris | France | 2181000 | 1 | France | | Marseille | France | 808000 | 2 | France | | Lyon | France | 422000 | 3 | France | | London | United Kingdom | 7825300 | 1 | United Kingdom | | Birmingham | United Kingdom | 1016800 | 2 | United Kingdom | | Leeds | United Kingdom | 770800 | 3 | United Kingdom | | New York | United States | 8175133 | 1 | United States | | Los Angeles | United States | 3792621 | 2 | United States | | Chicago | United States | 2695598 | 3 | United States | +-------------+----------------+------------+--------------+-----------------------------+ 9 rows in set (0.01 sec)
このcountry_rank
が最後のWHERE句の中でWHERE country_rank <= 2
とすることで、取得したい上位N件を取得することになります。
今回はグループの数が不定で量が多い場合にもっとも最適化されたクエリーの紹介でしたが、グループの数が2とか3とかの場合は、シンプルに一つ一つの上位N件の結果をUNION ALLで繋いだ方が速度が出るようです。
今のところ2週間毎日自炊出来てる自分カッコイイを保ててる
正直なところ、コストパフォーマンスの観点だけで判断すると、外食や弁当を買って食事を済ますのとさほど変わらない。
ここで言うコストパフォーマンスとは、単なる料金的な側面だけでなく、費やす時間、脳のCPUリソースの消費量、その他諸々を含む話だ。
ただ、やはり健康面のパラメータを追加すると、途端に右肩上がりの曲線を描くようになるのは間違いねえ!という結論に至った。
そして、自炊するという小さな達成感、成功体験が自分の精神衛生上かなりいい働きかけをしてくれている。
そして、多少疲労がたまっていたり、仕事のストレスなどがある状態で続けるという、かなり困難なことをやってのける、これこそがまさに自分のためになっているという魔法の暗示にかかる。
俺、カッコいいんじゃね?
この状態を続けるといいことばかりが起きる。
さてさて、あと何日続けられるかな?
結果はまたポストする。
仕事がはかどる時と全然集中できない時ってなんなの?
マジで困る!!
忙しい時はタスクに追われて忙殺されて、その密度の濃さなんか気にとられはしないんだけど、結果のアウトプットの量が違いすぎてダメだーってなるわ
【メンズ】所要時間2分。ミディアムヘアを一瞬でパーマ風にスタイリングする方法
時間がない会社員の方や、寝坊した大学生のメンズ諸君。
私は現在29際会社員ですが、髪型が割と自由なIT会社に勤めていることもあり、時短でおしゃれな髪型のスタイリングでセットできる方法を10年以上前から実践しています。
今回のテーマは「ウェッティーなパーマ風」。
ミディアムヘアのメンズにとってはヘアアレンジのバリエーションが多いので、たまにあえていつもと違う雰囲気を出したり、ちょっとおしゃれに決めたいなんて時に便利な技です。
そして何よりも一番嬉しいこのスタイリング方法のメリットですが、超時短ということ。実際に手を入れる時間は2分程度。僕は実質1分くらいで完了してしまいます。
もはやご存知の方も多いかもしれないので、サクッとご紹介しますね。
用意するもの
- 濡れた髪の毛
- ヘアワックス(ハード系のツヤは中くらい程度のもの)
- ドライヤー
手順
- 濡れた髪の毛をタオルドライ(割としっかり吹いてもOK)
- 半乾きの状態でヘアワックスを多めに根元からしっかりつける(乾いた状態に利用する2倍程度)
- 結構適当にぐちゃぐちゃにして放置(10分くらい放置してOK)
- ほぼかわく寸前で30秒ほどドライヤーで形を整える
以上。
信じられないかもしれないが、これで直毛の人でもかなりパーマ風の色っぽいヘアアレンジの完成。
ヒョーラリの精神
私はいかにしてヒョーラリ状態に突入出来たのか、ここでその答えを解き明かそうではないか。
ヒョーラリとは、思いがけない出来事に感情のコントロールが困難な状態になり、精神が興奮状態に陥ることを示す。
あえてヒョーラリ状態に自らを変遷させることで、精神のコントロールが得意になる恩恵すらある。
まるで真逆のことを言っているようだが、
精神が興奮状態になると、それを沈めた時の心の安定度合いは、平凡な心と比べても格段に安定していることになる。
判断に迷ったら、これはまさしくヒョーラリの精神でヒョーラリになり得るであろう選択をした方が、人生間違いなく楽しいに決まってる。
何故私がここまでヒョーラリな状態を好むのかについては、例えば通勤ラッシュの電車で人がちょっとでもぶつかろうものなら、相手が誰であろうとキレまくるおじさんが多い。そういった類の、普段は決してキレキャラでもなんでもない人が、相手のことなど御構い無しにキレまくるのは本当に見るも無残な精神状態だ。
私はここでヒョーラリの精神を提唱したい。
キレキャラおじさんがヒョーラリ状態で電車に乗ると、間違いなくキレキャラではなくなる。
理由は意図も簡単だ。
そう、電車に乗る前に一度ヒョーラリ状態になっておき、電車が到着する段階では心を安定状態に持って行き、乗車して欲しい。
そうすれば、ここは天国か?と勘違いするほどに心穏やかで通勤ラッシュの時間を過ごすことができるようになるからだ。
都心に住む日本人に足りないものは、まさにヒョーラリの精神。
あとはどのようにして、思いがけないことに遭遇するか?については、いずれのエントリで記載したいと思う。
おはようございます!