IT教育訓練パパの研究日誌

育児や、データサイエンス系のノウハウや記事、学生へのかかわりで得たこと等、感動したことを書いていきたいです。よろしくお願いいたします。

基本情報技術者試験解説(2015年春 クイックソートを応用したアルゴリズム)

本記事を読んで得られること

2015年春の問題解説

スライドを作成しました。 よろしければご参照ください。 基本情報技術者試験受験者の皆様のお役に立てれば幸いです。

STM32で透過型フォトインタラプタの使い方

透過型フォトインタラプタをSTM32で利用しなければならなかったのですが
はまったことを記載していこうと思います。

この記事を読んでわかること

  • STM32CubeMXのアナログ‐デジタル変換(ADC)の設定方法
  • 透過型フォトインタラプタのLBT-131のチートシートの見方
  • 透過型フォトインタラプタのLBT-131の配線の際に気を付けること
補足

後日、職場の上司に聞いたら、抵抗とか厳密に計算しなくて、330Ωとか適当にすればよいんだと助言をいただいた。
ただ、故障とか壊れやすいものは、厳密に計算したほうがいいよとのことでした。

利用環境

項番 ソフト名やボード型番 バージョン 備考
1 Windows10 home 64bit
2 STM32CubeMX 6.4.0
3 μVIsion v5.36
4 STM32F401RE

STM32CubeMXの設定

ADCのために、STM32F401REのGPIOピンにADC設定が必要です。  まず、STM32CubeMX32のピン設定画面でPA0を右クリックする。

STM32CubeMX32のピン設定画面
 次に、PA0をADCとして利用するために、ADC1_IN0とする。
ピンをADCとして利用
 最後に、ADCの分解能を設定する。
ADC1_IN0のアナログデジタルの分解能

透過型フォトインタラプタのLBT-131のチートシートの見方

センサに利用時の条件で必要となる抵抗の値を求める。 チートシートから、最低限読み取る項目を、下図に示す。

チートシートから読み取る項目

IF,Ic,Vf,Vce(sat)を読み取り、自分が利用する電源(今回はF401REなので5V)を考える。 センサの回路図を、下図に示す。
LBT-131の回路図

ここから、IF,Ic,Vf,Vce(sat)を用いて、下の図のように、RD,RLを求める。
RDの求め方

RLの求め方

透過型フォトインタラプタのLBT-131の配線の際に気を付けること

チートシートの記載に紛らわしいところがあるので注意すること。
基本的に、センサに記載してある+部分にプラス側をつないであれば問題ない。
私は、チートシートの記載で+とーがこんがらがりました。
詳しくは、下記のリンクを参照としてください。

FAQ詳細 秋月電子通商-電子部品・ネット通販

AWSに、phpmyadminとApatchとTomcatとMySQLを導入する方法

AWS上にwebサーバを立て、アプリケーション実行が必要だったのですが
いろいろと環境構築ではまりました。
他の人がはまらないとうれしいと思い、筆をとりました。
ご参考になれば幸いです。

本記事を読んでわかること

AWSのEC2環境で、下記パッケージのインストールができるようになる

項番 ソフトウェア バージョン
1 amazon linux 5.10.130-118.517.amzn2.x86_64
2 Apache Apache/2.4.54
3 Tomcat 8.5
4 MySQL 8.0.30
5 phpMyadmin 5.2.0

はまりポイントを交えて説明します。

EC2のサーバ設定の確認

下記情報をサーバ設定画面から押さえておく。
情報の掲載場所は、図に示す通りである。

  • パブリック IPv4 DNS
  • セキュリティグループルール
    EC2サーバ設定

Apacheのインストール

yumで下記のコマンドをタイプし、インストールする。

sudo yum check-update
#Apacheをインストール
sudo yum install httpd
sudo service httpd start
# EC2が再起動した際にApacheも自動起動するように設定
sudo systemctl enable httpd
# Apacheが起動したか確認
sudo systemctl status httpd

上記コマンドを打った後、ブラウザのURLに下記を打ち込み
Apacheの確認画面が出たら成功

http://パブリックIpV4DNS

Apacheの確認画面


Tomcatのインストール

AWS独自のリポジトリからインストールする。
yumでも可能だが、versionが7と古くなるので注意

#Tomcatインストール
sudo amazon-linux-extras install tomcat8.5
#Tomcatを起動
sudo systemctl enable tomcat
sudo systemctl start  tomcat
#Tomcatのトップページを閲覧するために必要
sudo yum install tomcat-webapps admin-webapps


上記コマンドを打った後に下記をURLに打つと、tomcat確認ページが閲覧できれば成功

http://パブリックIpV4DNS:8080

tomcat確認ページ

「参考にしたページ」 ありがたかったです。
http:// https://note.com/hironobuu/n/n1cb0eef6258d


phpMyadminのインストール

1 依存関係ファイルの導入 ?AWSだと導入済み?

AWSだと事前に導入されている可能性があったが、念のため実行

sudo yum install php70-mbstring.x86_64 php70-zip.x86_64 -y
2 phpの最新バージョン(7.2)をインストール

まずパッケージを確認する。

#AWSで導入できるパッケージを確認
amazon-linux-extras
amazon-linux-extras info php7.2

パッケージ確認

パッケージをインストールする

#パッケージをインストール
sudo amazon-linux-extras install php7.2

追加のパッケージインストールが下記図のように示されたのですべてyumでインストール

追加パッケージの確認

sudo yum install php-cli
sudo yum install php-pdo
sudo yum install php-fpm
sudo yum install php-json
sudo yum install php-mysqlnd


3 phpMyAdminのファイルをダウンロードし展開
#フォルダに移動
cd /var/www/html
sudo wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
#phpMyAdminフォルダを作って展開
sudo mkdir phpMyAdmin
sudo tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1


ブラウザ上でphpMyAdminが動作しているか確認する。

http://パブリックIpV4DNS/phpMyAdmin/

phpMyAdminのログイン画面


4 phpに依存関係のあるファイルをインストールする
sudo yum install php-mbstring -y


ログインユーザは後述するMySqlで設定したユーザであるため、このまま、MySQL導入に進む。
※設定を反映する時は、Apatchを再起動すること

systemctl restart httpd


下記ページが参考となりました。ありがたいです。

【AWS】EC2でphpMyAdminを利用し、RDSへアクセス - Qiita

phpMyAdminの設定(CentOS 7) | さくらインターネットのVPS設定マニュアル


MySQLのインストール

1.下記コマンドを実行してインスタンス作成初期からインストールされている MariaDB用パッケージを削除する
sudo yum remove mariadb-*
2.mysqlのパッケージが存在するリポジトリを指定

リポジトリ指定は、下記をURLをみて、指定する MySQL :: Download MySQL Yum Repository

sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
3.mysqlパッケージのインストール
#  GPS鍵の登録 これをしないとインストール中に怒られる
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum install --enablerepo=mysql80-community mysql-community-server
sudo yum install --enablerepo=mysql80-community mysql-community-devel


4.mysqlに関係のあるファイルを抽出
sudo yum list installed | grep mysql

関係あるファイル一覧

5.サービス起動
#logファイルを作成
sudo touch /var/log/mysqld.log
#サービス起動
sudo systemctl start mysqld 
#サービスをサーバ起動時に実行する設定
sudo systemctl enable mysqld


6.初期ユーザとパスワードの調査

ログから初期ユーザとパスワードを確認するため、ログファイルを見る。

sudo less /var/log/mysqld.log

と打つと、下記のようなログが出てくるので、これが初期パスワード

2022-08-25T04:44:16.126478Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: w:BeRd*0pej!
#ユーザ名:root
#パスワード:w:BeRd*0pej!


念のため、サーバを停止し、再起動する。

sudo service mysqld stop
sudo service mysqld start


7.初期ユーザとパスワード、認証時の暗号方式の変更

mysqlへ接続し、下記コマンドを打つ。

mysql -u root -p
>password 先ほどログファイルに出力されていた初期パスワードを入力する。

#パスワードの変更
#AAAAAAAではだめで、大文字アルファベット、数字、記号などの組み合わせが求められるが便宜上AAAとする。
ALTER USER 'root'@'localhost' identified BY 'AAAAAAAAAAA';

#ユーザ認証方式の変更 phpMyAdminにログインできるようにするため
sudo mysql -u root -p

#認証用ユーザ管理のデータベースに移動
mysql > use mysql
mysql> select user, host, plugin from user;
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'AAAAAAAAAAA';

下記のような結果になればよい。

SQLユーザパスワードの認証方式の変更


下記がとても参考になりました。ありがたいです。

AWS EC2 AmazonLinux2 MySQLをインストールする - Qiita

[CentOS] MySQLをアップデート時にGPG鍵エラーが出た時の対処法 – 株式会社シーポイントラボ | 浜松のシステム・RTK-GNSS開発

AWS EC2 AmazonLinux2 MySQL rootユーザの初期パスワードの確認方法 - Qiita

【MySQL】PHPで接続できないとき SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client | 困った時に思い出したい

pythonの標準入出力についてメモ

paizaで遊んでみたけど、標準入力がわからない。。。。。

基本知らなかったな、反省ということで、

pythonの標準入力についてまとめておこうと思う

この記事を読んでわかること

  • pythonの標準入力とはなにか
  • paizaなどのスキルチェック問題の標準入力を取得する方法の一例

pythonの標準入力とは

標準入力とは、ユーザがコマンドプロンプト等のターミナルに、入力したもの。 pythonは対話型言語であり、ユーザが、コマンドプロンプト等のターミナルに入力を入れることができる。

標準入力の取得方法の一例

  • 入力が一つの場合
#例)入力:10
value = int(input())
  • 入力が2つ以上で、何かの文字で区切られている場合
#例)入力:10 12
value = input().split(' ')
#value[0]は10
#value[1]は12

ただし、valueはリスト型になってしまうので気を付けること

バーコード読み込みをできるようにしてみた

この記事でわかること

  • pythonを使ったバーコード読み取りライブラリ(pyzbar)の導入方法
  • ubuntuで上記ライブラリを導入する際の注意点
  • バーコード読み取り方法とその結果  

    取り組んだ理由

  • 大量な本の管理が必要となったが、本の分類をどうしたらよいかわからない。
  • 本には、大・中・小分類が降られているらしいのでそれを流用したい。
  • バーコード読み取って、情報を取得したい  

    開発環境

  • ubuntu "16.04.6 LTS (Xenial Xerus)"  ※windows on linuxを利用
  • python 3.5.2  

    バーコード読み取りライブラリ(pyzbar)の導入

    下記手順を行う。

  • sudo pip install pyzbar

  • sudo apt install zbar-tools
  • sudo pip install Pillow  

注意点  上記の2を行わないと、pyzbarのdecodeライブラリを呼び出せないので、注意

 

バーコード画像とコード

f:id:hsato2011:20180930215430j:plain
バーコード画像

#! env python
# -*- coding: utf-8 -*-

import os
import sys
from pyzbar.pyzbar import decode
from PIL import Image

# Filename: main
__author__ = 'hsato'
__date__ = "2021/03/23"

def main():
#change directory path to working path
os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
image = "barcode.jpg"
data = decode(Image.open(image))
print(data[0][0].decode('utf-8', 'ignore'))
return

if __name__ == '__main__':
main()

読み取り結果

1234ABXDGEAEDA56788  

 

次回

バーコード情報から、本の分類情報を取得する  

DeepLearningフレームワーク バージョン違いによるChainerのネットワーク定義

Chainer便利!でも、バージョン変えたら動かなくなった!!

自分がはまった点をメモします!

 

chainer v1でネットワーク定義したものを、chainer v2で動かそうとしたら

TypeError: 'tuple' object is not callable がでた。。

がでた!

 

解法は、ネットワーク定義の , を消すだけ!
まえは動いてたので、すごくはまった。

 

参考にしたページを下記に貼ります。

本当に助かりました.Qiitaとかみんな技術メモすごい。見習わないと

qiita.com

chainer バージョン v1 v2 ネットワーク定義 init

DeepLearningフレームワーク Chainerではまったこと

PFNが提供するChainerですが、バージョンの移り変わりが激しい(最新情報に追従しているのでうれしいこと)ため、仕様がかわってることがあるので、メモ代わりに残します。結構、気づかないとはまりますね。

 

dropoutなどを入れてる場合は,Evaluatorの挙動に注意

VGGベースのネットワークで下記のようなものを使う場合、Evaluatorからforwordが呼ばれるので、テスト時にdropoutが有効になってしまうので毎回結果が変わる。

テスト時にdropoutを無効にするにはchainer.configで条件分岐を記載すること。

 

<https://github.com/chainer/chainer/blob/master/examples/cifar/models/VGG.py>よりネットワーク構造部を引用

 

<https://chainerfan.jimdo.com/chainer-v3-%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3/core-functionalities/chainer%E3%81%AE%E8%A8%AD%E5%AE%9A/>

上記にchainer.configで条件分岐する例が記載されている。Example参照

 

class VGG(chainer.Chain):
   
  """A VGG-style network for very small images.
   
  This model is based on the VGG-style model from
  http://torch.ch/blog/2015/07/30/cifar.html
  which is based on the network architecture from the paper:
  https://arxiv.org/pdf/1409.1556v6.pdf
   
  This model is intended to be used with either RGB or greyscale input
  images that are of size 32x32 pixels, such as those in the CIFAR10
  and CIFAR100 datasets.
   
  On CIFAR10, it achieves approximately 89% accuracy on the test set with
  no data augmentation.
   
  On CIFAR100, it achieves approximately 63% accuracy on the test set with
  no data augmentation.
   
  Args:
  class_labels (int): The number of class labels.
   
  """
   
  def __init__(self, class_labels=10):
  super(VGG, self).__init__()
  with self.init_scope():
  self.block1_1 = Block(64, 3)
  self.block1_2 = Block(64, 3)
  self.block2_1 = Block(128, 3)
  self.block2_2 = Block(128, 3)
  self.block3_1 = Block(256, 3)
  self.block3_2 = Block(256, 3)
  self.block3_3 = Block(256, 3)
  self.block4_1 = Block(512, 3)
  self.block4_2 = Block(512, 3)
  self.block4_3 = Block(512, 3)
  self.block5_1 = Block(512, 3)
  self.block5_2 = Block(512, 3)
  self.block5_3 = Block(512, 3)
  self.fc1 = L.Linear(None, 512, nobias=True)
  self.bn_fc1 = L.BatchNormalization(512)
  self.fc2 = L.Linear(None, class_labels, nobias=True)
   
  def forward(self, x):
  # 64 channel blocks:
  h = self.block1_1(x)
  h = F.dropout(h, ratio=0.3)
  h = self.block1_2(h)
  h = F.max_pooling_2d(h, ksize=2, stride=2)
   
  # 128 channel blocks:
  h = self.block2_1(h)
  h = F.dropout(h, ratio=0.4)
  h = self.block2_2(h)
  h = F.max_pooling_2d(h, ksize=2, stride=2)
   
  # 256 channel blocks:
  h = self.block3_1(h)
  h = F.dropout(h, ratio=0.4)
  h = self.block3_2(h)
  h = F.dropout(h, ratio=0.4)
  h = self.block3_3(h)
  h = F.max_pooling_2d(h, ksize=2, stride=2)
   
  # 512 channel blocks:
  h = self.block4_1(h)
  h = F.dropout(h, ratio=0.4)
  h = self.block4_2(h)
  h = F.dropout(h, ratio=0.4)
  h = self.block4_3(h)
  h = F.max_pooling_2d(h, ksize=2, stride=2)
   
  # 512 channel blocks:
  h = self.block5_1(h)
  h = F.dropout(h, ratio=0.4)
  h = self.block5_2(h)
  h = F.dropout(h, ratio=0.4)
  h = self.block5_3(h)
  h = F.max_pooling_2d(h, ksize=2, stride=2)
   
  h = F.dropout(h, ratio=0.5)
  h = self.fc1(h)
  h = self.bn_fc1(h)
  h = F.relu(h)
  h = F.dropout(h, ratio=0.5)
  return self.fc2(h)