いこブログ

非ITエンジニアのサラリーマンが業務を自動化、効率化するためのプログラムや生活を豊かにする情報を紹介します。

【感想】udemyでフルスタック・Webエンジニア講座を購入した話【継続中】

はじめに

趣味でプログラミングをしていますが、副業にランサーズやクラウドワークスといったクラウドソージングを利用することができると見かけました。Web開発を学んでさらに副業にできたらいいじゃん!と思ったのでWeb開発の勉強をしてみることにしました。

調べてみるとudemyというサイトのオンライン講座なら幅広く学べそうだと分かったので購入してみることにしました。

そもそもudemyって?

「udemy(ユーデミー)」は個人が先生となってオンラインで講座を公開、販売できるサービスです。 学びたい人は、公開された講座を購入し、オンラインで動画を見ながら学習を進めることができます。 元々はアメリカ発祥のサービスのようですが、日本語の講座も数多く公開されておりたびたびセールもされています。

Webエンジニア講座について

購入した講座はこちらです。

https://www.udemy.com/share/1000IwCUMYcFdVQnQ=/

f:id:icoyuki:20190914175432p:plain
講座スクリーンショット

2019年8月に購入したためセールで1,200円という価格で購入できました。

内容紹介

本講座の紹介文はご覧の通りです。

25 のウェブサイトやモバイルアプリを開発しながらプログラミング( HTML5, WordPress, CSS3, Javascript, Bootstrap 4,PHP, Python, MySQL) を学び、Webエンジニアになろう!

Web開発に関して総合的に学ぶことができ、計168レクチャーで17時間28分ととてもボリュームがあります。

感想

導入部分

使用するソフトのインストールから丁寧に解説してくれます。ちなみに最初にインストールしたのは、

Chromeはすでにインストール済みで、使い慣れているブラウザです。開発ツールが優れているとのことです。

MAMPはサーバーを立てるためのプログラムのようです。フリー版とプロ版のインストーラーが一緒なことに最初戸惑いましたが、それ以外はクリックで進めていくだけでした。

Bracketsテキストエディタです。初めて使いましたが、軽量で使いやすいですね。 コードの補完やライブプレビューなどの機能もひととおり揃っています。 当面これで困ることはなさそうな印象です。

また各チャプターでインストールが必要なものは適宜解説してくれるので、学習に集中することができます。

HTML

HTMLはなんとなくタグで囲う言語であることは知っていました。 inputやbuttonなどWebサイトで見かけるものが簡単に作れるのは楽しいですね。 特に難しいと感じる点もなくサクサクと進みました。 作成したサイトは数十年前のwebサイトみたいな作りですね。 見た目部分はCSSで書いていくのが通常なようです。

CSS

HTMLで作成したwebサイトがどんどん豪華な?見た目になっていくのは快感でした。 ただfloatやpositionといったレイアウトに関する部分はいろいろ自分で試してみないと理解出来なさそうです。 今はまだ完全には理解できていないと思います。 作りたいモノが定まってきてから適宜調べて進めるしかなさそうです。分からないながらも講座を進めることにしました。 こんなところでつまづいても仕方ないので1冊入門書も購入しました。

1冊ですべて身につくHTML & CSSとWebデザイン入門講座 [ Mana ]

価格:2,440円
(2019/9/14 18:30時点)
感想(4件)

どうやら現在はfloatよりもflexboxなるものを使用するようですね。こちらの入門書のレビューも後日書けたらと思います。

CSS以降

JavascriptjQuery、Bootstrap4、WordpressPHPまで進めました。 HTMLやCSSのチャプターにも言えることかもしれませんが、 どのチャプターも基本的に概要を説明、課題を制作の流れになります。 課題を制作する際に講座内で学習した内容だけでは分からないところがでできます。 これらは調べながら対応することになります。(あえてそういう作りにしているのかもしれませんね。)

分かってはいたことですが、講座を終らせただけではWebサービスやおしゃれなWebサイトを構築するのは難しいかもしれません。 ただ、全体の概要を知るための講座としては非常に強力でこの講座終了後は自分で調べながら学習を進められるようになると思います。

まとめ

私が主に知りたかったのはHTMLやCSSのフロントエンド部分だったので講座は途中で中断しています。 この講座を1200円で購入できたことは非常にラッキーでした。途中までしか進めていませんが間違いなく1200円以上の価値があります。(もちろん定価の24,000円でも十分にお得です) 現在は購入した入門書でCSSの学習を進めています。CSSである程度納得のいくWebサイトが構築できるようになったらWordpressやサーバーサイドについても深く学習してみようかと思います。

もう一度購入した講座を講座へのリンクを貼っておきます。

https://www.udemy.com/share/1000IwCUMYcFdVQnQ=/

お読みいただきありがとうございました。

Ideapad C340のFnキー動作がおかしい?

IdeaPad C340

f:id:icoyuki:20190824231955p:plain

つい最近、LenovoのノートパソコンIdeaPad C340を購入しました。 CPU がRyzen5、IPS液晶で6万円切ってましたので、購入に踏み切った次第です。 とても快適に使えていたのですが、Fnキーの動作がいつもと違うことに気づきました。

たとえば、カナに変換するためにF7を入力すると機内モードになってしまうといった具合です。

カナに変換するためにはFn+F7のように入力しなければなりませんでした。 いままで使用していたPCとは動作が逆になっているようです。

解決方法

調べてみたら同じ症状を解決されている方がおりました。 簡単に手順をまとめると、

  1. Shiftキーを押しながら再起動
  2. 『オプションの選択』画面から『トラブルシューティング』を選択
  3. 『詳細オプション』画面から『 UEFIファームウェアの設定』を選択し再起動
  4. 『Configuration』タブの『Hotkey Mode』を『Disabled』にする。
  5. 『Exit』タブの『Exit Saving Changes』を選び、終了する

とすることで解決しました。

LenovoのノートパソコンのキーボードにはNumLockが無いなど慣れるまでいろいろ戸惑うこともあるようです。 ひとまずまた何かあったら報告しようと考えています。

今回はまったくPythonに関係の無い話でした。

【Python3】Pythonインストール【Windows】

はじめに

Windows10PCを新調しましたので、さっそくPython3をインストールしてみます。

Python3のインストールでつまづいた記憶はございませんが、一度まとめておこうと思います。

なお本記事はWindows10で操作、動作の確認を行っております。

PC情報を確認する

使用しているPCのOSがWindows10であること、32bitか64bitどちらであるのかを確認します。

コマンドプロンプトからsysteminfoコマンドを使用することで簡単に確認できます。

C:\ > systeminfo
ホスト名:               PC
OS 名:                  Microsoft Windows 10 Home

~省略~

システムの種類:         x64-based PC

~省略~

確認すべき箇所は、

  • OS名がWindows10であること

  • システムの種類がx64-based PC(64bit)なのか、x86-based PC(32bit)であるか

これら2点です。

Python本体のダウンロード

Python公式サイト(https://www.python.org/)へアクセスします。

32bitの場合

『Downloads』→『Download for Windows』からインストーラのダウンロードができます。 f:id:icoyuki:20190822010813p:plain

今回は『python-3.7.4.exe』というファイルがダウンロードできました。

64bitの場合

『Downloads』→『Windows』を選択します。 f:id:icoyuki:20190822011124p:plain

『Download Windows x86-64 executable installer』を選択しダウンロードを行います。 f:id:icoyuki:20190822011458p:plain

今回は『python-3.7.4-amd64.exe』というファイルがダウンロードできました。

Python本体のインストール

ダウンロードしたファイルを実行します。

ここから先は32bitも64bitも操作は共通です。

(画像が32bitなのは購入したPCが64bitであったにもかかわらず32bit版をインストールしてしまったからです。)

『Add Python 3.7 to PATH』の項目にチェックを入れ『Install Now』をクリックします。 f:id:icoyuki:20190822004409p:plain

このアプリがデバイスに・・・というメッセージがでたら『はい』を選択し進めます。

インストールが完了したらインストーラをCloseで閉じます。 f:id:icoyuki:20190822004457p:plain

次にコマンドプロンプトを開き、python -Vと入力し、Python 3.7.4が帰ってくればインストール成功です。

C:\ > python -V
Python 3.7.4

ここまで完了すればpipも使用できるようになります。

まとめ

こんなにすんなり終わってしまったことに驚きました。 プログラミングを始めるまでのハードルが低いのはすばらしいことです。 最後に手順を一覧でまとめて終わります。

  1. systeminfoコマンドでPCが64bitなのか32bitなのか確認

  2. 適切なPython本体を公式サイトからダウンロード

  3. 『Add Python 3.7 to PATH』にチェックを入れ、インストール

  4. 動作確認

【Python】Pillowで画像のEXIF情報から日付を取得する

画像のEXIF情報

スマートフォンのカメラなどで撮影された多くの画像ファイルには、日付やGPSの位置情報などが埋め込まれています。 今回はこの日付情報を取得し、表示するプログラムを作成しました。

作成したプログラム

作成したプログラムは下記の通り。日時情報のみ抜き出しprint()で表示しています。

プログラム:

from PIL import Image
from PIL.ExifTags import TAGS

# 画像ファイルを開く
im = Image.open('test.jpg')
# EXIF情報を得る
exif = im._getexif()
# 一覧で表示
for id, value in exif.items():
    if TAGS.get(id, id) == "DateTimeOriginal":
        print(value)

作成したプログラムと同じ階層にtest.jpgファイルを保存してください。 そして実行すると撮影した日時が表示されます。 いずれは取得した日時情報から画像ファイルのフォルダ分けバッチファイルを作成したいと考えております。

Pillow(PIL)を使用したプログラムならこちらもおすすめです。↓

www.salapy.xyz

【Python】Pillowで画像を比率指定で一括リサイズする

画像の一括リサイズ

カメラで撮影した画像などはサイズが大きくそのままでは扱いづらいです。画像の解像度を下げることでファイルサイズが小さくなり私の持っている非力なPCでも編集等行いやすくなります。 前回は画像の縦横ピクセル数を絶対値で指定することで一括リサイズしました。

salapy.hatenablog.com

今回は縦横を圧縮する比率で指定し一括リサイズしていきます。

作成したプログラム

わかりやすいようプログラム中にコメントを入れました。 フォルダ構成は下記のとおりです。

resize
│  resize.py
│
└─img
        512x512org.jpg

プログラム:

import os
import glob
from PIL import Image

# imgフォルダにある.jpgファイルリストをすべて取得
img_files = glob.glob('img/*.jpg')
# 縦横をいくつで割るか
proportion = 2

# 取得したすべての.jpgファイルに対して処理を実行
for f in img_files:
    # PILで画像を開く
    img = Image.open(f)
    # imgのwidthとheightをproporionで割りリサイズしたimg_resizeを生成
    img_resize = img.resize((int(img.width/proportion),int(img.height/proportion)))
    # 保存するためのファイル名等を処理する
    fname, fext = os.path.splitext(f)
    # 保存場所とファイル名拡張子までsaveに渡す
    f_output = fname + '_resize'+ str(proportion) + fext
    img_resize.save(f_output)
    # 実行結果をprint出力
    print(f + "\t----->\t" + f_output)
    

WordやPowerPointに貼り付けることを考えて、画像はいつも圧縮したものも保存するようにしています。

【Python】複数セルを行単位、列単位で取得する

複数セルの値を取得する方法の第二弾です。 前回は、最大行、最大列までの値を取得する方法を紹介しました。 salapy.hatenablog.com

複数セルを取得する

今回は範囲を指定し、行単位、列単位で複数セルの値を取得する方法を紹介します。フォーマットに沿って値を入力されたエクセルファイルから値を取り出す際に利用できそうです。前回よりもより実用的なプログラムです。

前準備

openpyxlのインストール

pipからインストールできます。

pip install openpyxl

使用するExcelファイルの準備

適当なExcelファイル(example.xlsx)を準備します。今回は事前に図のようなファイルをカレントフォルダに保存しました。 f:id:icoyuki:20190605120803p:plain

行単位でセルの値を取得する

行単位でセルの値を取得する場合、iter_rowsメソッドが便利です。 min_row、min_col、max_row、max_colの値を与えることで、範囲を指定できます。 max_row、max_colに値を与えない場合は、値の入っている最大行、最大列まで取得するようになります。 プログラム例:

import openpyxl

# ブック取得
wb = openpyxl.load_workbook("example.xlsx")

# シートを取得
sheet = wb["Sheet1"]

# 行単位でセルの値を取得する A2~C5まで
for rows in sheet.iter_rows(min_row=2, min_col=1, max_row=5, max_col=3):
    for cell in rows:
        print(cell.value)

print("-------------------------------------")

# 値の入っている最大行、最大列まで行単位でセルの値を取得する
for rows in sheet.iter_rows(min_row=1, min_col=1):
    for cell in rows:
        print(cell.value)

実行結果:

A2
B2
C2
A3
B3
C3
A4
B4
C4
A5
B5
C5
-------------------------------------
A1
B1
C1
A2
B2
C2
A3
B3
C3
A4
B4
C4
A5
B5
C5
A6
B6
C6
A7
B7
C7
A8
B8
C8
A9
B9
C9
A10
B10
C10

列単位でセルの値を取得する

列単位でセルの値を取得する場合、iter_colsメソッドが便利です。 min_row、min_col、max_row、max_colの値を与えることで、範囲を指定できます。 max_row、max_colに値を与えない場合は、値の入っている最大行、最大列まで取得するようになります。

import openpyxl

# ブック取得
wb = openpyxl.load_workbook("example.xlsx")

# シートを取得
sheet = wb["Sheet1"]

#列単位でセルの値を取得する A1~B7まで
for cols in sheet.iter_cols(min_row=1, min_col=1, max_row=7, max_col=2):
    for cell in cols:
        print(cell.value)
        
print("-------------------------------------")

# 値の入っている最大行、最大列まで列単位でセルの値を取得する
for cols in sheet.iter_cols(min_row=1, min_col=1):
    for cell in cols:
        print(cell.value)

実行結果:

A1
A2
A3
A4
A5
A6
A7
B1
B2
B3
B4
B5
B6
B7
-------------------------------------
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
B1
B2
B3
B4
B5
B6
B7
B8
B9
B10
C1
C2
C3
C4
C5
C6
C7
C8
C9
C10

取得したセルに値が無かった場合

セルに値が無かった場合は、cell.valueはNoneを返します。Noneはnullのようなもので返り値が無い場合などに返されるようです。

【Python】openpyxlで最大行、最大列までの値を取得する

openpyxlのインストール方法

pipからインストールできます。

pip install openpyxl

最大行、最大列までの値を取得する

便利なシートオブジェクトのメソッドとして、max_row、max_columnがあります。 名前の通り、そのシートの最大行、最大列を返してくれるメソッドです。

例のようなexample.xlsx(シート名:Sheet1)を用意して頂き、下記プログラムを実行します。

example.xlsx例:

f:id:icoyuki:20190605120803p:plain

プログラム例:

import openpyxl

wb =openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

# B列を最大行までprint出力
for i in range(1,sheet.max_row + 1):
    print(sheet.cell(row = i, column = 2).value)

# 1行目を最大列までprint出力
# 見やすいようにprintの改行は半角スペースに置き換え
for i in range(1, sheet.max_column + 1):
    print(sheet.cell(row = 1, column = i).value, end=' ')

出力結果:

B1
B2
B3
B4
B5
B6
B7
B8
B9
B10
A1 B1 C1

行単位、列単位で値を取り出すときに使えそうです。

値の書き込み方法はこちらの記事で紹介しています。 salapy.hatenablog.com

【Python】pyperclipでクリップボードの文字列を利用する

pyperclipモジュール

pyperclipモジュールのcopy()、paste()を利用することで、コピー&ペーストを行うことが可能です。

インストール方法

pipからインストール可能です。

pip install pyperclip

windowsMacをお使いの場合は、これだけでインポートし利用可能です。 UbuntuLinux)で行おうとした場合、エラーが出ましたので解決方法も併記します。

>>> import pyperclip
>>> pyperclip.paste()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ico/.local/lib/python3.6/site-packages/pyperclip/__init__.py", line 301, in __call__
    raise PyperclipException(EXCEPT_MSG)
pyperclip.PyperclipException: 
    Pyperclip could not find a copy/paste mechanism for your system.
    For more information, please visit https://pyperclip.readthedocs.io/en/latest/introduction.html#not-implemented-error 

URLのリンク先を読むと、下記プログラムのいずれかひとつをインストールする必要があるそうです。

sudo apt-get install xsel to install the xsel utility.
sudo apt-get install xclip to install the xclip utility.
pip install gtk to install the gtk Python module.
pip install PyQt4 to install the PyQt4 Python module.

実行する

Hello Worldとコピーし、ペーストする方法は下記のとおりです。

>>> import pyperclip
>>> pyperclip.copy("Hello World")
>>> pyperclip.paste()
'Hello World'

pyperclipを利用するだけで色々な作業を効率化できそうな気がします。

【Python】OpenPyXLでセルに値を書き込み保存する

openpyxlモジュールのインストール

pipを使用してインストールできます。

pip install openpyxl

セルに値を書き込みワークブックを保存する

import openpyxl

# Workbookオブジェクトを新しく作成
wb = openpyxl.Workbook()
# 作成したWorkbookオブジェクトに存在するSheetを指定
sheet = wb.get_sheet_by_name("Sheet")

# SheetのA1セルにHello Worldと書き込む
sheet["A1"] = "Hello World"

# SheetのB1セルにHello Worldと書き込む
sheet.cell(row = 1, column = 2).value = "Hello World"

# save()メソッドでファイル名を指定してワークブックを保存する
wb.save("example.xlsx")

セルに値を書き込む場合、座標を文字列で指定する方法と、cell()メソッドで指定する方法があります。

【Python】OpenPyXLでExcelファイルからセルの値を取得する

openpyxlモジュールのインストール

pipを使用してインストールできます。

pip install openpyxl

セルの値を取得する

適当なexample.xlsxを準備し下記プログラムを実行するとセル(B1)の値を取得することができます。

import openpyxl

# ワークブック(.xlsxファイル)を開く
wb = openpyxl.load_workbook("example.xlsx")

# シート名"Sheet1"の取得
sheet = wb.get_sheet_by_name("Sheet1")

#セル(B1)の値の取得
val = sheet.cell(row=1, column=2).value

print(val)

cell()メソッド

cell()メソッドに渡す、row、columnによりCellオブジェクトを取得できます。for文でrow、columnに値を渡すことで連続したセルの値を取得することもできます。

【Python】文字列からQRコードを生成する

PythonによるQRコードの簡単生成方法

QRコードを作成するための最も簡単な方法は下記のとおりです。

import qrcode

qr = qrcode.QRCode()
qr.add_data('testtesttest')
qr.make()
img = qr.make_image()
img.save('qrcode_test.png')

qr.add_dataに与える文字列を変更することで生成されるQRコードが変化します。

出力結果:

f:id:icoyuki:20190530162940p:plain

簡単にQRコードの生成、作成が可能です。

【Python】プログラムでコマンドライン引数を使用する

コマンドライン引数を使用する

Pythonプログラムでコマンドライン引数を使用したい場合は下記のように行います。

import sys

args = sys.argv

print(args)
    
print("引数1:" + args[1])
print("引数2:" + args[2])
print("引数3:" + args[3])

実行結果:

>hikisu.py test1 test2 test3
['hikisu.py', 'test1', 'test2', 'test3']
引数1:test1
引数2:test2
引数3:test3

引数を利用するプログラムもこれで作成できます。

【Python】大量の画像を縦横サイズ指定で一括リサイズする

ファイルのリサイズプログラム

大量の画像をひとつひとつ圧縮するのが面倒ですので、フォルダ内の画像を一括リサイズできるプログラムをPythonで作成しました。 元画像を640×480の画像に変換し、別ファイルとして保存します。 事前にpythonの画像処理ライブラリPillowをインストールします。

pip install Pillow

下記プログラムを.py形式で保存します。

import os
import glob
from PIL import Image

img_files = glob.glob('*.jpg')
width = 640
height = 480

for f in img_files:
    img = Image.open(f)
    img_resize = img.resize((width,height))
    fname, fext = os.path.splitext(f)
    img_resize.save(fname + '_640x480' + fext)

変換したい画像(.jpg)を事前にフォルダにまとめておきます</lそのフォルダ内で、上記プログラムを実行します。 "元画像_640x480.jpg"というファイル名で、リサイズされた画像が同フォルダに出力されます。 画像サイズやファイル名などは適宜設定もしくは、引数から取ってこれるようにしてもいいかと思います。

比率を使用してのリサイズは↓↓↓↓↓↓

salapy.hatenablog.com