フリーランス チャレンジ!!

フリーランス チャレンジ!!

現役フリーランスエンジニアが書く雑記ブログ

【Gitpod】ブラウザ上でGitHubのオンラインIDEが使えるようにりました!!

 これは便利です!!

 

GitHubのIssueをブラウザ上のIDEで修正できるようになりました!!

 

※確かでは無いですが、Chromeのエクステンション入れればIssues無くてもGitHub上のリポジトリも普通にオンラインIDEが使えそうです。記事の最後の方を参照ください。

 

※ブラウザはChromeかFirefoxをお使いください。

 この記事ではChrome使ってます。

 

 

オンラインIDEの使い方

まずは自分のGitHubでIssuesを開いて下さい。

※Issuesが無い人は適当にIssue作って。

 

Issuesを開いて「Gitpod」ボタンを押下して下さい。

f:id:ksakae1216:20180906075817p:plain

 

「Authorize TypeFox」ボタンを押下する。

f:id:ksakae1216:20180906080156p:plain

 

少し待ちます。

f:id:ksakae1216:20180906080418p:plain

 

「CREATE MY FREE ACCOUNT」ボタンを押下です。

※Gitpodからのニュース、アップデート情報をメール受信したい方は「I agree to receive〜」のチェックボックスをチェック

f:id:ksakae1216:20180906080615p:plain

 

Chromeのエクステンションを追加します。

f:id:ksakae1216:20180906080933p:plain

 

f:id:ksakae1216:20180906081222p:plain

 

 

はい、無事起動しました!!

バツボタン押下してIDEを表示します。

f:id:ksakae1216:20180906081451p:plain

 

f:id:ksakae1216:20180906081746p:plain

 

ソースの修正、動作確認もできる

それでは、修正と動作確認してみます。

f:id:ksakae1216:20180906083257g:plain

 

おぉ〜すごい、本当に動いた!!

感動モノです!!

 

終了したい場合は画面左上のアイコンを押下

f:id:ksakae1216:20180906083918p:plain

 

「STOP」ボタン押下します。しばらくするとSTOPボタンが消えるので、これで終了したことになります。

f:id:ksakae1216:20180906084108p:plain

 

Issuesが無くてもIDE起動できる

Chromeのエクステンションを入れたせいかわからないですが、リポジトリ上にも「Gitpod」ボタンが表示されIDEが起動できるようになりました。

f:id:ksakae1216:20180906084543p:plain

 

IDE起動するのはちょっと遅いですね。(1分くらいかな)

 

月10時間までしか使えないみたい

いや、ビックリ!!

Gitpod git-bolts git-IDE onto GitHub for in-browser code git-editing • The Register

 

Gitpod is available under a tiered pricing scheme. The free tier provides 10 hours of usage per month with unlimited workspaces and private repos. The basic and pro tiers, $19 per month tier (100 hours) and $39 per month (300 hours) respectively, are not yet available. There's also an on-premises version for enterprises. ®

 

Google翻訳すると

Gitpodは階層型の価格設定で利用できます。無料のティアは無制限のワークスペースとプライベートレポジスで毎月10時間の使用を提供します。基本階層とプロ層は、それぞれ月額19ドル(100時間)、月額39ドル(300時間)で、まだ利用できません。企業向けのオンプレミス版もあります。 ®

 つまり、毎月10時間は無料で使用できます。

月額19ドルで100時間使えるプランと

月額39ドルで300時間使えるプランがあるけどまだ有料プランは使えないそう。

「今日中にお願い」は今日中に終わらせなきゃいけないのか?

f:id:ksakae1216:20180827214334j:plain

常々思っていて、最近も言われたので思いの丈をここでぶちまけたいと思う!

 

ちなみに今日中にお願いって言う側の人この後読まないでね。

いっぱい文句言うから。

 

 

(ウソだな)

私は知っている。

「これを乗り切れば楽になる」は乗り切った後にもう一波🌊来ることを。

 

 

相手の言葉を信じるな!!

 

お願いする時は、困ってる姿を見せて優しく接してくるが一度相手がウンと言うとその後は手のひらを返したように納期をガチガチで守らせる。

 

「やっぱり終わりません」と言っても相手は聞いてくれないよ。

 

 

今日中に終わらせなくていいと思っている

「今日中に終わらせて」は、今日中に終わらせなくていいです!!

 

そもそも無理矢理終わらせると仕事の質が低い。

 

終わらせる事を目的としてるからある程度、システムが動けばそれでリリースしちゃうんだよね。

 

①急いで終わらせる

 

②確認は簡単にしてリリース

 

③しっかり確認してないから不具合発生

 

④ユーザー激怒、すぐ直せと言う(①に戻る)

 

大体、①~④を2回転、多いと34回転くらいします。

 

こういう場合、しっかりやった方が早いのに急いでやるから結果的に時間がかかる。

 

しかも急いでやるからソースも汚く、設計も悪いので次回この部分に機能追加、修正する時に時間がかかる。

 

急いで仕事終わらせる事がどれだけ悪いか分かりましたよね?

 

っていう事で「今日中に終わらせて」は、「今日中に終わらせなくていいです」

 

どう思う?

あなたはどう思う?

 

終わらせるべき?

終わらせなくてもいい?

 

「今日中に終わらせて」なんてのを聞いてたら、時間がいくらあっても足りない!!

 

「今日中にお願い」を言う人間は、人の時間を奪ってる事に気付いて欲しい。

 

「今日中にお願い」を連発するといつまでたっても根性で乗り切るから結果的に人が疲弊して誰もいなくなると思うよ!!

【Lancers × DODA】3分でわかる、あなたの適正年収

 

Gmailチェックしたらこのようなメールが来てました。

f:id:ksakae1216:20180822081551p:plain

 

メール引用

あなたのこれまでの経歴から“適正年収=あなたの本当の年収”を算出します。

 

経歴から適正年収=あなたの本当の年収がわかるそうです。

 

それにしても本当の年収って?

 

ま、3分でわかるならちょっとやってみるか。

 

適正年収を診断

はい、下記ページにアクセスして適正年収の診断を開始します。

assess.doda.jp

 

名前、生年月日、住まいの個人情報を入力して現在の仕事情報、年収などを入力します。

 

こんな感じ

f:id:ksakae1216:20180822083120p:plain

 

年収を査定するボタンを押下すると査定してくれます。

f:id:ksakae1216:20180822083334p:plain

 

おっ、511万?!

 

f:id:ksakae1216:20180822083734p:plain

 

288万円ダウンか。。。

 

 

まあ、そうだよね。

自分は、あまり普通の会社に向かないと思ってるので500万円もらえるってのは嬉しいかな。

 

診断後、ページスクロールすると3つの条件で求人を探せる。

f:id:ksakae1216:20180822084929p:plain

 

平均年収も出るので求人を探す目安になるね。

 

一度、適正年収を調べてみる事をおすすめします

今の収入に不満があっても無くても一度、適正年収を調べてみる事をおすすめします。

 

調べてみて自分の年収が低かったら転職を考えてみてもいいかもね!

せっかく働くなら年収高い方がいいし。

 

でも今の仕事に満足してるなら無理にじゃなくていいよ。

 

私は今41歳だけど、年収よりも仕事内容と仕事の仕方の方が重要だからお金で仕事変えることはない。

 

あくまで「もっと年収欲しい!!」、「今の仕事に不満がある」って人に転職をおすすめします。

 

尚、転職じゃ得られないさらに高い年収を望むのであればフリーランスエンジニアもおすすめします。

↓↓↓

www.freelance-osusume.work

【1カ月4,000円弱】プロテインは値段、味、安心感の3拍子揃ったザバスでキマリ!!

 プロテイン飲み始めました。

 

値段、味、安心感からのザバスを選んだよ。

※体を大きくすることを目的としてます。

 ダイエット目的のプロテインを探してる場合は、このページを参考にしないで下さい。

 

 

 

プロテイン選びのポイント

プロテインを選ぶポイントは、値段、味、安心感の3つじゃないかな?

 

そもそも私がプロテインを飲もうと思ったキッカケは筋トレを始めた事。

 

この記事にも書いた通り、毎朝早起きしてランニングしてます。

努力の結果が出ない? 客観的に見ると理由がわかるよ!! - フリーランス チャレンジ!!

 

ただ、最近はリモート作業で通勤がなくなり自由に使える時間が増えたので5時15分に起きてランニング、その後はバーベル使って筋トレもするようになりました。

 

せっかく筋トレするんだったら、プロテイン飲んで体大きくしたいなと思い、プロテインを飲もう、じゃプロテインって何を選べばいいの?というのを調べました。

 

そもそもプロテインっていつ飲むの?

どんなものを選べばいいの?

 

っていうのをネットで調べると

・運動直後、寝る前、朝一がおすすめ

・筋肉を大きくするならホエイプロテインがいい

とのこと。

 

プロテインを飲むタイミングはザバスの裏にもこのように記載されてます。

f:id:ksakae1216:20180812084357j:plain

 

値段は3,924円

※2018年8月12日時点の値段です

さて、ホエイプロテインを選べばいいのと、基本毎日飲む事がわかれば大事なのは値段ですね。

 

毎日飲むとなるとそんなに高いのは選べない。

 

ホエイプロテインで調べると2,000円台から6,000円台までが数多く出てきます。

 

私の場合だけど、毎日飲むから30回

筋トレするのが平日だけなので20回で

計50回分あれば1ヶ月持つ。

 

1ヶ月で6,000円はちょっと高いよな〜

 

で、いろいろ調べた結果、ザバスを選ぶことに。

 

2,000円台のお手頃価格のプロテインもあるんだけど外国製なんだよね。

なんで外国製がイヤかは後で書きます。

 

ということでギリ3,000円台のザバスが値段的に良かった。

ちなみにAmazonの定期おトク便を使うと3,532円(2018年8月12日時点)でさらにおトクに。

 

プロテイン生活がしっかり続くようならこの定期おトク便使ってもいいかも。

 

味は以外と美味しい

次に味です。

 

テレビとかでプロテインはそんなに美味しくないから牛乳で溶かさないと飲めないなんて聞いてた記憶があり、毎日飲むのに不味いのは致命的だなと思ってました。

 

実際、このザバスもそうだけど、50食分買って、不味かったらキビシイ。。。

 

で味についても少し調べると最近のプロテインはそんなに不味くないらしい。

 

ただ、不味いプロテインも飲んだことないのでそんなに不味くないがどのくらいのレベルかよくわからない。

 

まあ、ここは挑戦してみるかということで腹を決めました。

 

実際、自分が選んだのはココア味、単純にココアが好きだから。

 

プロテインの溶かし方の説明をみると牛乳か水を200cc〜300cc入れてプロテインを付属スプーン3杯です。

 

牛乳だと高くつくので私は水で溶かしてます。

 

最初は300ccでやってみたけど、水にうっすらココア味って感じ。

次に200ccでやってみると、まあまあ味の薄いココアって感じでした。

 

自分的には200ccが一番飲みやすいかな。

 

300ccだと量が多くて、飲むのが少し大変な上に、ココア味が薄すぎてそんなに美味しくない。

でも全然不味くはないよ!

うわっこれ飲めないなんてことはないです。

 

200ccは量もきつくないし、味もココア味を少し感じれるので飲んでて美味しいなと感じる、少なくとも不味いとは思わない。

 

また、運動直後で喉が乾いてるのもあり、簡単に飲み干せちゃう感じ。

 

ってことで味は結構大丈夫だよ!

 

国産メーカーによる安心感

そして日本のメーカーによる安心感です。

 

体の中に入るものだから安心感ってすごい大事だよね?

 

プロテインの値段を調べると2,000円台の安いものは外国製が多く、日本製は1つもない。

 

安かろう、悪かろうっていうのはどこにでもあるものだと思ってて自分の勝手なイメージだけど、安いプロテインを飲むのは正直怖い。。。

 

最初は何もなくても変なものが体に蓄積されて病気になるんじゃないか?

 

ここに関しては根拠がないけど、毎日体に入れるものだから国産メーカーを選ぶことにしました。

 

国産だから絶対安心かと言われればそうではないけど、確率的に外国産よりは安心かな?

 

シェーカーは100均でOK

シェーカーは正直100均でいいよ!

 

プロテインをAmazonで注文した後に、シェーカー無いや、飲めないじゃんって思い急いで調べたら、シェーカーだけで500円以上するから、100均に無いかなって探したらダイソーにあった。

 

f:id:ksakae1216:20180812092305j:plain

 

これ100円、300ccでも入るよ。

ちゃんと蓋閉めて振ってもこぼれないからこれで十分!

 

最後に

プロテイン飲み始めてもうすぐ1ヶ月。

 

腕周り中心に鍛えてるんだけど、少し二の腕が太くなった気がする。

 

私はゆる〜く頑張る方なのでゆっくりと継続してこのプロテイン飲みながら筋トレ続けます。

将来お金の不安がある場合に見直す3つの事(将来設計、収入源、保険)

将来 お金 不安

お金に関する不安ってあるよね。

 

・毎月の生活費

・子供の教育費

・欲しいものを買いたい

・住宅ローン

などなど。。。

 

生きていく為にかかる必要なお金をあげるとキリがない。

 

そんなお金を稼ぐ為に、好きでもない相手と長時間働かなきゃいけないなんて、そりゃあ働きたくなくなるよ、ストレスたまるよ、病気になるよ。

 

以前の私もストレスをため、病気になり、会社を辞めてということがありました。

 

今はサラリーマンを辞め、将来設計を考え、保険を見直した事で不安が大分無くなったのでその方法についてご紹介します!

 

 

将来設計して不安の対策を明らかにする

まずは、将来設計。

 

①あなたは将来、どうなってたい?

②いくつまで働きたい?

 

この質問に即答できる人ってそんなに多くない。

 

実際に私は

①あなたは将来、どうなってたい?

 →一生エンジニアとして生きて生きたい

 

②いくつまで働きたい?

→70歳まで働きたい

 

なぜかって?

 

エンジニアが楽しくて一生働きたいと思えるから。

それに住宅ローンが70歳まであるので70歳までは働きたい。

 

このように簡単でもいいから将来設計をすることが非常に大切!!

 

なぜかというと漠然とお金の心配がある場合、何も考えずなんとなくお金の心配をしてるに過ぎない。

 

逆にお金の心配をしたくないのであれば、まずは将来どうしたいかを考える事が必要ですよ。

 

明確なゴールがある事でそれに対して対策を打てばお金の心配がなくなるんです。

 

ポイント1

何も考えずお金の心配をしている。

将来どうしたいかを考える事で対策を打てるので結果、お金の心配がなくなる

 

収入源を複数にする

次は、収入源。

 

サラリーマンの場合、収入源は1つだけ。

そう会社からの給料だよね。

 

 

私の場合、フリーランスエンジニアとしての収入と、このブログの収入。

 

あと、そのうち国民年金基金も入ろうかと思っており70歳からは国民年金基金を上乗せした年金が収入源となります。

 

つまり

70歳まで:フリーランスエンジニアの収入+ブログ収入

70歳以降:年金+ブログ収入

ということになる。

 

ちなみに現状、全体の99%がフリーランスエンジニアの収入で、1%がブログ収入。

これをできれば50%ずつにして、さらに収入源を増やしていこうと考えてるとこ。

 

何故かというと、仮に

・エンジニア収入40%

・ブログ収入30%

・その他収入30%

となった場合、仕事が嫌になって辞めてもブログ、その他収入の60%があれば最悪死ぬことはない。

 

ソッコーで別の仕事探せばリカバリ効くよね。

 

このように複数の収入源を持つことで1つの仕事に対する依存を低くしてお金の心配を減らすことができる。

 

サラリーマンだと、難しいな〜とか思わないでね。

サラリーマンでもブログ収入得てる人はたくさんいると思うよ。

年20万円までなら所得を申告しないでいいしね。

積立NISAとかもあるから、サラリーマンは複数の収入源持てないって決めつけちゃダメだよ。

 

ポイント2

複数の収入源を持つ

 

保険を見直す

最後は保険だ。

 

一般的に、病気・ケガで入院した時の医療保険と死亡した時の生命保険に加入してる人が多いんじゃないかな?

 

確かに基本はそれでOKだ!

 

ただ、その保証内容は今の状況にあってるかな?

 

私の場合、5年以上前にまとめて保険に入ってからマンションを買い、妻が働き始め、フリーランスエンジニアになり、状況は大きく変わった。

 

そして世間の常識や、保険の保証内容も変わっている。

終身雇用が当たり前でなくなり、夫婦共働きも珍しくない時代。

サラリーマンでも副業OKになったりしている。

 

保険を契約してから5年以上経ってるのであれば、一度見直すことをオススメする。

 

私の場合、なぜか死亡した時に3000万もらえる保険に入ってる。(掛け捨てだが毎月結構な額を払ってる)

今となってはなぜこれを選んだのか理由も思い出せない。

 

ただ、今考えると不要だ。

死ねばローンはチャラになるし、子供が成人してなければ国から遺族年金なるものがもらえる、今は妻も働いてるから不足する生活費を補填するような保険に入ればいいのだ。

 

と保険屋さんが教えてくれた。もっともだと思った。

話がそれるが最近住宅ローンを変動から固定にした時についでに保険屋さんと話す機会があり保険を見直した。

住宅ローンを変動から全期間固定金利に変更した(毎月7千円支払いUP) - フリーランス チャレンジ!!

 

ちなみに医療保険もガンしか保証されない保険にしてたが、日本人男性の死亡原因3位が脳梗塞らしい。

なので脳梗塞も保証される保険に切り替えた。

 

ということで保険を見直すことでさらに自分が病気になったとき、死んだ後もお金の心配が無くなった。

 

あなたが保険を契約した時と今の状況は変わってないかな?

もし変わってるならぜひ相談してみたほうがいいよ!

 

契約しなくても相談するだけでもいい。

相談した結果、そのままでいいねというケースだって当然あるから。 

 

ポイント3

保険を契約した時と現状が変わってれば保険を見直す

 

下記いくつか保険見直しの相談ができるサイト広告を貼りました。

 

どれも相談は無料なので一度相談してみれば毎月の支払いが減ったり、現状とアンマッチな保険を見直すことができます。

 

[広告] 保険見直しラボ 

 

[広告] 株式会社保険ニュース

 

[広告] 株式会社保険コネクト 

 

最後に

誰しもお金の不安はあると思う。

 

でもね、何も考えずに漠然と不安に思っててもしょうがない。

不安だったらそれを取り除くことを考えればいいんだ。

ぜひこの記事を参考に考えて見直してみて!

 

ただ、あんまり深刻に考えなくてもいいと思ってる。

実際に心配することってほとんど起きないよね。下記記事でも書いたけど。

楽観的に考えれば人生はもっとラクになる - フリーランス チャレンジ!!

 

あと、サラリーマンじゃなくてフリーランスになってみようかなって思ったら下記記事も見てみて。

自由になりたい? それならフリーランサーになれ!! - フリーランス チャレンジ!!

iPhone 5sから7にして良かった5つの事

iPhone5s iPhone7

20187月時点でiPhone7に?(今更?)

 

しかも9月になったら新しいの出るんじゃないの?

 

はい、その通りです。

そんなの知ってるけど、機種変しました。

 

ここで言いたいのは、下記に当てはまる人は、iPhone7にしなよ!!

・スマホ何回か落として画面修理してる人

・押してもないキーが勝手に押される人

・最新のiPhoneじゃなくてもいい人

5s使ってる人

 

よし、当てはまる人は、次に進んで!!

早速はじめるよ!!

 

 

なぜ機種変しようと思ったか?

f:id:ksakae1216:20180804083408j:plain

 あと2カ月すれば9月の発表会で恐らく新型iPhoneが発売されるはず。

 

実際、私もそこで新しいiPhoneを買おうと思ってたのね。

 

でも最近、iPhone落として、画面バキバキにしちゃって、修理出した訳よ。

 

そこの修理が良くないのか、落としたせいなのか、とにかく勝手にキーが押される。

 

LINEしてる時にフリック入力で文字打つと、押してないのに入力されたり、何度押しても入力されなかったり、固まって操作受け付けなくなったりと、すごい不満を感じてたんだよね。

 

しかも仕事でslack使ってる時にこんな事が起きるとケータイ投げたくなっちゃって。

 

この状態では2カ月持たないと判断し、機種変することに。

 

実はiPhone落として画面割るの3回目で修理も3回してる。。。

まあ、4年くらい使ったからもう十分かな。

 

なぜ7なのか?

 

 

そう、なぜ7なのか?

 

機種変するにあたり、新品or未使用品にすることは決めてます。

 

なぜか?

 

中古品でもきれないiPhoneはあるんだけど中古品は、もしかしたら修理履歴があるかもしれない。

 

私は過去iPhoneの画面修理、充電できなくなりバッテリーの修理経験があります。

 

今時、iPhoneの修理は安くできてありがたいんだけど、その分良くない部品を使ってるんじゃないかと思ってます。

 

良くない部品は不満の原因に。。。

 

ってことで中古品は修理履歴があっても分からない。

 

ネットで値段を見ても中古美品と新品でも1万程度しか変わりません。

4万の中古美品と5万の未使用品だったら5万出した方が安心です!!

 

新品、未使用品となると当然値段も高くなります。

今出てるiPhoneは7、8、Xで一番欲しいのはX何だけど

高すぎる!!

 

iPhoneの調子が急に悪くなり買うので、妻にいきなり10万越えのiPhoneを買いたいとは言いづらい。

 

ってことで新品でも6万円ちょっとのiPhone7に。

ずっとジェットブラック 欲しかったし〜。

 

どこで買ったか?

f:id:ksakae1216:20180804083844j:plain

ネットを探すとイオシス、ムスビーなどたくさんのサイトが出てきて、地元でもゲオでケータイを販売してるんだけど、新品、未使用品は中々売ってないんだけど、ムスビー未使用品のiPhone7ジェットブラック32Gが手数料合わせて52,218円!!

 

 

コレだな。

 
という事で注文!!

f:id:ksakae1216:20180804071950p:plain

  

無事iPhone7到着、LINEのトークが一部消える

f:id:ksakae1216:20180804084025j:plain

 SIM入れ替える前にiCloudにバックアップをとり、新iPhoneにSIM差し替え。

 

iCloudのバックアップから復元する事ですぐにiPhone7も使うことができたんだけど、LINEのトーク履歴をバックアップするの忘れてた!

 

トーク履歴のバックアップが1週間前だったので直近1週間分のトークが復元できず。。。

 

他は問題なし、IIJなのでプロファイルをインストールして外でも使えるようになったし。

 

実際に何がいい?

f:id:ksakae1216:20180804084321j:plain

いっぱいあります!

結果的に7にしてよかった!!

 

5sから7にすることでどうしてもサイズが大きくなることだけ唯一のデメリットかなと思ってたけど、慣れてしまえば問題なし!!

 

モバイルSuica最高

普段、自宅で仕事してるんだけどたまにユーザーとの打ち合わせで外出することがあり、その時にモバイルSuica使うんだけど、ホント最高!!

 

バス、電車乗る時に一々財布出さなくていいし、Suica持ってるんだけど、チャージ足りないかもって駅でチャージする必要ないし。

 

Apple Pay便利

Apple Payも超絶便利!!

 

先に注意点としてはApple Payで使えるクレジットカードが限られている事。

私はたまたまApple Payで使えるオリコカードでした。

 

今までスマホで支払う経験がなく、コンビニ、スーパーなどで財布出して払ってたけど、iPhoneで支払えるのは超絶便利!!

 

ホント、これから財布持たなくてもいいんじゃないか?

念のため、数千円と免許証だけ入るケース持てば、財布なくすリスクもなくなるし。

 

容量大きい

5sは16GBしかなくて、こまめに写真をGoogleフォトに写して消さないとすぐに容量が無くなっちゃって不満に思ってたんだけど、7は32GBあるのでその心配が無い。

 

PUBG mobileがサクサク

最近ハマってるPUBG mobile。

 

5sの時は、まず起動ができなかった。。。

アプリ落としたりして起動までに5分以上かかることもしばしば。。。

 

7にしてみたら、ソッコーで起動するね。

サクサク動くね。うれしいね!!

 

画面の大きさは問題なし 

1番の懸念であった、大きさ。

 

実は少し前までは、機種変しても同じ大きさのSEにしようかと本気で思ってた。

 

このサイズに慣れてると7は大きい。

家電量販店で実物見てもやっぱり大きい。

 

でも実際使い始めたら、「大きくて、やだなぁ〜」って思うことは1度もなかったな。

5s、SEのサイズしか使えないと思ってる人でも使って一度使っちゃえば多分慣れると思うよ!

 

iPhone7良かったよ

f:id:ksakae1216:20180804085040j:plain

そんな事、言われなくても分かってるよ。と思うかもしれないけど、iPhone7に機種変して良かったよ!

 

iPhone5s使ってる人は、かなりの年数たってるんじゃない?

そろそろ替えどきかもよ?

iPhone7いいよ!!

【Go言語】エラトステネスの篩(ふるい)で素数を求めるプログラム(10万まで調べても0.02秒)

エラトステネスの篩 ふるい 素数

素数を求めるのに単純に判定するより、エラトステネスの篩を使えば計算量が少なくなるため処理が高速になります。

 

アルゴリズムとかあまり知らずにプログラム組んでる人はぜひ呼んでください。

ちょっと世界が変わりますよ!

(アルゴリズム勉強しようって気になります)

 

エラトステネスの篩

エラトステネスの篩 (エラトステネスのふるい、英: Sieve of Eratosthenes) は、指定された整数以下の全ての素数を発見するための単純なアルゴリズムである。古代ギリシアの科学者、エラトステネスが考案したとされるため、この名がある。

引用:wikipediaより

 


尚、エラトステネスの篩のアルゴリズムは以下の通りです。

1:2 から n までの整数を並べる。
2:生き残っている数の中で一番小さい(かつまだ p として使われていない)ものを新たに p とおき,p 以外の p の倍数を全て消していく。
3:2の操作を繰り返していき,p が n−−√ を越えたら終了。最終的に生き残ったものが素数。

 引用:エラトステネスのふるいとその計算量 | 高校数学の美しい物語

 

最近マイブームのGo言語でプログラムします。

 

エラトステネスの篩を使わないロジックとどのくらい処理時間に差があるかも確認してみます。

 

 

なぜエラトステネスの篩が速いのか?

そもそもなぜエラトステネスの篩が速いのでしょうか?

 

アルゴリズムを見てもピンとこないので、実例をあげて確認しましょう。

 

実例として0〜100までの数で素数を求めます。

※実際、0と1は素数では無いのでプログラムは2〜100の数から素数を求めます。

 

ちなみに素数とは1と自分自身以外で割り切れない数のこと。(3、5、7とか・・・)

 

通常の素数を求めるプログラム

2から100まで1つずつ自分以外で割れるかチェックしていきます。

 

①まず"2"を調べる

②"2"は"3"で割れるか? 割れない次の数を調べる

③"2"は"4"で割れるか? 割れない次の数を調べる・・・

④これを"100"まで調べて、割れないことがわかったので素数

 

このように素数の場合は、100までチェックしなければいけません。

ただ、素数でない例えば"4"の場合は、最初の"2"で割り切れるのですぐチェックが終わります。

 

エラトステネスの篩のプログラム

次にエラトステネスの篩ですが最大数の平方根までチェックすればOKです。

 

100の平方根は10なので2〜10までチェックすればいい。

そしてリストから調べてる数の倍数をふるい落とします。

 

実例でみてみましょう。

 

①まず"2"を調べる

②"2"で割れる数をリストから削除(4,6,8,10,12,14・・・)

③"3"で割れる数をリストから削除(15,21,27,33・・・)

④これを"10"まで調べて、リストに残った数が素数

 

エラトステネスの篩が速い理由

 ここまで通常のプログラムとエラトステネスの篩のプログラムの違いが分かったと思います。

 

なぜエラトステネスの篩が速いのか?

 

それはチェックする数です。

 

通常のプログラムは2〜100まで88回チェックしなければいけませんが、エラトステネスの篩は2〜10まで8回チェックすればOKです。

 

計算量が全然違うのでエラトステネスの篩が速いというわけです。

 

次にプログラムをみてみます。

 

エラトステネスの篩のプログラム

ポイントは5行目で平方根を求め、11行目のforループは平方根の値までしかループしません。 

gist3ed2096a8508c50067cedb3bab9042d4

 

普通のプログラム

gista8cd5ec2418d7d89fd3764b6efe39bff 

 

処理時間を計測

 さて、本当にエラトステネスの篩が速いのかプログラムを動かし処理時間を計測しました。

 

プログラムは下記です。(Go言語)

gist05a83ff5a238e13a3cc3717a82206e4e

 

実行結果はこんな感じ

f:id:ksakae1216:20180712105424p:plain

 

素数を求める数は2〜10万まで。

3回実行して平均は下記の通りでした。

エラトステネスの篩:0.02秒

普通に素数を求める:4.34秒

 

全然違いますね。

 

最後に

 処理数が多い場合、このような効果的なアルゴリズムを知っていて実装すればかなり処理時間が短縮されます。

 

数学(アルゴリズム)の勉強も必要だなと痛感しました。

 

最初はこの辺からかな〜〜

【Go言語】基本文法サンプル3(ゴルーチン、チャネル、select文 、同期)

Go 言語 基本 文法 サンプル

前回の続きで且つ最終回です。

 

www.ksakae1216.com

 

今回は、ゴルーチン、チャネル、select文、同期について解説します!

 

 

ゴルーチン

gist0a3d7bf520c67d2a5fc642c566b8d0ea

 

関数の前にgoを付けるだけで並列処理を実装できます。
ゴルーチン(並列処理)はとても軽いようです。
mainの処理はゴルーチンの終了を待たない。
ゴルーチンの結果を取得するにはチャネルを使う。(チャネルは次で説明します)

 

【実行結果】

f:id:ksakae1216:20180704145136p:plain

 

チャネル

gistf87619cef1b1e9607da7cac090e1eca6

 

送信専用、受信専用は主に関数の引数として受け取る際に使用する。
使わなくなったチャネルは最後にcloseする。
受信専用チャネルはクローズできない。
クローズ済みのチャネルにデータ送信するとランタイムパニックが発生。

 

【実行結果】 

f:id:ksakae1216:20180704145643p:plain

 

select文

gistb403cc61f37027c64598f3e2438f767b

 

複数のチャネルを待機する場合は、select文を使う。
defaultはどのチャネルも受診しなかった時に呼ばれる。
defaultが無い場合は、受信するまで待機する。

 

【実行結果】

f:id:ksakae1216:20180704150001p:plain

 

同期

gist80435d5c69ddf70b8d092edaabfdb1fe

 

WaitGroupをインクリメントする。
Doneでデクリメントする。
WaitはWaitGroupが0になるまで待つ。
つまり、並列でやりたい処理の数分インクリメントしてそれぞれの処理が終わればデクリメントしてWaitGroupが0になれば全ての並列処理が完了。

 

【実行結果】

f:id:ksakae1216:20180704150619p:plain

 

 Gitに登録しました

前回記事のソースに追加で今回のソースもGitに登録しました。

github.com

 

【関連記事】

このソースを試して見たい方は下記記事で簡単に開発環境を作成できますよ!

www.ksakae1216.com

【Go言語】基本文法サンプル2(interface、スライス、map、エラー処理、panic、recover)

Go 言語 基本 文法 サンプル



前回の続きです。

 

www.ksakae1216.com

 

今回は、interface、スライス、map、エラー処理、panic、recoverについて解説します!

 

 

interface

giste1476d1affd6034ebfcc9608ba237a29

 

8~10行目のインターフェースでEat()を実装してるのでCarlingGirlもFoodFighterもHumanとして扱える
正直Java経験者の私にはピンとこない仕様ですが慣れるしかなさそう。。。

 

【実行結果】

f:id:ksakae1216:20180702220343p:plain

 

スライス

gista6f23ce501f560d94d49649526f32c3b

 
配列と似ているが値を参照型で保持している。
スライス式"[:]"を使えばスライスになる。

 

【実行結果】

f:id:ksakae1216:20180702220508p:plain

 

map

gist8bc6953454cbbbb647327e7d6ad22044

 

マップの格納順は補償されない。
存在しないキーを指定してもエラーにならずnilが返る。

 

【実行結果】

f:id:ksakae1216:20180702220555p:plain

 

エラー処理

gist5d34abe64c6a932296cbfe435c7b52f0

 

11行目にコメントしてますが、エラーは2つ目の戻り値で返ってくるそうです。 

 

【実行結果】

f:id:ksakae1216:20180702220632p:plain

 

panic

gistea0ca98a4d1ac0f2f19d12a739223707

 

panicが発生すると以降のコードは実行されません。
但し、deferはpanicが発生しても実行されます。

 

またdeferはそれぞれの関数の最後に実行されます。

なのでdeferにはファイルやDBのクローズ処理を記載するのがいいです。

 

【実行結果】

f:id:ksakae1216:20180702220717p:plain

 

recover

gist55389539e6654d56183c35eafde4c7ce

 

panicが発生した時だけ処理したい場合、recoveryを使います。

 

【実行結果】

f:id:ksakae1216:20180702220804p:plain

 

Gitに登録しました

前回記事のソースに追加で今回のソースもGitに登録しました。

github.com

 

【関連記事】

このソースを試して見たい方は下記記事で簡単に開発環境を作成できますよ!

www.ksakae1216.com

DockerでGo言語(Golang)開発環境を5分で作成

f:id:ksakae1216:20180626183945p:plain

 

前回の記事でGo言語の基本文法をまとめました。

www.ksakae1216.com

 

せっかくだから動かしたいなと思い、Dockerで開発環境を作成しました! 

※「【Go言語 】基本文法まとめ - フリーランス チャレンジ!!」のソースは職場で書いたので自宅PCで開発環境を作成。

 

この記事のコマンドをコピペすれば5分で環境作って実行できるのでぜひお試しください。

※1箇所だけ、.bash_profileをviで修正するところがあります。

 

【目次】

 

5分で作成のステップ1(Dockerコンテナ作成と起動)

最新のCentOSをpullして起動します。

f:id:ksakae1216:20180626165852p:plain

【コマンド】

docker pull centos:latest

 

次にコンテナを起動しつつ接続します。

f:id:ksakae1216:20180626170736p:plain

【コマンド】

docker run -v /Users/sakae/Documents/dockerWork/dockerfile/golang/src:/home/ -it --name golang centos

※最後の"centos"はバージョンしてしないと"latest"と同じ意味になります。

 もしdocker pullコマンドで"docker pull centos:XX.XX"のようにバージョン指定した場合、ここのコマンドでもバージョン指定して下さい。

 

"-v"オプションで永続化します。

"/Users/sakae/Documents/dockerWork/dockerfile/golang/src"はローカルPCのパスとなるので適宜変更してください。

コロンで区切った"/home/"はコンテナ(CentOS)のパス。(そのままでOKです)

つまり、コンテナの"/home/"に置いてあるファイルをローカルPCからも参照できるようになります。

 

この永続化をする事でローカルPCのIDEでソースを見る事ができます。

 

5分で作成のステップ2(Go言語の開発環境作成)

さてコンテナ(CentOS)上に環境を作成します。

やることは下記の通り。

①事前準備

②Go言語インストール

③PATHの修正

④Gitからソースをクローンする

 

下記手順はコンテナ上で実行してください。

 

事前準備

【コマンド】

yum -y update
yum -y install wget
yum -y install git

 

※最新のCentOSですが念の為、yumをupdate。

 その後、wgetとgitをインストール

 

Go言語インストール

【コマンド】

wget -O go.tgz https://golang.org/dl/go1.10.3.linux-amd64.tar.gz
tar -C /usr/local -xzf go.tgz
rm -f go.tgz

 

2018年6月26日時点で最新のgoを取得し"/usr/local"に展開します。

 

PATHの修正

"~/.bash_profile"にGoのパス"/usr/local/go/bin"を追加。

f:id:ksakae1216:20180626180053p:plain

.bash_profileにパスを追加してください。(赤四角で囲ってる部分)

 

Gitからソースをクローンする

【コマンド】 

cd /home

git init
git clone https://github.com/ksakae1216/Golang.git

 

f:id:ksakae1216:20180626180354p:plain

"/home"に移動してもらってgitコマンドを実行。

すると"Golang"というディレクトリが作成されその配下にソースが配置されました。

 

これで無事、開発環境の作成が完了です!!

 

実行する 

【コマンド】

go run main.go

 

f:id:ksakae1216:20180626180825p:plain

 

はい、このように見事に実行されました!!

 

IDEで修正する

ちなみにDockerコンテナ作成時に永続化したおかげでローカルPCのIDEを使用する事ができます。

 

コンテナ上でクローンしたソースですがローカルPCの"/Users/sakae/Documents/dockerWork/dockerfile/golang/src"配下に"Golang"フォルダが作成されていてその下にソースも格納されているのでIDEで開く時はこのフォルダを指定してください。

 

今回IDEはVisual Studio Code(vscode)を使います。

f:id:ksakae1216:20180626181427p:plain

赤枠部分を修正しました。

 

再度実行しましょう。

f:id:ksakae1216:20180626181841p:plain

ちゃんと修正した通りになってますね。 

 

尚、コンテナを抜ける場合は、"exit"コマンドで抜けれてコンテナも停止します。

 

また、2回目以降コンテナを起動する場合は、下記のようにしてください。

【コマンド】

docker ps --all

上記コマンドでコンテナID(CONTAINER ID)を確認

 

docker start コンテナID

上記でコンテナ起動

 

docker attach コンテナID

上記でコンテナ接続

 

こんなイメージです。

f:id:ksakae1216:20180626182332p:plain

 

 

最後に

やっぱりDocker使うと簡単ですね!!

 

しかも、開発が終わればコンテナもイメージも削除してOK!

 

ソースはGitにあるから、またソース見たい時は今回と同じ手順で開発環境を復旧するだけ!