【New PCセットアップ01】外部ディスプレイの接続とChrome、Google日本語入力の導入

New PCセットアップ第01回の記事です。
情報系大学生が新しくPCを買ったらどんなことをするのか!
…の記事ですが、半ば自分用のメモになりそうです笑
さて今回の内容は、
です。
さすがにこのくらいのは分かるという方は本記事は飛ばしてください。
Who I am
記事の根拠付けのためにかんたんに。私はこのような者です:
- 理工系大学の情報学部所属
- 部活でプログラミングをしてロボットを動かしてます
- 現在オンライン留学でAIの勉強中
- 専攻分野はAI、深層学習、画像処理
外部ディスプレイの接続

リモートワークが盛んになり、家で作業することの方が多いと思います。(実験科目すら家から動画でという大学もあるとか…)
そんな方におすすめしたいのがモニターに繋いで画面を拡張すること!
便利ですよ…!!
PCと外部ディスプレイを(HDMI)ケーブルつないでおく
設定を開く:
Win + i

システム → ディスプレイを開く

マルチディスプレイ 複数のディスプレイ のプルダウンを開き、「表示画面を複製する」を選択する

成功!

おまけ:正面の外部ディスプレイをメインのデスクトップにしたい
ディスプレイの2の方を選択(選択すると画像のように青くなる)

マルチディスプレイ これをメインディスプレイにするにチェックを入れる

成功!

マウスの接続
いらないかな?と思いつつも、念の為載せておきます。
Google Chromeのインストール
Google Chromeをインストールする。
FireFoxとChromeで悩むと思いますが、私はChromeを使っています。
(Edge?ああ、あのやけに重たいChromeインストーラーのことですね)
さて、インストール手順は以下の通り:
GhromeのインストーラーEdgeを立ち上げる。最初なのでポチポチ



Chromeで検索
一番上のサイトをクリック

Chromeをダウンロードをクリック

ダウンロードすると左下に出てくる
ChromeSetup.exeをクリックして起動

インストーラーの指示に従ってポチポチする

Chromeを起動(デスクトップにできたショートカット/Windowsメニューから)
今回はすでにアカウントを持っているのでChromeをすでにご利用の場合はログインをクリック

メアドを入れる

パスワードを入れる

成功!

おまけ:タスクバーにピン留めしておく
タスクバー上のアイコンを右クリックでできる
おまけ:Chromeを規定のウェブブラウザに設定する
設定を開く:
Win + i

アプリ → 規定のアプリ にて、Webブラウザのプルダウンを開き、 Google Chromeに変更する

成功!

私はGoogleアカウントを2つ使い分けているので、以上の手順を繰り返してこのようにしました↓

Google日本語入力のインストール
IMEがデフォルトであるのに、何故わざわざインストールする必要があるかですが、変換の精度が全く異なるんです!
実際使用してみると、違いを実感できると思います。
Chromeで
Google 日本語入力を検索

1番上のサイトをクリック

Windows版をダウンロードをクリック

同意してインストールをクリック

保存先を指定して保存

ダウンロードが終わったら、Chrome上の左下から
GoogleJapaneseInputSetup.exeをクリックしてインストーラーを起動


すべてチェックを入れて(ると良いと思います)、OKを押す

タスクバーに以下のように、青い丸が出たら成功!

おまけ:ユーザー辞書を使うべし
例えば名前、学籍番号、住所、郵便番号やメールアドレスなどを登録しておくとタイプが少なく済み、非常に楽になります。
タスクバーの青い丸を右クリック → 辞書ツール を開く

こんなのが開くので、

このように登録する

終わりに
外部ディスプレイ・マウスの接続、ChromeとGoogle日本語入力のインストールが今回の内容でした。
しかし、Google日本語入力を使わずデフォルトのIMEを使っていた方は多かったのではないでしょうか?
使ってみればわかりますので、ぜひインストールしましょう!
New PCセットアップ第01回の記事は以上になります。
次回はWindowsの基本的な設定をいじっていきます。
次次回はタスクバーをカスタマイズする 7+Taskbar Tweaker を導入していきます。
ではまた :)
【New PCセットアップ00】新しくPCを買いました。Inspiron 14 5000(5405)レビュー

Introduction
先日新しくPCを買いました!Dell製のInspiron 14 5000シリーズ(5405)です。
それが届いたので、セットアップのためにやったことと、レビューを半分自分のために書いていきます。
今回は実機を触ってみたレビューです。
追記:2週間使ってみての感想を追記しました。
Contents
記事の根拠付けのためにかんたんに。私はこのような者です: これまではYoga 330を使っていました。 前々から、zoomを使用しながらExcelを開くなど複数の作業を同時に行うともっさりしていたので良い機会だと思ったのでした。 改めて、買ったのはDell製のInspiron 14 5000シリーズ(5405)です。PCを探す際の基準は と欲張ったので、あまり該当の機種はありませんでした。 スペック比較は下に貼っておきます。どうもCoreシリーズには縁がないようです笑 詳細な解説は他サイト(↓)に任せて、私からは触ってみてのいち意見を。 梱包をといて最初に思ったのは「エデンって青いんだ…」です。 Zoomで話しながらでも、Chromeのタブ開きまくっても、Word・Excel・PPT・Teams・OneNoteを同時に開らいても、一切問題なく動きました! CPUはAMD Ryzen 5 4500UでIntel製でないので性能がイメージしづらかったのですが、こちらもまた高性能でした。 2週間使ってみて、気になったところ、気にならなかったところを追記しました。 deleteキーが押しづらい home/endキーが使いづらい 指紋認証センサーがほとんど働かない 電池が持たない 画面がやや暗い 重くない ¥やBackspaceは問題なく押せる いえいえ、控えめに言って 最高 です。 文系はもちろん、大半の理系大学生にも自信を持っておすすめできます! 私は大学入学当初はPCのことをよく知らなかったので、気軽に壊せるように3万円のYogaを2年間使いました。 価格.comと公式サイトのリンクを貼っておくので、参考にしてください :-)Who I am
Why I Update my PC
3万円程度の低スペックPCですが、大学1・2年はOfficeとテキストエディタが動けばそれで十分でした。
しかしニューラルネットワークの分類器に学習させた際、友人のPCでは1時間切ったプログラムに4時間かかってしまい、「これはダメだな…」と購入を決意しました。What I Bought

その中でInspiron 14 5405はこの要求をすべて満たしてくれました!
Inspiron 14 5405
Yoga 330
価格(税抜)
¥53,882(2020年8月30日時点)
¥33,000(あいまい)
OS
Windows 10 Home
Windows 10 Home
CPU
AMD Ryzen 5 4500U
Celeron N4000
メモリ
8GB
4GB
ストレージ
SSD 256GB
eMMC 128GB
ディスプレイサイズ
14インチ
11.6インチ
ディスプレイ
フルHD:1920×1080
非光沢
広視野角液晶 1366×768
光沢あり
タッチ可
バッテリー(実測)
約7時間
約10時間(あいまい)
重さ
1.40kg
1.25kg
How About the PC
デルInspiron14 5000(5405)の実機レビュー - the比較First impression
実機は結構青みがかっているので、グレーをイメージしていた私には少しショックでした。

AMAZING performance!
前のYogaの性能に慣れきっていた私には驚愕の出来事でした。
私のようなPCゲームをしない大学生が、大学の課題やブラウジングに使うためには十分すぎる性能だと確信した瞬間でした。P.S.
キーボード周りが多いです。
気になったところ
deleteキーは普通なら右上隅にあると思いますが、そこには電源ボタンがあります。
deleteキーにはホームポジションのFとJにあるようなポッチがついていますが、それでも押しにくいです。
Shift + deleteで完全削除などよく使うのに…。
以前のYogaではFn + ←/→でhome/endだったのですが、今回はFn + F11/F12になっています。ひじょーに使いづらいです。
オプションで付けた指紋認証センサですが、5回に1回ほどしか反応せず、今では最初からPINを打ち込んでいます。つける必要ないと思います。
持ち運び用のYogaを使っていたため余計感じるのですしょうか。新品でも7時間しか持ちません :(
晴れた日に明るい窓際で作業していると、ふとした時に感じました。それでも普通に使う分には問題ないと思います。気にならなかったところ
前のYogaよりスマートフォン一個分重いので心配していたのですが、全く気になりませんでした。
コロナ禍の影響で長距離の持ち運びはしていないので、断言はできませんが30分の通学では問題なしです!
合体して小さくなっている¥とBackspaceや、少し小さい右Shiftですが、押し間違いはほぼありませんでした。この点は気にする必要はないと思います。Summary

もちろん1kg切ったり、電池の持ちがもっと良かったり、グラフィックもスペックの良いものもあります。
しかし税込59,270円ですよ!これ以上何を望みましょうか…。
しかし壊す予定がなく、4年間使いたいけどよく分からない人には超おすすめします。
※ ただし、3Dモデリングや動画編集などをしたい場合はメモリ16GBは必須だと思うので、ご注意ください。
価格.com - Dell Inspiron 14 5000 プレミアム Ryzen 5 4500U・8GBメモリ・256GB SSD搭載モデル
AMD Ryzen CPU搭載のInspiron 14インチ5405スリム ノートパソコン | Dell 日本
次回からはPCの環境のセットアップでやったことをつらつらと記事にしていきます。
次回からがほんとうに自分用のメモになりますね笑
では。
【RaspberryPi】ハードPWMではなくソフトPWMでサーボモータを制御 with C++

ラズパイで同時に複数のサーボを使いたかった!
ラズパイでpwmを出力しようとすると、GPIO18(物理12pin)を使うのがフツーだと思います。
これがググるといっぱい出てくるハードpwmで、ハード的にpwm波を作ってくれます。
しかし「いっぱいサーボを使うんだ!」ということで、他の普通のGPIOピンからソフト的にpwm波を作り、サーボを制御させてみました。
言語はC++です。
Python?だって…C++の方が画像処理が速いんだい…(今は関係ない)
結論から言っておくと、サーボはうまくいきませんでした。
±2度程度をキュイキュイ言ってます(; x ;)
コンテンツ
使ったもの
・raspberry pi zero 2でも3でも(多分4でも)変わらないです。
・sg90
【仕様】 周期 :20 [ms]
パルス幅:0.5~2.4[ms]
回転角 :0~180 [度]
また以下の二つのライブラリを使いました。
・wiringPi.h
・softPwm.h
インストール方法はGoogle先生にお任せします。
配線
ラズパイ 16 39
| |
sg90 オレンジ 赤 茶
| |
電池(5v) (+)(-)
ラズパイはどちらも物理ピン番号です。
使った関数
int wiringPiSetup()
wiringPi.hよりGPIOピンの初期化です。
失敗すると-1を返します。
int softPwmCreate(int output_pin, int initial_phase, int palse_cycle)
softPwm.hよりソフトpwmを出力するピンのセットアップです。
成功で0を返します。
各パラメータは以下の通りです。
int output_pin
出力するピンをwiringPi番号(BCM番号でも物理番号でもない)で指定。
今回はwiringPi番号4(BCM番号23、物理番号16)を使用します。
int inital_phase
…初期値を指定するらしい。
らしい、というのもよく分かってないからです。
とりあえず0にしておけ、と(^^;
int palse_cycle
pwm波の周期を100[μs]単位で指定。
サーボの仕様によるので、今回はsg90の仕様から200(20[ms])を指定します。
void softPwmWrite(int output_pin, int palse_width)
softPwm.hよりソフトpwm波を出力します。
この関数で別にスレッドを立てて、そこで時間を刻んでパルス波を出力する感じみたいです。
各パラメータは以下の通りです。
int output_pin
出力ピン。
こっちもwiringPi番号でピンを指定するので、今回は4。
int palse_width
パルス幅を100[μs]単位で指定。
サーボはこのパルス幅によってどの位置を向くかが決まる。
sg90なら0.5~2.4[ms]でそれぞれ0~180度を向く。
テストコード
0から180の入力を待ち、それに応じた角度を向かせるようにしました。
終了時は”end"と打てば終了です。
入力が数字でない時にstoi関数が例外を投げるので、例外処理を入れました。
その入力は無視して、再入力を求めるようになっています。
コードは以下のようになってます。
#include <wiringPi.h> #include <softPwm.h> #include <iostream> #include <string> using namespace std; float computePalseWidth(int angle) { // Servo can position only 0-180 angle = angle > 0 ? angle : 0; angle = angle < 180 ? angle : 180; // Palse-width must be 0.5-2.4[ms] return angle / 180.0 * 1.9 + 0.5; } int main() { const int PWM_OUT = 4; //wPi番号 const int PALSE_RANGE = 20; //[ms] // Init wiringPiSetup(); softPwmCreate(PWM_OUT, 0, 10*PALSE_RANGE); cout << "When you finish : end" << endl; while (true) { float palseWidth; try { string angle; cout << "(0 ~ 180) -> "; cin >> angle; if (angle == "end") break; palseWidth = computePalseWidth( stoi(angle) ); } catch (...) { /* Skip */ continue; } softPwmWrite(PWM_OUT, 10*palseWidth); delay(500); } // Finalize // Do nothing }
そういえば、ハードpwmの時には出力を停止してあげる必要がありましたね?
そこはソフトpwmですから。
プログラムが終了すると自動で出力はなくなり、終了時に忘れずにやらなきゃいけないことはないのです!
見たまんまですが、computePalseWidth()ではパルス幅を0.5~2.4[ms]で求めています。
結果!

駄目でした (omg!!
というのも、動くには動いたのですが、どうもパルス波が安定しない様子。
±2度くらいをキュイキュイ行ったり来たりです…。
配線が切れかかってるんだ!
と現実逃避気味にハードpwmでやってみると、お察しの通りピタっと止まってくれますね。
単純にソフトpwmの限界だろうと結論づけます ( ; ; )
ちなみに、地味にsoftPwmCreate()の第三引数とsoftPwmWrite()の第二引数が0.1[ms]単位なのに気づかず30分くらいはまりました。
intで表したい、かつ分解能がそんなに高くない、ということでのこの単位なのでしょうが…分かりにくいやい!
LEDとかの明るさを制御するためなら全然使えると思いますが、サーボでは使えませんね。
ラズパイで複数のサーボを別々に制御するために何か代案がないものか…要検討です、
といったところで、今回は終しまいです :)
【プログラマ必読】リーダブルコードに学ぶきれいなコードの書き方
リーダブルコードーより良いコードを書くためのシンプルで実践的なテクニック
先日読んだこの本がとんでもなくためになったので、ぜひ紹介したいです!
きれいなコードを書くためのポイント(?)みたいなのを知ることができます。
この本は技術的に難しい例は扱っておらず、「きれいにプログラムを書くには」ということに焦点を当てているので、プログラム初心者でも読んで理解できると思います。1つでも言語の文法を理解していれば大丈夫そうな程度です。
また私は、ある程度慣れてきた中級者にこそおすすめしたいですね!
各章 内容まとめ
【2章 名前の情報を詰め込む】
- 明確な単語を選ぶ
例えばGetではなくFetchやDownloadを使う
- tmpやretvalなどの汎用的な名前は避ける
ただし、明確な理由があれば○
- 具体的な名前を使って、物事を細かく説明する
ServerCanStart()よりCanListenOnPort()の方が明確
- 変数名に大切な情報を追加する
ミリ秒を表す変数には_msを、エスケープが必要な変数名には前にraw_を付ける
- スコープの大きな変数には長い名前を付ける
逆にスコープが数行の変数には簡単な名前でかまわない
- 大文字やアンダースコアに意味を込める
クラスのメンバ変数の末尾にアンダースコアを付けてローカル変数と区別する
【3章 誤解されない名前】
- 誤解されない名前を検討する
- 単語に対するユーザーの期待も考慮する
例えばget()やsize()には軽量なメソッドが期待される
- 上下の限界値を決めるときにはmax/minを用いる
- 包含関係ならfirst/lastも可
- 包含/排他関係ならばbegin/endがベター
- ブール値はそれがブール値だと分かる様に、is/has/can/shouldなどを使う
【4章 美しさ】
- 繰り返されるコメントは上部でまとめて行う
- 繰り返しのテストなどでシルエットがまとまらない場合は、思い切って関数化してしまう
- 縦について整列させる
引数の比較などがしやすくなる
- ある場所でABCと並んでいたものを、他の場所でBACなどと並び替えない。
- 空行を使って大きなブロックを論理的な段落に分ける
分けた段落ごとにコメントを残すとより分かりやすくなる
【5章 コメントすべきことを知る】
コメントの目的はコードの意図を読み手に理解してもらうことである!
コメントすべきでないこと:
- コードからすぐに分かること
- ひどいコード(例えばひどい名前の関数)のための補助コメント
コメントを書くのではなくコードを直せ
記録すべき自分の考え:
- なぜコードが他のやり方でなくこうなっているか
- コードの欠陥・修正ポイントなど
|
TODO |
後で手を付ける |
|
FIXME |
既知の不具合があるコード |
|
HACK |
あまりきれいじゃない解決策 |
|
XXX |
危険!大きな問題あり などを使う |
- 定数値にまつわる背景
読み手の手になって考える:
- コードを読んだ人が「えっ?」と思うことを予想してコメントを
- 平均的な読み手が驚くような動作
data.clear()ではなく、vector<float>().swap(data)をメモリの解放をするために呼ぶことなど
- ファイルやクラスには全体像のコメントを書く
- 読み手が細部にとらわれないように、コードブロックにコメントを付けて要点をまとめる
理解の補助になる。日本語の方が脳死できるぜ
【6章 コメントは正確で簡潔に】
- 複数のものを指す可能性があるそれ・これなどの代名詞を避ける
- 関数の動作はできるだけ正確に説明する
- コメントに含める入出力の実例はより有効なものを考える
- コードの意図は詳細レベルではなく、高レベルで記述する
× listを逆順にイテレートする
〇 値段の高い順に表示する
- よくわからない引数(ブール変数など)にはインラインコメントを使う
例:Function(/* arg = */ …)
- 多くの意味が詰め込まれた言葉や用言を使ってコメントを簡潔にする
【7章 制御フローを読みやすくする】
- 比較はより安定した値を右に配置する
while (bytes_received < bytes_expected)
- if/else文のブロックは一般的に、肯定系・単純・目立つものを先に処理する
- 3項演算子・do/whileループ・gotoなどは積極的に代替していく
- ネストを浅くする
早めに返す、特にガード節は有効・continueを使ってネストを削除するなど
【8章 巨大な式を分割する】
- 説明変数を使う
・巨大な式を2段階に分けて理解していける
・簡潔な名前で式を説明することで、コードを文書化できる。要約変数ともいえる
- ド・モルガンの法則を使って、論理式を整理する
【9章 変数と読みやすさ】
- 変数を削除する
・制御フロー変数を削除する
プログラムの実行を制御するためだけの変数で、実際のプログラムには関係ないデータを持つ変数
- 複数のネストから抜けるために、ループを関数化してしまう
breakが使えないからと、専用の変数を作らずに、ループ内部やループ全体を関数にする
- 変数のスコープを縮める
・クラスのメンバ絵のアクセスを制御するために、メソッドをできるだけstaticにする
メンバ変数とは関係がないことを明示できる
・C++のif文
if (PaymentInfo* info = database.ReadPaymentInfo())
・JavaScriptでの変数宣言にはvarをつける
- 一度だけ書き込む変数を使う
const/finalなどでイミュータブルにする
また、変数に書き込む処理もできるだけ減らす
【10章 無関係の会問題を抽出する】
- プロジェクト固有のコードから汎用コードを分離する
言い換えると、無関係の下位問題を積極的に見つけて抽出する
- 汎用コードは特別なディレクトリ(例:util/)に入れておく
【11章 一度に1つのことを】
- 一度に1つのタスクを行う
読みにくいコードがあれば、そこで行われているタスクをすべて列挙する。
それらを別の関数(やクラス)に分割できないかトライ
残ったものも、関数の論理的な段落として区分する
【12章 コードに思いを込める】
- プログラムを言葉にする
何をしたいのかを言葉にすることで、コードがより自然になる
【13章 短いコードを書く】
- 不必要な機能をプロダクトから削除する。過剰な機能は持たせない
- 最も簡単に解決できるような要求を考える
- 定期的にAPIを呼んで、標準ライブラリに慣れ親しむ
【14章 テストと読みやすさ】
- テストのトップレベルはできるだけ簡潔にする
入出力のテストはひとパターンがコード1行で記述できると良い
- バグの発見や修正がしやすいようなエラーメッセージを表示する
- テストに有効な最も単純な入力値を使う
穴をつぶすように一つの機能に対して、複数回のテストをするとよい
- テスト関数に説明的な名前をつける
test_<関数名>_<状況>など
【15章 「分/時間カウンタ」を設計・実装する】
例を用いたおさらい。
リーダブルコードを読んでみて
あーなるほど、と思うことが散らばっており、久しぶりに他の人におすすめしたい本に会えたような気がします。
また、本書の解説では、
- 実際にやる
- 当たり前にする
- コードで伝える
の3ステップで定着させるよう提案しています。
この本を読んだだけで、一朝一夕にはきれいなコードを書けるようにはなりませんが、読み返し読み返しコツコツやっていきましょう!ということだそうです。
ご一緒にコツコツとやっていきませんか?というお誘いでした :)
Google Apps Scriptを使ってシンプルなチャットアプリを作った
Google Apps Scriptとは
Googleが提供するプラットフォームで、Google DriveやGmailなどを容易にいじることができます。またGoogleアカウントを持ってさえいれば、ブラウザから自由に開発することができます。
サーバーを用意しなくても日付や時間などをトリガーに様々なことをやらせることができるので、習得必至の技術だと思われます!
今回はそんなGASを使って何かを作りたいなと思い、GASとチャットワークを連携させた簡単な予算管理アプリを作りました!
まずはGASの勉強から
GASはJava Scriptベースなのですが、JSに触れるのは初めてです。そこでGASの勉強から始めました。
参考にしたのはタカハシ(@ntakahashi0505)さんの以下のサイトです。

この内、GASの基礎とスプレッドシート、チャットワーク関連のを見ながらやったのですが…なにもかも載ってました(^^;
あとはこれの継ぎはぎでできそうです笑
GAS・チャットワークを使った班予算管理アプリ
少し仲間内でこういうのあったらいいよねーと話していたこともあり、班の予算を管理を目的に作成しました。
具体的には班費を使って買い物をした時、買ったもの・値段・個数をチャットワークに投稿することで、それをドライブ上のスプレッドシートに記録し、残りの班費を計算する、というものです。
完成品は…


上々じゃないでしょうか!!(だだ甘)
タカハシさんのところで学んだlivedoorのサービスも利用して、天気予報も見られるようになってますね笑
はい、というわけで、タカハシさんのサイトを紹介して完成品を載せて終わりました!
書きたいことは色々あったのですが、全部書いてたらきりがない!なにせ全部が全部初めましてでしたからね…。
細かいコードについても、暇を見つけて整理・投稿出来たらと思いながら、筆を置くことにします :)
参考
Hello Hatena Blog World!
やりっぱなしはよくない。
と思っての初投稿です。
主な内容はプログラミング
- Raspberry PIを使ったCanSat
- OpenCVを使った画像処理
- IM920を使った遠距離通信
に加えて、
- HTML&CSSのお勉強
- GASとSlackを連携させた簡単なチャットアプリ
などをとりあえずは書いていく予定です。
…書きあがるのはいつになることやら笑
Qiitaでもよかったのですが、何となく「ブログ」を書いてみたくて作ってみました!
こんなところで初投稿とさせてもらいます :)




