俺のクソレシピ

おもにプログラミングについて俺の趣味についてテキトーに書いています。

Pythonのリストの要素を入れ替える

今まで、クソめんどい方法でやっていたのでちょっとご紹介。

f:id:myprogramming:20170627164334j:plain

list[i]をlist[j]に、list[j]をlist[i]にしてリストの要素の入れ替えをしたいわけなんですが、

とやってしまうと、list[j]がなにも変わっていないのがわかるでしょうか?

例えば、

とすると、まず、list[0]がFalseになり、それをまたlist[1]に代入してもlist[1]がFalseのままですよね。

そこで、今までやっていた方法だと、

このように入れ替える前にlist[i]を他の変数に代入していたのですが、Pythonでは複数の変数にそれぞれ値を同時に代入できるので、
 
だけで良かったみたいです。

今まで本当にアホなやり方してたんだな…

Raspberry Pi(Raspbian)にArduino IDEをインストールする

皆さんこんにちは。

突然ですが、Raspberry PiArduino IDEをインストールしてみたいなと思って適当にやってみたら普通にできてしまったのでその方法を皆さんにも紹介したいと思います。

なお、この記事にたどり着いた方はRaspberry PiArduinoについての知識がある方がほとんどだと思うのでRaspberry PiArduino自体については解説しません。もし気になったらググれば大量に情報があるので、ぜひ調べてみてください。

f:id:myprogramming:20170924170222p:plain

インストールする

Linuxでインストールといったらapt-getコマンドだと思ってやってみたら、普通にできちゃったのでその方法を説明します。
ブログ的にはこれでうまくいかないほうが面白いんだけど...(笑)

まず

sudo apt-get update コマンドと
sudo apt-get upgrade コマンドで

パッケージを一応更新しておいてください。

パッケージが更新できたら、

sudo apt-get install -y arduino コマンドを

叩けばOKです。

  • yオプションはすべての質問にYesで答えるようにするものです。例えば、「続行しますか」のような質問がでなくなりすべてYesで答えたことになります。

そしたらRaspberry Piを再起動してやれば、左上のアプリケーションメニューのプログラミングカテゴリーと電子工学カテゴリーに入っています。どちらも同じものなので好きな方から起動してください。ちなみに、もし表示されていなかったら設定のMain Menu Editorで表示させることができます。

もし、コマンドから起動したい、という方がいるのなら

arduino コマンドでも起動することができます。

f:id:myprogramming:20170924181325p:plain
アプリケーションメニューに表示されているArduino IDE

f:id:myprogramming:20170924181404p:plain
Arduino IDEを実際に開いてみたところ

まとめ

今回はすごく簡単でした。
俺も少し驚いていて、もっと早くやっときゃよかったな、なんて思ったりしてます。
今後、Raspberry PiArduinoの連携なんかもできたらいいなと思っているので、そちらの方も是非読んでみてください。
皆さんも是非試してみてください。

Arduino Uno(互換機)が届いたぞ! Lチカも成功!

皆さんArduinoを知っていますか?
Arduinoは誰でも始められるように作られたマイコンボードです。
今回Arduinoの互換品を購入してみたので紹介していきたいと思います。

※この記事では動作確認程度しかしていないので詳しい解説はしていません。

f:id:myprogramming:20170913191316j:plain

Arduinoの互換品

まずArduinoオープンソースハードウェアなのでたくさん互換品が世の中に出回っています。
その中で今回購入したものは、Arduinoの中で最もメジャーなArduino Unoの互換機の

EasyWordMall UNO R3開発ボード USBケーブル付属 Arduinoと互換

というものです。
これは、500円くらいで俺の場合、8日で届きました。
ハズレがあるかもと思って3台購入しておいたのですが、全てピン曲がりもなくちゃんと使える状態でした。
本家は1台3000円以上するので、これだと3台1500円位と、とてもお得ですね。
本家1台分で6台買えてしまいます。

ちゃんと動くかLチカしてみた

やはりArduinoといったらLチカ(LEDをチカチカ点滅させることで、ArduinoHello Worldみたいなもの)だと思い、俺もやってみました。
俺は一応Arduinoを以前にやっていたので、スケッチ(Arduinoのプログラム)を書くことができました。

そのスケッチはこんな感じ。

ArduinoとLEDと抵抗の回路。

f:id:myprogramming:20170913195116p:plain

Lチカしている様子。


まとめ

今回はかなりお得な買い物ができたと思います。
今後、ラジコンとか作ったりできたらいいなと思っています。
これからは、Arduinoについての記事も結構書いていくと思うので、Arduinoを始めてみたいと思う人は是非参考にしてくれるとうれしいです。

JavaScriptで文字列を複数行記述するのが結構簡単だった

ブログを書くのがだいぶ久しぶりになってしまいましたが、今回はJavaScriptで文字列を複数行記述する方法を紹介したいと思います。ちなみにここでの複数行はソースコードは複数行で表記するけど実際には一行として扱われる場合ではなく実際に改行が入る場合です。

f:id:myprogramming:20170626201822p:plain

改行するところに \n を記述する

これは今まで俺が使っていた方法でした。ただ、どこで改行したのかわかりにくいし一行がとても長くなってしまっていました。

クォーテーションではなくグレイヴ・アクセントを使う

この方法はシングルクォーテーションやダブルクォーテーションではなくグレイヴ・アクセントを使って文字列を定義する方法です。グレイヴ・アクセントとは ` のことで Shift + @ で入力できます。この方法を使うと自由に改行してもそのまま文字列を記述し続けることができます。

まとめ

ずいぶんと簡単に複数行の文字列を記述することができるようになりましたね。この方法を使えば、修正したりするときにもすぐ改行してあるところがわかりますね。皆さんもこのやり方でぜひ楽をしてみてください。ではまた今度。

JavaScriptでクソゲーを作ってみた

JavaScriptクソゲーを作ってみたので一応紹介します。

f:id:myprogramming:20170626201822p:plain

作ったゲームのリンク

GSG -Geometric Shooter Game-

このゲームは一切画像を使わず作ってみました。

それと、CSSJavaScriptでは様々な機能を使っているのでその一部を今度紹介したいと思います。

このゲームは改良しているうちにものすごく読みにくいプログラムになってしまったので、このゲームでの解説は省かせてもらいます。解読してみたい人は是非頑張ってみてください。

一応ダウンロードリンクも貼っておきます。

GSG.zip - Google ドライブ

Pythonで名言をツイートするbotを作ってみた

だいぶ遅れてしまいましたが、今回はPythonで名言をツイートするbotを作ってみたので解説します。ちなみに、Raspberry Piを使っていて名言は名言集.comから取得しています。

名言bot
python 名言bot (@py_meigen_bot) | Twitter

名言集.com
名言集.com - 名言・ことわざ・金言・格言集めました

f:id:myprogramming:20170728192959j:plain

名言を取得する

名言を取得する方法について説明します。まず、今回は名言集.comのランダム名言から取得します。HTMLを解析して名言を取得します。まずサイトのHTMLを取得して、その中から取得したい文字列(今回の場合は名言)を取得します。ズラズラ書かれていてもわかりにくいと思うのでまずプログラムを見てもらいましょう。

Python3ではurllib.request.urlopenを使ってHTMLを取得します。ただそのままだと文字化けしてしまうのでデコードします。名言集.comは、utf-8エンコードされているのでdecode('utf-8')でokです。そして、HTMLが取得できたら正規表現で名言とその作者を取得します。

urllibとデコードについて
Python3で、urllibとBeautifulSoupを使ってWebページを読み込む - minus9d's diary

正規表現について
Pythonの正規表現の基本的な使い方 | UX MILK

Pythonでツイートする

次にPythonでツイートする方法について説明します。まずpython-twitterをインストールします。

pip install python-twitter

importするときはpython-twitterではなくtwitterなので気をつけてください。

このソースコードにある"your ..."のところは自分のキーに置き換えてください。

twitterapiキーの取得について
Twitter API Key を取得する方法 | phiary

ちなみにtwitterapiキーを取得するには電話番号をtwitterアカウントに登録しないといけないのですが、俺の場合なぜかパソコンだと登録できなくてスマホだと電話番号の登録ができました。

取得した名言をツイートする

では実際に取得した名言をツイートしてみましょう。さっきの2つのプログラムを組み合わせるだけですね。

これを実行すれば名言をツイートしてくれるプログラムの出来上がりです。・・・ん?これじゃbotじゃない!!

Pythonプログラムを定期的に実行する

botにするには自動で定期的に実行しないといけませんね。定期的に実行するにはHerokuなどがありますが制限がかかっていたり設定がめんどかったりするので、今回は眠っていたRaspberry Pi3を使ってやってみました。ちなみにRaspberry Piのバージョンはなんでもokです。Raspberry Piで定期的にプログラムを実行するにはcronを使います。今回、俺は5分ごとにツイートしようと思ったので設定は以下のようになります。

*/5 * * * * python3 /home/ユーザー名(デフォルトではpi)/meigen_bot.py

cronの使い方について
決まった時間に処理する | Make.

ちなみに近々、Raspberry Piをやったことのない人のためにRaspberry Pi入門の記事を書きたいと思っています。

まとめ

今回はPythonRaspberry Piで名言をツイートするbotを作ってみました。Raspberry Piを使ったため少しお金がかかってしまいましたが、Raspberry Piならbotをやめた後でも使えますし、そこまで高くないのでRaspberry Piを買ってやってみるのもいいのではないでしょうか。今回は名言をツイートするというほぼ無意味なbotを作ってしまいましたが、これを応用すれば天気予報をツイートする実用的なものや、Raspberry Piを使っているのでセンサーから得た情報をツイートするものを作ることだって簡単にできてしまいます。ぜひ皆さんもいろいろなbot作りをしてみてください。

Pythonで文字列の特定の文字の削除

Pythonで文字列の何番目かの文字を削除する方法が探してもなかったので一応できる方法を紹介します。もしそういう方法があったら、教えていただけるとうれしいです。

f:id:myprogramming:20170627164334j:plain

スライスで削除する文字以外を取得する

str_del = str[:*1文字列のインデックス]+str[文字列のインデックス+1:]

という風にすれば簡単にできます。この方法では、削除したい文字以外をスライスで取得してそれを別の変数に代入しています。

スライスについて詳しくはこちら

スライスを使った部分文字列の取得 - 文字列 - Python入門

文字列を一旦リストに型変換する

この方法では文字列を一旦リストに型変換してdelを使ってリストの特定の要素を削除してから、そのリストをjoinを使って文字列に戻しています。こちらもインデックス番号には気をつけてください。

いちいち書くのがめんどくさいから関数化する

こんなのいちいち書くの面倒なので関数にしちゃいましょう。

引数には文字を削除したい文字列とその削除したい文字のインデックス番号を渡します。

str_del("abcdef", 2) //abdef

まとめ

文字列の何番目かの文字を削除したいと思って今回はこのようなやり方をしましたが、もしもっといい方法があったりちゃんとした書き方がもとからあったら教えてくれると嬉しいです。ではまた今度。

*1:文字列のインデックスは0から数えてください。要は-1をしてください。(例:3番めの文字→2)