Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all 21069 articles
Browse latest View live

未経験から始めるHTML/CSS ~float編~

$
0
0

はじめに

2020年2月より未経験ながらHTML/CSSをProgateにて学習を開始ました。
その中で、HTML/CSSを学習するに当たって私自身が疑問に思ったことを纏めてみました。
私が疑問に思った事が、今後お互いの学習に役立てれば良いと考えqiitaを始めました。
今回はその2回目、floatについて説明して行きます。

対象者

  • ProgateでHTML/CSSを学習中の方

自己紹介

こんにちは。
私は現在27歳で、4年間半導体業界でテストエンジニアとしてSierにて働いております。
この度半導体業界の不景気により仕事がない状態が続いており2月29日を持ちまして退職、
また脱Sierを目指し学生時代に興味があったweb関係の仕事に就こうと考えている者です。

floatとは?

floatの役割はブロック要素を縦から横にする際にします。
というのもブロック要素は要素を縦並びする性質があります。

スクリーンショット 2020-02-10 23.24.59.png

そのためブロック要素を横にする際に必要なのがfloat: leftです。
実際にfloatにleftを掛けてみましょう。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><title>  float  </title><linkrel="stylesheet"href="style.css"></head><body><divclass="red"></div><divclass="blue"></div></body></html>
style.css
.red{background-color:red;float:left;width:200px;height:200px;}.blue{background-color:blue;float:left;width:200px;height:200px;}

上記のソースコードを実施すると、divタグ要素を左寄せで横にする事ができましたね。
これを利用する事で横並びのメニューバーなども作る事ができます。

スクリーンショット 2020-02-10 23.13.40.png

次にblueのブロック要素にfloat: rightを掛けてみましょう。

style.css
.red{background-color:red;float:left;width:200px;height:200px;}.blue{background-color:blue;float:right;width:200px;height:200px;}

上記のソースコードを実施すると、divタグ要素を右寄せで横にする事ができましたね。
float: leftが左寄せ、rightが右寄せと忘れないにしましょう。
スクリーンショット 2020-02-11 0.42.34.png

子要素と親要素

次に子要素と親要素にfloatをかけた際にお互いにどういう影響を与えるか確認します。
その前に、floatを掛けない状態ではどうなるでしょうか。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><title>  float  </title><linkrel="stylesheet"href="style.css"></head><body><divclass="parent">    <divclass="child"></div>  </div></body></html>
style.css
.parent{background-color:red;width:200px;height:200px;}.child{background-color:blue;width:100px;height:100px;}

子要素、親要素両方ともブロックレベルなので縦並びでまた子要素は親要素に抱合されます。
スクリーンショット 2020-02-11 6.05.13.png

では親要素にfloatを掛けた際に子要素がどのような挙動をするか見てしましょう。
親要素のみにfloat: rightを掛けてみます。

style.css
.parent{background-color:red;width:200px;height:200px;float:right;}.child{background-color:blue;width:100px;height:100px;}

子要素は親要素の影響を受け一緒にfloat: right、つまり親要素と共に右寄せしました。
スクリーンショット 2020-02-11 6.25.48.png

次に子要素のみにfloat: rightを掛けた際に各要素はどうなるでしょうか。

style.css
.parent{background-color:red;width:200px;height:200px;}.child{background-color:blue;width:100px;height:100px;float:right;}

子要素は親要素内で右寄せになりましたが、親要素は子要素の影響を受けません。
この子要素と親要素の関係を覚えて行くとfloatさせた際のレイアウト崩れを防止できますので
忘れないようにしましょう。

おわりに

学習中にふと「要素を右寄せにした際に、意図しない要素まで右寄せしレイアウトが崩れる」
事があり、今回疑問に思ったのでfloatさせた際にの親要素と子要素の関係を調べてみました。
私の経験が皆さんの役に立てれば幸いです。


今からスマホアプリの学習をしようとしてる人に向けて!

$
0
0

1. はじめに

私は新卒でITベンチャーに入社して、現在スマホアプリのフロントエンドエンジニア(※以下 アプリのフロント)として、
Android、iOS共に、主にECアプリなどを開発しております。
そんな私がスマホアプリの学習をしようか検討中の方に向けて、「アプリのフロントはこんな感じ」というのを共有させていただければと思い記事にしました。

2. スマホ開発の仕事はある?

学習するか悩んでる言語がある方の多くは、「その言語を学んでも仕事が無いんじゃ意味がない」と思っている方だと思います。
確かに「仕事がない」=「必要とされていない」と言っていいと思うので、これから学習する言語は仕事が多く取れる言語が良いですよね。
その点、スマホのエンジニアは仕事があると私は胸を張って言えます。
これは「勤めている会社の中で仕事があるから」「自分がやっているから」というだけが理由ではありません。
私は趣味で英語の勉強会に行くのですが、その際職業の話になりアプリを作っていることを話すと、
結構な確率で「こういうサービスを考えているんだけど…」と相談されます。
今、何かサービスを作って流行らせようとする人は「アプリを作ろう」と考える人が多いと思います。
一昔前Webサイトのエンジニアが引っ張り凧だったように、アプリもサービスの入り口として考える人が多くなった今では、比較的仕事は取りやすくなっていると言えると思います。

3. 将来性は?

いきなりマイナスな事を言いますが、近い将来アプリの言語が衰退するのは間違いないと思います。
その将来が何年後になるかは分かりませんが、スマホがもの凄い勢いで発展したように、
スマートグラスなのか、スマートウォッチなのかは分かりませんが、次のハードが進化した時、
必ずスマホ周りの言語も衰退します。
ただこれはどんな言語もほぼ同じなので、月並ですが、日々情報を追っていくしか無いと言えるでしょう。

4. 学習コストは? Python、Ruby、C++と比べたら?

4-1) 難しさのレベルは?

私が学習したことのある言語で具体的にアプリ等を最後まで作ったことのある言語は、
Swift、Kotlin、Java、 JavaScript、GAS、Python、Ruby、C#(Unity)、C++です。
これらを実際に学習してみて、アプリのフロントで主に扱う言語のSwift、Kotlin、Java Script (React-Nativeなど)、C# (Unity)の学習コストを比較して考えてみると…
中くらいのレベルの難しさ、と僕は言いたいです。

複数の言語を学習したことがある方ならお分かりいただけると思うのですが、
基本文法の学習コストはどれもそんなに変わりません。個々の好みの範囲と言えると思います。
現によくRubyやPythonは学習コストの低い言語として取り上げられますが、僕はあまりそう思いません。

4-2) 学習コストの差

では学習コストで生まれる差は何か?
それは何に使うかです。Pythonなら機械学習など、RubyならWebアプリ作成など、C++ならPCのリソースに関わるプログラムの作成…などなどです。
ではアプリのフロントで使用する言語では?
当然スマホのアプリを書くためです。
他の言語と比較して目的がはっきりしている分、学習者が突っかかる問題も同じ事が多いです。
そのためネットでエラーを検索するとその解決法は他の言語に比べ見つけやすいです。
初学者にとって入門しやすいと私は思います。

4-3) アプリのフロントならではの難しさ

ではなぜ「Swiftは簡単な言語」と、手放しでは言えないのか?
その主な理由はOSやハードウェアの進化にあります。
皆さんも日々生活されていて、新しいiPhoneのニュースなどはTVやYouTubeなどで、よく見かけると思います。
Androidも同様に日々革新的な進化をし続けています。
アプリのフロントはこれらを追い続けなければならないのです。
アプリのフロントの言語は初学者にとっては入門しやすいですが、どれだけ熟達しても学習が定期的に必要な言語と言えると思います。
これが私が簡単が言語とは言い難いと思う理由です。

5.クロスプラットフォーム?ネイティブ?

少し突っ込んだ話になります。
まず学ぶなら、React-Nativeなどのクロスプラットフォームがいいか、ネイティブがいいか?
私はネイティブをオススメします。
というのもクロスプラットフォームを使ってもどのみちXcodeやAndroid Studioの使い方を知る必要がありうるからです。
例えばReact-Nativeでアプリを書いた場合、iPhoneの実機でのデバッグはXcodeからビルドする必要があります。
また、アプリのアーカイブやライブラリの設定、証明書の設定などをする際も同様です。
せっかくアプリを書いたのに、そこから使ったことのないツールをまた一から学習するのは少しうんざりしますよね。
ですので、チュートリアル程度でいいのでSwiftとKotlinである程度学習してから、クロスプラットフォームを使用することをオススメします。

6.最後に

色々とごちゃごちゃ書きましたが、
私はアプリのフロントはとても楽しくやらしていただいております。
世の中から必要とされている実感がある、とてもやりがいのある仕事です。
この記事が少しでもスマホアプリのフロントエンドエンジニアになろうと思っている方のお役に立てたら、とても嬉しいです。

眼球疲労には気をつけよう

$
0
0

先日眼球疲労?で頭痛が酷くやむなくプログラミング学習を中断しました...
プログラミング学習でパソコンは必須かと思いますが、画面を見れる状況ではなかったので(とにかく吐き気がヤバイ)単語とかRailsの仕組みの流れとかを頭でイメージしたりとかしてましたが、結局頭痛であまり集中できませんでした。
人によって耐性が違うと思いますが、予め自分の限界を予測して定期的に画面から目を離すことを意識した方が良いなぁと身をもって体験しました;;
ちなみに無理やり学習を継続しようと思いましたが、効率悪すぎて無理ゲーだったのでまずそういう状況に陥らないように気をつけましょう\(^^)/

WindowsでグローバルIPアドレスを確認する方法

$
0
0

確認したい理由

Azure で Azure Database for MySQLを立てたのだが、接続するためにファイアウォール規制に許可サービスとして自IPアドレスを登録する必要があった。

環境

Windows10 Home
XAMPP 7.3.11
Azure Database for MySQL 5.7

ipconfig /all ではわからない

ipconfig /all叩けばわかるだろうと思ったのだが、載っていなかった。

Webサービスで調べる

以下のサイトで調べる。アクセスすれば載っている。
アクセス情報【使用中のIPアドレス確認】
https://www.cman.jp/network/support/go_access.cgi

結果

無事にわかり接続できた

余談

ちなみにコマンドラインからMySQLで接続しようとしたら、、、

C:\xampp\mysql\bin>mysql --host mysql-hogehoge.mysql.database.azure.com --user hogehoge@mysql-hogehoge -p
Enter password: ********

あなたのグローバルIPは許可されてないよ!と出るのでこれでもわかる。

ERROR 9000 (HY000): Client with IP address 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server.

Python3をインストールする方法

$
0
0

Background

何もない状況から低コストでプログラミングを学ぶ方法を考えてみた。(Mac編)
タダでプログラミングを学ぶ方法を考えてみた。
の続きです。

これらの初歩的な話は文部科学省インパール作戦的にプログラミング教育2020 を始めるにあたって、公共以外で家で学習する時に最低限のコストですすめる方法をまとめていて、おそらくこの辺の需要はありそうと思ったためです。

2回のまとめの中で中古のMacで学習しましょう!
と書きましたがもしターミナルを開いてPythonを使うとなると、そのPythonのバージョンが2系と古いものだと思います。

個人的には
プログラムの文法を学ぶためだけだったら古いものを使っても問題ない
と思っています。

新しい3系との違いとしては printの書き方や日本語文字列の使い方あたりが違っていて、それ以外だったらほぼ一緒です。

最低限変数,文字列,コメントを半角英数字のみで書いてもプログラムは実行できます。

でも、学習をもう少し進めてアプリケーションを作ってどこかで公開したいというモチベーションがあった場合は最新の3系をインストールすることを推奨します。

というのは2系は、先月2020年1月でサポートが終了して4月に最終リリースをしてそれ以降はセキュリティに問題があっても更新はないからです。また、Python3系がリリースし始めの頃はパッケージの数は2系よりも劣っていましたが今では3系が主流です。

ここでは、Python3系をインストールする方法をまとめてみます。

Wifi

Python3系をインストールするためにはネットワークに接続する必要があります。
約30MBと容量サイズは必要ないのでフリーWifi or デザリングでいいかと思います。

Method

Python3系をインストールする方法は

  • 公式サイト
  • Homebrewを使う

の2つあります

Official Page

公式ページ
https://www.python.org/downloads/

python.png

ここからパッケージをダウンロードしてインストールするだけです。

homebrew

MacでPython以外のプログラム・アプリケーションを動かしたい場合はパッケージ管理ツールであるhomebrewを使うのがいいです。

Homebrew

このサイトの通り、
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
をターミナルにペーストすればOKです。

あとは、

brew install python3

とすればインストール完了です。

本当にこれだけです。

3系を実行するときは、

$ python3

です。

pythonのままだと今まで通り2系が実行されます。

念のためpython3がインストールされているか確認するにはバージョンを見ればいいです。

$python3-VPython3.6.8

PostScript

PCに無料でwifiで接続する話は不要だと思いたい。
今更感が半端ないですが、スマホしか使っていない場合は知らない人がマジョリティな気がしたので掲載してます。:no_mouth:

Reference

未経験から始めるHTML/CSS ~float解除編~

$
0
0

はじめに

2020年2月より未経験ながらHTML/CSSをProgateにて学習を開始ました。
その中で、HTML/CSSを学習するに当たって私自身が疑問に思ったことを纏めてみました。
私が疑問に思った事が、今後お互いの学習に役立てれば良いと考えqiitaを始めました。
今回はその3回目、float解除について説明して行きます。

対象者

  • ProgateでHTML/CSSを学習中の方

自己紹介

こんにちは。
私は現在27歳で、4年間半導体業界でテストエンジニアとしてSierにて働いております。
この度半導体業界の不景気により仕事がない状態が続いており2月29日を持ちまして退職、
また脱Sierを目指し学生時代に興味があったweb関係の仕事に就こうと考えている者です。

その前にfloatとは?

floatの記事については前回書きましたので下記を参照下さい。
未経験から始めるHTML/CSS ~float編~

float解除の前に

float解除の説明前にこちらのソースを見てください。
こちらのプログラムは子要素のみにheightを適用し親要素にはheightを適用していません。
さてこのプログラムの実行結果はどうなるでしょうか。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><title>  float  </title><linkrel="stylesheet"href="style.css"></head><body><divclass="parent">    <divclass="child"></div>  </div></body></html>
style.css
.parent{background-color:red;}.child{background-color:blue;width:100px;height:100px;}

下記が実行結果です。親要素にheightを適用していませんが抱合の関係にあるので、
子要素に応じて親要素の高さが変動します。
スクリーンショット 2020-02-11 9.09.44.png

では次にfloatを子要素に指定し親要素にheightを指定しなかったらどうなるでしょうか。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><title>  float  </title><linkrel="stylesheet"href="style.css"></head><body><divclass="parent">    <divclass="child"></div>  </div></body></html>
style.css
.parent{background-color:red;}.child{background-color:blue;width:100px;height:100px;float:left;}

下記が実行結果です。何と親要素が消えてしまいました。
実は、floatを子要素に指定し親要素にheightを指定しないと親要素の高さが0になリます。
では、親要素に高さを認識させるにはどうしたら良いでしょうか?
そこで出てくるのがfloat解除です。

スクリーンショット 2020-02-11 9.22.05.png

float解除

前置きが長くなりましたがfloatを解除する3つの方法を説明します。

  1. float直後の要素にclear:bothを適用。
  2. 親要素にoverflow:hiddenを適用。
  3. 親要素にclearfixクラスを適用。

1. float直後の要素にclear:bothを適用

progateのHTML/CSSの単元で出てきますがclear:bothを使用するとそれ以降の要素は
floatの影響がなくなります。一番シンプルですが、人よっては毎回float直後の要素に
clear:bothを使用するのでソースが冗長的で美しくないと感じる方もいるでしょう。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><title>  float  </title><linkrel="stylesheet"href="style.css"></head><body><divclass="parent">    <divclass="child"></div><divclass = "floatRelease"></div><!--毎回書くとソースが冗長--></div></body></html>
style.css
.parent{background-color:red;}.child{background-color:blue;width:100px;height:100px;float:left;}.floatRelease{clear:both;}

2. 親要素にoverflow:hiddenを適用

clear:bothより冗長でないですが注意しないといけない点があるので個人的は推奨しません。
overflow:hiddenは子要素が親要素をはみ出した際に表示されないという欠点があるからです。
position: relativeとabsoluteを使用した際に注意が必要です。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><title>  float  </title><linkrel="stylesheet"href="style.css"></head><body><divclass="parent">    <divclass="child"></div></div></body></html>
style.css
.parent{background-color:red;overflow:hidden;}.child{background-color:blue;width:100px;height:100px;float:left;}

3. 親要素にclearfixクラスを適用

上記2つと違い特にデメリットがないので使い易いです。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><title>  float  </title><linkrel="stylesheet"href="style.css"></head><body><divclass="parent clearfix">    <divclass="child"></div></div></body></html>
style.css
.clearfix::after{content:"";display:block;clear:both;}.parent{background-color:red;}.child{background-color:blue;width:100px;height:100px;float:left;}

おわりに

Progateではfloatの解除はclear:bothが使用されいますが、
web上ではclearfixが多用されていたので解除方法にどういうものがあるか気になり調べました。
clearfixはデメリットがなさそうなので個人的には一番お勧めです。
またCSS3からはflexboxという新しいモジュールがあるので、煩わしいfloatを使わなくて良いので
興味がありましたら調べてみてください。
私の経験が皆さんの役に立てれば幸いです。

あなたに合っているのはこんな企業だ!

$
0
0

就職活動を迎える時、転職時にどのような企業がいいのか迷ってはいないでしょうか?
エンジニアとしてスキルアップしたい、堅実な仕事がしたい・・・。
IT関連の分野は成長段階にあり、まだまだ売り手市場が続きそうですが自分にあった会社を見つけるのは難しいと思います。

そんな方に向けて、ソーシャルゲーム業界で10年ほどエンジニアを続けてきた自分から見た特色をお話できればと思います。
(企業の規模や時期によっての自分なりの見解になります。)

企業規模(社員数)

〜50名

  • 仕事の幅が広い
    • インフラ、仕様作成、お問い合わせ対応、クオリティ担保などを1〜数名のエンジニアで対応することも
  • 幅広くスキルを覚えたい、初めての事に挑戦することが好きな方に合っている
  • 社外の方とのコミュニケーションが多い
    • 早ければ数ヶ月で社外での仕事や相談の場に行く機会があります

50〜300名

  • 専門職の方が在籍していることが多い
    • 専門職(インフラ、セキュリティ、データ・アナリティクス、AI等)のエンジニアになりたい方に合っている
    • プロダクトの開発や運営側としても専門職の方と相談や依頼できるだけの知識は求められる
  • 社外の方とのコミュニケーションは半々ぐらいの印象

300名〜

  • 専門職の方が多く在籍していることが多い
    • 専門職の方が多く、何かしらのプロフェッショナルになりたい方に合っている
    • プロダクトの開発や運営側は専門職のまとめ役が多い印象
    • 専門職に、ケースやニーズに合わせた提案などができるだけの知識と技術力が求められている
  • 社外の方とのコミュニケーションも専門の部署が担っている事が多い

時期

スタートアップ、ベンチャー

  • 創業間もないため、歴史的な知見が少ない
    • 知見がないため逆に新しい事にチャレンジできる環境でもある
  • 風土や組織づくりなどを経験するチャンスがある
    • 企業が大きくなればなるほど、チャンスが少なくなる印象

中堅

  • ソシャゲ業界でいえば〜10年が目安
  • 技術としては会社や所属部署によって幅広い知識や専門性が別れている
  • 会社としての知見もあり、資料化もある程度されている

老舗

  • ソシャゲ業界でいえば10年〜が目安
  • 技術としては幅広い知識よりも専門性が重要視されている
  • 会社としての知見も多く、資料化がルール化されていたりする

WSLでRuby on Railsの環境構築

$
0
0

やること

  • windowsでUbuntuを使えるようにする
  • Rubyのインストール
  • Railsのインストール
  • DBのインストール

windowsでUbuntuを使えるようにする

Ubuntuの入れ方については既に多くの記事がでているので省略します。

Ubuntuを立ち上げたら、ユーザ名とパスワードを入れます。
その後、パッケージを最新にするため下記のコマンドを以下のコマンドを実行してください。

sudo apt update
sudo apt upgrade -y

Rubyのインストール

Rubyをインストールする前にバージョン管理のために、rbenvをインストールします。
下記のコマンドを実行してください

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc //パス設定と初期化
echo 'eval "$(rbenv init -)"' >> ~/.bashrc

ここで一旦終了し再び立ち上げ、下記のコマンドを入力しバージョンが返ってきたらokです。

rbenv -v

ruby-buildのセットアップとパッケージのインストールをします。

git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev

ここからRubyのインストールです。

rbenv install 2.6.5
rbenv global 2.6.5 
ruby -v
which ruby

ruby -vを実行して返ってきたらokです。

さらに、gemのアップデートとbundlerのインストールもしておきます。

gem update
gem install bundler

Railsのインストール

gem install rails -v 6.0.2
rails -v

ここでもバージョンが返ってきたらokです。

後に必要となるnode.jsもここでインストールしておきます。

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - //バージョンは最新のものを選択してください。
sudo apt install nodejs

DBのインストール

下記のコマンドを実行してください。

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ 18.04.4 -pgdg main" >/etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install postgresql
psql -V

バージョンが返ってきたらokです。

Postgresqlを起動します。

sudo service postgresql start
sudo su postgres -c 'createuser -s ユーザ名'
psql postgres

\qを入れて終了します。
下記のコマンドで「pg」が利用するパッケージをインストールしておきます。

sudo apt install libpd-dev

参考文献


IT未経験が約4ヶ月でJava SE8 Goldに合格するまで

$
0
0

簡単な自己紹介

  • 元理科教員
  • 2019年4月から転職しITの道へ
  • Mission:4ヶ月の研修期間でJava SE8 Goldを取得する

その際に実践した勉強方法などの記録です。
初心忘るべからず。

Hello World!!

最初に触れたのはProgateでした。一週間くらいでJavaレッスンを一通り終えて、コマンドプロンプトでコンパイルすることを覚えたところで資格勉強を本格スタートしました。

使用した教材はいわゆる紫本と黒本(問題集)、と少し白本。
試験範囲を網羅している本は他に選択肢がないので、初めてプログラミング言語に触れる初心者は紫本+黒本がスタンダードかと思います。

当初の計画は紫本を一通り読んで、黒本を解いていくつもりでした。
が、オブジェクト指向の章で大ハマりしたので、専門の書籍を読んだりもしました。
『Javaのオブジェクト指向がゼッタイにわかる本』
https://www.shuwasystem.co.jp/book/9784798050485.html

Java Silver合格までの学習方法

  • 動きがわからない部分はコードを自分で書く

 実際に自力で動かしてみると少し時間はかかっても理解が深められました。
 コンストラクタの動き、継承関係とメソッドのオーバーライドなど、自分でコードを変えてみながら実行してみることで格段に理解しやすくなりました。

  • まとめノートは作らない

 綺麗にまとめられたノート、まず見ません。

  • 思考整理メモはOK

 インクリメントや配列の操作の流れを追うときなど、考えを書き出して整理するノートは使いました。
 試験でもメモありなので大いに利用しましょう。

  • 5分考えてわからなければ解答を見る

 時間をかけても出ないものは出ません。

  • 間違えた問題の原因を2つに分類

 理解していないのか、覚えていないのかによって対処を変えました。
 理解が浅いものは紫本のみでなくネットで調べたりコードを書いて深堀り。
 覚えていない、暗記すべきものはGoogleドキュメントにまとめておき、通勤時間、寝る前のスキマ時間にスマホで見られるようにしました。

  • Googleスプレッドシートに黒本模試の解答を記録、備考欄にその時の思考をメモっておく

 何をどう間違えたのか忘れがちなので、備忘録を残しました。

  • 人にその用語を説明できるか?

 最強のアウトプットは人に説明することです。

理解することを中心に紫本を読み、コードをきちんと追えるようになってきた後に、紫本と黒本の巻末の模擬試験を2回ずつ実戦形式で実施。苦手な配列のところだけ白本を解きました。
黒本模試は直前で8割程度で、2019年5月22日 Java SE8 Silver正答率75%で合格。

金の沼

Silver取得後1週間で息抜き課題のコンソールアプリを作成しました。
(じゃんけんアプリ、ガチャアプリ)
よくある題材のようですが、ここで初めて制作物を試行錯誤の末に完成させたことでモチベアップ。

その後6月からGoldの学習に着手する時に先輩方から、
「Goldは暗記が多くて大変」、「金の沼へようこそ」と言われていたので戦々恐々。
教材はSilver同様、紫本、黒本、ちょっと白本です。

実際のところ、Goldで覚えるべきことはSilverの3倍くらいあります。
さらにGoldの問題は、メソッドの名前と引数まで覚えていることが前提でないと解答までたどり着けないものも多く、Silverよりもきっちり覚える必要がありました。

元々暗記が苦手で、さらに単純にすべて暗記するのはしんどい量なので、次のことを意識しました。

  • 英語の意味と機能を対応させて覚える

 関数型インターフェースの名称とメソッド名と機能をセットにするなど

  • 覚える時間を確保して一気に覚える

 集中できる時間、土日や寝る前にまとめた暗記用ドキュメントで覚える

  • 知らないメソッドはリファレンスを読む

 公式説明書が一番確実で勉強になり、資格試験に限らず利用できるように

しっかり暗記した分だけコードもしっかり追えるようになり、最初に黒本模試を解いた時は4割程度でしたが徐々に正答率は上がり、黒本では内容が薄く苦手なコレクション、並行処理の章のみ白本で補強しました。
直前の模試は8割程度で、結果2019年8月7日に72%で合格しました!

入り口として資格を取得するミッションでしたが、新しい技術を勉強し続けていく姿勢を忘れずに研鑽を積み重ねていきます。

社外勉強会の始め方

$
0
0

【概要】

DOG(Design One Go)というGolangの初心者を対象とした社外勉強会の運営を経験を通して学んだ社外勉強会の始め方と運営についてまとめようと思います。

【DOGの内容と各回の振り返り】

社外勉強会の始め方を説明するための前提知識共有として、これまで行ってきたDOGの内容は以下の通りです。

第1回(社内向けプレオープン):LT大会

これから社外勉強会を開催していくにあたり運営の経験を積むために社内エンジニアのみを対象として勉強会のプレオープンを行いました。社内エンジニアのみ対象とはいえ、きちんと運営の勉強をするためにイベントページの開設や飲食物の発注、当日の進行などは本番と同様に行いました。
イベントページを限定公開する都合からイベントページはTechPlayのみで公開しました。

第2回:LT大会

第1回で運営の経験を積めたので、いよいよ社外向けでの勉強会の開催となりました。参加者はLT枠3名、聴講者8名の合計11名のエンジニアに参加していただきました。初回にしては人が集まっているように見えますが、LT枠は全員、聴講者枠もほとんどが社内エンジニアでした。ここで課題として浮き彫りになったのは社外エンジニアの参加者が少ない、特にLT枠の応募が無いことでした。

第3回:パワポカラオケ風LT大会

第3回はパワポカラオケ風のLT大会を開催しました。即興でLTをするという内容ではなく、Web上に公開されている他の方が作られた資料を用いてLTをするという内容です。パワポカラオケを採用したのはLT枠の社外エンジニアの応募を集める施策として、LTするにあたり資料の作成という工程を削り、よりLTのハードルを下げるためでした。
また、第3回からはTechPlayだけでなくConnpassでもイベントページを公開してみました。
施策の結果は参加者が全員社内エンジニアという空振りで終わってしまいました。

第4回:Golang×モブプロ×TDD

LT大会は人が集まらないのでは?という仮説をもとにLTはおまけとして内容を改めることにしました。手を動かしながらGolangの勉強ができ、かつ一人では出来ないということからモブプロが採用されました。またモブプロの題材として集客効果が強そうな t_wada式TDDを採用しました。
施策の結果は社外エンジニアの参加が増え、さらにLT枠にも初の応募がありました!

第5回:Golang×モブプロ×gin

第4回の成功の味を占めて、第5回もモブプロを採用することにしました。題材は第4回から変更してginを採用することとしました。さらにConnpass経由での応募が多いことから、TechPlayでの公開はやめてConnpass一本に絞ることとしました。
第5回の参加者はLT枠が1名、聴講者枠が7名、他キャンセルが5名と過去最高の応募が集まりました。さらに驚くことに、この13名全員社外エンジニアです。もう社内エンジニアでカサ増しする必要もなくなりましたw やはりモブプロの採用は効果があったのだと思います。非常にありがたい限りです。

第6回:Golang×モブプロ×競プロ

第6回もモブプロとし、題材は競技プログラミングとしました。競技プログラミングとした理由としては問題が豊富なので運営が楽で、かつ基礎構文に慣れるにはピッタリの内容だと判断したためです。実際の内容はこちらを参考にしてください。
第5回の参加者はLT枠が2名、聴講者枠が6名で全員社外エンジニアでした。第5回と比較して参加者は減少しましたが、LT大会をやっていた頃とは比べものにならない成果です。

第7回:Golang×モブプロ×競プロ

第6回では競プロの問題を合計10問用意しておりましたが、3〜4問ほどしか解かれていなく、問題も余っていたため内容は第6回と全く同じとしました。
ただ大変申し訳ないことに運営の諸事情により第7回は急遽中止となりました。参加予定だった皆様には申し訳ない限りです。

第8回:Golang×モブプロ×競プロ

第7回が中止となったため、題材は第8回に繰越しとなりました。参加者はLT枠が2名、聴講者枠が6名、他キャンセルが8名でした。キャンセルが多く入ってしまいましたが、応募数は過去最高です。

【社外勉強会の始め方】

勉強会の詳細の説明に時間をかけてしまいましたが、ここからが本題です。社外勉強会を始めるにあたって重要だと感じたことを3つ紹介したいと思います。

社内の理解を得ること

勉強会を開催するためには開催場所や(必須ではないが)飲食物、準備時間など必要となるものが多々あり、これらは自社の理解があると手配が楽になります。勉強会の参加者から費用を参加料を頂戴するという手もあるとは思いますが、反面参加者が減る可能性が高いというデメリットがあると判断して参加料を頂戴することは避けました。
ただ会社からすると効果が見込めないものに対して投資するのは難しいと思いますので、理解を得るために自社に対して社外勉強会主催のメリットを示す必要があります。私たちが提示したメリットは以下の通りです。

  1. 勉強会を通して自社の認知度を高めることができる
  2. エンジニアの採用に繋がる可能性がある
  3. 他の会社や勉強会と協賛することで外部とのつながりを形成できる可能性がある

これらを提示した結果、自社からの理解を得ることができ無事に勉強会の開催ができるようになりました。

参加者のターゲッティングと他の勉強会との差別化

自社の事情によりGolangを取り扱うということは決まっておりました。しかし、Golangの勉強会には golang.tokyoDeNA.goなどなど知名度が高く集客力が強い勉強会があります。勉強会に社外エンジニアを集めるためには、それらと差別化を行う必要があります。
私たちは大手の勉強会と比較して知名度がないを逆手にとり、アウトプットのハードルが低いことを活かして初心者でも気軽にアウトプットすることができる勉強会として、Tour of Goはやった程度のGolang初心者を参加者のターゲッティングとしました。
しかしDOGの詳細でも触れたようにLT大会ではLT枠の応募が無かったため、ハードルの低さに加えてGolangに触れる場としてモブプロをメインに切り替えました。結果としてモブプロに切り替えたことも他の勉強会との差別化に繋がったかなと思います。
初心者向けかつモブプロという内容から他の勉強会との差別化ができ、参加者・応募者も右肩上がりとなっていきました。

運営の負荷を減らすこと

勉強会を単発で実施する分には負荷が高くても問題ないかなと思いますが、継続して勉強会を開催する場合は運営の負荷が高いと運営側のモチベーションダウンに繋がると思います。
特にLT大会をメインでやっていた頃はLT枠の応募が無かったため、致し方なく社内のエンジニアに登壇を依頼したり運営メンバーが登壇したりとやって、勉強会の運営以外に登壇者としての負荷がありました。
勉強会の内容をモブプロに切り替えたのは社外のエンジニアの応募を集めるためというのもありましたが、加えて運営が登壇しなくてはならないという流れを断ち切るというのも理由としてありました。
モブプロであれば参加者どおしでのコミュニケーションが主で、教えるとしても登壇のに比べれば負荷は圧倒的に低かったです。
LT大会を続けていた場合、第8回まで継続出来ていなかった可能性が高いかなと思います。

【感想】

第8回まで社外勉強会をやってみて大変だったこともありましたが、社外エンジニアの応募が増えたこと、そしてそれ以上に参加者が楽しそうにGolangと触れ合う姿を見て、それだけでも開催して良かったと思えました。また運営に携わることで自身の成長にも繋がったかなと思います。
皆さんもぜひ、勉強会の運営に携わってみてほしいです。

AtCoder Beginner Contest 154 に参加してみた

$
0
0

はじめに

僕はpython初学者です。同じ初学者に馴染みやすい??簡単なコードを提供するとともにもっとこうした方がいいなど改善点があったら教えてほしいです。

ABC154A Remaining Balls

s,t=input().split()a,b=map(int,input().split())u=input()ifu==s:a-=1elifu==t:b-=1print("{} {}".format(a,b))

ABC154B I miss you...

listから.joinしなくても ”x”*a だけでいけるのか...

s=input()a=len(s)l=["x"]*aprint("".join(l))

ABC154C Distinct or Not

この問題はset()使って一発だった...

n=int(input())a=set(map(int,input().split()))l=len(a)ifl==n:print("YES")else:print("NO")

ABC154D Dice in Line

期待値の計算が (1+pi)/2 で求められることに気づかず、いちいち1からpiまでの合計を出してしまった

n,k=map(int,input().split())p=list(map(int,input().split()))sum1=[]kitai_list=[]ans=0base=0a=0foriinrange(max(p)+1):a+=i+1sum1.append(a)foriinrange(k):kitai=sum1[p[i]-1]/(p[i])kitai_list.append(kitai)base+=kitaians=baseforiinrange(1,n):ifi+k-1>=n:breakelse:kitai=sum1[p[i+k-1]-1]/(p[i+k-1])kitai_list.append(kitai)base=base-kitai_list[i-1]+kitaiifans<base:ans=baseprint(ans)

ABC154E Almost Everywhere Zero

これは諦め〜 どなたか解法を教えてください( ; ; )

ABC154F Many Many Paths

わかってたけどTLE.あと、なぜかREもでてた。なぜだろう?
AC出てた人はmodを使ってたけどよくわかりませんでした...
教えてください!!

r1,c1,r2,c2=map(int,input().split())r1+=1c1+=1r2+=1c2+=1m=[[1]*r2]l=[1]l1=[0]*(r2-1)l.append(l1)l=[[0]*r2for_inrange(c2-1)]m.extend(l)foriinrange(c2):m[i][0]=1ans=0foriinrange(1,c2):forjinrange(1,r2):m[i][j]=m[i][j-1]+m[i-1][j]ifr1-1<=j<=r2-1andc1-1<=i<=c2-1:ans+=m[i][j]print(ans%(10**9+7))

MySQL Access denied for user 'root'@'localhost' の対応

$
0
0

MySQLでエラーが出てハマったのでその対応。

まずは権限なしで立ち上げられるように設定

$ mysqld_safe --skip-grant-tables &
[1] 11541
2020-02-11T04:59:48.6NZ mysqld_safe Logging to '/usr/local/var/mysql/***
2020-02-11T04:59:48.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql

MySQLにログイン

$ mysql -u root

root@localhostのユーザーを一旦削除してから作り直し、全ての権限を与える。

mysql> DROP USER root@localhost;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
Query OK, 0 rows affected (0.00 sec)

その後、下記コマンドを打つとパスワードを求められるので、パスワードを入れてログインできればOK!

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.

Termux上のhugoで hugo new した記事内の日本語が文字化けする問題について

$
0
0

記事を書く前はTermuxの問題かと思っていましたが、調べていくうちに単純にvimの設定の問題だと判明したような、気がします。

原因 iso-2022-jp

hugo new posts/hoge.md
このコマンドで生成した記事の日本語のみが文字化けしてしまう。

対策 fileencodings=utf-8

# vim .vimrc
set encoding=utf-8
set fileencodings=utf-8
set fileformats=unix,dos,mac

快適!

感想

hugoのコマンドなのに、vimの設定を変えると解決する理由が分かりませんが、今後の課題にしたいと思います。

こちらの記事で解決しました。
vimで文字化けした時の対応

gem install pg が上手くいかない時の対処法

$
0
0

開発環境

ubuntu(wsl)
Ruby 2.5
Rails 5.2

エラー内容

bin/rails db:createを実行すると

Could not find gem 'pg (>= 0.18, < 2.0)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

言われてた通りbundle installを実行すると、

An error occurred while installing pg (1.2.2), and Bundler cannot continue.
Make sure that `gem install pg -v '1.2.2' --source 'https://rubygems.org/'` succeeds before bundling.

gem install pg -v 1.2.2を確認しろとのことなので、gem install pg -v 1.2.2を実行する。

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /home/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0/pg-1.2.2/mkmf.log
extconf failed, exit code 1

Gem files will remain installed in /home/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pg-1.2.2 for inspection.
Results logged to /home/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-linux/2.5.0/pg-1.2.2/gem_make.out

解決策

下記のコマンドを実行して、その後gem install pg -v 1.2.2をする。

sudo apt install libpq-dev

参考文献

Linux勉強会 第1回:仮想コンソールとファイル操作

$
0
0

2月3日、株式会社Ancarで社内勉強会を行いました、この記事はその勉強会トピックのおさらいです

「Linuxの基礎からやるぞ!!!」という内容ですので、基礎的な内容であることをご承知おき下さい

各コマンドの実行はmacOSの標準ターミナルを使用しています

仮想コンソール

通常、一台の端末に複数の接続を行うことができますが、その際それぞれに仮想コンソールというものが割り当てられます
それぞれの仮想コンソールにはtty?番という風に名前が付きます
ttyはTeleTYpewriter(テレタイプライター)に由来する言葉で、入出力装置を指すようです
ttyを切り替えることで端末内で別画面に切り替えたような動作が実現できます
(現在は複数のコンソール画面が立ち上げられるため、切り替え操作は割愛します)

実際にttyコマンドを使用して現在使用中の仮想コンソールを確認してみます

$ tty
/dev/ttys000

tty000を使用していました
今度は別ウィンドウでコンソールを立ち上げttyを打ってみます

$ tty
/dev/ttys001

それぞれのコンソールに別のttyが割り振られています、なるほど

whoコマンドで見てみます

$ who
yungo    console  Feb  9 22:56
yungo    ttys000  Feb 10 10:16
yungo    ttys001  Feb 11 13:46
yungo    ttys002  Feb 11 13:47
yungo    ttys004  Feb 10 20:01
yungo    ttys005  Feb 10 21:14

現在ユーザ名yungoで5つコンソールを立ち上げていたのですがそれぞれにttyが割り振られていました、なるほどなるほど
(一つ目のconsoleはカーネルみたいですね、間違えてたらご指摘下さい)

で、仮想コンソールで何ができるのか

  • tty1tty2で同一のユーザにログインし、片方でman(マニュアル)を表示しながら片方で作業
  • tty1tty2でそれぞれ別のユーザにログインし、ユーザを使い分けながら並行で作業
  • tty1でフリーズした際にtty2でログインしフリーズしたアプリケーションをkillする
  • tty1&をつけ忘れて大きなコマンドを実行した、しかし[Ctrl]+[z]が使用できなかったとき、tty2でコマンドをkillし、再度&をつけて実行する
  • tty1で一般ユーザ、tty2でrootユーザでそれぞれログインし、アクセス権を使い分ける

などなど

ttyを指定して出力

$ echo hoge
hoge

echoは通常は自分の端末に返ってきますが

$ echo hoge > /dev/tty2

とすると、tty2にechoが出力されます
手元のコンソールではこんな感じになりました↓
スクリーンショット 2020-02-11 14.56.47.png

お話変わって、ここからは第二部、ファイル操作編です

ファイル操作

ファイルの簡易作成方法

エディターを起動せずファイルを簡易的に作成する方法がいくつかあります

1:echoとリダイレクト

# 1行ファイルの作成$ echo hogehogehogehoge > file1.txt

# 中身を確認してみます$ cat file1.txt
hogehogehogehoge

# リダイレクトだと上書き$ echo hoge > file1.txt

$ cat file1.txt
hoge

# 追加リダイレクトだと追記$ echo hoge >> file1.txt

$ cat file1.txt
hoge
hoge

2:catとリダイレクト

catって中身を表示するだけのコマンドだと思ってましたがリダイレクトを使用することで(とても)簡易的なエディタみたいな使い方ができます、知らなかった

# [ctrl]+[d]で終了
$ cat > file2.txt
hoge
ho
hoge
[ctrl]+[d]

# 中身を見てみます
$ cat file2.txt
hoge
ho
hoge

3:touch

中身のない0バイトのファイルを作成できます
本来touchコマンドはファイルの更新日時を更新するためのコマンドらしいですね…知らなかった…

# ディレクトリを確認
$ ls
file1.txt   file2.txt

# 作成
$ touch file3.txt

# ディレクトリを確認
$ ls
file1.txt   file2.txt   file3.txt

ファイル名の指定方法

先程からcat file1.txtのようにファイル名を指定していますが、これにもいくつか方法があります

ワイルドカード

記号説明
*任意の文字列。空文字でもよい
?任意の1文字
[...][]内に含まれる任意の1文字 ( -記号で範囲指定できる )
[!...][]内の . . . に含まれない任意の1文字
{ ~ }{}内に含まれる任意の文字列 ( カンマで区切る )

正規表現っぽく使えるみたいですね
先程のディレクトリで試してみます

# 任意の文字列(*以降は何でも該当)
$ ls file*
file1.txt   file2.txt   file3.txt

# 2か3に該当するもの
$ ls file[23].txt
file2.txt   file3.txt

# 範囲指定もできます
$ ls file[1-3].txt
file1.txt   file2.txt   file3.txt

# 単語がマッチするもの
$ ls {file,filo}1.txt
file1.txt   filo1.txt

今回はここまでです!!

さいごに

基礎的な内容が多めですが、いつも使っているコマンドにも知らなかった小技が多いなという印象です
いつも作業時は沢山ウィンドウを開くことになりますが、ttyの概念も念頭に置く必要がありますね

加筆修正、大歓迎ですのでぜひコメントにお願いします!

LINUXチョットデキル(本当の意味で)


pythonサンプルコードの元ネタを書いたった

$
0
0

background

公式サイトや書籍に書かれているサンプルコードには、映画・コメディネタが含まれているのでまとめてみました。
大体書籍のはしり書きには「Python」は「空飛ぶモンティ・パイソン」から由来されていると書かれているわけですが、それだけではない気がします。

サンプルコードは例として書かれているため何を意図して変数・文字列・数字にしているかは残っていないし、読む側は推測でしかないです。フォーマルな会議だったら議事録とかあるのですがこんなところでなんらかのコメントを残してまでリソースを使うアホはいないです。

ここでは、いくつか気になったコードを紹介します。

42

Python - Documentation - tutorial - if 文
のサンプルコードにはこんな感じで書かれています。

if
>>>x=int(input("Please enter an integer: "))Pleaseenteraninteger:42>>>ifx<0:...x=0...print('Negative changed to zero')...elifx==0:...print('Zero')...elifx==1:...print('Single')...else:...print('More')...More

ここで入力値で「42」が使われています。
必ずではないですが、頻度は少し高めです。

他の言語ですがruby on railsのリストメソッドで42番目の要素を返すメソッドが存在します。
(1..50).to_a.forty_two
で書けるっぽいです。

first(items[0])second(items[1])third(items[2])fifth(items[3])くらいまであって何も脈略もなく
forty_two(items[41])
があって、42番目の要素を取得することができます。

で、RailsのArray拡張にforty_twoがいる謎> githubで辿っていくと下記のコメントがありました。

tilsammans: 
http://en.wikipedia.org/wiki/Notable_phrases_from_The_Hitchhiker%27s_Guide_to_the_Galaxy#Answer_to_Life.2C_the_Universe_and_Everything_.2842.29

この日本語版のwikipediaを見ると、、、
イギリスのSF小説「銀河ヒッチハイク・ガイド」の中にあるフレーズで
生命、宇宙、そして万物についての究極の疑問の答えというがあって、ここに42の記述がありました。

このシリーズにおけるハツカネズミは、「すぐれた知性をもった汎次元生物がわれわれの三次元に突き出している部分」である。
ハツカネズミ達は「生命、宇宙、そして万物についての究極の疑問の答え」を知るために、全時代および全世界において2番目に凄いコンピュータ、ディープ・ソートを作った。
そのコンピュータが750万年かけて出した答えは「42」だった。

「四十二だと!」
ルーンクォールが叫んだ。
「七百五十万年かけて、それだけか?」
「何度も徹底的に検算しました」
コンピュータが応じた。
「まちがいなくそれが答えです。率直なところ、みなさんのほうで究極の疑問が何であるかわかっていなかったところに問題があるのです」

自分はこの小説は知らないですが、どうやら海外の開発者の間では42は「究極の答え」として認知されているっぽいです。

サンプルコードで「42」を見たらひとりで( ̄ー ̄)ニヤリとしていればいいと思います。

Spam Eggs Sausage Bacon

Python - Documentation - 標準ライブラリ - 組み込み型 - 辞書ビューオブジェクト

>>>dishes={'eggs':2,'sausage':1,'bacon':1,'spam':500}>>>keys=dishes.keys()>>>values=dishes.values()>>># iteration
>>>n=0>>>forvalinvalues:...n+=val>>>print(n)504>>># keys and values are iterated over in the same order (insertion order)
>>>list(keys)['eggs','sausage','bacon','spam']>>>list(values)[2,1,1,500]

['eggs', 'sausage', 'bacon', 'spam']はサイトや書籍のサンプルコードでよく見る変数、文字列です。

この元ネタはモンティ・パイソンのコント「spam」でその名のごとくspamが大量に出てきます。
たまに'eggs', 'sausage', 'bacon'が出てきます。
また、スパムメールの語源もここからきています。

SPAM

Dead Parrot

Python - Documentation - tutorial - キーワード引数

defparrot(voltage,state='a stiff',action='voom',type='Norwegian Blue'):print("-- This parrot wouldn't",action,end=' ')print("if you put",voltage,"volts through it.")print("-- Lovely plumage, the",type)print("-- It's",state,"!")#OK
parrot(1000)# 1 positional argument
parrot(voltage=1000)# 1 keyword argument
parrot(voltage=1000000,action='VOOOOOM')# 2 keyword arguments
parrot(action='VOOOOOM',voltage=1000000)# 2 keyword arguments
parrot('a million','bereft of life','jump')# 3 positional arguments
parrot('a thousand',state='pushing up the daisies')# 1 positional, 1 keyword
#NG
parrot()# required argument missing
parrot(voltage=5.0,'dead')# non-keyword argument after a keyword argument
parrot(110,voltage=220)# duplicate value for the same argument
parrot(actor='John Cleese')# unknown keyword argument

PARROT

ここでは関数のキーワード引数で良い例と悪い例を掲載していますが関数名がオウム(parrot)になってます。

これもモンティ・パイソンのコント「死んだオウム」が元ネタでオウムが死んでいるのにペットショップの店員が生きていると主張するシーンが出てきます。多分それっぽい。
わからん単語はあるのですが死んだオウムにvoltageで電気ショックを引数として与えています。黒魔術ですな。:ghost:

marx brothers

公式docでは見かけないのですが、入門 Python3のサンプルコードに出てきます。

>>>marx_tuple=("Groucho","Choico","Harpo")>>>marx_tuple('Groucho','Choico','Harpo')

タプルの説明に出てくる'Groucho', 'Choico', 'Harpo'ですがマルクス兄弟(ふつーの方。A○のメーカにあった気が、、、)のメンバー名です。
デビューしたのはトーキー映画全盛期(1935-1960)でチャップリンよりー世代新しいです。特に'Groucho'はトークの技術があったのでアメリカで白黒テレビが普及した1950年代のテレビ番組に結構出てて生き残っていたそうです。'Choico'は即興のピアノ演奏が得意で、'Harpo'はその名のハープ演奏が得意だったそうです。

出演作の中で「吾輩はカモである」の映画がありますが英語原文は「duck soup」です。これも予想ですが、beautiful soupの"soup"はここから来てそうな気がします。

さらにドリフターズはこのマルクス兄弟をモチーフにしていて、グルーチョの風貌をマネたのが「ヒゲダンス」のコントと言われています。(この話については、多分ドキュメントが残ってそう。8時だョ!全員集合の作り方―笑いを生み出すテレビ美術があるくらいです。わからないときは最終手段として赤坂の放送局へ凸しよう!)

PostScript

元ネタが含んでいるソースコードはまだたくさんありそうで、今回紹介したのはごく一部で知っているものもあったかもしれません。

てか、日本でお笑いの番組を相当数あるのにIT業界ではネタにあまりされていないです。
そ、それはエンジニアは意識が高いからだ
と言えばそれまでなのですけどね。:expressionless:

また、空気で笑わすネタが大勢なためにコードに落とし込めないのも要因かもしれません。

てか、いまのお笑いの最高峰がエガちゃんみたいですからね。一週間で100万登録を記録したそうです。
ega-chan
でも、広告収入が得られてないっぽいです。

2000年くらいトルコで問題を起こした時と同じテンションなので、ある世界地域の世論がコンテンツ的に耐えられないものになっているっぽいので日本のお笑い芸人のネタをコード化しても世界に普及しなさそうと、思わず考えてしまいました。

また元ネタがありそうなコードがあったら、またどこかでまとめて紹介します。

バラバラな例外をまとめてキャッチする PHP7.1〜

$
0
0

前書き

まとめてキャッチできたら楽だよなって思い調べたら、PHP7.1以降なら使えるみたいなので書き方を載せておきます。

PHP7.1以前の書き方

try{ //例外ごとにキャッチを書かなけばならない}catch(Exception1$t){echo$t->getMessage();}catch(Exception2$e){echo$e->getMessage();}

PHP7.1以降の書き方

try{//キャッチ一つで複数の例外をまとめてキャッチできる}catch(Exception1|Exception2$e){echo$e->getMessage();}

まとめて書くとコードもスッキリして、かなりいいと思いました。

開発する上でエンジニアに気付いてほしいこと

$
0
0

エンジニアの人にお願いしたいこと

自分は発注側の立場にいることもあり、ユーザに近い立場でサービスを見守っています。
今回は日々業務をしていて感じたことをまとめてみます。
とは言いつつ、感想は1点だけなので10分もあれば読み終わります。

どうか、システムは速度を大切にしてください。

時は金なりです。
エンジニアが一生懸命作ったシステムでも、速度が遅ければたちまちそのシステムはゴミと化します。1
理由は"Time is Money"です。
以前と比較して業務効率を下げる様なシステムはコストが掛かります。
大抵は一人が使うシステムではなく全社的なシステムになると思いますので、
システムが全社的に実損を与えていることになります。
コストがより掛かるということは、その分だけシステムの利用に時間(お金)を使っているので
開発側はその自覚を持って製作に臨んで頂ければと思います。2

とはいえ、開発って難しいなと思います。

中々、開発側は作ることに集中してユーザーにまで意識は出来ない仕事かと思います。
しかも、色々な部署のことを考えたシステムを作らないといけないと考えたときに、リスキーな仕事だなと思います。
心中はお察ししますが、ビジネスの観点では利用者目線でよろしくお願いいたします。

おわり。


  1. もちろん機能を満たすことは大事な要件ではありますが、軽度の不備などがあり仮に完璧ではないにしても、同時に速度は考えていかないと利用する側にとってリスクのある話題になるかと思います。 

  2. 何事にもコストは使いますが比較をしたときに、以前より時間を掛ける必要性が増えたのであれば、本来は掛けなくてよいコストが増加したと考えられるため、無駄(非効率)なお金が増えたと考えられるかと思います。 

[備忘録]初めてのPython 開発環境を用意する

$
0
0

診療放射線技師、医学物理士をやっている者です。
プログラミングを学習していく過程を備忘録として記事に残していきます。
今後誰かの参考になれば幸いです。

スキルとして漠然とプログラミングを始めたくて、最初に手をつけたのがProgateでした。
ホリエモンがオススメしていた影響です。
いろんな言語のチュートリアルを一通りクリアして、Pythonをメインに勉強することにしました。
Web、アプリ、データ分析など汎用的に使えそうで、人口も多そうだったのと、
仕事柄機械学習が研究テーマとしてホットだったことが決め手です。

今回は、実際に自分のPCでPythonを動かしたはじめの一歩についてです。

全ては環境構築から

PCを用意

Pythonを扱っていくにあたり、まずは自分のPC上でPythonを動かす環境を用意する必要があります。
(※私はMacユーザーです。)

<必要なもの>
・PC

高いPCは(とりあえずは)必要ないようです。
PC一つでプログラミングを始められるのは、敷居が低くてありがたいです。

Anacondaをインストール

手元にPCを用意できれば、次にPythonをインストールします。
と言っても、実はMacにはPythonが標準搭載されている、らしい。
インストールしなくても使えないことはないのですが、バージョンが古いもののようなので、最新のバージョンをインストールしたいところです。(やりたい処理によってはバージョン2.7(2系)の方が適切である場合もあります。初心者はとりあえずバージョン3.7(3系)をインストールしてしまって問題ないと考えています。)

Pythonをインストールする方法がいくつかある中で、私は定番のAnacondaを使いました。
AnacondaにはPython本体の他に、機械学習においてよく使われるライブラリ等もセットで入っており、よく分からない初心者でもとりあえずこれさえあれば始められます。

「Python欲張りセット」と言ったところでしょうか。

以下のURLから無料で簡単にAnacondaをダウンロードできます。
https://www.anaconda.com/distribution/

スクリーンショット 2020-01-24 20.06.30.png

手順に従ってAnacondaのインストーラーのダウンロード、
Anacondaのインストールを行います。

動作確認

インストールが完了すると、PATHも通り、すぐに使える状態だと思います。
(※Mac OSのバージョンによっては、自分でPATHを追加する必要があります!)

Finderからターミナルを起動し、動作確認をしてみます。
スクリーンショット 2020-01-24 20.53.27.png

ターミナルを起動できたら、以下を打ち込んでEnterを押します(コマンドを実行)。

python --version

"Python 3.7.4" と表示されます。

次は、

conda --version

"conda 4.7.11"と表示されます。
問題なく動作しています。

さらに詳しいAnacondaのインストール方法は、ネット上で優しい方々がたくさん共有してくれています。
またターミナルの使い方も勉強しておくと後々困らないです。

初めてのPythonファイルを実行

早速Pythonデビューしてみます。
標準ソフトでも構いませんので、適当なテキストエディタで次のコードを入力し、"hello.py"という名前でデスクトップに保存します。(私は"Atom"というテキストエディタを使っています)
".py"というのがPythonファイルの拡張子です。

hello.py
print("Hello")

次にPythonファイルを実行してみます。実行にはターミナルを使用します。
ファイルを実行するには、ターミナル上でそのファイルが存在するディレクトリに移動する必要があります。
今回の場合はデスクトップに保存したので、デスクトップに移動すれば実行できます。
あるフォルダ内にファイルを保存したなら、そのフォルダに移動する必要があります。
ターミナルを起動すると、ホームディレクトリにいる状態からスタートです。
通常、デスクトップはホームディレクトリの直下にあるので、次のコマンドを実行してデスクトップに移動できるはずです。

cd desktop

デスクトップにある"Test"というフォルダに移動したい場合は

cd desktop/Test

で移動できます。
ひとつ前のディレクトリ(親ディレクトリ)に戻りたいときは、

cd ..

で戻れます。"cd"の後ろのスペースを忘れないように。
正しくディレクトリに移動できたら、実行あるのみです。
次のコマンドを実行します。

Python hello.py

ターミナル上に"Hello"と表示されれば成功です。
"Python ファイル名"と打ち込んでEnterを押すことでPythonファイルを実行できます。
無事に自分のPCでPythonを動かす環境を構築できました。

MacBookの環境 mysql5.6からmysql8.0に更新

$
0
0

やったこと

どこかで、rails6 色々変わりすぎてヤバイ!笑
っていう話を耳にして、そういえば開発環境に関してはスクールから言われるままに特定のバージョンを入れただけだな〜と思い確認すると案の定、古い安定バージョンを入れていた。自分は金がかからない限りは無駄に冒険してしまうところがあるので、Rails、Ruby、Mysqlをバージョンアップさせようと思いついてしまった。

ちなみにちなみに、自分は少数派のキチンとバックアップタイプですが、timemachineで外付けHDDにバックアップがある為、いつでも戻れる!という安心感の中でやりました。

新旧バージョン

app
Ruby2.5.12.6.5
Rails5.2.36.0.2.1
Mysql5.68.0

※Rubyに関しては、最新2.7.0にしてしまうと、対応しているgemが少なくなってしまう為開発に甚大なダメージが・・・ということで、その前のバージョンで我慢しておく事にした。

RubyとRails

Homebrewをアップデートして、

  1. 最新バージョンをダウンロードしてきて、
  2. 最新バージョンをインストールして、
  3. 最新バージョンをデフォルト指定した。

Railsは旧バージョンをアンインストールしたかもしれない。Rubyはインストールしたバージョンを残しておけるみたい(brew??)。

実行したコマンドは忘れた。けど大して苦労はしてないハズ。

Rubyだけ、最新2.7.0にした時に既存アプリをrails startした時にエラーがいっぱい出てきて、それらのエラーはgemが未対応な事によるエラーだよ、っていう記事を見つけて考え直して2.6.5を入れたぐらい。

時刻設定

色々やって手順が前後する(Mysqlの設定にも関わる)が、まずRailsからMysql使ってた時に自動保存される時刻情報が無茶ずれてる(UTC時刻になってる)事が気に入らなかった。これに関してはRailsアプリを使っている時にRailsのプログラム内で日本時間に直すようなことをやっていたが、結局のところMysql自体にはUTC時間のまま保存されていたので、それを分かりやすく日本時間にしたかった。

デスクトップから右上に見える時刻表示(正常に日本時間表示)を気にしながら、コマンドラインでDateコマンドを打ってみると、なぜかUTC時刻になっていた。ひょっとしたらMacBookPro2017のデフォルトではJSTになっていたのかもしれないが、色々触りまくったので定かではない・・・

ということで、まずはシステム時間の修正から

システム時間(OS)

色々と調べた結果、システム時間の設定は /etc/localtime のバイナリファイルらしい。
更に、日本時間他各国のtimezone設定は /usr/share/zoneinfo/ にバイナリファイルがあり、日本時間の設定は /usr/share/zoneinfo/Japan のバイナリファイルらしい。

色々調べてたら、 /usr/share/zoneinfo/Asia/Tokyo っていう情報がいっぱい出てきたので必死にAsiaフォルダの中を探してたヨ。

$sudo ln-s /usr/share/zoneinfo/Japan /etc/localtime
でdateコマンドがJSTで表示されるようになる。
※一般的にこういう操作する時は、 /etc/localtimeのバイナリファイルをバックアップとっておくらしい。自分はtimemachineでシステムバックアップとってるので気にしなかった。 

んで、あ〜安心と油断してたらデスクトップ右上の時間がこれまたメチャずれてた。なんでやねん、と思いながら "日付と時刻"環境設定を開く から時刻修正。

日付と時刻は、「日付と時刻を自動的に設定」にチェックを入れて、appleアジア(time.asia.apple.com)を選択。
時間帯は、「現在の位置情報に基づいて、時間帯を自動的に設定」のチェックを外してエリア選択で「日本」を設定した。

これで直ればいいが、すぐに時刻が設定されなかったので、なんとなくMACを再起動。
なんとか、デスクトップ右上の時刻も正常になった。

Mysql

時刻設定した後に、mysqlの時刻設定を見てみたらキチンと日本時間が適用されていた。

mysql>showvariableslike'%time_zone%';+------------------+--------+|Variable_name|Value|+------------------+--------+|system_time_zone|JST||time_zone|SYSTEM|+------------------+--------+2rowsinset(0.02sec)

Mysqlはバージョン共存する方法もあるらしいが、自分は旧の方はアンインストールした。

順に
旧をバックアップ、
旧をアンインストール、
(一応)再起動、
新をインストール、
my.cnf設定、
バックアップをリストア

バックアップ(エクスポート)

※後述するが、Mysql8.0に移行させる為にこの時のバックアップファイル(.sql)を編集するので、mysqldumpコマンドのオプションでなんとかできるならば、その方が楽。

$mysqldump --single-transaction-u root -p-x--all-databases>出力ファイル名

でいけるハズだけど、一時期うまく実行できなかった。
どういうコマンドで見たのか覚えていないが、データベースのプロパティをみる方法があり、--all-databases がFALSEになっていた。原因はよくわからないが、どこかの時点から --all-databasesができるようになっていた。よく分からん。

とりあえず、コマンド実行後に何も表示されないので、ちゃんと中身にクエリが入っているかは見ておいた方がいい

旧をアンインストール

単純な話、 brew uninstall mysql@5.6を実行すればいいがゴミが残ってしまった事で何度もインストールを繰り返したので、きちっときれいにした方がいい。

$brew uninstall mysql@5.6

どうしよう!困った時のMac上のMySQLのアンインストール&再インストール、動作確認手順

これの「Community Editionを削除する」「brew で入れたものを削除する」は何度やったか分からんぐらいやった。内容的に、「Community Editionを削除する」はやらんでいいかもしれんが、一応。

更にまた一応、Macを再起動。

インストール

// homebrewをアップデート
$brew update
// インストールできるmysqlのバージョン確認
$brew infomysql
// インストール
$brew install mysql

my.cnf設定

ファイルの場所は覚えられないのに、my.cnfの候補ディレクトリを探すコマンドだけ覚えた

$mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf 

この内、自分は /usr/local/etc/my.cnfを使った。なぜなら4か所の内、そこにだけデフォルトでファイルがあったから。

/usr/local/etc/my.cnf
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
character-set-server=utf8
default_authentication_plugin=mysql_native_password
skip-slave-start
log_timestamps=SYSTEM

mysqlx-bind-address = 127.0.0.1
まではデフォルトで入力されてるので触らないようにする。

character-set-server=utf8
mysqlで日本語入力を可能にする

default_authentication_plugin=mysql_native_password
Mysql8.0からユーザー認証方法のデフォルトがcaching_sha2_passwordになってるらしい。これをやっておかないと多分うまくインポートできないし、Railsなんかに影響出そう。

skip-slave-start
なんかMysqlのログにエラー表示されてたので入れたが、結局ログにはエラーが残り続けてるのでよく分からない。入れなくてもいいかもしれない。Mysqlのバックアップをとる設定らしい。それを無視する。

log_timestamps=SYSTEM
Mysqlに保存されるログの時刻がこれまたUTCになっていたので日本時間にする為の設定。ちなみにログファイルは、/usr/local/var/mysql/マシン名.local.err にある。

インポートの前にユーザーの認証方式を変更

MySQL8系のDB接続エラーを解決する

ここを参考に、pluginの部分を全部mysql_native_passwordに。
ひょっとするとrootだけでいいかもしれない。

変え終わった後に他のコマンドを打とうとすると、確か警告が出てきてた。パスワードを設定しなさい、という。一旦適当なパスワードを設定して他のコマンドを実行できることを確認した上で、またパスワード無しを設定したが、いきなりパスワード無しでもいいかもしれない。

MySQL8でユーザーのパスワードの変更 / リセット方法

mysql>ALTERUSER'root'@'localhost'identifiedBY'hoge';mysql>ALTERUSER'root'@'localhost'identifiedBY'';

インポートの前にファイル修正

エクスポートの段階でとったバックアップファイルを三段階で修正(部分削除)した。
vi操作を調べとかないと厳しい。特に行削除操作。

viの基本操作

innodbに関する部分を削除

どこを見たのだったか忘れてしまった。。。これかな?
AWS Auroraでダンプしたデータをmysqlにインポートしようとしたらはまった

$vi 保存したログファイル名.sql

削除した部分は、
-- Table structure for table `innodb_index_stats`
-- Dumping data for table `innodb_index_stats`
-- Table structure for table `innodb_table_stats`
-- Dumping data for table `innodb_table_stats`
の部分。

columns_privに関する部分を削除

これがさっきのページの情報だったか・・・
AWS Auroraでダンプしたデータをmysqlにインポートしようとしたらはまった

削除した部分は
-- Table structure for table `columns_priv`
-- Dumping data for table `columns_priv`
の部分。

mysqlデータベースのuserテーブルに関する部分を削除

これのヒントは、ユーザー認証の部分を説明してくれてたページ。

MySQL8系のDB接続エラーを解決する

削除した部分は
-- Table structure for table `user`
-- Dumping data for table `user`

バックアップデータの修正は以上。

:w 一応別名で保存.sql
:q!

バックアップをインポート

さっき保存したファイルを読み込み

$mysql -uroot< 一応別名で保存.sql

これで、最新バージョンが使えるハズだけど、railsアプリを起動して問題なくMysqlが動くか確認しておくと安心。

Sequel Proが・・・

どういうわけか、Mysql8.0ではSequel Proが使えなくなるのでテストビルド版をインストールしないといけない・・・

MySQL8.0.x に Sequel Pro で接続する

Viewing all 21069 articles
Browse latest View live