iptablesで見かけたNATって何?
- iptablesでNATテーブルってあるけどこれ何?
- NATはプライベートIPアドレスとパブリックIPアドレスを組合せで変換してくれます。
- NATは、プライベートIPとパブリックIPを1対1の組合せで変換します。
iptablesでNATテーブルってあるけどこれ何?
iptablesがさっぱり不明な状態で「iptablesを設定してポートフォワードできるよにする」必要があったのでiptablesが有効になっているか確認したらTable: natって出力がありました。
$ sudo /etc/rc.d/init.d/iptables status Table: nat Chain PREROUTING (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination
NATはプライベートIPアドレスとパブリックIPアドレスを組合せで変換してくれます。
- 正式名称 : Network Address Translation
NATは、プライベートIPとパブリックIPを1対1の組合せで変換します。
そこで、IPマスカレード。
- 別名 : NAPT
- 正式名称 : Network Address Port Translation
複数のプライベートIPを1つのパブリックIPに組合せられます。
なぜなら、IPアドレス+ポート番号で組合せるからです。
MCU入門 第9回 NAT/FW トラバーサル③– NAT/FW トラバーサルの仕組み “NATとは” – MCU製品情報サイト VC.info
NAT箱の192.168.1.30:1234宛に届いたパケットを、10.0.2.50:80へ投げるというNATを書く。
# iptables -t nat -A PREROUTING -m tcp -p tcp --dst 192.168.1.30 --dport 1234 -j DNAT --to-destination 10.0.2.50:80
"10.0.2.50:80宛のパケットは、NAT箱の10.0.2.40というアドレスに付け替えてから送信する"というルールを書く。
# iptables -t nat -A POSTROUTING -m tcp -p tcp --dst 10.0.2.50 --dport 80 -j SNAT --to-source 10.0.2.40
NATのPREROUTINGを通って変換されたアドレスに対して許可ルールを書いておく。
# iptables -A FORWARD -m tcp -p tcp --dst 10.0.2.50 --dport 80 -j ACCEPT
戻りのパケットも許可する
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptablesで特定のポートを別のホストへ転送する方法 - Kerosoft : Modus Operandi
コンピュータ化システムバリデーションの基礎となるGMP省令の3大目的
- コンピュータ化システムバリデーションを勉強するとGMPという単語をよく見かけました。
- GMPとは、日本における「医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令」のことです。
- 誰が作業しても、いつ作業しても、必ず同じ品質・高い品質の製品をつくるために、医薬品製造業者が守るべきルールです。
- 目的を達成するためにやること
- 国や会社によってばらつきがあります。
コンピュータ化システムバリデーションを勉強するとGMPという単語をよく見かけました。
GMPとは、日本における「医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令」のことです。
- 英語 : Good Manufacturing Practice
- 日本語 : 適正製造規範
ざっくりいうと「安心して製品を使えるようにやらなければならないこと」です。
GMPは、医療分野以外にも食品などの製造業でも使われます。
日本の製薬・医療業界では「医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令」を指すことが多いです。
この省令は、GMP省令とも言います。
「医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令」は薬事法の14条に基づいています。
14条では「医薬品等の製造販売の承認」に始まり承認の基準や審査について記載されています。
GMPは、医薬品製造業における製造管理と品質管理の基準です。
健康食品や化粧品にも適用される基準です。
省令を読んでもよくわかりません。
書いてある文字列が難しくてよくわからないので、GMPを説明しているサイトと合わせて学びます。
誰が作業しても、いつ作業しても、必ず同じ品質・高い品質の製品をつくるために、医薬品製造業者が守るべきルールです。
目的は、大きく3つあります。
人による間違いを最小限にする。
医薬品が汚染されたり、品質が低下するのを防ぐ
高い品質を保つ仕組みをつくる
目的を達成するためにやること
(ハード)薬を作る製造所の環境や設備
GMP省令ではこんな感じで書いてあります。
(構造設備)
第九条 製品の製造所の構造設備は、次に定めるところに適合するものでなければならない。
一 手順書等に基づき、その用途に応じ適切に清掃及び保守が行われ、必要に応じ滅菌され、また、その記録が作成され、保管されていること。
二 製品等により有毒ガスを取り扱う場合においては、その処理に要する設備を有すること。
三 作業所のうち作業室は、製品の種類、剤型及び製造工程に応じ、じんあい又は微生物による汚染を防止するのに必要な構造及び設備を有していること。ただし、製造設備等の有する機能によりこれと同程度の効果を得られる場合においては、この限りでない。
四 作業所のうち、原料の秤量作業、製品の調製作業、充てん作業又は閉そく作業を行う作業室は、当該作業室の職員以外の者の通路とならないように造られていること。ただし、当該作業室の職員以外の者による製品への汚染のおそれがない場合においては、この限りでない。
五 飛散しやすく、微量で過敏症反応を示す製品等又は交 叉さ 汚染することにより他の製品に重大な影響を及ぼすおそれのある製品等を製造する場合においては、当該製品等の関連する作業室を専用とし、かつ、空気処理システムを別系統にしていること。
六 製品の製造に必要な質及び量の水(設備及び器具並びに容器の洗浄水を含む。)を供給する設備を有すること。
・医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令(◆平成16年12月24日厚生労働省令第179号)
間違いを防ぐことができること
フェールセーフ/フェールプルーフに似ています。
医療系のシステム開発では、設計段階から「ユーザ操作に間違いがあったら?」の目線が必要になりますね。
https://resilient-medical.com/human-error/fail-safe-fool-proof
衛生的であること
(ソフト)人によるルールの運用
ルールを決めてそれを書類に残すこと
GMP省令では作る手順書の種類を具体的に決めています。
医療系のシステム開発では、仕様書や手順書の作成が重要となります。
(手順書等)
第八条 製造業者等は、製造所ごとに、構造設備の衛生管理、職員の衛生管理その他必要な事項について記載した衛生管理基準書を作成し、これを保管しなければならない。
2 製造業者等は、製造所ごとに、製品等の保管、製造工程の管理その他必要な事項について記載した製造管理基準書を作成し、これを保管しなければならない。
3 製造業者等は、製造所ごとに、検体の採取方法、試験検査結果の判定方法その他必要な事項を記載した品質管理基準書を作成し、これを保管しなければならない。
4 製造業者等は、前三項に定めるもののほか、製造管理及び品質管理を適正かつ円滑に実施するため、次に掲げる手順に関する文書(以下「手順書」という。)を製造所ごとに作成し、これを保管しなければならない。
一 製造所からの出荷の管理に関する手順
二 バリデーションに関する手順
三 第十四条の変更の管理に関する手順
四 第十五条の逸脱の管理に関する手順
五 品質等に関する情報及び品質不良等の処理に関する手順
六 回収処理に関する手順
七 自己点検に関する手順
八 教育訓練に関する手順
九 文書及び記録の管理に関する手順
十 その他製造管理及び品質管理を適正かつ円滑に実施するために必要な手順
5 製造業者等は、製品標準書、衛生管理基準書、製造管理基準書、品質管理基準書及び手順書(以下「手順書等」と総称する。)を製造所に備え付けなければならない。
・医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令(◆平成16年12月24日厚生労働省令第179号)
ルール実行するための手順書をSOPともいいます。
SOP(Standard Operating Procedures)とは標準業務手順書の略称で、治験の際に必ず守るべき基本的な業務手順をまとめた手順書。
SOPとは | 製薬業界 用語辞典 | Answers(アンサーズ)
ルールの実行結果を記録に残して証拠にすること
GMP省令には「記録を作成し、これを保管すること」がたくさんあります。
医療系のシステム開発では、エビデンスをきっちりと残して管理する必要があります。
(製造管理)
第十条 製造業者等は、製造部門に、手順書等に基づき、次に掲げる製造管理に係る業務を適切に行わせなければならない。<省略>
三 製品の製造に関する記録をロットごと(ロットを構成しない製品については製造番号ごと。以下同じ。)に作成し、これを保管すること。
四 製品の資材についてロットごとにそれが適正である旨を確認するとともに、その結果に関する記録を作成し、これを保管すること。
五 製品等についてはロットごとに、資材については管理単位ごとに適正に保管し、出納を行うとともに、その記録を作成し、これを保管すること。
六 構造設備の清浄を確認するとともに、その結果に関する記録を作成し、これを保管すること。
七 職員の衛生管理を行うとともに、その記録を作成し、これを保管すること。
八 構造設備を定期的に点検整備するとともに、その記録を作成し、これを保管すること。また、計器の校正を適切に行うとともに、その記録を作成し、これを保管すること。
・医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令(◆平成16年12月24日厚生労働省令第179号)
内容を見直して検討・改善していくこと
手順の作成と記録だけではなく、定期的に記録をチェックして状況や環境の変化に合わせた改善が必要になります。
(製造管理)
第十条 製造業者等は、製造部門に、手順書等に基づき、次に掲げる製造管理に係る業務を適切に行わせなければならない。<省略>
九 製造、保管及び出納並びに衛生管理に関する記録により製造管理が適切に行われていることを確認し、その結果を品質部門に対して文書により報告すること。
・医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令(◆平成16年12月24日厚生労働省令第179号)
国や会社によってばらつきがあります。
ざっくり似ていても世界各国全く同じ基準ではありません。
PIC/Sでは、GMP基準の国際化を目指しています。
- 正式 : Pharmaceutical Inspection Convention and Pharmaceutical Inspection Co-operation Scheme
- 日本語 : 医薬品査察協定及び医薬品査察共同スキーム
PIC/Sは、GMPの分野で共通の基準を設け、各国の査察官にトレーニングの機会を提供することによって、世界中の査察基準を整合させることを目指しています。
PIC/Sの基礎知識。PIC/S GMPとは?PIC/Sの目的や成り立ちは? | コラム | 平原エンジニアリングサービス│医薬品施設のエンジニアリング
GMPの歴史
- 1961年 サリドマイドの薬害について報告される
- 1963年 (アメリカ)FDA(アメリカ食品医薬品局)が、連邦食品・医薬品・化粧品法に基づいて医薬品等の製造品質管理基準を定めた
- 1969年 世界保険機関がWHO-GMPを制定し、加盟国に対して医薬品貿易においてGMPに基づく証明制度を採用・実施するように勧告
- 1980年 (日本)薬事法改正に伴い「医薬品GMP」施行
- 1990年 (日本)「原薬GMP」施行
- 1994年 (日本)「医薬品GMP」「原薬GMP」を合わせた「医薬品の製造管理及び品質管理規則」施行し、これが製造業の要件となった
- 1995年 PIC/S設立
- 2005年 (日本)「医薬品及び医薬部外品の製造管理及び品質管理規則」が「医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令」へ改正され、製造販売承認の要件となった
- 2014年 日本がPIC/Sに加盟
WebLogic Serverって何?
WebLogic Serverは、Java EEに準拠したWebアプリケーションサーバです。
多階層型Javaアプリケーションを実現する統合プラットフォーム Oracle WebLogic Server【日本ユニシス】
買収を経てOracle社が作っています。
JPAって何?
JPAは、リレーショナルデータベースを使う時用のJavaフレームワークの仕様の定義です。
- 英語 : Java Persistence API
6.3. データベースアクセス(JPA編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.5.1.RELEASE documentation
Java EEだけではなくJava SEでも使えます。
JPAはJava EEの「Enterprise Application Technologies」に含まれる技術仕様ですが、Servlet/JSPやEJBなどと異なり、コンテナ・ベースのアーキテクチャを採用していないためJava SEでも利用可能です。
JPAの基礎1 - Qiita
データベースとJavaを関連付けてくれます。
初めてのJPA--シンプルで使いやすい、Java EEのデータ永続化機能の基本を学ぶ - builder by ZDNet Japan
JPAは以下3つの要素から構成されています。
Entityクラスは、データベースにあるテーブルを表すJavaのクラスです。
データベースにある1つのテーブルの1レコードを表すクラスです。
このクラスのインスタンスに
データを格納してテーブルを更新したり、
テーブルから取得したデータを格納して使います。
EntityManagerは、Entityのライフサイクルを管理するためのAPIを提供するインタフェースです。
初めてのJPA--シンプルで使いやすい、Java EEのデータ永続化機能の基本を学ぶ - builder by ZDNet Japan
JPAの実装
EclipseLink
Hibernate ORM : JPAの仕様作成にHibernateプロジェクトの創始者がいたため、JPAはHibernateの影響を受け継いでいます。
Apache Open JPA
アプリケーションサーバとJava EE
アプリケーションサーバ
- 英語 : Application Server
ビジネスロジックなどを実装したアプリケーションソフトウェアを実行することを専門とするコンピュータネットワーク上のサーバコンピュータ、もしくはそのようなコンピュータ上でのアプリケーションの実行を管理補助するミドルウェアのこと。
ウェブアプリケーションサーバは、ウェブクライアントからのHTTPのレスポンス要求を処理するWebサーバとバックエンドのデータベース中核層への橋渡しを担い、データの加工などの処理を行う。
プログラムの実行環境やデータベースへの接続機能、複数の処理を連結するトランザクション管理機能などを持ち、業務の処理の流れを制御するビジネスロジックを実装しているのがアプリケーションサーバである。
旧来の、クライアントやバックエンド側にビジネスロジックを実装する方式(2階層システム)に比べ、システムの変更や更新、増強などが容易で、柔軟性が高い。
アプリケーションサーバのいろいろ
Java EE アプリケーションサーバは、「Java EEに準拠したアプリケーションサーバ」のこと
たとえば・・・
WebLogic*1、JBoss、WebSphere、Glassfish、Cosminexus、Geronimo、iPlanet、Oracle 9iAS
.NETフレームワークに準じたアプリケーションサーバ
たとえば・・・
Internet Information Services (IIS) 、Base4アプリケーションサーバ、Zope
その他のアプリケーションサーバ
Java EE以外の言語セット・フレームワークを使用し、ビジネスロジックを実装し得るアプリケーションサーバ
Java EE は、Javaでシステム開発するための標準仕様です。
- 正式 : Java Platform, Enterprise Edition
Javaの拡張機能セット
コミュニティ主導のエンタープライズ・ソフトウェアの標準です。Java EEはJava Community Processを使って開発されており、業界の専門家、営利団体とオープンソース団体、Javaユーザー・グループ、さらに数え切れないほど多くの個人が貢献しています。
技術リソース | Oracle 日本
JavaでWebアプリケーションを中心とした業務アプリケーションを構築するために選定された数々の仕様と、その実装
Java EE 6 環境の構築 (1/4):CodeZine(コードジン)
サーバー中心の複数層アプリケーションの開発、デプロイおよび管理にかかるコストと複雑さを大幅に削減する組織的なテクノロジのセットを含み、広く使用されているプラットフォーム(標準仕様)です。Java EEはJava SEプラットフォーム上にビルドされ、移植可能、堅牢、スケーラブル、信頼性、およびセキュリティに優れたサーバー側アプリケーションを開発および実行するための一連の API を提供します。
Java EEおよびJava Webの学習
規定されている機能
Java Server Pages ( JSP)
- HTML内にJavaのコードを埋め込んでおき、Webサーバで動的にWebページを生成してクライアントに返す技術
- Javaのコードは、<%と%>記号で囲まれた部分に書かれる(スクリプト言語チックにJavaを書く)
- JSR-53
Java Servletとの違いは、記述方法にあり!
例えば、画像を表示する・・・
- Java Servlet : Javaプログラムと同様に作成
- out.print("<img src=\"/img/" + img.getName() + "\">");
- JSP : HTMLにタグをつけて入れ込む
- < img src="/img/<%= img . getName ( ) %>">
他にもいろいろ比較して特徴を知ろう!
出展 : JSPの特徴を理解する:Tomcatを使う「JSPプログラミング」(1) - @IT
比較対象 | JavaScript | JavaScript | Java Applet*2 | CGI*3 | CGI | CGI |
---|---|---|---|---|---|---|
同じところ | HTMLにタグを入れて使う | - | - | 実行するところ | - | - |
違うところ | - | 実行するところ | 実行するところ | - | 使えるプログラム言語 | 起動の仕方 |
JSPの場合 | <% %> | サーバ側 | サーバ側 | サーバ側 | Java | 複数アクセスがあっても1度起動していればその内部で実行 |
比較対象の場合 | <script> </script> | クライアント側 | クライアント側(アプレット自体はサーバにおいてあるが使う時にクライアントに持って行って実行する) | サーバ側 | 特定のプログラミング言語に依存しない(JavaでもCでもどんとこい) | アクセスがあるたびに新しいプロセス起動 |
Java Server Faces ( JSF)
- Webアプリケーションのインターフェイスを構築するためのフレームワーク
- ユーザーインターフェースを簡単に作ることを主眼においたフレームワーク
- JSR-127
JSFはコンポーネントベースのフレームワークであり、Strutsなどのアクションベースとは異なります。
【JavaEE】今からでも間にあうJSF入門
Java Naming and Directory Interface ( JNDI)
ほかにもいろいろあります。
ストアドプロシージャって何?
ストアドプロシージャは、データベースへの複数処理を1つのプログラムにまとめたものです。
- 英語 : stored procedure
- stored : サーバー上に保管(ストア)されるという意味
プログラムは専用言語で書きます。
規格またはRMDB | 言語 |
---|---|
(標準SQLの規格)SQL99 | SQL/PSM Persistent Stored Module |
Oracle Database | PL/SQL Procedural Language Extensions to SQL |
Microsoft SQL Server | Transact-SQL T-SQL |
ストアドプロシージャの友達にストアドファンクションがいます。
ストアドプロシージャは、戻り値がありません。
戻り値があるのは、ストアドファンクションです。
ストアドプロシージャ (stored procedure)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
ストアドプロシージャやストアドファンクションを使うと複数処理を1回でできるので実行速度が早くなります。
Oracle ストアド・プロシージャとストアド・ファンクションの基本と違い|Everything you do is practice
コンピュータ化システムバリデーションってなんだろう?
- ピュータ化システムバリデーションは、製薬業界や医療機器業界で使われる品質保証のことです。
- 目的は、システムが意図したとおりに動作することを保証することです。
- そんなCSVにはガイドラインがあります。
- 製薬や医療業界のシステム開発で使われる工程の略称
- 歴史
ピュータ化システムバリデーションは、製薬業界や医療機器業界で使われる品質保証のことです。
- 英語 : Computerized System Validation
- 略称 : CSV
一般工業製品の品質保証となぜ分けているのか?
一般工業製品の場合は「価格」と「品質」が比例します。
安ければある程度の不良は許容されます。
医薬品は、生命にかかわるため不良は許容されないから
医薬品の場合は「価格」にかかわらず「不良」は許容されません。
そのため、世界的にCSVへの取組が求められています。
日本医療機能評価機構のサイトでシステムに関わる医療事故を見ることができます。
日本医療機能評価機構のサイトから「分析テーマ」で「その他」を選ぶと見られます。
www.med-safe.jp
GMP省令が基礎となっています。
GMPの対象のうち製薬や医療に関わるコンピュータ化システムが対象になります。
医療機器に組み込まれるシステムだけではなく、文書を管理するシステムまで
医療に関わる広範囲のシステムが対象になります。
2. 適用の範囲
このガイドラインは、コンピュータ化システムを使用してGQP省令及びGMP省令が適用され る業務を行う製造販売業者等に適用する。
このガイドラインの対象となるコンピュータ化システムの例として、(1)~(7)が考えられる。また、対象外となるコンピュータ化システムは別紙2に記載する。
(1) 医薬品、医薬部外品の市場への出荷の可否の決定に係るシステム及び市場への出荷に係る記録を 作成、保存管理するためのシステム
(2) 製造指図書、製造に関する記録等を作成及び保存管理するためのシステム
(3) 製造工程を制御又は管理するためのシステム及びその管理データを保存管理するためのシステム
(4) 原材料及び製品の保管、出納等の生産を管理するシステム
(5) 品質試験に用いる機器を制御又は管理するためのシステム並びに品質試験結果及び管理データを保存管理するためのシステム
(6) 空調、製造用水製造設備など、製品の品質に重大な影響を及ぼす可能性のある製造支援設備・施設を制御又は管理するためのシステム及びその管理データを保存管理するためのシステム
(7) 文書(手順書類、品質標準書、製品標準書等)を作成、承認、保存管理するためのシステム
医薬品・医薬部外品製造販売業者等におけるコンピュータ化システム適正管理ガイドライン
バリデーションとは、製造工程及びその手順を検証して文書化することです。
検証を行い証拠となる文書を作成することにより、継続的に証拠を積み上げ高度な品質を保証していくことをバリデーションといいます。
「バリデーション」とは、製造所の構造設備並びに手順、工程その他の製造管理及び品質管理の方法が期待される結果を与えることを検証し、これを文書とすることをいう。
医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令
差分の機能仕様書や設計仕様書を作成してはならない。
最新の当該システムの機能がどうなっているかを一瞥して分かるようにしておかなければならないのである。<省略>
計画書、報告書、仕様書等は、最新バージョンのみをバインダーに綴じておかなければならない。
それに対して、テストスクリプトやテストログは全てのバージョンをバインダーに綴じておかなければならない。
なぜならば、最新のテストログのみを綴じておくとすべてのテストが合格しているからである。
規制当局のレビュでは、成功したテストを調査したいのではなく、エラーになったテストを参照し、解決された経緯を調査したいためである。
【ワンポイント】CSVにおける成果物の種類と管理方法 – eCompress
バリデーションの対象となるのは、開発したシステム自体だけではなくそれを使用する業務プロセスも含みます。
コンピュータ化されたシステム(Computerized System)とは、「コンピュータシステム」と「業務プロセス」を統合したものである。
「コンピュータシステム」は、ハードウェアとソフトウェアから構成され「業務プロセス」は、人、標準業務手順書(SOP)と、設備(例えば測定機器、CRF、筆記具など)から構成される。
コンピュータバリデーションとは イーコンプライアンス
目的は、システムが意図したとおりに動作することを保証することです。
「医薬品、医薬部外品、化粧品及び医療機器の品質管理の基準に関する省令」及びGMP省令に基づく業務を行うためのコンピュータ化システムの要件を明確にし、
コンピュータ化システムが意図したとおりに動作することを保証するため、これを開発する際に必要な事項、これを検証するバリデーションに関する事項及び運用管理に関する遵守事項を定め、GQP省令及びGMP省令の適正な実施の確保を図ることを目的とする。このガイドラインにおいては、コンピュータ化システムの開発から、検証、運用管理及び廃棄までの流れを総合してコンピュータ化システムのライフサイクルという。医薬品・医薬部外品製造販売業者等におけるコンピュータ化システム適正管理ガイドライン
薬や医療機器の品質保証のために、システムの開発から導入および廃棄までを検証・文書化します。
CSVで重要なことは、開発から廃棄までを検証して証拠として文書を残すことです。
それによって薬や医療機器の品質に問題がないことを保証します。
CSVではドキュメントがたくさん必要となるため、ユーザ企業とシステムを作る企業の間で成果物のイメージに相違がないことを確認することが作業量のズレ防止に大きく繋がります。
サプライヤが、ユーザ企業から CSV 活動のサポート(アウトソーシング)に関する見積依頼を受けた際に困る点を次に例示する。
●漠然とした要求で何をサポートして欲しいのかがよくわからない
●ユーザ企業とサプライヤの役割分担と責任範囲が明確になっていない
● CSV に関する規範が明確になっていない
● CSV を行うコンピュータ化システムに関する情報が不十分である(省略)
サプライヤが精度の高い見積を行う上で最低限必要な情報を、次に示す。
●当該コンピュータ化システムがどの規制に準拠すればよいのか
●CSV 活動はユーザ企業の規定あるいはサプライヤの方法に任せるのか
●当該コンピュータ化システムの GAMP のカテゴリ分類、システム規模や複雑さ
●成果物(バリデーションドキュメント)
CSV におけるサプライヤの役割
そんなCSVにはガイドラインがあります。
国際的にはGAMPというものがあります。
- 正式 : Good Automated Manufacturing Practice
ISPE(国際製薬技術協会)が作っていて、欧米ではこのGAMPの考え方が広く使われていて世界標準的なガイドラインです。
日本には「医薬品・医薬部外品製造販売業者等におけるコンピュータ化システム適正管理ガイドライン」というものがあります。
ガイドラインなので法的拘束力はありませんが、海外のガイドラインとも整合性があり世界的にも通用するものです。
GAMPとどう違うかはよくわかりません。
このガイドラインは欧米のGAMP5やPIC/S等のCSVガイドラインと整合性があり、コンピュータ化システムの開発から検証、運用、廃棄までのライフサイクルの考え方を採用しています。
CSVとは。コンピュータ化システムバリデーションとは
製薬や医療業界のシステム開発で使われる工程の略称
各工程の名前や略称は会社やプロジェクトによって異なりますが、CSVを実施している製薬や医療業界ではGAMP4の用語を各工程の略称として使用していることがあります。
最新のGAMP5ではこの略称の一部は記載されなくなったためいつかなくなるかもしれませんが・・・。
日本語の工程名 | (GMP4の略称)英語の工程名 | ポイント |
---|---|---|
設計適格性確認 | (DQ)Design Qualification | テスト工程になって仕様変更が発生しないよう開発ベンダは「作成する要求仕様書」と供給業者から提出される「設計仕様書」が合致しているかどうかを確認し、その記録を残すことが重要 |
ユーザ要求仕様 | (URS)User Required Specification | 要求仕様書の作成には関係部門が連携して、必要事項を漏れなくまとめていくことが大切 |
システム機能仕様 | (FS)Functional Specification | 作成はサプライヤがしてもそのレビューと承認はユーザ企業(製薬企業、医療機器企業)の責任である |
システム設計仕様 | (DS)Design Specification | - |
実装/単体テスト | - | - |
据付時適格性確認(結合テスト) | (IQ)Installation Qualification | 設計仕様書等に記載された通りに据え付けられ、プログラムがインストールされたことを確認して記録を残す |
運転時適格性確認(機能テスト) | (OQ)Operational Qualification | |
性能適格性確認(要件テスト) | (PQ)Performance Qualification | 承認された条件下で作業を行って動作できることを確認して記録を残す |
SlackにAWSとPythonを使って簡単なアプリを作る記録
- このサイトのやり方でアプリを作る
- AWSにインスタンスを作成する
- Slackで新規にアプリとボットユーザを作成する
- AWSでLambda関数からCloudWatchにデバッグ用のログを出力するためのIAMロールを追加する
- AWSでSlack Event APIの認証を行うLambda関数を作成する
- AWSで新規にAPI Gatawayを作成する
- Slackで作成したAPIを設定する
- ボットユーザをワークスペースに追加する
- ボットユーザがメッセージを投稿する機能を作る
- メッセージを投稿して動かしてみる
このサイトのやり方でアプリを作る
Slackで新規にアプリとボットユーザを作成する
- 「Create New App」ボタンから新規アプリを作成する。
- サイドメニューの[Bot Users]から新規ボットユーザを作成する。
AWSでSlack Event APIの認証を行うLambda関数を作成する
AWSで新規にAPI Gatawayを作成する
Lambda関数を叩くためのエンドポイントとなるAPIを作成する
APIにPOSTメソッドを作成する
デプロイしてエンドポイントを作成する
- 画面上部にエンドポイントとなるURLが表示されます。
テストする
-
- [Request Body]には、message.channels event | Slackの内容を入力します。
Slackで作成したAPIを設定する
- サイドメニューの[Event Subscriptions]を選択する。
- [Enable Events]を「On」にする。
- [Request URL]にエンドポイントとなるURLを入力する。
- [Subscribe to Bot Events]に「message.channels」か「message.groups」を追加する。
- [Save Changes]ボタンで保存する。
「message.channels」を設定することでボットユーザが参加しているパブリックチャンネルに投稿されたメッセージを取得できる
「message.groups」を設定することでボットユーザが参加しているプライベートチャネルに投稿されたメッセージを取得できる
パブリックチャンネルかプライベートチャネルかを見分ける簡単な方法
Slackの画面横に表示されているチャネル名の横にあるマークを見るとわかる。get.slack.help
ボットユーザをワークスペースに追加する
アプリをインストールする
チャネルにボットを参加させる
メッセージをチャネルに投げるとAWSのCloudwatchのLogに内容が出力される
START RequestId: 24..................... Version: $LATEST [INFO] 2019-05-08T06:11:48.565Z 24...................... { "token": "hogehoge", "team_id": "hogehoge", "api_app_id": "hogehoge", "event": { "client_msg_id": "hogehoge", "type": "message", "text": "chanelとgroupの違いがよくわからない", "user": "投稿したユーザID", "ts": "1557295907.016900", "channel": "チャネルID", "event_ts": "1557295907.016900", "channel_type": "group" }, "type": "event_callback", "event_id": "イベントID", "event_time": 1557295907, "authed_users": [ "hogehoge" ] }
ログはLambda関数に書いた「logging.info(json.dumps(slack_event))」で出力される
ボットユーザがメッセージを投稿する機能を作る
AWSにOAuth Tokenを設定する環境変数を設定する
Lambd関数を更新する
- [Function code]に参考にしているQiitaページに記載されているコードを転記する。
- [Save]ボタンで保存する。
メッセージの投稿には、ボットユーザがメッセージを投稿できるchat.postMessageを使用しています。
メッセージを投稿して動かしてみる
MacのPhpStormでLaravelプロジェクトでPHPUnitをできるようにする記録
- 以前、Laravelのプロジェクトを作ったことがありましたが、今回はPhpStormを使ってやります。
- PhpStormをインストールします。
- 新規にComposerプロジェクトを作成します。
- Xdebugをインストールします。
- プロジェクトを設定します。
- PHPUnitの設定をします。
- テストコードを作る
- PHPUnitでテストコードを実行します。
- 環境
- macOS Mojave バージョン10.14.4
- Composer version 1.8.0
以前、Laravelのプロジェクトを作ったことがありましたが、今回はPhpStormを使ってやります。
PhpStormをインストールします。
- JetBeanのPHPStormのサイトからダウンロードします。
- ダウンロードしたPhpStorm-yyyy.x.x.dmgをクリックします。
新規にComposerプロジェクトを作成します。
# 事前にインストールしてあるComposerの場所を確認 $ which composer /usr/local/bin/composer
Composerがインストールされていない場合はPhpStormのサイトを参照して作成します。
以下サイトの[新しいComposerプロジェクトを作成するには] > [2. ダイアログで、プロジェクトのパラメータを指定します。] > [b. Composerコマンドの実行方法を選択します。]を参照
pleiades.io
Command line parameterで指定した「–prefer-dist」はLaravelをZIPでダウンロードするということです。
# こんなコマンドが動きます。 /usr/local/bin/composer create-project laravel/laravel /path/to/project/directory/tryPhp/composer --prefer-dist
Laravelのバージョンを確認します。
# ウィンドウの下にある[Terminal]またはMacのターミナルで確認します。 $ php artisan -V Laravel Framework 5.8.14
LaravelにくっついているサーバでLaravelの初期画面を確認します。
# サーバを起動します $ php artisan serve Laravel development server started: <http://127.0.0.1:8000> # 表示されたURLにブラウザでアクセスします。 [Wed Apr 24 23:58:16 2019] 127.0.0.1:51584 [200]: /favicon.ico
プロジェクトを設定します。
PHP language levelを使っているPHPのバージョンに合わせます。
# [PHP language level]用に使っているPHPのバージョンを確認します $ php --version PHP 7.3.1 (cli) (built: Jan 10 2019 13:15:37) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.1, Copyright (c) 1998-2018 Zend Technologies with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans with Zend OPcache v7.3.1, Copyright (c) 1999-2018, by Zend Technologies # [CLI Interpreter]用に使っているPHPのディレクトリを確認します $ which php /usr/local/bin/php $ ls -la /usr/local/bin/ | grep php # 省略 lrwxr-xr-x 1 mana admin 27 1 20 14:09 php -> ../Cellar/php/7.3.1/bin/php # 省略
PHPUnitは、プロジェクトを作ったときに配置されています。
プロジェクトの直下にあるcomposer.jsonを確認するとデフォルトでインストールされています。
venderディレクトリにもphpunitディレクトリが配置されています。
"require-dev": { "beyondcode/laravel-dump-server": "^1.0", "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^2.0", "phpunit/phpunit": "^7.5" },
$ ls -l vendor/ | grep phpunit drwxr-xr-x@ 8 mana staff 256 4 24 23:47 phpunit
PHPUnitの設定をします。
(Macのターミナルを使う場合)PHPUnitのパスを通します。
# .bash_profileにphpunitのパスを書いて $ echo 'export PATH="/Path/To/vendor/phpunit/phpunit:$PATH"' >> ~/.bash_profile # 反映して $ source ~/.bash_profile # 確認します。 $ phpunit --version PHPUnit 7.5.9 by Sebastian Bergmann and contributors.
パスはbin配下ではなくphpunit配下を指定します。
以前PHPStormを使わなかった時は、PHPUnitのPathにbin配下を指定しました。
$ echo 'export PATH="/Path/To/vendor/bin/phpunit:$PATH"' >> ~/.bash_profile
今回はうまくいきませんでした。
$ echo 'export PATH="/Path/To/vendor/bin/phpunit:$PATH"' >> ~/.bash_profile $ source ~/.bash_profile $ phpunit --version -bash: phpunit: command not found
シンボリックリンクが貼ってあるけどだめなのですね。
$ ls -la vendor/bin/ total 32 drwxr-xr-x@ 6 mana staff 192 5 6 14:50 . drwxr-xr-x@ 47 mana staff 1504 5 6 14:43 .. -rwxr-xr-x@ 1 mana staff 6028 2 17 05:54 php-parse lrwxr-xr-x 1 mana staff 26 5 6 14:43 phpunit -> ../phpunit/phpunit/phpunit -rwxr-xr-x@ 1 mana staff 4305 10 14 2018 psysh lrwxr-xr-x 1 mana staff 51 5 6 14:43 var-dump-server -> ../symfony/var-dumper/Resources/bin/var-dump-server
composer.jsonにautoloadの定義があることを確認します。
定義がなければ環境に合わせて定義します。
"autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } },
対応付けのためのクラスマップ生成を行います。
# クラスマップ生成 $ composer dump-autoload Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/nexmo-notification-channel Discovered Package: laravel/slack-notification-channel Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. Generated optimized autoload files containing 3759 classes # 確認します $ cat vendor/composer/autoload_psr4.php <?php // autoload_psr4.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'), 'Zend\\Diactoros\\' => array($vendorDir . '/zendframework/zend-diactoros/src'), 'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), 'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'), 'Tests\\' => array($baseDir . '/tests'), 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Contracts\\' => array($vendorDir . '/symfony/contracts'), 'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'), 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), 'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'), 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), 'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'), 'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'), 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), 'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'), 'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'), 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), 'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'), 'Psy\\' => array($vendorDir . '/psy/psysh/src'), 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), 'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'), 'NunoMaduro\\Collision\\' => array($vendorDir . '/nunomaduro/collision/src'), 'Nexmo\\' => array($vendorDir . '/nexmo/client/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'), 'Lcobucci\\JWT\\' => array($vendorDir . '/lcobucci/jwt/src'), 'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'), 'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'), 'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'), 'Illuminate\\Notifications\\' => array($vendorDir . '/laravel/nexmo-notification-channel/src', $vendorDir . '/laravel/slack-notification-channel/src'), 'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'), 'Http\\Promise\\' => array($vendorDir . '/php-http/promise/src'), 'Http\\Client\\' => array($vendorDir . '/php-http/httplug/src'), 'Http\\Adapter\\Guzzle6\\' => array($vendorDir . '/php-http/guzzle6-adapter/src'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 'Fideloper\\Proxy\\' => array($vendorDir . '/fideloper/proxy/src'), 'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'), 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'), 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'), 'BeyondCode\\DumpServer\\' => array($vendorDir . '/beyondcode/laravel-dump-server/src'), 'App\\' => array($baseDir . '/app'), '' => array($vendorDir . '/nesbot/carbon/src'), );
PHPUnitの設定ファイルとなるphpunit.xmlを確認します。
自動でできるなんて素敵ですね。
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false"> <testsuites> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> </testsuites> <filter> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">./app</directory> </whitelist> </filter> <php> <env name="APP_ENV" value="testing"/> <env name="BCRYPT_ROUNDS" value="4"/> <env name="CACHE_DRIVER" value="array"/> <env name="MAIL_DRIVER" value="array"/> <env name="QUEUE_CONNECTION" value="sync"/> <env name="SESSION_DRIVER" value="array"/> </php> </phpunit>
PhpStormにPHPUnitを設定します。
テストコードを作る
以前作ったファイルを流用します。なのでLaravelのディレクトリ構成とかからとっても外れています。
qiita.com
テスト対象ソースのエディタ上からテストクラスを生成します。
継承しているクラスをPHPUnit\Framework\TestCaseへ変更します。
自動生成時はHPUnit_Framework_TestCaseとなっていますがエラーとなるため変更します。
tomomik.hatenablog.com
Macのデフォルトではバックスラッシュが円マークになる事があるので以下のサイトを見てバックスラッシュで記載します。
Macにおけるバックスラッシュ(\)の入力方法 - Qiita
<?php namespace App; use PHPUnit\Framework\TestCase; class controlStdClassArrayTest extends TestCase { // 省略
自動生成されたメソッドへテストコードを記載して保存します。
<?php namespace App; use PHPUnit\Framework\TestCase; class controlStdClassArrayTest extends TestCase { public function testCreateStdClassArrayNew() { $target = new controlStdClassArray(); $stdList = $target->createStdClassArrayNew(); foreach ($stdList as $std) { $this->assertInstanceOf(\stdClass::class, $std); } } // 省略
作ったテストコード用に設定を追加します。
はじめてAWSのEC2でUbuntuを作ってSSHとリモートデスクトップで接続した時の記録
ドキュメントどおりにやっていれば超簡単にできます。
が、無駄につまずくので記録します。
EC2インスタンスを作成してSSH接続します。
EC2インスタンスを作成します。
参考 : 仮想マシンの起動
- AWSマネジメントコンソールの[EC2]からEC2 コンソールを表示します。
- [インスタンス]でインスタンスの一覧を表示します。
- [インスタンスの作成]ボタンで作成画面を表示します。
- [次のステップ〜]ボタンで進めながら内容を入力していきます。以下以外は規定値のままとしました。
- [確認と作成]ボタンで確認画面を表示して内容を確認します。
- [起動]ボタンで鍵の作成について選択して[インスタンスの作成]ボタンでインスタンスを作成します。
- 作成にはちょっと時間がかかります。
SSH接続します。
- インスタンス作成時に取得した鍵の権限を設定します。
- インスタンスの一覧から作成したインスタンスを選択して詳細画面を表示し、インスタンスのIPv4パブリックIPを確認します。
- MacのターミナルなどでSSH接続します。
# ssh接続する方法 : ssh -i {作成した秘密鍵のファイルパス} {ユーザ名:AMIの種類で変わる}@{インスタンスのIPv4パブリックIP} $ ssh -i .ssh/key.pem ubuntu@{インスタンスのIPv4パブリックIP} The authenticity of host '{インスタンスのIPv4パブリックIP} ({インスタンスのIPv4パブリックIP})' can't be established. ECDSA key fingerprint is SHA256:Zxxx Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '{インスタンスのIPv4パブリックIP}' (ECDSA) to the list of known hosts. Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-1057-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue Feb 25 11:15:51 UTC 2020 System load: 0.0 Processes: 87 Usage of /: 13.6% of 7.69GB Users logged in: 0 Memory usage: 14% IP address for eth0: 172.31.17.109 Swap usage: 0% 0 packages can be updated. 0 updates are security updates. The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@ip-1xx-xx-xx-1xx:~$
aptコマンドでmysqlコマンドをインストールしてみました。
作ったUbuntu Serverにリモートデスクトップ接続できるようにします。
Ubuntu Server側を設定します。
aptの更新とユーザー作成をします。
# 1. SSHでログインします。 # 2. aptのリポジトリ一覧を更新します(-y : 問い合わせがあった場合はすべて「y」と答える) $ sudo apt update -y Hit:1 http://us-east-2.ec2.archive.ubuntu.com/ubuntu bionic InRelease Hit:2 http://us-east-2.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease Hit:3 http://us-east-2.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease Get:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB] #...省略... 32 packages can be upgraded. Run 'apt list --upgradable' to see them. # 3. インストール済みのパッケージを更新します。 $ sudo apt upgrade -y Reading package lists... Done Building dependency tree #...省略... Processing triggers for initramfs-tools (0.130ubuntu3.9) ... update-initramfs: Generating /boot/initrd.img-4.15.0-1060-aws # 4. リモートデスクトップ用にユーザーを作成します。 $ sudo adduser ponsuke Adding user `ponsuke' ... Adding new group `ponsuke' (1001) ... Adding new user `ponsuke' (1001) with group `ponsuke' ... Creating home directory `/home/ponsuke' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for ponsuke Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y # 5. 作ったユーザーをsudoグループに参加させます。 $ sudo gpasswd -a ponsuke sudo Adding user ponsuke to group sudo
デスクトップ環境をインストールします。
# 1. パッケージを検索します。 $ apt search ubuntu-desktop Sorting... Done Full Text Search... Done edubuntu-desktop/bionic 15.12.9 amd64 educational desktop for Ubuntu kubuntu-desktop/bionic 1.370 amd64 Kubuntu Plasma Desktop/Netbook system lubuntu-desktop/bionic-updates 0.94.1 amd64 Lubuntu Desktop environment qtubuntu-desktop/bionic 0.64+17.10.20170707-0ubuntu7 amd64 Qt plugins for Mir support on Ubuntu (desktop) ubuntu-desktop/bionic-updates 1.417.4 amd64 The Ubuntu desktop system xubuntu-desktop/bionic 2.225 amd64 Xubuntu desktop system # 2. ubuntu-desktopをインストールします。 $ sudo apt -y install ubuntu-desktop Reading package lists... Done Building dependency tree #...省略... Processing triggers for systemd (237-3ubuntu10.39) ... Processing triggers for ureadahead (0.100.0-21) ...
xrdpをインストールします。
xrdp とは
xrdp はオープンソースで開発されている Remote Desktop Protocol のサーバソフトウェアです。
フロントページ - 日本 xrdp ユーザ会
# 1. パッケージを検索します。 $ apt search xrdp Sorting... Done Full Text Search... Done xorgxrdp/bionic 0.9.5-2 amd64 Remote Desktop Protocol (RDP) modules for X.org xorgxrdp-hwe-18.04/bionic-updates 0.9.5-2~18.04.1 amd64 Remote Desktop Protocol (RDP) modules for X.org xrdp/bionic 0.9.5-2 amd64 Remote Desktop Protocol (RDP) server xrdp-pulseaudio-installer/bionic 0.9.5-2 amd64 Remote Desktop Protocol (RDP) server - PulseAudio module installer # 2. xrdpをインストールします。 $ sudo apt install -y xrdp Reading package lists... Done Building dependency tree #...省略... Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for ureadahead (0.100.0-21) ... # 3. バージョンを確認します。 $ xrdp -v xrdp: A Remote Desktop Protocol server. Copyright (C) Jay Sorg 2004-2014 See http://www.xrdp.org for more information. Version 0.9.5 # 4. new_cursorsを無効化します。 $ ls -la /etc/xrdp/ | grep xrdp -rw------- 1 xrdp root 2939 Mar 4 11:41 rsakeys.ini -rw-r--r-- 1 root root 4916 Feb 16 2018 xrdp.ini -rw-r--r-- 1 root root 3361 Feb 16 2018 xrdp_keyboard.ini $ sudo sed -e 's/^new_cursors=true/new_cursors=false/g' -i /etc/xrdp/xrdp.ini # 5. xrdpサービスを再起動します。 $ sudo systemctl restart xrdp # 6. xrdpサービスを有効化します。 $ sudo systemctl enable xrdp.service Synchronizing state of xrdp.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable xrdp $ sudo systemctl enable xrdp-sesman.service $ systemctl list-unit-files -t service | grep xrdp xrdp-sesman.service enabled xrdp.service enabled # 7. 作成したユーザーに切り替えます。 $ su ponsuke Password: To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. $ cd ~ $ pwd /home/ponsuke # 8. 環境変数を設定します。 $ DESKTOP=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop # 9. .xsessionファイルを作成します。 $ cat <<EOF > ~/.xsessionrc > export GNOME_SHELL_SESSION_MODE=ubuntu > export XDG_CURRENT_DESKTOP=ubuntu:GNOME > export XDG_DATA_DIRS=${DESKTOP} > export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg > EOF
Authentication Requiredダイアログを回避できるようにします。
Polkit(旧名PolicyKit)とは、Unix系オペレーティングシステムで、システム全体の権限を制御するためのアプリケーション開発ツールキットである。このライブラリによって、特権を持たないプロセスが、特権を持つプロセスと通信することができるようになる。
Polkit - Wikipedia
# 1. 設定します。 $ cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla > [Netowrkmanager] > Identity=unix-user:* > Action=org.freedesktop.color-manager.create-device > ResultAny=no > ResultInactive=no > ResultActive=yes > EOF [sudo] password for ponsuke: [Netowrkmanager] Identity=unix-user:* Action=org.freedesktop.color-manager.create-device ResultAny=no ResultInactive=no ResultActive=yes # 2. サービスを再起動します。 $ sudo systemctl restart polkit
セキュリティグループに設定を追加します。
Mac側を設定します。
リモートデスクトップアプリをインストールします。
- Apple StoreからMicrosoft Remote Desktop 10をインストールします。
Ubuntuへリモートデスクトップ接続します。
- Microsoft Remote Desktop 10を起動して[Add PC]ボタンで設定画面を開きます。
- 「インスタンスのIPv4パブリックIP」と「Ubuntuで作成したユーザー」を設定して[Add]ボタンで設定を追加します。
- 注意:今回はElasticIPアドレスを使用していないため、インスタンスを起動するたびにIPアドレスが変わります。なので、起動するたびにリモートデスクトップに設定するIPアドレスを変更する必要があります。
- 追加された設定をダブルクリックします。
- 初めての場合はダイアログが表示されるので[Connect]ボタンで進めます。
- Ubuntuに接続できました。
失敗したこと
Amazon Machine Image (AMI) で何を選択したかによってSSH接続する時のユーザ名が異なります。
ドキュメントの例では、
ですが初めて作ったインスタンスでは
でした。
これに気がつくのにかなり時間がかかりました。
xn--o9j8h1c9hb5756dt0ua226amc1a.com
インスタンスタイプが「t2.micro」では小さすぎた。
インスタンスタイプを「t2.micro」で作成しました。
SSH接続して作業するには問題なかったのですが、
デスクトップ環境をインストールしてリモートデスクトップ接続したところ
画面は表示されるものの全然動かない!
なので「t2.medium」に変更しました。
無料枠から外れてしまうのですが動かないよりはいいかと・・・。
サイドチャネル攻撃とテンペスト攻撃の違い
- 前回の勉強内容
- 勉強のきっかけになった問題
- サイドチャネル攻撃とテンペスト攻撃は、暗号装置を解析し暗号を盗む方法に使用されます。
- サイドチャネル攻撃は、動いている装置から出る電流や電磁波・振動を計測して暗号解析の手がかりを得る攻撃です。
- テンペスト攻撃は、サイドチャネル攻撃の種類の1つです。
- サイドチャネル攻撃には、他にも種類があります。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
テンペスト攻撃を説明したものはどれか。
- 故意に暗号化演算を誤動作させて正しい処理結果との差異を解析する。
- 処理時間の差異を計測して解析する。
- 処理中に機器から放射される電磁波を観測して解析する。
- チップ内の信号線などに探針を直接当て,処理中のデータを観測して解析する。
サイドチャネル攻撃とテンペスト攻撃は、暗号装置を解析し暗号を盗む方法に使用されます。
サイドチャネル攻撃は、動いている装置から出る電流や電磁波・振動を計測して暗号解析の手がかりを得る攻撃です。
- 英語 : Side Channel Attack
- 外部と隔離された機器でも攻撃される可能性があります。
テンペスト攻撃は、サイドチャネル攻撃の種類の1つです。
テンペスト攻撃は、機器やその周辺機器から出力される微弱な電磁波を計測して元情報を復元しようとします。
ディスプレイから発生される電磁波の放射レベルは強く、復号も容易になっています。
テンペスト技術とは?遠隔で不正に情報を傍受する技術への対策について
漏洩電磁波から画面表示を“再現”したパソコン・モニター
「10万円の受信機でパソコンからの漏洩電磁波を“盗聴”できる」――ISTがデモ | 日経 xTECH(クロステック)
サイドチャネル攻撃には、他にも種類があります。
電力解析攻撃は、機器の電力を計測します。
- 英語 : Simple Powering Analysis
- 別名 : SPA
故障利用攻撃は、故意に暗号化演算を誤動作させて正しい処理結果との差異を解析します。
- 別名 : フォールト解析攻撃
タイミング攻撃は、処理時間の差異を計測して解析します。
タイミング攻撃では、攻撃対象の処理の実装を分析して応答時間が変化する要因を見つけることで、入力とその応答時間から隠されたデータ(パスワードなど)の特定を試みます。
corgi-lab.com
プローブ解析は、チップ内の信号線などに探針を直接当て,処理中のデータを観測する破壊型解析です。
- 別名 : プロ―ビング
他にもCache攻撃、スキャンベース攻撃等色々あります。
次回の勉強内容
2進数の問題を見ると頭が混乱します。
前回の勉強内容
2進数の表現の問題
aを正の整数とし,b=aの2乗 とする。aを2進数で表現するとnビットであるとき,bを2進数で表現すると高々何ビットになるか。
- n+1
- 2n
- nの2乗
- 2のn乗
「高々」とは、「最大」のことです。
- 読み方 : たかだか
- bを2進数で表現すると高々何ビット = bを2進数で表現すると最大何ビット
数学において、高々(たかだか)という表現は、英語の at most に対応した厳密な意味を持つ用語である。
「xは高々2である」という表現は「xは多くとも2である」事、すなわち「x≦2」を意味する。
高々 (数学) - Wikipedia
超地道な解き方:「aを2進数で表現するとnビット」のnに値を入れて考えてみる。
- aが2bitだと、bの最大は1001で4bitになる
- aの最大 = (2進数)11 = (10進数)2 + 1 = (10進数)3
- bの最大 = aの2乗 = (10進数)9 = (10進数)8 + 0 + 0 + 1 = (2進数)1001 = 4bit
- aが3bitだと、bの最大は110001で6bitになる
- aの最大 = (2進数)111 = (10進数)4 + 2 + 1 = (10進数)7
- bの最大 = aの2乗 = (10進数)49 = (10進数)32 + 16 + 0 + 0 + 0 + 1 = (2進数)110001 = 6bit
- aが4bitだと、bの最大は11100001で8bitになる
- aの最大 = (2進数)1111 = (10進数)8 + 4 + 2 + 1 = (10進数)15
- bの最大 = aの2乗 = (10進数)225 = (10進数)128 + 64 + 32 + 0 + 0 + 0 + 0 + 1 = (2進数)11100001 = 8bit
- aが5bitだと、bの最大は1111000001で10bitになる
- aの最大 = (2進数)11111 = (10進数)16 + 8 + 4 + 2 + 1 = (10進数)31
- bの最大 = aの2乗 = (10進数)961 = (10進数)512 + 256 + 128 + 64 + 0 + 0 + 0 + 0 + 0 + 1 = (2進数)1111000001 = 10bit
なんかaを1bit増やすとbのbitが2bit(真ん中の10分)増える・・・だから「2n」ですね。
Webツールを使ってちょっと大きめの値で確認してみる
- aが20bitだと、bの最大は1111111111111111111000000000000000000001で40bit
- aの最大 = (2進数)1が20個並ぶ = (10進数)1048575
- bの最大 = aの2乗 = (10進数)1099509530625 = (2進数)1111111111111111111000000000000000000001 = 40bit
- 使ったWebツール
サイトで紹介されている解き方
nけたの正の整数aと、mけたの正の整数bを乗算(a×b)したときのけた数はそれぞれの数字のけた数の和(n+m)を超えることはありません。
この性質は10進数に限ったことではなく、2進数、16進数などでも同じです。また、2進数では必ずけた数の和になります。
問題では2進数nビット(けた)の正の整数aを二乗したときのけた数ですから、
(n+n)=2n
平成25年 春期 応用情報技術者 午前 問1
2進数でnビットの最大値は、1111...112ですね(1がn個)。
これを式変形します。
1111...112(※1がn個) = 1000...002(※(n+1)桁。1の後ろに0がn個) - 12
これを、10進数に直すと、
2n - 1
となります。
※注:簡単に導出しているように見えますが、実際には簡単な例(n=2のときとか)で確認しています。そうしたら、2乗しましょう。
(2n - 1)2
= 22n - 2 * 2n + 1これを2進数に直すと、
= 1000...0002(※(2n+1)桁。1の後ろに0が2n個)
- 100..002(※(n+1)桁。1の後ろに0がn個)
+ 12
となります。
計算後は、(2n+1)桁よりも小さな値になりますから、2n桁になります。
応用情報H25春 問1の解説 - だるまのエクセルVBA
ビット演算の応用問題
0以上255以下の整数nに対して、と定義する。next(n)と恒等的に等しい式はどれか。ここで,x AND y 及び x OR y は,それぞれxとyを2進数表現にして,けたごとの論理積及び論理和をとったものとする。
- (n+1) AND 255
- (n+1) AND 256
- (n+1) OR 255
- (n+1) OR 256
「恒等的に等しい」とは「どのような場合でも等しい」ということらしい
超地道な解き方:2進数にして論理演算してみます。
- nの最大値である255は2進数で書くと1111111となり、nは7bitで書ける範囲ということになります。
- n < 255の場合は、next(n) = n + 1 になります。
- n = 255の場合は、next(255) = 0になります。
- 以下表のようになる論理演算を選ぶわけです。
(10進数)n | (10進数)next(n) | (2進数)n | (2進数)next(n) |
---|---|---|---|
255 | 0 | 1111111 | 0000000 |
254 | 255 | 1111110 | 1111111 |
2 | 3 | 0000010 | 0000011 |
1 | 2 | 0000001 | 0000010 |
0 | 1 | 0000000 | 0000001 |
- 回答群から推理して (n + 1) と (255 か 256) の組み合わせの論理演算になるはずです。
- 論理演算下後に (n + 1) になるはずです。
- nを7として8bitの2進数表記(256を表すため)で試してみます。
(n+1) AND 255
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
255 | 011111111 |
AND | 0000100 |
(n+1) AND 256
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
256 | 10000000 |
AND | 0000000 |
(n+1) OR 255
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
255 | 011111111 |
OR | 011111111 |
(n+1) OR 256
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
256 | 10000000 |
OR | 1000100 |
- 答えは「 ( n + 1) AND 255 」です。
サイトで紹介されている解き方
定義式をみると、0なら1、1なら2と1ずつ足していって255だったら0にもどるという。いわゆる256進カウンタであることがわかります。これを2進数で考えます。255とは11111111です。ここで1を加えると0になるので100000000が0になる処理を考えると選択肢アが正解だとわかります。
平成18年度春期・ソフ開過去問・解説
ア 『(n +1)AND 255』は、255を2進数で表すと“1111 1111”なので、n =0のとき、next(n )=1になり、n =255のとき、next(n )=0になり、定義と一致する。
イ 『(n +1)AND 256』は、256を2進数で表すと“1 0000 0000”なので、n =0のとき、next(n )=0になり、定義と一致しない。
ウ 『(n +1)OR 255』は、255を2進数で表すと“1111 1111”なので、n =0のとき、next(n )=255になり、定義と一致しない。
エ 『(n +1)OR 256』は、256を2進数で表すと“1 0000 0000”なので、n =0のとき、next(n )=257になり、定義と一致しない。
平成18年 春期 ソフトウェア開発技術者 午前 問3
n が 255 の場合・・・
↓
255+1=256
↓
256と255は2進で
0001 0000 0000
0000 1111 1111
↓
これらの AND は
0000 0000 0000
で、ゼロになります。255未満で、例えば n が 254 については・・・
↓
254+1=255
↓
255と255は2進で
0000 1111 1111
0000 1111 1111
↓
これらの AND は
0000 1111 1111
で、255 。n+1 になりました。
恒等式 - 合格☆情報処理技術者試験
次回の勉強内容
勉強中・・・
OP25BをしているプロバイダにはサブミッションポートかSMTPSかSTARTTLSを使おう
前回の勉強内容
メールを送信する時にSMPTというプロトコルを使います。
SMTPとは、電子メールを伝送するための通信手順の一つです。
残念ながら、セキュリティにはいろいろ問題がありました。
そのために「POP before SMTP」「SMTP-AUTH」「OP25B」などの対策が行われています。
POP before SMTPとSMTP-AUTHは、ユーザー認証をしてからメールを送信する仕組みです。
OP25Bは、ネットワーク内から外部のコンピュータのTCPポート25番への通信を禁止します。
外部からメールを送信する場合にOP25BをしているプロバイダではTCPポート25番が使えません。
サブミッションポートは、メール送信専用に利用するTCPポート587番のことです。
- 英語 : submission port
OP25Bを実施しているプロバイダの場合はTCP25番ポートを通してのメール送信が出来なくなるけれど、このサブミッションポートを利用することで送信が可能となります。
サブミッションポートは、SMTP認証(SMTP-AUTH)と合わせて利用します。
TCPのサブミッションポート(ポート番号587)の説明として,適切なものはどれか。
SMTPSでは、TCPポート465番を使います。
SMTPSは、伝送路を暗号化するSSL/TLSをSMTPに組み合わせたプロトコルです。
通常のSMTPとは異なる専用のポート番号(465番)を用いて最初からSSL/TLSにより通信を開始する方式。
トランスポート層において、データ完全性、機密性と通信相手を認証する機能を提供する。
アプリケーション層でクライアントとサーバは通常のSMTPを利用するが、コネクション自体はSSLもしくはTLSによって保護される。この動作はコネクションの確立時に行われる。クライアントやサーバがコネクションを確立する際、SSLやTLSを利用するかどうかは分からないため、SMTPSのためのポート番号を割り当てることが一般的である。
SMTPS - Wikipedia
次回の勉強内容
いろんな攻撃手法を薄く広く知る
- 前回の勉強内容
- 今回の勉強内容 : いろんな攻撃手法を薄く広く知る
- Dos攻撃とDDos攻撃は、サーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。
- ブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してパスワードや鍵を見つける攻撃です。
- トロイの木馬とは、便利なソフトウェアに見せかけてユーザに被害を与える不正なプログラムです。
- サラミ法は、発覚しない程度に少量ずつの金銭や物品を窃取します。
- スキャベンジングは、日本語でゴミを漁るです。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : いろんな攻撃手法を薄く広く知る
勉強のきっかけになった問題
データの破壊,改ざんなどの不正な機能をプログラムの一部に組み込んだものを送ってインストールさせ,実行させるものはどれか。
ブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してパスワードや鍵を見つける攻撃です。
辞書攻撃は、パスワードによく使われる文字を片っ端から入力して不正ログインを試みます。
- 別名 : 辞書アタック、ディクショナリーアタック
もちろん手動では腱鞘炎になるのでツールを使ってガッツリ攻撃してきます。
ブルートフォース攻撃より「パスワードによく使われる文字」に絞るので効率は良いです。
トロイの木馬とは、便利なソフトウェアに見せかけてユーザに被害を与える不正なプログラムです。
- 英語 : Trojan Horse
便利なツールいろいろあるなぁ・・・って、よく確認しないと「トロイの木馬」に引っかかるです!
有用なソフトウェアに見せかけて配布された後,システムの破壊や個人情報の詐取など悪意ある動作をする。
平成24年春期問54 トロイの木馬の特徴|ITパスポート試験ドットコム
例えば・・・パソコン内部の秘密のファイルをインターネット上に送信したり、ファイルやディスク内容を破壊したりします。
感染機能は持っていませんので、感染増殖することはありません。が、そのためにワクチンソフトの検出対象外となります。
感染増殖はしないので、ワクチンソフトでは、基本的にトロイの木馬を検出の対象外としています。信頼できないサイトに便利なツールソフトウェアとして掲載されていても、そのプログラムはむやみにダウンロードして実行しないようにしましょう。
ウイルス用語辞典:IPA 独立行政法人 情報処理推進機構
サラミ法は、発覚しない程度に少量ずつの金銭や物品を窃取します。
不正行為が表面化しない程度に,多数の資産から少しずつ詐取する方法である。
平成25年秋期問43 サラミ法はどれか|基本情報技術者試験.com
銀行預金の利息を着服する
預金の利息計算時には必ず1円未満の端数が生じる。この端数は微々たるものであるが、全ての口座から端数を集めれば大金になる。
実際に1960年代後半、アメリカ・ニューヨークの銀行で、プログラムに細工をして1セント未満の端数処理を四捨五入からすべて切り捨てに変更し、切り捨てられた端数を自分の口座に振り込ませるように改鼠する事件があった。他人の口座から毎月1万円程度を不正に引き出す
スキミングなどの不正な手段によって他人のキャッシュカードのコピーを手にした人間が、1ヶ月あたり1万円 - 2万円以下の額を不正に引き出していた。
架空の電子商店をでっちあげてクレジットカード番号を大量に集め、大勢の人から少額ずつ詐取した事例がある。不正に引き落とされた金額は一人あたりではごく少額だったため、ほとんどの人はカードが不正に使われたことに気が付かなかった。
サラミ法 - Wikipedia
スキャベンジングは、日本語でゴミを漁るです。
- 英語 : scavenging(scavenge : ゴミを漁る)
- 別名 : ゴミあさり、トラッシング、ダンプスターダイビング
プログラム実行後のコンピュータ内部又はその周囲に残っている情報をひそかに探索して,必要情報を入手する方法である。
平成25年秋期問43 サラミ法はどれか|基本情報技術者試験.com
ソーシャルエンジニアリングの1つでもあります。
次回の勉強内容
状態遷移から知る有限オートマトン
- 前回の勉強内容
- 今回の勉強内容 : 状態遷移図を使って有限オートマトンを知る
- 無効と有効の状態遷移をテストする状態遷移テストというものがあります。
- オートマトンは、入力から内部の状態と規則に従い結果を出力する仮想的な自動機械です。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : 状態遷移図を使って有限オートマトンを知る
勉強のきっかけになった問題
次の表は,入力記号の集合が{0,1},状態集合が{a,b,c,d}である有限オートマトンの状態遷移表である。長さ3以上の任意のビット列を左(上位ビット)から順に読み込んで最後が110で終わっているものを受理するには,どの状態を受理状態とすればよいか。
1. a 2. b 3. c 4. d
平成18年秋期問7 有限オートマトンの状態遷移表|応用情報技術者試験.com
無効と有効の状態遷移をテストする状態遷移テストというものがあります。
- 英語 : state transition testing
ブラックボックステストの設計技法の一つ。無効と有効の状態遷移を実行するテストケースを設計する。
JSTQBソフトウェアテスト標準用語集
状態遷移をテストするには状態の遷移を整理するために図と表を使用します。
状態遷移図は、発生する可能性のあるイベントとその結果の状態を図にしたものです。
- 英語 : state diagram
- 特徴
- 「できること」を表現する
- 状態遷移の流れを容易に把握できる
- 図示することによって新たな発見がある
- どこへの遷移もしない状態 / 複数の異なる状態に遷移するイベント
- 状態遷移に関する仕様の不備にだって気がつく
コンポーネント又はシステムが取りうる状態を示し、ある状態から他への状態の変化の原因となる、(又は)その結果として生ずる、イベントや状況を表すダイアグラム。
JSTQBソフトウェアテスト標準用語集
A diagram that depicts the states that a system or component can assume, and shows the events or circumstances that cause or result from a change from one state to another.
IEEE 610Standard Glossary of Software Engineering Terminology
図はマルチタスクで動作するコンピュータにおけるタスクの状態遷移を表したものである。実行状態のタスクが実行可能状態に遷移するのはどの場合か。
- 自分より優先度の高いタスクが実行可能状態になった。
- タスクが生成された。
- 入出力要求による処理が完了した。
- 入出力要求を行った。
平成23年秋期問20 タスクの状態遷移|基本情報技術者試験.com
状態遷移表は、発生する可能性のあるイベントと状態の組み合わせから生じる結果を示す遷移をテーブルで表したものです。
- 英語 : state table
- 無効な遷移と、有効な遷移の両方を示します。
- 特徴
- 「できないこと」を洗い出せる
- 仕様があいまいな個所に潜む欠陥を発見できる
- 全ての状態と全てのイベントを組み合わせるので、仕様のあいまいな個所を特定できる
- 状態遷移図の不備を見つけることができる
次の表は,文字列を検査するための状態遷移表である。検査では,初期状態をaとし,文字列の検査中に状態がeになれば不合格とする。
解答群で示される文字列のうち,不合格となるものはどれか。ここで,文字列は左端から検査し,解答群中の△は空白を表す。
ア. +0010 イ. -1 ウ. 12.2 エ. 9.△
平成18年春期問9 状態遷移表|基本情報技術者試験.com
図は,偶数個の1を含むビット列を受理するオートマトンの状態遷移図であり,二重丸が受理状態を表す。a,bの正しい組合せはどれか。
回答群
平成25年春期問3 オートマトンの状態遷移図|応用情報技術者試験.com
状態遷移図と状態遷移表は、各メリットを合わせてお互いを見合わせながら整理することでテストケースを洗い出す事ができます。
状態遷移図では動作を想定しながら作るので「できること」に着目しがちですが、状態遷移表は状態とイベントを網羅的に組み合わせるので「できないこと」にも気が付けるのです。
性格が違うのだからどちらかあればいいってわけではないのですね。
オートマトンは、入力から内部の状態と規則に従い結果を出力する仮想的な自動機械です。
- 英語 : automaton
入力と状態の数がある程度決まっているのが有限オートマトンです。
- 別名 : 有限状態機械
有限個の状態と遷移と動作の組み合わせからなる数学的に抽象化された「ふるまいのモデル」である。
デジタル回路やプログラムの設計で使われることがあり、ある一連の状態をとったときどのように論理が流れるかを調べることができる。有限個の「状態」のうち1つの状態をとる。ある時点では1つの状態しかとらず、それをその時点の「現在状態」と呼ぶ。
何らかのイベントや条件によってある状態から別の状態へと移行し、それを「遷移」と呼ぶ。それぞれの現在状態から遷移しうる状態と、遷移のきっかけとなる条件を列挙することで定義される。
有限オートマトン - Wikipedia
図で表される有限オートマトンで受理される文字列はどれか。ここでは初期状態を,受理状態を表す。
ア 01011 イ 01111 ウ 10111 エ 11110
平成18年秋期問11 有限オートマトン|基本情報技術者試験.com
勉強のきっかけになった問題も状態遷移図を書いてみるとわかりやすいです。