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

【Python × Zapier】警報情報を取得してSlackで通知する

$
0
0

やりたいこと(BEFORE)

気象庁の警報情報を取得して指定する地域に警報が出ていればSlackで通知する

こちらの記事がやりたいことドンピシャだ!
と思い記事の通りに進めていましたが、気象庁のデータが更新される度にZapier(作業を自動化できるツール)のタスクを動かしていると自分のプランの上限タスクを超えてしまう...

screencapture-zapier-app-billing-plans-2020-02-09-17_41_58.png

そこでやりたいことの範囲を狭めました。

やりたいこと(AFTER)

気象庁の警報情報を「毎朝7時」に取得して指定する地域に警報が出ていればSlackで通知する

▼こんな感じ(動かした時に警報が出ていなかったので代わりに注意報を取得した様子)

毎朝7時に1回だけ情報を取得してタスク実行回数を1回/日にしました。

Zap全体図

  1. Every Day:ここで毎朝7時にタスクを実行するように設定
  2. Run Python:気象庁の情報を取得・抽出(下にコードを記載)
  3. Only continue if...:2で出力があれば(警報が出ていれば)次に進む
  4. Send Channel Message in Slack:Slackの指定するチャンネルで通知

Pythonコード

やりたいことが若干変わったので勉強せねば...と思いスクレイピングの方法を調べて書きました。初Python!
調べているとどうやらBeautifulSoupというものを使うのか〜ということを知りましたがZapierのヘルプにこんなことが書いてありました。
スクリーンショット 2020-02-09 18.23.51.png
お"ぉぉおおおんBeautifulSoupが使えない!
ということで無理矢理感ありますがBeautifulSoup使わずにほしい箇所(警報部分)だけ抽出します。

importreimportrequestsimporttimecode_list=[['札幌市','0110000'],['仙台市東部','0410001'],['さいたま市','1110000']]output={'text':''}forcodeincode_list:html=requests.get('https://www.jma.go.jp/jp/warn/f_'+code[1]+'.html').textdata_list=re.findall('<span style="color:#FF2800">(.*?)</span>',html)iflen(data_list)==0:continuetext='【'+code[0]+'】'i=1fordataindata_list:ifi==len(data_list):text+=dataelse:data=re.sub('警報','',data)text+=data+','i+=1output['text']+=text+'\n'time.sleep(1)

各地域のページで警報部分のフォントカラーは#FF2800なので、<span style="color:#FF2800">〜</span>で囲まれた部分を全て抽出しています。
また、複数ページをスクレイピングするのでtime.sleep(1)で1秒休ませます。

参考

気象庁から情報を取得して東京23区の気象警報をSlackに通知する
Zapierの使い方も含めてとても参考にさせていただきました。


【サンプルコード】JavaScriptでルーレットゲームをプログラミング

$
0
0

どうも、UT(@ut_1029)です。ブログ(UTの日常)の紹介です。

JavaScriptでルーレットゲームをプログラミングしたサンプルコードを紹介します。
ルーレットゲームは、JavaScriptのアニメーション勉強に最適でした。

ルーレット.jpeg

JavaScriptで作成したルーレットゲームのサンプルコード

JavaScriptでプログラミングしたルーレットゲームのサンプルコードを紹介します。
※HTML + CSS + JavaScriptを1つのファイルに記述しています。

<html><head><metacharset="UTF-8"><title>JavaScriptでルーレットゲームを作成</title><style>body{text-align:center;padding:0;margin:0;}ul{list-style:none;}.roulette{width:90%;height:500px;margin:auto;position:relative;border:solid1px#333;}.panels{position:relative;margin:0auto;width:400px;height:400px;}.panel{width:200px;position:absolute;}.panelimg{vertical-align:bottom;}</style></head><body><h1>JavaScriptでルーレットゲームを作成</h1><divclass="roulette"><divclass="panels"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"><imgsrc="/ut/roulette/img/panel.png"class="panel"></div></div><div><buttontype="button"class="btn-start">start</button><buttontype="button"class="btn-stop"disabled="true">stop</button></div><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script>(function(global){"use strict";/*
                 * ルーレットの回転速度(実行毎秒数)
                 */varsec=100;/*
                 * ルーレットの停止フラグ
                 */varstopFlag=false;/*
                 * ・ルーレットのパネル数
                 * ・ルーレットの回転数
                 */varpanelNum=0,loopCount=0;/**
                 * ルーレット
                 */varRoulette={/**
                     * 初期化処理
                     */init:function(){// ルーレットのパネル配置を調整var$panels=$('.panel');vardeg=360.0/$panels.length;varred=(deg*Math.PI/180.0);varr=$panels.width()/2;varadjustY=($panels.width()/2)-($panels.height()/2);$panels.each(function(i,elem){vartmp=i-($panels.length/4);varx=Math.cos(red*tmp)*r+r;vary=Math.sin(red*tmp)*r+r+adjustY;vart=tmp*deg;$(elem).css({'left':x,'top':y,'transform':'rotate('+t+'deg)'});});// ルーレットのパネル数を代入panelNum=$panels.length;},/**
                     * ルーレットの回転開始
                     */start:function(){stopFlag=false;Roulette.animation();},/**
                     * ルーレットの回転停止
                     */stop:function(){stopFlag=true;},/**
                     * ルーレットの回転アニメーション
                     */animation:function(){$('.panels').animate({deg:-((360/panelNum)*loopCount)},{duration:sec,step:function(now){$('.panels').css({transform:'rotate('+now+'deg)'});},complete:function(){if(stopFlag){return;}loopCount++;Roulette.animation();}});}};global.Roulette=Roulette;})((this||0).self||global);$(document).ready(function(){// 初期化処理を実行Roulette.init();/**
                 * スタートボタンのクリックイベント
                 */$('.btn-start').click(function(){$(this).attr('disabled',true);Roulette.start();$('.btn-stop').attr('disabled',false);});/**
                 * ストップボタンのクリックイベント
                 */$('.btn-stop').click(function(){$(this).attr('disabled',true);Roulette.stop();$('.btn-start').attr('disabled',false);});});</script></body></html>

See the Pen [sample code] javascript roulette by UTのCodePen (@ut_1029) on CodePen.

解説は、ブログ(UTの日常)で!

【サンプルコード】JavaScriptでルーレットゲームをプログラミング | UTの日常

OpenJDKについて簡単に整理

$
0
0

はじめに

開発言語のJava。
はいくつか種類があるって知ってました?
簡単に知識整理をしておきたいと思います。

OpenJDKとは

  • Open Java Development Kit
  • Java のフリーかつオープンソースの実装。
  • 2006年、サン・マイクロシステムズが始めた。
  • GPLリンク例外つきの GNU General Public License (GNU GPL) でライセンスされている。
  • OpenJDKはJava SE 7以降の公式リファレンス実装とされている。
  • 参考:https://ja.wikipedia.org/wiki/OpenJDK

その他の用語と合わせてみると。

用語説明
Java SEJava Platform Standard Edition。仕様の集まり。
OpenJDKJava SE に基づいた開発を行っているオープンソースプロジェクト。ソースコードが管理されている。
JDKJava Development Kit。Oracleが提供するJava SE開発ツールキット。

OpenJDKの種類

OpenJDKはソースコードなので、それを使って各社がビルドしたものが提供されています。

ビルドパーミッシブPure商用サポートLTS
AdoptOpenJDK / IBM / JClarityYesOptionalYesYes
Amazon CorrettoYesNoNoYes
Azul Zulu(Azul systems)YesNoYesYes
BellSoft Liberica JDKYesNoYesYes
ojdkbuildYesYesNoYes
Oracle Java SENoNoYesYes
Oracle OpenJDKYesYesNoNo
Red Hat for WindowsYesNoYesYes
SapMachineYesNoNoYes

引用:https://ja.wikipedia.org/wiki/OpenJDK

パーミッシブ

ライセンスの種類特徴
コピーレフト型二次的著作物(derivative work)の頒布条件に同じライセンスが要求されるライセンス。例えばGPLのソースコードを使って開発した二次的著作物はGPLの基で頒布する必要があるといったもの。パーミッシブ型の対極に位置する。OSSの理念を強く持つライセンスと評価されることが多い。代表的なライセンスはGPL、AGPLなど。
準コピーレフト型コピーレフト型ほどコピーレフト性が強くないライセンス。開発コミュニティに利便性が出るように工夫されている。代表的なライセンスはMPL、LGPL、CDDL、EPLなど。
パーミッシブ型無保証であること、著作権表示をすること、ライセンス条文を表示すること、などの条件さえ満たせば頒布を許可するライセンス。二次的著作物を同じライセンスにする必要がない。コピーレフト型の対極に位置する。企業における商用利用への転用が容易だと評価されることが多い。代表的なライセンスはBSD、MIT、Apache、MS-PLなど。

引用:https://www.atmarkit.co.jp/ait/articles/1205/21/news101.html

Pure

100% Pure Java。
Java言語で開発されたプログラムが、特定のOSや開発環境に依存した機能を使用せず、標準仕様やAPIだけで構成されていること。

引用:http://e-words.jp/w/100-_Pure_Java.html

LTS

Long Term Support。
長期サポートをしているかどうか。

参考

Pythonでメールを送信(Outlook)

$
0
0

はじめに

Python で Email を送るプログラムを一から順に説明しながら追っていきたいと思います。

環境は Mac で PyCharm を使用しています。
ホットメールは Outlook を使用します。

import

まずemailからmessageというものがあるのでそちらとsmtplibを import します。
smtplibは smtp サーバをー使用してメール送るものとなっています。

fromemailimportmessageimportsmtplib

設定

メールを送信する際の設定に関して記述していきます。

メールを送るサーバーを指定します。
ホットメールでsmtp.live.comというものが存在するので、ホストに指定します。

fromemailimportmessageimportsmtplibsmtp_host='smtp.live.com'

次にポートを記述します。
今回は587を使用します。

fromemailimportmessageimportsmtplibsmtp_host='smtp.live.com'smtp_port=587

メールの送信元のアドレスを記述します。
メールアドレスはxxxx@outlook.jpとしていますが自分のメールアドレスを記述すれば大丈夫です。

fromemailimportmessageimportsmtplibsmtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'

送信元が完了したら送信先のアドレスもto_emailとして記述します。

fromemailimportmessageimportsmtplibsmtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'

次にusernameを記述します。
こちらはホットメールのアカウントのユーザーネームなのでメールアドレスがそのまま記述されると思います。

fromemailimportmessageimportsmtplibsmtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'

最後にアカウントのパスワードを記述します。

fromemailimportmessageimportsmtplibsmtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'

上記の内容でメールを誰から誰に送るかの設定とホットメールにログインするための情報が記述できました。

メッセージ

メッセージを作成します。

先ほど import してきたmessageの中にEmailMessage()というオブジェクトがあるので使用します。

fromemailimportmessageimportsmtplibsmtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'msg=message.EmailMessage()

メッセージ内容を記述していきます。
set_content()を使用して()内にメールの本文を打ちます。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'msg=message.EmailMessage()msg.set_content('こんにちは')

メールの件名と送信元、送信先を記述します。

件名はSubject、送信元はFrom、送信先はToになります。
送信元、送信先に関しては先ほど記述したfrom_emailto_emailの変数を使用します。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'msg=message.EmailMessage()msg.set_content('こんにちは')msg['Subject']='Test email'msg['From']=from_emailmsg['To']=to_email

サーバーの設定

上記で記述したメッセージをサーバーに送るための設定を記述していきます。

サーバーの指定に import してきたsmtplibSMTPクラスを使用します。
smtplib.SMTP()とし()の中にホストとポートを入れます。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'#メッセージ内容
msg=message.EmailMessage()msg.set_content('こんにちは')msg['Subject']='Test email'msg['From']=from_emailmsg['To']=to_emailserver=smtplib.SMTP(smtp_host,smtp_port)

smtp とのコネクションの手順として、まずserver.ehlo()でsmtpサーバーと
今からやりとりしますよと呼んであげます。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'#メッセージ内容
msg=message.EmailMessage()msg.set_content('こんにちは')msg['Subject']='Test email'msg['From']=from_emailmsg['To']=to_emailserver=smtplib.SMTP(smtp_host,smtp_port)server.ehlo()

セキュアにするためにserver.starttls()と記述した後に
もう一度server.ehlo()とします。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'#メッセージ内容
msg=message.EmailMessage()msg.set_content('こんにちは')msg['Subject']='Test email'msg['From']=from_emailmsg['To']=to_emailserver=smtplib.SMTP(smtp_host,smtp_port)server.ehlo()server.starttls()server.ehlo()

次にホットメールでログインするための情報が聞かれるので
server.login()を使用して()の中にusernamepasswordを記述します。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'#メッセージ内容
msg=message.EmailMessage()msg.set_content('こんにちは')msg['Subject']='Test email'msg['From']=from_emailmsg['To']=to_emailserver=smtplib.SMTP(smtp_host,smtp_port)server.ehlo()server.starttls()server.ehlo()server.login(username,password)

ログインできたらsend_message()を使用して()の中に作成したメッセージ内容を入れます。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'#メッセージ内容
msg=message.EmailMessage()msg.set_content('こんにちは')msg['Subject']='Test email'msg['From']=from_emailmsg['To']=to_emailserver=smtplib.SMTP(smtp_host,smtp_port)server.ehlo()server.starttls()server.ehlo()server.login(username,password)server.send_message(msg)

一番最後にもうサーバーとやりとりしないので終了させるためにserver.quit()とします。

fromemailimportmessageimportsmtplib# メールの設定
smtp_host='smtp.live.com'smtp_port=587from_email='xxxx@outlook.jp'to_email='xxxx@outlook.jp'username='xxxx@outlook.jp'password='xxxxxxxxxxxx'#メッセージ内容
msg=message.EmailMessage()msg.set_content('こんにちは')msg['Subject']='Test email'msg['From']=from_emailmsg['To']=to_email# サーバーとのやりとり
server=smtplib.SMTP(smtp_host,smtp_port)server.ehlo()server.starttls()server.ehlo()server.login(username,password)server.send_message(msg)server.quit()

実行

上記の内容でメールを自分宛にして
実行してみると実際にメールが送信されたことが確認できます。

image.png

最後に

このメール送信してくれるプログラムを他のプログラムと紐づけて
いろんなことができたらと思います。

練習用リポジトリの作り方

$
0
0

この記事のきっかけ

実務外の勉強内容をアウトプットしてCTOに見てもらうためgithubに練習用公開リポジトリを作ろうと思い立ちました。

1.ローカルに作業ディレクトリを1つ作成する。(例:practiceディレクトリの中にindex.htmlだけ作る)

2.Github内にローカルと同じ名前のリモートリポジトリを作る

3.ローカルリポジトリとリモートリポジトリを紐付ける

3-1. terminalでルートディリクトリまで移動する(例:cd practice)
$ git init

これで、practiceという名前のローカルリポジトリができる


3-2. ルートディリクトリにあるものをインデックスに登録
$ git add .


3-3. インデックスに登録されたことをコミットする
$ git commit -m "first commit"

3-4. githubのリモートリポジトリのURLをコピーしてくる
$ git remote add origin リモートリポジトリのURL

3-5.ローカルリポジトリの内容をリモートリポジトリにpushする
$ git push -u origin master

これでできました
たくさんアウトプットしましょう!

モンテカルロ法をPythonでシミュレーションする

$
0
0

モンテカルロ法とは

モンテカルロ法 (モンテカルロほう、英: Monte Carlo method, MC) とはシミュレーションや数値計算を乱数を用いて行う手法の総称。元々は、中性子が物質中を動き回る様子を探るためにスタニスワフ・ウラムが考案しジョン・フォン・ノイマンにより命名された手法。カジノで有名な国家モナコ公国の4つの地区(カルティ)の1つであるモンテカルロから名付けられた。ランダム法とも呼ばれる。

引用 wikipedia

要するに乱数を用いて数値計算を行う手法の一つです。

円周率を求める

1、正方形の中にランダムに点を打っていく
2、生成した点と原点の距離が1以下なら円の内部に入ったとカウント、1以上なら円の外部に入ったとカウントしていきます。
3、1,2をN回繰り返す
4、4P/Nが円周率の近似値であるπになる。

生成した点と原点の距離が1以下かどうかの長さを図るためにユークリッドノルム

\sqrt{x^2+y^2}

で計算します。ユークリッド距離は人が定規で測る様な二点間の通常の距離のことです。

#モジュールをインストール
importnumpyasnpimportmathimportmatplotlib.pyplotasplt#円の中に入ったxとy
inside_x=[]inside_y=[]#円の外に出たxとy
outside_x=[]outside_y=[]count_inside=0forcountinrange(0,N):d=math.hypot(x[count],y[count])ifd<1:count_inside+=1#円の内部に入った時のxとyの組み合わせ
inside_x.append(x[count])inside_y.append(y[count])else:outside_x.append(x[count])outside_y.append(y[count])print('円の内部に入った数:',count_inside)
出力

円の内部に入った数: 7875

可視化する

#図のサイズ
plt.figure(figsize=(5,5))#円を描くためのデータ
circle_x=np.arange(0,1,0.001)circle_y=np.sqrt(1-circle_x*circle_x)#円を描く
plt.plot(circle_x,circle_y)#円の中に入っているのが赤
plt.scatter(inside_x,inside_y,color='r')#円の外に出たのが青
plt.scatter(outside_x,outside_y,color='b')#名前をつける
plt.xlabel('x')plt.ylabel('y')plt.grid(True)#格子をありにする

download.png

#半径1の円の四等分された単位円の面積であるので
print('円周率の近似値:'4.0*count_inside/N)
出力
円周率の近似値: 3.144

まとめ

モンテカルロ法は点を打つ回数を増やせば増やすほど精度が上がりますが、実行にかかる時間が長くなってしまいます

[Pythonで遊ぼう] 文章自動生成をめざす ~形態素解析をする~

$
0
0

はじめに

AIが文章を書いたり、最近では手塚治虫の漫画の学習を経て作られた漫画ができた、なんて話がありますね。
そのようなレベルは難しいですが、本を見ながら文章の自動生成はできたのでまとめておきます。
複数回にまたがりますが、ゆっくりやっていこうかと思います。

文章を生成するイメージ

文章を生成するにあたって、イメージとしては次のような感じになります。

  • もととなるデータを準備する
  • データをきれいに整形する
  • 文章を分解する
  • マルコフ連鎖を用いて生成する

おおざっぱにいえばこんな感じかと思います。今回は文章の分解をしてみます。

形態素解析をしてみる

形態素解析(けいたいそかいせき、Morphological Analysis)とは、文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。 出典: フリー百科事典『ウィキペディア(Wikipedia)』
ということらしいです。とりあえずコードと結果を見よ!

from janome.tokenizer import Tokenizer
t = Tokenizer()
t

この"Tokenizer"というのを使います。

text = '超弩級戦艦として建造技術導入を兼ねて英国ヴィッカース社で建造された、金剛デース!期待してネ!'
tokens = t.tokenize(text)#字句解析をする
len(tokens) #単語数

調べたい文章を入れて解析します。(内容はてきとう)

for token in tokens:
    print(token)

表示させるとこんな感じになります。固有名詞や特徴のある語尾がうまくいかないっぽいですね。こういう文章の揺れは直す必要がありそうですね。
2020-02-09.png
最後に単語リストを作っておきます。

texts = t.tokenize(text, wakati=True)
words_list =[] #単語リストを作る
for text in texts:
    words_list.append(t.tokenize(text, wakati=True))
words_list

雑談

"Tokenize"を使えば簡単に文章の分解はできましたね。
文章生成の際には、もちろんこんな短い文では不十分なので、実際にはもっと多くの言葉が必要です。
面白い文章ができたらいいなぁ。

個人的にオススメしたいTech系YouTuberたち

$
0
0

僕は普段から『Qiita』以外にもプログラミングの情報収集を
『YouTube』で行っているので今回は
個人的にオススメしたいTech系YouTuberの方々と彼らの動画ベスト③を
紹介していきたいと思います!(独断と偏見が入っています笑)

①KENTA / 雑食系エンジニアTV

https://www.youtube.com/channel/UC_HLK-ksslL-Z_2wiIZDlMg

  • もう既にご存知の方も多いと思いますが、KENTAさんはプログラミングのみならずIT業界(自社開発、受託、SES等)に関しても深い知見があり今まで見てきたTech系YouTuberの中でもダントツに質の高い情報を提供されている方です。彼の動画はどの動画も有益だと思いますが中には忙しい方もいると思います。そこで、個人的に特にオススメしたい彼の動画ベスト③を発表します!

【第一位】モダンなIT企業を見極める7つの技術的チェックポイント

https://www.youtube.com/watch?v=Aw8w9qSdZtY

  • 就職される方や転職される方がモダンなIT企業を見極める際に重要となるチェックポイントを提示してくださっています!普通に有料級の情報だと思うのですがそれがYouTubeでタダで見れてしまうので恐ろしいですね(笑)

【第二位】良い質問をする技術 〜質問テンプレートのススメ〜

https://www.youtube.com/watch?v=P6yRjOyM4jU

  • 個人的に思う優秀な人の共通点が「質問力」が高いということ。「質問力」に自信のない方は見ておいて損はないかと思います!

【第三位】Web系自社開発企業さんへの転職に必要なポートフォリオのレベルとは

https://www.youtube.com/watch?v=N0yetny4Zco

  • Web系自社開発企業さんへの転職が難しくなってきている現実を知るのに有益かと思います!

ちなみにですが、僕は彼の雑食系エンジニアサロンに今月入会しました!
月額980円で参加できるサロンにしては
かなり質の高いコミュニティなのでは?と思います!

具体的に《サロンのどういう所が良いと思ったのか》と言うと、

①サロン内で技術に関して質問できる環境が整っていること
②アウトプット報告でサロン内のメンバー間で互いに高め合う環境があること
③ポートフォリオを見せ合いレビューし合う環境があること

(人によっては技術に関しての質問なんてteratailがあるから
不要と思う方もいるかもしれませんが、個人的な感想を言うとあのサービスのユーザーは
結構質問が無視されているケースも見かけるので何とも言えない感じがします。)

続いて二人目のTech系YouTuberを紹介していきます!

②【人生逆転エンジニア】アップスターツ

https://www.youtube.com/channel/UCczh4w4k5cjuZBKFqlIF3kw

  • コンテンツの内容はどちらかというと初心者向きな感じがします! ポップなBGMを聞きながら楽しい雰囲気で情報をインプットできるかと思います!

【第一位】【年代別】プログラミング学習のゴールを教えます

https://www.youtube.com/watch?v=Zh7njKsR_U0

  • なぜこの動画を第一位に選んだのかというと 学習には「ゴール」を設定するべきだという持論があるからです。 「ゴール」を決めて「逆算」して学習していきましょう!

【第二位】エンジニアなら知っておきたいGoogle検索のコツ

https://www.youtube.com/watch?v=S22Bs-G5bZU

  • エンジニアとして働く以上「情報検索能力」いわゆる、「ググり力」も 大事な基礎スキルになってきます。その「ググり力」を身に着けるのに 良いヒントを提示してくれている動画ですので時間がある時に 是非とも視聴することをお奨めします。

【第三位】エンジニアが良く使う便利ショートカットキーを紹介!【13個】

https://www.youtube.com/watch?v=Yt92zqwCdyc

  • ショートカットキーもエンジニアが効率的にプログラミングするための 重要なスキルの一つなので是非とも習得してしまいましょう!

続いて、三人目のTech系YouTuberを紹介していきます!

③進撃する人【現役エンジニア】

https://www.youtube.com/channel/UC3mMWAA1Lo3rwMorseTcn2g

  • プログラミングスクールの実態や転職活動で経験したこと、SESの闇など 面白くて有益な情報を提供してくださる方です!

【第一位】プログラミング学習でおすすめの教材を紹介しよう

https://www.youtube.com/watch?v=vvAqUvek-60

  • 進撃する人が実際に使ったことのあるプログラミング学習教材 (progate, Udemy, ドットインストール, Techpit)で 各々の特徴とオススメ度を語ってくれています!

【第二位】未経験エンジニアが転職をするならwantedlyが最強な件について

https://www.youtube.com/watch?v=YgHvdxUdI0Q

  • なぜwantedlyがオススメなのかを語ってくれています! 個人的に面白いと思う自社サービスをリリースしている企業さんも多いので 是非とも使ってみてほしいと思います!

【第三位】転職サイトでSESを見分ける方6つの方法とは!?

https://www.youtube.com/watch?v=UM1kajpU4JI

  • SESを見分ける際に使えるかなり有益な情報を発信してくださっています!

最後に四人目のTech系YouTuberを紹介していきます!

④くろかわこうへい【渋谷で働くクラウドエンジニアTV】

https://www.youtube.com/channel/UCX30pfp4p82rIiSJmBygADw

【第一位】未経験ループ脱出4つの基本戦略「未経験からIT業界に飛び込んだとき」を振り返る

https://www.youtube.com/watch?v=_kDIvVYy81U

  • 自分自身も就職活動をしている過程で認識したことですが、 日頃からQiita等の技術ブログでアウトプットしていることを 重視している企業さんは増えてきていると思います!

【第二位】未経験でも渋谷エンジニア業界のベテラン勢を簡単に追い抜ける2つの理由と給料に現れない市場価値

https://www.youtube.com/watch?v=TvHtaealnzg

  • 彼曰く、AWS や Docker や Git できれば kubenertes を習することで ベテランエンジニアとの差別化を図れるとのことです!

【第三位】バックエンドエンジニア5分類と意外と狙い目のポジションである3つの理由

https://www.youtube.com/watch?v=ujUFOi49Rwc&t=3s

  • なぜバックエンドエンジニアがオススメなのかを論理的に 分かりやすく解説して下さっています!

【番外編】

しまぶーのIT大学

https://www.youtube.com/channel/UCti6dG0zSAetLGGYcgNML4Q

  • 個人的に応援しているTeck系YouTuberです! プログラミングだけでなく起業やスタートアップ界隈の情報も提供して下さる方なので 興味のある方はチャンネル登録をしておくことをオススメします!

とだこうき

https://www.youtube.com/channel/UCzZiw3exu_81WvN3DKRNXTA/videos

  • 最近YouTubeの活動をストップされているので番外編に入れさせて頂きましたが 彼の発信しているコンテンツもなかなか有益なのでは?と思います!

マコなり社長

https://www.youtube.com/channel/UC7I3QTra4_kC4TSu8f7rHkA

  • マコなり社長はエンジニア出身で現在株式会社divの代表取締役として 会社を経営されておられる方です! 番外編に入れた理由ですが プログラミングに関する情報発信はほとんどされていないからです。 コンテンツの内容は「自己啓発」が多い印象です。 少しでもより良い自分になりたい方は 彼のYouTubeチャンネルを登録してみるのをオススメします!

迫 佑樹

https://www.youtube.com/channel/UCKxnXboujhwy7osAwu75-2w

  • 大学在学中にプログラミングのインターンに参加したり、 プログラミングのコンテストに参加して受賞したり、起業して自身で Skill HacksやFront Hacksなどのプログラミング学習教材を作ったり、 YouTubeで情報発信したりなど多方面で活躍されておられる凄い方です! 番外編に入れた理由ですが、プログラミングに関する情報発信というより 内容が「ビジネス」寄りだからです。ただ内容自体は 見ていて個人的には勉強になるな~と思いながら勝手に勉強させてもらっています!

やまもとりゅうけん

https://www.youtube.com/channel/UCp60qNFmqRy7Q5ymP20dsGw

  • やまもとりゅうけんさんは数あるTech系YouTuberの方々の中で 「フリーランスエンジニア」になることを推奨されています! 彼も迫 佑樹さんと同様に内容が「プログラミング」というよりは「ビジネス」寄り だったので番外編に入れました。ただ発信されているコンテンツは勉強になる内容が 多いので「プログラミング」だけでなく「ビジネス」も!という方にはオススメです!

以上で「個人的にオススメしたいTech系YouTuberたち」の紹介を終えます!
この記事を読んでくれた読者の方に少しでも参考になれれば嬉しいです(^^)


さくらのレンタルサーバ にNextcloudをインストールしてプライベートクラウドを構築する

$
0
0

はじめに

この記事はなに

素人が興味本位からレンタルサーバにプライベートクラウドを設置するまでの経緯。

この記事の状況

  • 初心者:beginner:
  • さくらのレンタルサーバ
    • スタンダードプラン以上を推奨(理由は後述)
  • Nextcloud
    • Web installer

Nextcloudのインストール

Webサーバどのプラン?

ライトプランは使えるDBがSQLiteのみとなります。
1年間使ってきて、容量に不満はないものの速度でストレスに感じる場面が多くありました。
そのため、MySQLを使用できるスタンダードプラン以上がおすすめだと思います。

Nextcloud Webインストーラの取得

Nextcloudにアクセス。
Get NextcloudServerDownload for server</>Web Installer
1. Right-click here and save the file to your computer のリンク部分をクリックしてファイルをローカルに保存

setup-nextcloud.phpを取得しました:open_hands:

Webインストールの手順

インストールの前準備

レンタルサーバのサーバコントロールパネルより
Webサイト/データ→データベース→[新規追加]
データベース名:適当に(後で変更はできません)
注意事項をよく読んで、同意するに☑
作成後、[設定]よりデータベース接続用パスワードの設定を忘れずに行うこと。
この画面の
ユーザ名
接続先パスワード
データベース名
データベースサーバ
は後ほど必要となりますので、メモしておく:writing_hand:

インストール

Web Installerのアップロード

レンタルサーバのサーバコントロールパネルより
Webサイト/データ→ファイルマネージャー→画面上部の[アップロード]→[ファイルを追加]
取得したsetup-nextcloud.phpをアップロードする。

インストーラーにアクセス

引き続きファイルマネージャーで、
先ほどアップロードしたsetup-nextcloud.phpを右クリック→[Webページとして開く]

Setup Wizard

最新版はNextcloud18(2020/2/8現在)のはずなのに、Setup Wizardの画面ではNextcloud 16.0.3!ですが、気にせず→[Next]

Dependency check

インストールするディレクトリを選択。
"."("は入力しません)とすれば、setup-nextcloud.phpと同じフォルダに、
任意のフォルダ名を入力すればその中に、
ファイルが展開されます。→[Next]

Success

おめでとうございます:tada:(道のりはまだまだです)→[Next]

管理者アカウントを作成してください

任意のユーザ名とパスワードを入力します。
ストレージとデータベースの▼をクリック
データベースは[MySQL/MariaDB]を選択し、必要事項を入力します。
前準備でメモをしたそれぞれの項目を入力しましょう。
データベースのユーザ名:ユーザ名
データベースのパスワード:接続先パスワード
データベース名:データベース名
localhost:データベースサーバ

おめでとうざいます。:tada:

プライベートクラウドを満喫しましょう:smiley:

最新版への更新

先ほど確認したように、なぜか最新版ではないので更新を数回繰り返す

ダッシュボード右上のアイコン→[設定]→管理の[概要]→バージョン
新しいバージョンが利用可能です:バージョン名となっているので、ここが
最新版です。の表記になるまでアップデートを繰り返します。
→[アップデーターを開く]

Initializing

[Start Update]をクリックすると各項目に:white_check_mark:が入っていきます。
全ての項目に:white_check_mark:が入ると、
keep maintenance mode active?と聞かれますので、
[No(for usage of the web based updater)]をクリックしてください。
Nextcloudの再起動後、ダッシュボード画面に戻ります。

誤って[Yes(for usage with command line tool)]をクリックした場合

ひとまず慌てずに深呼吸して、コーヒーでも飲んで落ち着いてください☕️

Nextcloudがずっとメンテナンスモードのままを参照して解決しましょう。
記事中のconfig/config.phpですが、ファイルマネージャーよりアクセスできます。
config.phpを右クリックして[編集]、該当箇所を修正た後[保存]してみてください。

警告とその対処

ダッシュボード右上のアイコン→[設定]→管理の[概要]→セキュリティ&セットアップ警告 に、いくつかの警告が表示されていると思います。

PHPのメモリ制限は推奨値512MBを下回ります。

レンタルサーバ コントロールパネル→スクリプト設定→php.ini設定より

www/php.ini
memory_limit=512M`

セキュアではないHTTP経由でアクセスしています。(以下略

http://でアクセスすると表示されるため、https://でアクセスしましょう。
ついでなのでサイト全体にhttpsへ強制リダイレクトする設定します。
ファイルマネージャーからwwwに[表示アドレスへの操作]→[ファイル作成]し、下記の内容を入力後、ファイル名を.htaccessとして保存します。

www/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

"Strict-Transport-Security"HTTPヘッダが(以下略

この設定は下記のその他を参照した後に行うことをおすすめします。
www/.htaccess
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

ちなみにmax-age=31536000は1年間の秒数を表しています。

メモリキャッシュが設定されていません。

config/config.php
'memcache.local'=>'\OC\Memcache\APCu',

このインスタンスには推奨されるPHPモジュールがいくつかありません。(中略) imagick

さくらのレンタルサーバーでImageMagickを使用する方法を参考に設定しました。

www/php.ini
extension=imagick.so

big intがなんとか(警告文メモ忘れました)

PHP My Adminにログインし、該当レコードの型を変更する
ユーザ名:
パスワード:
[データベース]→[使用中のデータベース]→[警告されているテーブル]→[構造]→(警告されているフィールドの)[変更]→データ型を変更する→[保存]

その他

  • 独自ドメインでのアクセス時のエラー
  • 常時SSL化+HSTSプリロードについて

信頼されていないドメインからサーバにアクセスしています。(以下略

config.phptrusted_domainsという行があるので、内容を編集します。

config/config.php
'trusted_domains'=>array(0=>'(アカウント名).sakura.ne.jp',1=>'(独自ドメイン)',),

常時SSL化+HSTSプリロード

下記の記事を参考に設定しました。
3分で出来るHSTSプリロードの設定方法 – 常時SSL化後に必ず行うべき設定
httpからhttpsにリダイレクトする方法と注意点について

おわりに

はじめてQiitaに投稿しました。
この記事を編集するのに3時間くらいかかっています。

Qiitaにお世話になって3年くらいになりますが、記事を一つ投稿することの大変さを身をもって体感しました。

自分の覚えとして「ここが知りたいな」というところを中心に文字にしてみましたが、所々おかしなところもあるかと思います。
重大な欠陥等がありましたら、ぜひともご指摘くださいませ。

文中のリンク等にもありますが、諸先輩方の貴重な記事、記録を頼りにここまで進めました。
皆様の情報公開にいつも感謝しております:bow_tone1:

MATE(1) Ubuntu MATE 20.04 Daily を実機にインストール

$
0
0

はじめに

Ubuntu の公式フレーバーのひとつである、Ubuntu MATE 20.04 LTS Daily (公開前の版)をインストールしました。GhostBSDでMATE の使い勝手を再認識してのインストールです。そのときの備忘録になります。

Ubuntuとの違いは、GNOME 2 から始まった「MATE」(マテ)デスクトップ環境の採用です。

前回投稿したFreeBSDGhostBSDのUSB メモリへのインストールとは違い、VirtualBox を必要とせず、すんなりとUSB メモリにインストールできました。


別件:

Ubuntu MATE のダウンロードサイトには、学習用基板である「Raspberry Pi Model B 2、3、3+」、と超小型PC の 「GPD Pocket 、GPD Pocket 2、GPD MicroPC、Topjoy Falcon」などの UMPC(ウルトラモバイルPC)で動く SD イメージも置かれています。

これらの詳細は、 Ubuntu MATE Raspberry Pi ページUbuntu MATE UMPC ページで確認できます。

エントリーPC並みの性能のRaspberry Pi Model 4(まだ未対応)も手に入るようになり、ガジェット好きの自分にはとても魅力的に映ります。

これらのマシンでも稼働するということは、それだけ負荷が少ない、もしくは使い勝手の良いOS とも言えます。

Ubuntu MATE 公式サイト


ダウンロード

Ubuntu MATE 20.04 LTS (Focal Fossa) Daily Build

64-bit PC (AMD64):

focal-desktop-amd64.iso 2020-02-01 12:06 2.2G

チェックサム確認:

$ sha256sum focal-desktop-amd64.iso
43ed839d12f60a57cb29680a553f3fa58dc4e27bda9fff9f6bd439adfc81c399 focal-desktop-amd64.iso

→日々更新版なので、ダウンロードのたびに、そのときのチェックサム値の確認が必要です。


インストールのコツ

1. Linux では一般的でないBefs(Haiku) とか、XFSやUFS(FreeBSD) などのフォーマットのOS がインストールされていたUSB メモリをインストール先に使うときは、残骸が悪さをしないように、事前に「ディスク」(gnome-disks) アプリでNTFS で全面を初期化してから、Fat32 でフォーマットしておきます。

2. ライブUSB メモリで立ち上げるときに、ブートしてすぐ、グラフィックの初期化エラーで停止するときは、Tab キーを押してから「live」Enter とすれば続行できます。

3. ライブが立ち上がったら、USB メモリ(Fat32)を挿入して自動マウントさせ、わざと、アンマウントしないでそのままにしておきます。自動マウントしないようなら、初期化し直しです。これでUSB メモリを認識しないことを防げます。

4. インストーラを起動します。

5. 「@@」などを入力してみて、キーボードが認識されないときは、違う国のキーボードを選んでから、日本語キーボードを選択します。

6. インストーラがUSB メモリを認識して、アンマウントの警告メッセージが表示されたら、「はい」を選択。


インストール完了後に再起動。

mate-00.jpeg
→パネル(バー)が上下にあるのが、MATE のレイアウトです。パネルには「Firefox」アイコンだけが登録されていました。シンプルです。
画面左下を見ると「システム更新」が来ています。クリックして開いて、更新を実施。


日本語化と日本語入力

Ubuntu MATE のインストールが完了して、すぐに日本語表示と日本語入力ができました。

mozc.jpeg
→その後の修正で「あ」のアイコンはもう少し小さくなりました。

入力メソッドは「fcitx-mozc」で、半角/全角キーを押すだけでエディタのPluma で日本語入力できました。画面右上の「あ」アイコンがちょっと大きめですが、操作に支障はありません。

入力メソッドはインストールされていても、何かしら設定しないと動かないディストリビューションがほとんどです。何もしなくてすぐに使えるのは新鮮でした。


テキストエディタの「Pluma」

ダーク系のテーマ(Ambiant-MATE) がデフォルトです。赤いカーソルで、行番号も表示されています。すでに好みの設定です。ツールバーのアイコンがクールです。

追加で行ったのは、挿入する日時/時刻の書式を個人用に修正したことぐらいです。

日時時刻の書式を修正:

編集 →設定 →プラグイン →日時/時刻の挿入 →Preferences →「その他」にチェック
%Y-%m-%d %H:%M

使うとき:

編集 →日時/時刻の挿入
2020-02-03 20:24

うれしいことに、Gedit 用に作った色のテーマが使えました。置く場所も任意です。
Gedit と同じプラグインが使えるかは未確認。


ブラウザ「Firefox」

すでに日本語化されていました。


ファイアウォールの設定

システム →コントロール・センター →「ファイアフォール設定ツール」
→すでに、「Status: オン」になっていて、盾がカラー表示されました。

さすがです。ここも設定されていました。


パネルレイアウトの組み合わせは、選ぶだけ:

システム管理 →ようこそ→「Welcome」画面→「Desktop Layout」

Layout.jpeg

  1. Familiar: MATE その1 (デフォルト)
  2. Mutiny: Unity 風(ランチャー左)
  3. Redmond: Windows 風(下パネルのみ)
  4. Cupertino: MacOS 風(Plank ドックの使用)
  5. Traditional: Gnome 風
  6. Contemporary: MATE その2
  7. Netbook: MATE その3(上パネルのみ。超シンプル)
  8. Pantheon: elementary OS風(Plank ドックの使用)

左上の「Familiar」→「Traditional」に変更。

→GhostBSD のデフォルトのレイアウトです。
(上のパネルに「場所」と「システム」が追加されます。)


まだ、不安定

使っていると、パネル周りの設定で内部エラーが数回発生しました。Daily 版なので色々な使い方をして、どんどん不具合を送信するようにしていますが、ブラウザでLaunchpad が自動で開いても発生条件がわからないので報告はしていません。再現方法を見つけての報告でないと支援者の邪魔になるだけです。


「Software Boutique」でソフトウェアをインストール

メニュー →システム管理 →「Software Boutique」

MATE の環境に合ったアプリケーションを紹介してくれ、簡単にインストールできるようにしたアプリです。カテゴリ別に検索できます。
ほとんどが定番のアプリを紹介してくれます。

  • アクセサリー
  • 教育
  • ゲーム
  • グラフィック
  • インターネット
  • オフィス
  • プログラミング
  • サウンドとビデオ
  • システムツール
  • ユニバーサルアクセス
  • サーバー
  • ソフトウェアをもっと
  • 修復

→肝心のソフトウェアの登録はまだでした。器だけですが、日本語化されています。

「修復」カテゴリの画面にて「端末コマンドを表示」にチェックすると、該当のAPT コマンド等を表示する機能があります。省略したコマンドは知っていてもフルのコマンドは知りませんでした。


ちなみに、検索でヒットしない場合は、「ソフトウェアセンターをインストールします。」ボタンをクリック。

→「ソフトウェアをもっと見つける」カテゴリのページが表示されます。

残念ながら、「ソフトウェアセンター」はまだ登録されていません。
なので、「synaptic」を手動でインストールしました。
(synaptic は確実で便利ですが、つづりをよく知らないと検索できません。他のツールと併用しています。)


synaptic を手動でインストール

$ sudo apt update
$ sudo apt install synaptic
:
提案パッケージ:
  xapian-tools dwww deborphan apt-xapian-index tasksel
以下のパッケージが新たにインストールされます:
  libept1.5.90 libxapian30 synaptic

→提案パッケージ: の欄は気にしなくてよいです。あると便利か(自分にとっては)邪魔な機能と思えば良いです。

システム →システム管理 →synaptic


synaptic で「notepadqq」をインストール

Windows 使いの方なら、このアプリの元になった「notepad++」があるので、エディタを統一できます。

特徴としては、前回開いていたタブ(ファイル)を起動時に開いてくれます。引き続いてのテキストファイルの編集に便利なので、2つ目のテキストエディタとして最近は「Geany」の代わりにインストールしています。マウスの中央ボタンでの貼り付けができるようになったからです。また、多くのテーマを内蔵しているのもポイントです。

インストールしても、メニューに「プログラミング」のカテゴリはデフォルトでは表示されていません。
再起動 →メニューに反映させます。

アプリケーション →プログラミング →Notepadqq

テーマの変更:
設定 →環境設定 →外観 →カラースキーマ: twilight(ハイライト色がオレンジです)
→Apply →OK


synaptic で「KolourPaint」をインストール

スクリーンショットをウェブにアップするときの画像の加工(軽量化)によく使います。簡単に加工できます。

依存関連のインストールで時間がかかりました。
画像ファイルを右クリックしてアプリは起動するので、上部パネルにアイコンは登録しません。


パネルのレイアウトを詳しく設定するなら:

システム →コントロールセンター →ルックフィール →「MATE Tweak」→パネル

好みのレイアウトにしてから、カスタマイズします。
左上の「Familiar」→「Traditional」に変更。
上部パネルに「アプリケーション」、「場所」、「システム」のメニューが表示されます。

あとは、好みの(下記の)設定を実施しました。


上部パネルに「ソフトウェアの更新」アイコンを追加

Daily 版なので使う機会が多いです。自分のタイミングで更新したいので、登録しています。

上部パネルで右クリック→Add Panel...→パネルに追加(アイテム)→カスタム・アプリケーションのランチャ→追加

キーの型: アプリケーション
名前: Software Updater
コマンド: /usr/bin/update-manager
コメント: ソフトウェアの更新

アイコンの欄をクリックしなくても自動でアイコンが表示されました。→OK

アイコンを右クリック →移動、右クリック →ロック


上部パネルに「MATE 端末」アイコンを追加

上部パネルで右クリック→Add Panel...→パネルに追加(アイテム)→カスタム・アプリケーションのランチャ→追加

キーの型: アプリケーション
名前: 端末
コマンド: mate-terminal
コメント: 端末

アイコンの欄をクリックして下記のファイルを指定:
/usr/share/icons/mate/48x48/apps/utilities-terminal.png →開く →OK

アイコンを右クリック →移動、右クリック →ロック


上部パネルに「Notepadqq」アイコンを追加

上部パネルで右クリック→Add Panel...→パネルに追加(アイテム)→カスタム・アプリケーションのランチャ→追加

キーの型: アプリケーション
名前: Notepadqq
コマンド: notepadqq %U
コメント: テキストエディタ

アイコンの欄をクリックして下記のファイルを指定:
/usr/share/icons/hicolor/48x48/apps/notepadqq.png →開く →OK

アイコンを右クリック →移動、右クリック →ロック


上部パネルに「Pluma」アイコンを追加

上部パネルで右クリック→Add Panel...→パネルに追加(アイテム)→カスタム・アプリケーションのランチャ→追加

キーの型: アプリケーション
名前: Pluma
コマンド: pluma %U
コメント: テキストエディタ

アイコンの欄をクリックして下記のファイルを指定:
/usr/share/icons/mate/48x48/apps/accessories-text-editor.png →開く →OK

アイコンを右クリック →移動、右クリック →ロック


下部のパネルを自動的に隠す

下部のパネルを右クリック→プロパティ→「自動的に隠す」にチェック→閉じる


パネルのカスタマイズ設定を保存

注意:

今のところ、パネル周りは不安定で、続けてパネルの切り替えを繰り返すと、パネルが乱れることがあります。

また、「名前を付けて保存」でうまく保存されず、同じ名前で保存すると元の設定を壊すことがあるので、保存のたびに違う別の名前に変えて保存するようにしています。

「何か作業したら、一度、ログアウト →ログイン してきれいにしてから保存する」のが安全です。

1. カスタマイズが完了したら、一度、ログアウト →ログイン

2. 保存 (1 回目)

システム →コントロールセンター →ルックフィール →「MATE Tweak」→パネル

左上にて、「名前を付けて保存」をクリック→「Traditional2-copy」と指定 →OK

今までのカスタマイズ(パネルに追加した4つのアイコンと、下パネルの「パネルを隠す」設定)が保存されます。

一度、ログアウト →ログイン

3. 保存 (2 回目)

システム →コントロールセンター →ルックフィール →「MATE Tweak」→パネル

左上にて、「名前を付けて保存」をクリック →「Traditional2」と指定 →OK

念のための、2度目の保存です。

一度、ログアウト →ログイン


最終的なデスクトップ画面:

mate-9.png
→下部のパネルは隠れています。下パネルが必要なときは、カーソルを下に持っていくだけです。これなら画面が広く使えます。


日本語の翻訳で気になるところ:

Ubuntu MATE だけでなく、GhostBSD のMATE でも見られたので、MATE Desktop での修正が必要のようです。

1. Pluma にて、ファイル→「保存(S)」が「サーバ(S)」と表示されます。

2. Pluma にて、ファイル→「別名で保存(A)」→表示されるダイアログの「保存(S)」も「サーバ(S)」と表示されます。

どちらも、Pluma の翻訳ファイルの修正でOK でした。
/usr/share/locale/ja/LC_MESSAGES/pluma.mo

3. システム →コントロールセンター →「自動起動するアプリ」→im-launch を選んで「編集」→「自動起動するプログラムの編集」画面にある「保存(S)」も「サーバ(S)」と表示されます。

こちらも、翻訳ファイルの修正でOK でした。
/usr/share/locale/ja/LC_MESSAGES/mate-session-manager.mo

現在の翻訳システムはプルリクエストでなく、翻訳サイト(transifex) に参加して提案する方式です。楽だし提案は自由です。

もしかしたら、他のアプリでもありそうですが、気づいたときに参加して提案すれば良いと思います。自分ができる範囲の小さな貢献でも、操作性の向上や安定性などとなって自分にも他の人にも返ってきます。

あとがき

すんなり(「live」入力は必要だったけど)USB メモリにインストールできました。それもHaiku のブートに使えなかったUSB メモリにです。

FreeBSD のUSB メモリへのインストールで苦労した後(立ち上がらず失敗)だったので、さすがUbuntu と思いました。

さらに、Ubuntu MATE だと、インストールするだけで、(設定したくなる設定がすでにされていて)そのままで使えました。そのようなディストリビューションはありそうでなかったので、新鮮です。

正式に公開され安定すれば、インストールも楽だし、設定はいらないし、GNOME(グノーム)の操作よりも直感的な操作ができるのでUbuntu 初心者にもオススメだと思います。若干軽いですし…。

必要なら、簡単にパネルレイアウトをWindows やMac に似せることもできるので、敷居は低くくできます。

少し、もっさり感が感じられますが、もっと高速なUSB メモリにするとかHDD(SSD) にインストールすれば解消すると思います。

今のところ、パネル周りは不安定です。一度設定すれば触らないので運用には支障はないと思います。公開される頃には、もっと安定しているはずです。


(次の投稿に続く)
投稿一覧

Rails6 バリデーションをかける

$
0
0

目的

  • 空欄でのDB登録を避けるためのバリデーションの記載方法をまとめる

空での保存を避けるバリデーション

  • 下記の記載を当該のモデルファイルに記載する。

    classPost<ApplicationRecordvalidates:バリデーションをかけたいカラム名,{presence: true}end

空での保存を防ぎ、かつ総文字数を140文字以下にするバリデーション

  • 下記の記載を当該のモデルファイルに記載する。

    classPost<ApplicationRecordvalidates:content,{presence: true,length: {maximum: 140}}end

今日の外出するテンションをニューラルネットワーク使って雑に数式化してみたった

$
0
0

Motive

今季は人生で経験のしたことがないくらいの暖冬でしたが、この数日は平年の状況に戻ってかなり寒かった気がします。
テラサムスハムニダです:oden:

外出する予定がなかったとは言えないですが、ここまで寒いとインドアになってしまいます。

ここでは、いろいろな要因を並べてみてとても根本的でかつ雑で簡易的な形でのニューラルネットワークを使い、自称ニートが外出するかしないかの判断を数式化してみました。

Describe

 fig1.png

Formula

Y
\\=
X \times W
\\ =
\begin{bmatrix}
x_1 & x_2 & x_3 & x_4 & x_5 & x_6 
\end{bmatrix}

\times

\begin{bmatrix}
w_1 \\ w_2 \\ w_3 \\ w_4 \\ w_5 \\ w_6 
\end{bmatrix}
\\ = 

x_1 \times w_1 + x_2 \times w_2 + x_3 \times w_3 + x_4 \times w_4 + x_5 \times w_5 + x_6 \times w_6

\\
w_1 = - \acute{w_1} \\
w_2 = \acute{w_2} \times 5 \\ 
w_3 =  \left\{
\begin{array}{ll}
-50 & (snow) \\
-25 & (rain) \\
10 & (cloud) \\
30 & (sun)
\end{array}
\right. \\
w_4 = - \acute{w_4} \\
w_5 = \acute{w_5} \\
w_6 = - \acute{w_6} \times 10 

新型ウイルスですが空気中でも感染するみたいです。今まで身体に異常がなければあまり重症化しないみたいですが、感染した場合は2〜3週間休まなければならないというリスクがあるので10倍にしてレバレッジを効かせています。
かかっても発熱とかあるので不特定多数の人が多い場所へは行きたくなかったすね:mask:

以上のことで出力値Yの値が低くなりそうなので外出しなかったとです。:smirk_cat:

今回はコンセプトの話なので、ここから具体的に値を出してシグモイド関数を使ってYの値を更新するかの判定をするなどについては割愛します。(てか詳しく知らんし)

Postscript

今思えば専門の必修科目が9割5分くらいあって自由に選択できる講義がなかったです。現在では緩和されているのですが自由すぎて単位を落としている学生が多いと聞いているので逆によかったのですが。:expressionless:

数少ない選択講義で何も考えずにニューラルネットワークをとったのですが、ここまでトレンドになって役立つとは想像がつかなかったです。:sweat_smile:

Reference

ABC154のA~DをPython3で解く

$
0
0

はじめに

こんばんは。tax_freeです。前回からレートが34上がりました。今週は期末テストです()

A問題

問題

考えたこと
if文で条件分岐するだけです。

s,t=map(str,input().split())a,b=map(int,input().split())u=str(input())ifu==s:print(a-1,b)else:print(a,b-1)

B問題

問題

考えたこと
与えられる文字列の長さを調べて、文字列の長*'x'してあげればよい。
str()は自分で分かりやすいようにわざと書いています。
@shiracamusさんから指摘があったので修正しました。

s=list(str(input()))s=str(input())
s=str(input())print('x'*len(s))

C問題

問題

考えたこと
整数列の要素が全て異なってる→同じ要素がない、ことなのでpythonのsetに入れて調べました。
コピペした記事

n=int(input())a=list(map(int,input().split()))defhas_duplicates(seq):returnlen(seq)!=len(set(seq))ifhas_duplicates(a):print('NO')else:print('YES')

まとめ

Dは、期待値の考えかたが苦手(模試の選択問題も確率は選べばないようにしている)。
Eは、Kの値が3個しかなかったので気合で場合分けできると思ったけどできなかった
次回のABC155はA~Dくらいは解けるようにがんばる。期末テストも!
では、おやすみなさい

【初心者】AWS Amazon Linux2でFluentdのfluent-plugin-cloudwatch-logsのインストールに詰まった話

$
0
0

概要

ログを取ろうと、Amazon Linux2でFluentdは入ったものの、fluent-plugin-cloudwatch-logsでインストールに詰まった。原因としてはrubyの開発環境がなかっただけだった話。

症状

こんなエラーが生じてうまく入らない。

$ sudo /opt/td-agent/embedded/bin/gem install fluent-plugin-cloudwatch-logs --no-ri --no-rdoc
Building native extensions.  This could take a while...
ERROR:  Error installing fluent-plugin-cloudwatch-logs:
        ERROR: Failed to build gem native extension.

    current directory: /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/msgpack-1.3.3/ext/msgpack
/opt/td-agent/embedded/bin/ruby -r ./siteconf20200210-967-1s5gonu.rb extconf.rb
checking for ruby/st.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/opt/td-agent/embedded/bin/$(RUBY_BASE_NAME)
/opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:468:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:599:in `try_cpp'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:1107:in `block in have_header'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:957:in `block in checking_for'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:351:in `block (2 levels) in postpone'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:321:in `open'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:351:in `block in postpone'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:321:in `open'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:347:in `postpone'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:956:in `checking_for'
        from /opt/td-agent/embedded/lib/ruby/2.4.0/mkmf.rb:1106:in `have_header'
        from extconf.rb:3:in `<main>'

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

  /opt/td-agent/embedded/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0/msgpack-1.3.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /opt/td-agent/embedded/lib/ruby/gems/2.4.0/gems/msgpack-1.3.3 for inspection.
Results logged to /opt/td-agent/embedded/lib/ruby/gems/2.4.0/extensions/x86_64-linux/2.4.0/msgpack-1.3.3/gem_make.out

原因

Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.や、You have to install development tools first.というメッセージがあることから、rubyの開発環境が足りていないことがわかる。

対応策

Rubyの開発環境を一式放り込んだ。

sudo yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel

結果

無事インストールできた。

$ sudo /opt/td-agent/embedded/bin/gem install fluent-plugin-cloudwatch-logs --no-ri --no-rdoc
Building native extensions.  This could take a while...
Successfully installed msgpack-1.3.3
Fetching: fluentd-1.9.1.gem (100%)
Successfully installed fluentd-1.9.1
Fetching: aws-partitions-1.271.0.gem (100%)
Successfully installed aws-partitions-1.271.0
Fetching: aws-sdk-core-3.89.1.gem (100%)
Successfully installed aws-sdk-core-3.89.1
Fetching: aws-sdk-cloudwatchlogs-1.28.0.gem (100%)
Successfully installed aws-sdk-cloudwatchlogs-1.28.0
Fetching: fluent-plugin-cloudwatch-logs-0.8.0.gem (100%)
Successfully installed fluent-plugin-cloudwatch-logs-0.8.0
6 gems installed

雑感

AWSとか普通の環境を触り始めて1か月くらいたってようやくこの手のエラー対応に慣れてきたなぁ、と思いました(遅い)

Python 2次元配列の操作

$
0
0

二次元配列の操作について

Pythonでコードを組んでいて
二次元配列を扱うことがあったのでメモ。

array=[[0,1,2],[3,4,5],[6,7,8],[9,10,11],...]

配列の中に配列がある…
しかも、1行で表示されていて見づらい…

これを数学の行列みたいに
「かっこ」や「,」を取り除きたい!

print(*array,sep='\n')

おまじないでこうしてあげると…

[0,1,2][3,4,5][6,7,8][9,10,11][0,0,0]

行列っぽくなった。

forainarray:
    print(*a)

こうすると

01234567891011000

もっと行列っぽくなった!!


【Python】リスト(配列)内要素の操作【ソート】

$
0
0

はじめに

リストを扱う上で重要なソートの方法をまとめました。
基本的に以下のようなコードでコードと出力結果を記載します。

ex.py
code='コード'print(code)# code(出力結果)

リストを昇順または降順にソートするsort(),sorted()

Pythonでリストを昇順または降順にソートするにはsort()sorted()の2つの方法がある。文字列やタプルをソートしたい場合はsorted()を使う。

・sort():元のリストをソート

※元のリスト自体が書き換えられる破壊的処理。

sort().py
org_list=[3,1,4,5,2]org_list.sort()print(org_list)# [1, 2, 3, 4, 5]
#sort()が返すのはNoneなので注意。
print(org_list.sort())# None
#デフォルトは昇順。降順にソートしたい場合は引数reverseをTrueとする。
org_list.sort(reverse=True)print(org_list)# [5, 4, 3, 2, 1]

sorted(): ソートした新たなリストを生成

※引数にソートしたいリストを指定するとソートされたリストを返す。元のリストは変更されない非破壊的処理。

sorted().py
org_list=[3,1,4,5,2]new_list=sorted(org_list)print(org_list)# [3, 1, 4, 5, 2]
print(new_list)# [1, 2, 3, 4, 5]
#デフォルトは昇順。降順にソートしたい場合は引数reverseをTrueとする
new_list_reverse=sorted(org_list,reverse=True)print(org_list)# [3, 1, 4, 5, 2]
print(new_list_reverse)# [5, 4, 3, 2, 1]

sorted()を用いた文字列のソート

sorted()関数の引数に文字列を指定すると、ソートされた文字列の一文字ずつが要素として格納されたリストが返される。

sorted()_.py
org_str='cebad'print(org_str)# cebad
new_str_list=sorted(org_str)print(new_str_list)# ['a', 'b', 'c', 'd', 'e']
#文字列のリストを連結して一つの文字列にするにはjoin()メソッドを使う。
new_str=''.join(new_str_list)print(new_str)# abcde
#まとめて書いてもOK。降順にソートしたい場合は引数reverseをTrueとする。
new_str_reverse=''.join(sorted(org_str,reverse=True))print(new_str_reverse)# edcba

リストや文字列を逆順に並べ替えるreverse(), reversed()

Pythonでリストの要素を逆順に並べ替えるにはreverse(), reversed()およびスライスを使った方法がある。文字列やタプルを逆順に並べ替えたい場合はreversed()かスライスを使う。

・reverse(): 元のリストを逆順に並べ替え

※元のリスト自体が書き換えられる破壊的処理。

sort().py
org_list=[1,2,3,4,5]org_list.reverse()print(org_list)# [5, 4, 3, 2, 1]
#reverse()が返すのはNoneなので注意。
print(org_list.reverse())# None

・reversed(): 逆順に取り出すイテレータを生成

※reversed()は要素を逆順に取り出すイテレータを返す。元のリストは変更されない非破壊的処理。

sort().py
org_list=[1,2,3,4,5]reverse_iterator=reversed(org_list)print(org_list)# [1, 2, 3, 4, 5]
#reversed()はリストではなくイテレータを返すので注意。list()でイテレータをリストに変換する。
new_list=list(reversed(org_list))print(new_list)# [5, 4, 3, 2, 1]

・スライスによって逆順に並べ替え

ex.py
org_list=[1,2,3,4,5]new_list=org_list[::-1]print(new_list)# [5, 4, 3, 2, 1]
org_str='abcde'new_str=org_str[::-1]print(new_str)# edcba

最後に

他にも何か方法が解法があれば教えてもらえると嬉しいです。

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

$
0
0

Background

のニュースを見て高い!!!
と思ってしまいました。

コメントでリース代の話が出てますが、壊れやすいのはマウスキーボードくらいで本体まではそこまでではないと思います。ソフト代含めて10万くらいじゃねと思ったりしました。スペックを問題視する人がいますがWordかExcelを開くか軽量級の開発環境があるだけだったらこれで十分な気がします。このPCでyoutuberの動画を頻繁に見る必要性がないので。

本体が壊れそうな想定としては学校自体がヒャッハーなのか、学生自体にレベル5の特殊能力があってマシンと相性が悪いとかぐらいでしょうか。

Motive

で、学校で学んだことを復習したい!
と思う学生がいると思うのですが、この失われた30年で格差社会となったために中には家庭的な事情でお金がないひとが結構いるのではと想定されます。

少なくとも慢性的に科学分野では予算不足だけではなく開発者もいない状況です。
特に人工知能は思っている以上に分野が広いので、専門的な数学があるのがベストなのですが文系的なアプローチから乱入して今ある数値計算をツールとして最低限扱えればいいのかなと思っています。

また、研究しなくても情報系にあまり関わりのない業種でもスキルとしてあった方が良いと思っています。
必須ではないですが、プログラミングを学ぶメリットの一つとしては7人必要な作業を3人まで減らすことや作業時間短縮などの作業自動化による効率化ができるので普通に良いはずです。

AIで仕事が奪われる
というひとがメディアでは結構います。
特にブームになった数年前はかなり言われていました。

しかしながら、AIでできることとできないことを考えるとできないことの方が多いです。
もしこの段階で成熟していればお掃除ロボにとってかわって清掃業者が別の職種に移っているのではと思っています。でもまだいます。:robot:

そのため、少なくとも10年くらいはAIはまだ学習中なので多少の自動化をしても今までやってきた作業の負担が軽減するだけで、給料低下や失業する心配はなく、メリットの方が大きいです。

それで、
格差社会からちょっと抜け出して安定した給料を得たい!
と思っているならば、
:smoking::beer::chocolate_bar::tv::iphone::video_game::slot_machine::race_car::soccer::baseball::basketball::fishing_pole_and_fish::microphone::tent:
にはあまり使わずに数万円くらいためて自分のスキル・学習に投資に使ってみてほしい:bangbang:

ここでは何もない状況からプログラミングを学ぶ方法を考えてみました。

Actor

対象者は以下の通りです。

  1. 中卒・高卒で情報科学に疎いひと
  2. 一回もPCを持ったことがない未経験者(スマホしかないひとが多いみたい)
  3. 定年退職した後の趣味にしたい

そもそも、qiitaの存在すら知らない場合はどうしよう:thinking:

Plan

シンブルに学びたい場合は、

  • OS:Mac
  • 言語:Python

が一番良い組み合わせだと思います。

なぜなら、ターミナルというアプリひとつでプログラムが出来てしまうからです。
other.png
terminal.png

で、アプリを実行すると、、、

tarminal_blank.png

こんな画面が出ると思います。(デフォルトは背景色は白です。)

で何もしないで、pythonと打つと

$ python
Python 2.7.16 (v2.7.16:413a49145e, Mar  2 2019, 14:32:10)[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license"for more information.
>>>

とメッセージが出るのでこれでプログラムが打てます。

試しに円の面積を出してみます。

公式は、

S = \pi \times r^{2}

っすね。

面積計算用の関数を作ってみると、、、
terminal_python.png

といった感じで半径が3だった場合の面積が計算されました。

KEISAN 円の面積
で計算すると、、、
circle.png

合ってますね。
あとは参考書(1000~2000円)を買って写経(書いてあるコードをそのまま書き写す)すれば良さそうです。

Why Mac?

その時のトレンドもあって2000年代はPCはWindows一択だったのですが、最近はMacを勧めます。
将来的にWord・Excel(VBA)・PowerPointを使う機会があればいいのですが、サーバサイドでの開発をしてみたい場合は先ほどのterminalひとつでアクセスして開発することを考えるとMacの方が相性が良いからです。
大抵のサーバOSはLinux系でMacとの親和性が高いです。

Why Python?

先ほどの通りターミナルひとつでプログラムができることもひとつの理由なのですが、他にも

  • 実行がコマンドひとつでできる
  • 文字列処理が他の言語より容易
    • 少なくともC++よりは良い
  • 標準でリスト・辞書が使える
  • パッケージが豊富
    • 何かしたいなと思ったら結構できます。
  • Pythonコードが書ければRuby・JavaScriptもなんとかなる

などがあります。

Price

新品のMacを買おうとすると少なくとも約10万くらいするのですが、学習のみの用途でターミナルだけ使いたい場合はフリマサイトで
5千円~2万円
と中古で売っているもので十分です。
重量が重く、最新のOSに更新することはできないですが2007年発売のものでも問題ないです。

コメントでバッテリーがすぐ切れるといった問題がありますが、自宅か近所のカフェ・コンビニで学ぶ分には良いと思います。また、動作が重いといったものだったらこのPCにはECサイトなどで買い物しないなどの個人情報をなるべく入力しないようにすれば問題ないと思います。

よくあるフリマサイト
- メルカリ
- ラクマ
- PayPayフリマ

PostScript

  • Pythonを学ぶ時の本・サイトなど
  • Mac以外で低コストで学ぶ方法
  • このままだとPythonのバージョンが古いままなので、新しいものにシフトするには

と書くこと多いです:expressionless:

なぜ、見出しが英語かと言いますと単純に使っていないと忘れるのと雰囲気だけ意識高い系になれると思ったからでそれ以上の意味はないです。

RのSummary()の使い方 ---初心者向け---

$
0
0
tags: rBasicLearning

Summary()の使い方

使用するデータ

今回は, データとしてirisを使う.

library(datasets)iris

Summary()を使う場合

Summary()は, データの概観を数値で見たい時に使う.

質的データのSummary()

質的データのSummary()は, その変数ごとにどれくらいの度数が入っているかを数値で見ることができる.
視覚的に見たい時は, 棒グラフ(barplot)を使う.

summary(iris$Species)# Categorical variable>summary(iris$Species)# Categorical variablesetosaversicolorvirginica505050
irisSpecies<-table(iris$Species)barplot(irisSpecies)

量的データのSummary()

量的データのSummary()は, 最大値, 最小値, メジアン, 四分位数, 平均の数値を見ることができる.
これを視覚的に見たい時は, 箱ひげ図(boxplot)を使う.

summary(iris$Sepal.Length)# Quantitative variable>summary(iris$Sepal.Length)# Quantitative variableMin.1stQu.MedianMean3rdQu.Max.4.3005.1005.8005.8436.4007.900
boxplot(iris$Sepal.Length)

全体のSummary()

全体でSummary()を見ると, 以下のようになる.
今回は, 最大値, 最小値, メジアン, 四分位数, 平均の数値を見ることができる.

summary(iris)# Entire data frame>summary(iris)# Entire data frameSepal.LengthSepal.WidthPetal.LengthPetal.WidthSpeciesMin.:4.300Min.:2.000Min.:1.000Min.:0.100setosa:501stQu.:5.1001stQu.:2.8001stQu.:1.6001stQu.:0.300versicolor:50Median:5.800Median:3.000Median:4.350Median:1.300virginica:50Mean:5.843Mean:3.057Mean:3.758Mean:1.1993rdQu.:6.4003rdQu.:3.3003rdQu.:5.1003rdQu.:1.800Max.:7.900Max.:4.400Max.:6.900Max.:2.500

タダでプログラミングを学ぶ方法を考えてみた。

$
0
0

Background

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

今回はスマホは持っててPC買い始めのひと向けに無料でプログラムを学ぶ方法をまとめてみました。

OPAC - Library search system

おそらく、大卒が知っていて中卒・高卒が知らないことはOPACではないでしょうか。
大学であれば本・雑誌・論文などを探すのに一回生の最初のオリエンテーションで聞かされると思います。

Googleで
OPAC [住んでいる市町村区]
と検索すると図書館のリンク出てくるので、ここで
Python
と入力して探せば良いと思います。

予想ですが、プログラム自体何それおいしいの状態のエリアが大半であってもVBAが主力だと思います。そのため、少し大きめの図書館でなければ検索は引っかからないと思います。

ただし、三大都市圏に住んでいるのであればどこかの図書館へ行けばPythonの本は必ずあるのでこの方法で探す選択肢は持っていて損はないです。

試しに
東京都立図書館
で東京都内にあるPythonの本を探してみました。

OPAC.png

ここでは、[区立図書館][市町村立図書館]にチェックして"Python"で検索しました。

search.png

50音順なので足立区から表示されますがひとつの図書館に数十冊はありそうです。
左側のメニューから近くの図書館をクリックすると検索結果が反映されます。

東京都内だと約2500 ~ 3000冊はありそうです。

Web site

の2つのサイトに書かれているコードを使って実行すれば大体のことは網羅できます。
(説明雑でサーセン:sweat_smile:)

あとは、公式サイトのドキュメントにもサンプルコードが書かれています。
ライブラリはたくさんあるわけですが、学習が進んで何か自分でアプリを作りたい時に必要そうな分だけ選んで使えば良くて、全て覚えている開発者はほとんどいないんじゃないかと思います。

Skill Check

ひと通り学習が終わったら力試しとしてスキルテストすると良いです。
本格的に始めたい場合はAOJでもいいのですが、難易度の設定バランスや問題の出題方式だとPaizaの方がとっつきやすいです。S・A・B・C・Dと難易度別に問題が約200問あるのですが、C・Dの問題を多く正解できれば良いと思います。B問題ができると尚良いです。
(最低限一般の開発者が求めているスキルはB問題でしょうか。実際問題自分がなんとか一定の給与をもらって働いている。)

自分はと言いますと一回しかA問題は解けんかったです:scream:
授業で再帰・2分探索・動的計画法などを学んでアウトプットできていればとちょっと後悔しています:sweat:

paiza.png

(注: ギノの社員でも契約社員でもないとです:spy:)

NextStage

Skill Checkで自信がついたらゲーム・webサイトを作成するなどのフェーズに移ればいいです。
freegamespygameを使ってサンプルコードを改造するところから始めるとかいいかもしれないです。
(以前に[Python]pipからゲームをインストールして遊んでみたで方法をまとめてます。)

PostScript

次はPython2系とPython3系の話をしようと思います。

Webエンジニアへと転職して一年が経とうとしているので振り返ってみた

$
0
0

はじめに

この記事は新卒未経験SEからWebエンジニアに転職した自分が

  • 転職して何が変わったのか
  • 新しく触れた技術
  • 携わった業務
  • 転職後苦労したこと

についてまとめた内容となっています。

こんな人に読んでほしい

  • Web系エンジニアになりたい、転職したいと考えている人
  • Web系エンジニアになり、業務経験がまだ浅い人
    • 他の人のモチベーションアップに繋がれば嬉しいです。

経歴

  • 文系大学卒業(プログラミング経験無し)
  • SIerでSEとして1年勤務後転職
  • Web系自社開発企業入社←今ここ

転職して何が変わったか

  • 主体的に働くようになった
    • 業務の内容もただの単純作業はなく、自分で考えて働くことが求められるようになりました。
  • 業務のスピード感が圧倒的に早くなった
    • 一週間ごとに成果を求められるので、だらだらとやっているとあっという間に時間が経つため時間を意識して仕事をするようになりました。
  • 業務の中で色々な技術やツールを使うようになった
    • 具体的なものに関しては後ろでまとめますが、たくさんの新しい技術に触れることが出来ました。
  • 仕事が楽しくなった
    • 転職して一番変わったことです。

新しく触れた技術

  • 言語
    • C#(.NET MVC)
    • Ruby(Ruby on Rails)
    • Go
  • DB
    • SQL Server
    • MySQL
  • インフラ
    • AWS
  • ソースコード管理
    • GitHub
    • SourceTree
  • コンテナ
    • Docker

自分が業務としてやったもの

  • CSVファイルを読み込んだり出力できる機能を持った画面を作成(C#)
  • アプリケーションの管理画面を一から作成(Ruby on Rails)
  • メールバッチ修正(Go)
  • CodePipelineを使いECSにデプロイ(CI/CD環境の構築)
    • GitHubの指定したブランチにマージされたらCodeBuildで自動的にビルドし、ECSにデプロイされる環境を構築しました。
  • ECSでローリングアップデート/BGデプロイ環境構築
  • プルリクエスト作成時にフォーマッタを実行させる
    • CodeBuildで作りました。指定されたブランチにプルリクエストが作成、またはプルリクエストが更新されるたびにフォーマッタを実行し、エラーが出たらマージをさせない仕組みを作りました。
  • SlackにCodePipelineやCodeBuildの結果を通知

大変だったこと

  • 動かないアプリをリリースした
    • 実装にかなり悩んだ処理があったのですが、時間がなく大して検証をしなかった結果、データを登録しようとするとエラー、戻るボタンを押すとエラー、一覧画面を表示しようとするとエラー、といったアプリケーションがリリースされてしまいました。本稼働までは時間があったので、周りの方の協力を得てなんとかバグはなくなりましたが、必要以上にチームを疲弊させてしまいました。
  • 業務中に出てくる単語が分からない
    • もともとプログラミング経験も無く、コンピューターサイエンスの知識もITパスポートレベルで止まっていたため、会議で出てくる単語の意味が分からず、調べても記事の内容が理解できない、といった苦しい状況でした。

今後取り組んでいきたいこと

  • 基本的な知識の習得
    • 基本情報(コンピューターサイエンス)の勉強
    • 言語の勉強
    • DBの勉強
  • 勉強会やカンファレンスへの参加
    • デブサミやAWSサミットに参加予定です
  • コードをたくさん書く
  • Qiita等に技術記事の投稿

あまり残業などはしなかったので、その分の時間を勉強に充てられたなあと少し後悔してます。また、書いてあるコードをきちんと理解できていないので、言語の勉強やコードを書く量を増やさないといけないなと強く感じました。

最後に

転職前はこんなにも色々なことをやるとは思っておらず、慣れないことばかりでしたが、最近はようやくエンジニアとしての仕事が楽しくなってきました。

勉強しないといけないことはまだまだたくさんありますが、「勉強をしないといけない」という思いがより強まったので、これからもどんどん技術をキャッチアップしていきたいと思います。

Viewing all 21687 articles
Browse latest View live