スキップしてメイン コンテンツに移動

投稿

2020の投稿を表示しています

[Rに関するメモ] グラフを描く

Rの初歩 変数xに1を代入 x <- 1 ベクトルを表現 c(1,2,3) 連続した数字の列 1:5 ある数xの繰り返し rep(x,3) グラフを描く簡単な例 三角関数の sin を $-\pi$から$2\pi$まで描く。 > plot(sin, -pi, 2*pi) plot は画面の表示を一旦消去してからグラフを描く。 その為、追加でグラフを重ねるには par(new=TRUE) を実行する。 sinにcosを重ねて描くには次のようにする。 > plot(sin, -pi, 2*pi) > par(new=TRUE) > plot(cos, -pi, 2*pi) lines は直線を描く 次の例は 3点(1,2)-(4,1)-(7,3) を順に結んだ線が描かれる  > lines(c(1,4,7),c(2,1,3))

$\LaTeX$ の覚書 ~ 数式の中の文字の種類

$\LaTeX$の数式モード内の文字を変更するコマンド 追加パッケージが必要な物もある。 \mathbb と \mathfrak は amsfonts パッケージを読み込む必要があるが、amssymbパッケージを読み込むとamsfontsが呼び出される為そのように指定した。 後半にある書体は読み込むパッケージによって文字が変わる為注意。 カリグラフィー( calligraphy ) 数式モード内にコマンド \mathcal{文字} で出力する \mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ} $\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ 黒板太字 (Blackboard bold) 数式モード内にコマンド \mathbb{文字} で出力する プリアンブルに\usepackage{amssymb}が必要 \mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ} $\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ フラクトゥール (Fraktur ; フラクトゥーア) 数式モード内にコマンド\mathfrak{文字}で出力する プリアンブルに \usepackage{amssymb} が必要 \mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ} $\mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ \mathfrak{abcdefghijklmnopqrstuvwxyz} $\mathfrak{abcdefghijklmnopqrstuvwxyz}$ 花文字 数式モード内にコマンド\mathscr{文字}で出力する \usepackage{mathrsfs}が必要 \mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ} $\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$ 筆記体 数式内にコマンド\mathpzc{文字}で出力する プリアンブルに \DeclareMathAlphabet{\mathpzc}{OT1}{pzc}{m}{it} が必要 \mathpzc{ABCDEFGHIJKLMNOPQRSTUVWXYZ

$\LaTeX$ の覚書 ~ 文章の構造

$\LaTeX$のちょっとした覚書 文章の構造 article、report、book等の関連スタイルにて使える文章の区分け スタイルファイルによって細部が変わってくるが、おおむね次のようになっている。 \part{~部~} \chapter{~章~} \section{~節~} \subsection{~小節~} \subsubsection{~小々節~} \paragraph{~段落~} \subparagraph{~小段落~} \part と \chapter は文章全体を通して数字が振られるので \part が異なっても \chapter は数字がカウントアップする 番号付けの深さの設定 \setcounter{secnumdepth}{2} 2 だと \subsection までは数字を振り、 \subsubsection 以降は数字を振らない。 目次 次のコマンドで目次を生成する。 目次は上の \part、\chapter、\section を引っ張ってくる。 \tableofcontents 目次に何を載せるかは次のコマンドで予め設定しておくことができる。 \setcounter{tocdepth}{深さ} 深さには整数を入れる。深さが1でデフォルトの状態になる。 0 : \part、\chapter 1 : \part、\chapter、\section 2 : \part、\chapter、\section、\subsection 3 : \part、\chapter、\section、\subsection、\subsubsection 4 : \part、\chapter、\section、\subsection、\subsubsection、\paragraph 5 : \part、\chapter、\section、\subsection、\subsubsection、\paragraph、\subparagraph

Raspberry Pi に ssh で 接続できない 又は 接続したがすぐに切断されたりする現象について

Raspberry Pi ZeroW に ssh接続 を行い操作をしていたが、いつ頃からかうまく繋がらなくなった。 症状としては次のような状況だった。 ssh接続するもクライアント側のモニタには何も表示されない うまく接続できてもすぐに切れてしまう キーボードからの入力が表示されるまでにとても時間がかかる このような状況であったが、vncでは接続できていた。 その為、vncで画面を映し、ターミナルを立ち上げて操作することで凌いでいた。 この状況の原因ははっきりとわからないが、次の記事を参考に対応した。 Disable power management in Stretch https://www.raspberrypi.org/forums/viewtopic.php?t=194619 行うことは次の2つ。 無線モジュールの電源管理を無効にする sshd_config の ClientAliveInterval を有効にする 無線モジュールの電源管理 対応したラズベリーパイはbusterである。 $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster 起動時のログを確認してみるとオンボードの無線LANの省電力モードが有効になっている。 $ dmesg | grep brcm [ 15.998658] brcmfmac: F1 signature read @0x18000000=0x1541a9a6 [ 16.018794] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1 [ 16.019229] usbcore: registered new interface driver brcmfmac [ 16.285029]

仮想環境 on python3

サポートが2020年1月1日に終わり、python2 の寿命は尽きた。 python3とは互換性が無いため、python3への移行はなかなか進まなかった。 pythonは人気のある言語であったので、 制作された多くのソフトウェア資産がpython2であったことが移行が遅くなった理由だろう。 ここでは学習用の python3 環境を構築する手順を記しておく。 pythonの導入確認 まず、python3 が導入されているかを確認する。 次のコマンドでバージョンが表示される。 $ python3 -V Python 3.7.3 コマンドはpythonでもいいが、ver.2系とver.3系の両方がある場合、2系を指す場合があるため注意。 $ python -V Python 2.7.16 入っていないのなら公式サイトからダウンロードするか、 aptやyumを用いてインストールを行う。 パッケージ管理コマンド dnf は python3 で作られているので dnf が入っていればpython3は導入済みである。 Python  https://www.python.org/ pythonスクリプトの実行 pythonのスクリプトを実行するには幾つかの方法がある。 インタラクティブモード pythonコマンドで実行 スクリプトを直接実行 インタラクティブモード 簡易的なプログラムの実行に用いる。 コマンドラインでpython3を直接実行することでインタラクティブモードに移行する。 $ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello,

テキストエディタの自動インデントとコメントアウトの方法

インデント コピーしてきて継ぎ接ぎのファイルを自動インデントする。 vi コマンド入力 gg=G ggが先頭、Gが文末にカーソルが移動するコマンド。 = が文章を適当にインデント Emacs 次を入力し文章全体を選択。 C-x h その後、インデントを行う。 C-M-\ コメントアウト vi C-vで範囲を選択し、Shift-i で挿入モードに切り替え入力。 挿入モードを終わると一括入力される。 Emacs M-; リージョンを選択すれば選択範囲のコメントアウト。 してないなら行末尾にコメント追加。

LS-WTGLをハックし、sshログインする

初期状態のリンクステーションは外部からの接続が制限されている。 この為、sshでログインできるようにハックする。 ここではDebian上で操作する。 javaの実行環境 java の実行環境構築する。 Java Runtime Environment (JRE) をインストールしておけばいいはず。 # apt install openjdk-11-jre ツールの導入と実行 リンクステーション向けにツールが公開されている。 acp_commander.jar https://github.com/Stonie/acp-commander このファイルを置いたディレクトリにて次のコマンドを入力するとヘルプが見られる。 $ java -jar acp_commander.jar リンクステーションのIPアドレスが 192.168.0.2 の時、 rootパスワードを削除し、telnetサービスを立ち上げるのは次のコマンドで行う。 $ java -jar acp_commander.jar -t 192.168.0.2 -o これでリンクステーションにtelnetで接続可能になった。 rootパスワードの設定 rootのパスワードを設定しておく。 # passwd Changing password for root Enter the new password (minimum of 5, maximum of 20 characters) Please use a combination of upper and lower case letters and numbers. Enter new password: Re-enter new password: Password changed. sshサービスの起動 telnetで接続後、/usr/local/sbin/sshd を実行するとsshサービスが起動できる。 起動前に /etc/sshd_config を変更し設定を変える必要がある。 # sed -i 's/\#PermitRootLogin no/PermitRootLogin yes/' /etc/sshd_config # grep PermitRo

LS-WTGL の 復旧 with CentOS8

リンクステーションのファームを初期のものに置き換える作業を行った。 リンクステーションはLS-WTGL ver.1 である。USBが一つしかないタイプ。 CentOS8を使い復旧を行った。 初期状態 Debianを入れようとして試行錯誤していたが放ったらかしになっていた。 電源を入れると赤いランプが点滅する状態。 この状態はbootファイルが読み込めないと起きる。 初期化したい場合は /boot ディレクトリ内にある次のファイルの名前を変えると発生する。 uImage.buffalo initrd.buffalo この状態でリセットスイッチを長押しするとEMモードに入る。 EMモードはTFTPサーバ(192.168.11.1)からファームウェアをダウンロードして実行するモード。 これを利用し、初期ファームウェアを導入する。 ファームウェア配信用サーバの準備 TFTPサーバーを導入 on CentOS 8 https://atsreport.blogspot.com/2020/05/tftp-on-centos-8.html TFTPサーバを立てる。 上の記事通りなら、/var/lib/tftpboot がtftpサービスで公開される。 配信用の2つのファイルをこのディレクトリに配置する。 uImage.buffalo 、 initrd.buffalo IPアドレスを192.168.11.1に変更しておく。 次のコマンドを使うと比較的簡単に変更できる。 # nmtui この段階でリンクステーションのリセットスイッチを押すとファイルを拾いに来る。 その様子は次のコマンドで確認できる。 なお、標準でtftpサーバは69番ポートを利用する。 $ ss -u LAN内なら数秒でサーバからデータを持っていくので その後、リンクステーション内の構築が自動的に行われる。 赤いランプが点滅し、HDのアクセス音が聞こえてくると設定中である。 しばらくすると設定は完了する。 うまくいかない場合 firewall を確認しておく。 特に問題なければ無効にしておいてもいい。 # systemctl stop firewalld tftpサービスが立ち上がっているか確認してみる。 必要に応

perl の https通信 が出来なかったので対処した件

いつもhttpsの接続方法を調べているのでまとめることにした。 ここではDebianでの話になっている。 $ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" $ perl --version This is perl 5, version 28, subversion 1 (v5.28.1) built for x86_64-linux-gnu-thread-multi (with 61 registered patches, see perl -V for more detail) LWP::Protocol::https このモジュールを入れると関連するモジュールも入れてくれるのでこれをインストールする。 # cpanm LWP::Protocol::https エラーが出てインストールできない場合、何かが入っていない為ログファイルを確認する必要がある。 今回はこの辺をインストールした。 # apt install gcc # apt install libssl-dev # apt install zlib1g-dev gccがないとコンパイルできないと言うエラーが出る。 libssl-dev は openssl のヘッダファイルがないとエラーが出る。 zlib1g-dev は /usr/bin/ld: -lz が存在しないとエラーが出る。 インストールが出来たら、試しにFeedPPのサイトのサンプルを動かしてみた。 [Perl] XML::FeedPP - R

TFTPサーバーを導入 on CentOS 8

CentOS8 に TFTPサーバーを構築する。 日本語のサイトは xinetd 経由で動作させる記述が多いが、出来るだけ余計なものを導入したくないので systemd で動作をさせた。 [参考] Configure TFTP Server on CentOS 8 https://linuxhint.com/tftp_server_centos8/ インストール 次のコマンドでインストール出来る。 $ sudo dnf install tftp-server インストール後の状態確認 systemdのユニットファイルを確認してみる。 $ systemctl list-unit-files 300近くあるので制限して表示すると2つのファイルが見つかる。 $ systemctl list-unit-files | grep tftp tftp.service indirect tftp.socket disabled それぞれのファイルは次の場所にある。 /usr/lib/systemd/system/tftp.service /usr/lib/systemd/system/tftp.socket 中身については以下の通り。 $ cat /usr/lib/systemd/system/tftp.service [Unit] Description=Tftp Server Requires=tftp.socket Documentation=man:in.tftpd [Service] ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot StandardInput=socket [Install] Also=tftp.socket $ cat /usr/lib/systemd/system/tftp.socket [Unit] Description=Tftp Server Activation Socket [Socket] ListenDatagram=69 [Install] WantedBy=sockets.target

CentOSのGUI環境について

前回、CentOS8 の環境構築を行った。 CentOS 8.1 を 仮想環境VirtualBox にインストール on Win10 https://atsreport.blogspot.com/2020/05/centos-81-virtualbox-on-win10.html ディスク容量を絞ってインストールした為、GUIが入れられなかった。 OSのインストール後、パッケージマネージャ dnf を用いて導入したが、 重たかった為に他のGUIも試すことにする。 最小限のインストールを行った後、GUIを導入する。 dnfのグループを用いたインストールを行うが、 デフォルトでは GUI は GNOME しか用意されていない。 Extra Packages for Enterprise Linux repository を導入しインストールできるパッケージを増やしてKDEとXFCEを導入してみる。 [root@localhost ~]# dnf install epel-release epelリポジトリを追加すると、パッケージグループが増えている。 [root@localhost ~]# dnf group list Last metadata expiration check: 0:03:16 ago on Sat May 9 17:09:14 2020. Available Environment Groups: Server with GUI Server Workstation KDE Plasma Workspaces Virtualization Host Custom Operating System Installed Environment Groups: Minimal Install Available Groups: Container Management .NET Core Development RPM Development Tools Development Tools Graphical Administration Tools Headless Management Legacy UNIX Compatibi

CentOS 8.1 を 仮想環境VirtualBox にインストール on Win10

CentOS 8 のテスト環境を作ることにした。 用いたディスクイメージは CentOS-8.1.1911-x86_64-boot.iso http://ftp.riken.jp/Linux/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-boot.iso VirtualBox は 6.0.20 を利用。 https://www.virtualbox.org/ インストール 仮想環境の設定を少し変更。 [ストレージ]のHDDサイズ - 8GB [システム]のチップセット - "ICH9" [ネットワーク]の割当 - "ブリッジアダプター" ディスクよりブートしウィザードに従いインストールを行う。 最初に言語の設定があるので日本語にした。 その後、タイムゾーンの設定が東京になっていなかったのでこれを変更。 パーテーションのレイアウトなどは自動で行った。 ネットワークを有効にし、インストールするソフトウェアは "最小限のインストール" を選択。 ダウンロードするファイルは約300MiB。 この間にrootパスワードとユーザを作成する。 ちなみに、GUI無しのサーバーでインストールするとダウンロードするファイルが400MiBぐらいで、インストール途中で止まってしまった。 インストールのバージョン [root@localhost ~]# cat /etc/centos-release CentOS Linux release 8.1.1911 (Core) [root@localhost ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="8 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="8" PLATFORM_ID="platform:el8" PRETTY_NAME="CentOS Linux 8 (Core)" ANSI_COLOR="

Let's Encrypt の更新プログラム certbot が自動更新してくれない

Let's Encrypt を使いサーバの通信を行っているが、 自動更新するように cron の設定をしてもエラーが出て更新されない。 サーバはwebサーバとメールサーバで証明書を使っているがwebサーバの方しか更新されない。 エラーログを確認してみると原因がわかった。 次のファイルに更新時に使う設定が書かれている。 /etc/letsencrypt/renewal/ドメイン名.conf この設定が authenticator = standalone となっていた。 standaloneだと、webサービスを停止しないと更新ができない模様。 そこで、その部分をコメントアウトし、authenticator と installer を書き加えた。 [renewalparams] #authenticator = standalone authenticator = nginx installer = nginx これで、更新テストをしたらうまくいった。 # certbot-auto renew --dry-run 強制的に更新するなら次のように行う。 # certbot-auto renew --force-renewal certbot - GitHub https://github.com/certbot/certbot

Let's Encrypt 等のSSL/TSL証明書の詳細確認方法 on Linux

opensslコマンドを用いて証明書の有効期限などを確認する方法。 次の2つについて手順を書いておく。 外部のサーバの証明書を確認 ローカルに保存された証明書の確認 外部のサーバの証明書を確認 クライアントとして証明書を確認する。 blogger.com の証明書を見るには次のコマンドで確認できる。 $ openssl s_client -showcerts -connect www.blogger.com:443 有効期限を見るには次のようにするとnoAfterに有効期限が表示される。 $ openssl s_client -connect www.blogger.com:443 | openssl x509 -noout -enddate ブラウザでチェックサイトから証明書を確認も出来る。 DigiCert® SSL Installation Diagnostics Tool https://www.digicert.com/help/ ローカルに保存された証明書の確認 サーバへsshなどでログインし、直接保存されている証明書を確認する。 Let's Encrypt を利用しているなら証明書の保存場所は /etc/letsencrypt/live/ドメイン名/cert.pem となっているはず。 有効期限は次のコマンドで確認できる。 # openssl x509 -noout -dates -in /etc/letsencrypt/live/example.jp/cert.pem 詳細な情報は -dates オプションを -text に変更する。 # openssl x509 -noout -text -in /etc/letsencrypt/live/example.jp/cert.pem

IPアドレスを固定にする方法 と /etc/resolv.conf の設定を変更する方法 on Raspbian

RaspberryPiのネットワーク環境がDHCPでIPを割り振る状況で動作させていたが、 アドレスの固定を行った。 Raspbianの環境は以下の通り。 $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs" $ cat /etc/debian_version 10.3 $ uname -a Linux dc 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l GNU/Linux IPアドレスを固定にするのは /etc/dhcpcd.conf を書き換えることで行える。 /etc/dhcpcd.conf には次のような例がコメントとして書かれている。 # Example static IP configuration: #interface eth0 #static ip_address=192.168.0.10/24 #static ip6_address=fd51:42f8:caae:d92e::ff/64 #static routers=192.168.0.1 #static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1 Raspberry Pi を無線で接続している場合、インタフェースはwlan0になるはず。 下の設定は次の様な設定になっている。 固定

PCR検査陽性者数と死亡者の合計(2020/3/1 ~ 2020/4/5)

厚生労働省で感染数が発表されている。 「新型コロナウイルス感染症の現在の状況と厚生労働省の対応について」 報道発表資料 3月  https://www.mhlw.go.jp/stf/houdou/houdou_list_202003.html 4月  https://www.mhlw.go.jp/stf/houdou/houdou_list_202004.html これの「PCR検査陽性者」「死亡者」の合計値を拾ってきた。 日付 PCR検査陽性者 死亡者 Mar01 239 5 Mar02 254 6 Mar03 268 6 Mar04 284 7 Mar05 317 7 Mar06 348 6 Mar07 407 6 Mar08 454 6 Mar09 487 7 Mar10 513 9 Mar11 567 12 Mar12 619 15 Mar13 674 19 Mar14 714 21 Mar15 777 22 Mar16 809 24 Mar17 824 28 Mar18 868 29 Mar19 907 31 Mar20 943 33 Mar21 996 35 Mar22 1046 36 Mar23 1089 41 Mar24 1128 42 Mar25 1193 43 Mar26 1292 45 Mar27 1387 46 Mar28 1499 49 Mar29 1693 52 Mar30 1866 54 Mar31 1953 56 Apr01 2178 57 Apr02 2381 60 Apr03 2617 63 Apr04 2935 69 Apr05 3271 70 この陽性者の数が指数関数的に増えているので $陽性者数 = a * b^{日数}$ と仮定し R で計算してみた。 > day<-c(1:36) > day  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26] 26 27 28 29 30 31 32 33 34 35 36 > num<-c(239,254,268,284,317,3

Qiitaが炎上している

Qiitaは色々情報収集に使っていたが、今回の件で使い物にならなくなりそうである。 Qiita、読んだ記事の傾向を合意無しに表示して炎上 批判受け機能停止中 https://www.itmedia.co.jp/news/articles/2003/26/news087.html 2020-3-25、システムの改変で登録ユーザそれぞれの「投稿した記事」「読んだ記事」「LGTMした記事」の割合が本人の同意なく自動的に一般公開された。 利用規約( https://qiita.com/terms )にはプライバシーに関して次のように書かれている。 第6条(プライバシー) 当社は、本サービスを提供するにあたり必要となる最小限の情報をユーザーから取得します。当社は、ユーザーから取得したプライバシー情報の保護に最大限の注意を払います。 第11条(ユーザーに関する情報の利用) 当社は、ユーザーがQiitaを利用することにより得られる情報を用いて当社の広告サービス、当社が本規約外で別途提供するQiita Jobsのサービス等で利用することがあります。なお、利用する情報は関心ワード、関心カテゴリ、行動ログ、アクセスした際の所在都道府県です。(当該情報の活用を望まない場合にはこちらの対応で回避可能です。) (2019年11月27日 改定) 第6条で書かれていることは最小限の情報を収集することが書かれているが、今回集計された読んだ記事はこの最小限の情報に含まれていないと思われるがどういう根拠で使ったのだろうか? 今回のサービスがリリース前は読んだ記事が表示されていないところを見ると、この情報は「サービスに必要となる最小限の情報」とは言えないだろう。無断で収集していたと思われる。 また、今回の情報は個人情報に当たるので無断で公開したことも個人情報保護法にも反していると考えられる。各ユーザIDごとにデータを収集していたことやオプトアウトが別の企業になっていることも炎上している理由だろう。 Qiitaは以前さくらインターネットの批判記事を無断で非公開にしたこともある為、法律についての知識や理解が不足している人が運営しているようだ。 「さくらのレンタルサーバ」批判記事、Qiitaで公開止められ炎上 さくらは「事実確認中」 https://www

smashing を docker で動かしてみる

smashing とは ダッシュボード用のソフト。 [公式]  http://smashing.github.io/smashing/ ruby で開発されていて、カスタマイズするためにruby、CoffeeScript等を用いる。 うまくカスタマイズすればデジタルサイネージとして使える。 dockerhub に公開されているイメージでsmashingを動作させるための方法。 次のイメージを利用する。 visibilityspots/smashing https://hub.docker.com/r/visibilityspots/smashing 次のコマンドでsmashingを起動する。 $ sudo docker run -d -p 8080:3030 visibilityspots/smashing ブラウザで http://localhost:8080/ にアクセスするとダッシュボードが表示される。

プログラミング言語の選択

はじめに 今現在、多くのプログラミング言語が存在します。 古いものだとよく次の3つが挙げられます。 FORTRAN(フォートラン)1954年  https://ja.wikipedia.org/wiki/FORTRAN LISP(リスプ) 1958年  https://ja.wikipedia.org/wiki/LISP COBOL(コボル) 1959年  https://ja.wikipedia.org/wiki/COBOL 機械語やアセンブリ言語を除いても数多くのプログラミング言語があります。 この為、「 どの言語を学ぶのか 」 ということは悩むことではあります。 ここでは、プログラミング言語を選択する考え方を説明します。 ここでは次の4つの視点について考えます。 実装性(作りやすさ) 保守性(修正しやすさ) 移植性(他の機器での動作させやすさ) 継続性(長い期間でも変わらず動作させやすさ) まず、最も大切なことですが、あるプログラミング言語で作ることが出来る処理は他の言語でも作ることが出来ます。特定の言語でしか行えない処理は存在しません。これは、 構造化定理  (または  構造化プログラム定理 )から証明出来ます。 実装性 本来、学ぶプログラミング言語を選ぶ基準としては作りたいプログラムにより選ぶ必要はありません。ただし、行いたい処理に対し作りやすい言語と作りにくい言語はあります。この為、行いたい処理により言語を選ぶことはあります。 この事をここでは 実装性 と呼びます。実装性は、「 行いたい処理 」と「 動作させる環境 」、「 開発環境 」等を考慮します。 保守性 また、プログラムのソースコードは利用している状況に応じてメンテナンスを行いします。原則として全てのプログラムは 不具合 ( バグ と言います)が存在していると考えます。この為、何か問題があると修正を行う必要があります。この修正のしやすさを 保守性 と言います。 移植性 異なるコンピュータで動作させることはよくあります。 この時、コンピュータは同じハードウェアで異なるOSの事もあれば、異なるハードウェアで同じOSの場合等もあります。この様な場合、ほかのコンピュータで動作させる為の労力が少なけれ

Perl で 円周率 を計算する

円周率を計算するPerlプログラムを github で公開している人がいた。 https://gist.github.com/djsas/2083243 ===ここから=== use strict; use warnings; use bigint; my($t1,$t2); my $n=2000; my $a; my $b; my $i; $t1=times; $a = $b = 10 ** $n; for($i = $n * 8 + 1; $i >= 3; $i -= 2) {   $a = int(int($i / 2) * ($a + $b * 2) / $i); } $a -= $b; print("3.$a\n"); $t2=times; print "<".($t2-$t1).">"; ===ここまで=== 円周率の公式と計算法 http://www.kurims.kyoto-u.ac.jp/~kenkyubu/kokai-koza/H16-ooura.pdf 円周率を計算してみよう http://w3e.kanazawa-it.ac.jp/e-scimath/contents/t16/textbook_t16_all.pdf

Perlでの素数判定プログラム

取り敢えず簡易な素数判定プログラム。 使用言語は perl。 Nが 2から√Nまで の整数で割り切れないと素数だと判定している。 次のプログラムは 3以上の整数 しか判定できない。 =====ここから===== use strict; use warnings; # input number chomp(my $num = <>); foreach my $i (2 .. int sqrt $num) {   if ($num % $i == 0) {     print "Non prime.\n";     exit;   } } print "$num is Prime number.\n"; =====ここまで===== $num は必要な数字を入力してあってもいい。 素数とは、 「2以上の整数の中で、1と自分自身以外で割り切れない数」 とよく言われる。 細かく説明すると次のようなことである。  6は2と3から作ることが出来る為、6は合成数という。  様々な数が合成することで作れる。  合成することが出来ない数が素数である。 このような理由から 1は素数にならない。 1は何にかけてもかけられた数になる為。

フレームワークの一覧

フレームワークをちょっとだけまとめた。 終わりに機械学習に関するものをリストアップした。 各種Webフレームワーク Perl、Ruby、PythonのWebアプリケーションフレームワークの一覧。 主要なものをちょっとだけまとめてみた。 Perl https://www.perl.org/ Mojolicious (モジョリシャス) http://mojolicio.us/ https://github.com/mojolicious/mojo Catalyst (カタリスト) http://www.catalystframework.org/ Dancer http://www.perldancer.org/ https://github.com/PerlDancer/Dancer2 Amon2 https://amon.64p.org/ https://github.com/tokuhirom/Amon Ruby https://www.ruby-lang.org/ Ruby on Rails (ルビー オン レールズ) http://rubyonrails.org/ https://github.com/rails/rails Sinatra (シナトラ) http://www.sinatrarb.com/ https://github.com/sinatra/sinatra Padrino (パドリーノ) http://www.padrinorb.com/ https://github.com/padrino/padrino-framework Python https://www.python.org/ Django (ジャンゴ) https://www.djangoproject.com/ https://github.com/django/django Flask (フラスク) https://palletsprojects.com/p/flask/ https://github.com/pallets/flask Bottle (ボトル) https://bottlepy.org/ https://github.com/bottlep

オープンソースのレジプログラム

オープンソースのレジソフトを探してみた。 あまり見当たらない。 追加のパッケージができるだけ少ない、コンパクトなプログラムはない模様。 オープンソースPCポスレジシステム、『PCPOS』 https://www.pcpos.jp/ 動作にはJAVAが必要。 GPLv3 オープンソース ERP および CRM 『Odoo』 https://www.odoo.com/ https://github.com/odoo/odoo このERPにPOSの機能が含まれているらしい。 動作はPythonが必要。 LGPLv3

Raspbian をスリープさせない方法 on Raspbian GNU/Linux 10 (buster)

Raspbianをスリープさせない方法を以前書いた。 https://atsreport.blogspot.com/2017/11/raspbian.html この方法を設定するためのファイルが buster では無いので違う方法を試した。 スリープさせる方法 次のコマンドを実行する。 ただし、X Window上のターミナルを起動して実行する必要がある。 $ sudo xset s off $ sudo xset -dpms $ sudo xset s noblank これによりスリープしなくなる。 それぞれのコマンドは次を意味している。 xset s off スクリーンセイバーの無効 xset -dpms DPMS (Display Power Management Signaling)の無効 xset s noblank Xサーバにブランク画面を表示させない [参考] How to Disable the Blank Screen on Raspberry Pi (Raspbian) http://www.geeks3d.com/hacklab/20160108/how-to-disable-the-blank-screen-on-raspberry-pi-raspbian/ ===追記 2020-3-2=== raspi-configコマンドでも設定できる。 $ sudo raspi-config [Advanced Options] - [A6 Screen Blanking] から設定する。