【E資格対策】Python入門
( ..)φメモメモ
型変換
x = 1.2345 int(x)
for文
for i in range(10): # 処理 for j in range(開始, 終了, 変化): # 処理
list
pythonのリストは色々な型を詰められる
list = ["str1" , 1, "str2", 2] list.append("str3") list.append(3) list ### ['str1', 1, 'str2', 2, 'str3', 3]と表示される
リスト名[開始 : 終了 : 変化]
※終了の条件は≦(以下)ではなく、<(未満)
※変化の項をなくすと、+1の意味
リストのインデックスは正と負2種類の指定方法が存在する
- 先頭から数える場合は正(一番左は0)
- 最後尾から数える場合は負(一番右は-1)
csv取り込み
import csv with open('XXXXX.csv', encoding="utf-8_sig") as f: loader = csv.reader(f) # loaderはcsvのインスタンスを保持 for line in loader: # lineには列の要素、配列として取り出せる
【Android講座】第4回 ライフサイクルと画面遷移
Lesson 4で学ぶこと
- ライフサイクルについて
- 画面遷移(Activity間)
- Step by Stepで実装
↓ Lesson4 アプリ
ライフサイクルについて
画面遷移(Activity間)
Activityの開始
Intent intent = new Intent(context, SubActivity.class); startActivity(intent);
Activityの終了
finish();
Lesson 4 Step by Step実装
基本の流れ
- 画面作成(Activityやlayoutの追加)
- 画面調節(パーツの追加や位置調節)
- イベント処理(ボタン押下された等)
- 画面更新(表示する、消去する等)
画面作成
EmptyActivityを選択して、新規にLesson4Activity.java
とLesson4SubActivity.java
を追加する
画面修正
それぞれの画面にTextViewとButtonを配置する
イベント処理&画面更新
◆Lesson4Activity.java
Button button = findViewById(R.id.lesson4_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // SubActivityの開始 Intent intent = new Intent(getApplicationContext(), Lesson4SubActivity.class); startActivity(intent); } });
◆Lesson4SubActivity.java
Button button = findViewById(R.id.lesson4_sub_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // SubActivityの終了 finish(); }
code
【Android講座】第3回 ListViewの基本的な使い方
Lesson 3で学ぶこと
- パーツ(ListView)について
- Step by Stepで実装
↓ Lesson3 アプリ
パーツについて
ListView
要素(Item)をリスト上に表示するView
◆ListViewの実装方法
- Itemを用意する
→ArrayListやarray-stringで定義する - Adapterを用意する
→ArrayAdapterにリストItemのレイアウトを設定して、1で作成したItemをセットする - ListViewに表示する
→ListViewに2で作成したAdapterをセットする
Androidでは、下記のテキストが一つ入るItemのリストを用意されている。
android.R.layout.simple_list_item_1.xml
: TextViewが一つ配置されているシンプルなリスト。
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:minHeight="?android:attr/listPreferredItemHeightSmall" />
Lesson 3 Step by Step実装
基本の流れ
- 画面作成(Activityやlayoutの追加)
- 画面調節(パーツの追加や位置調節)
- イベント処理(ボタン押下された等)
- 画面更新(表示する、消去する等)
画面作成
EmptyActivityを選択して、新規にLesson3Activity.java
を追加する
画面修正
ListViewを配置する
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Lesson3Activity"> <ListView android:id="@+id/lesson3_list_view" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout_editor_absoluteX="161dp" tools:layout_editor_absoluteY="303dp" /> </androidx.constraintlayout.widget.ConstraintLayout>
ListViewを取得
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lesson3); // Viewを取得 ListView listView = findViewById(R.id.lesson3_list_view); }
Adapterを作成
// Adapterを作成する////////////////////////////////////////////////////////// // 方法1 : 表示するリストを動的に作成 List<String> listItems = new ArrayList<>(); listItems.add("月曜日"); listItems.add("火曜日"); listItems.add("水曜日"); ListAdapter adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItems); // 方法2 : 表示するリストを静的に作成 ListAdapter adapter2 = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.week) // 方法3 : 方法2の別の方法。Resourceからの参照する際に使える。 ListAdapter adapter3 = ArrayAdapter.createFromResource(this, R.array.week, android.R.layout.simple_list_item_1); ////////////////////////////////////////////////////////////////////////////
イベント処理
ボタンが押下された際の処理を追加
// ListItemが押下された時の処理を追加する listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView textView = (TextView) view; Toast.makeText(Lesson3Activity.this, textView.getText(), Toast.LENGTH_SHORT).show(); } });
画面更新
// 作成したAdapterをListViewに表示
listView.setAdapter(adapter1);
code
【Udemyメモ】ホワイトハッカー入門
Udemy講義のメモ www.udemy.com
セクション1 はじめに
ホワイトハッカーについて学ぼう
セクション2 情報セキュリティとホワイトハッカー
ホワイトハッカーとは
ホワイトハッカー(Ethical Hacker)の役割
- 防御
- 監視
- 検出
- 分析
- 対応
知識×技術×倫理観
ホワイトハッカーはクライアントから承諾を得ていること!!
プロフェッショナルとしての自覚と行動が必要!
攻撃方法だけではく、防御する方法を学ぶ必要もある。
ハッカーとクラッカー
クラッカー:クライムハッカー
Q . なぜ攻撃するのか?
A . 攻撃の方法と脆弱性がわかり、攻撃するだけの動機があるから。
攻撃 = 方法 + 脆弱性 + 動機
→動機 > 倫理感を上回ったとき、攻撃になる
情報セキュリティの基礎
セキュリティの三大要件
- C : Confidentiality 機密性
- I : Integrity 完全性・整合性
- A : Availability 可用性
例)宝箱
この三つの要求を満たすためにセキュリティの技術がある
セキュリティポリシー
国や自治体の法律や規制あった上で。
その後、基準・規格、ガイドラインの作成がいる。
例) * ISO/IEC 27XXXX セキュリティに関する国際規格 * PCI-DSS クレジットカード業界のセキュリティ規格
セキュリティの検証と評価
★脆弱性の管理・評価はMUST
→ペネトレーションテスト
情報セキュリティの防御
- 予防フェーズ
- 運用フェーズ
- 対処フェーズ(インシデント沖田と大木)
影響範囲
リスクレベル
リスクマトリックス
防御方法の検討
多層防御→情報資産に至るまでのそれぞれの層で防御する
IDS/IPS
- IDSは侵入の検出のみ
- IPSは侵入を検出し、防止する
- ネットワーク型・ホスト側がある。
UTM
複数のセキュリティ検知技術を統合するWAF
Web Application Firewall監視・分析
False Positive → 誤検知・過剰検知
False Negative → 見落とし(あってはならない)評価・検証
IH&R (Incident Handing and Respone)
フォレンジック調査
ハッキングの手法
CEHにおけるハッキングフェーズ
- 偵察 (Reconnaissance)
公開されている情報 - スキャニング (Scanning)
不正アクセスになりうる情報 - アクセス権の取得 (Gaining Access)
認証機能を利用する。権限昇格。 - アクセスの維持 (Maintaing Access)
いつでも入れるように、バックドアを作る - 痕跡の消去 (Clearing Tracks)
侵入した痕跡を消す
かならず準備をするハッカーたち。
偵察行為、深い情報を得ていく。効率がいいから。
効率の良い攻撃→アクセス権の取得が少ない。
ソーシャルエンジニアリングを使い効果的にやることが多い。
攻撃の目的と手法
動機によって目的(目標)は変わる。
例)ECサイト。アクセス権<DOS攻撃
攻撃の対象(効率が良いものを選ぶ)
- ホスト→サーバへの攻撃、後処理、マルウェア
- ネットワーク→DoS攻撃、ネットワーク盗聴
- アプリケーション→Webアプリケーション攻撃
- 他→各種偽装、ソーシャルエンジニアリング
ホワイトハッキングの活用
攻撃者と同等のスキルを持っている ↓ 脆弱性管理のフェーズ
脆弱性の検出
資産の優先順位付け
評価(攻撃)
レポート(検出した脆弱性)
軽減と改善(改善できるか?)
検証(効果があるかを確かめる。評価と同じことを行う)
やることは同じ。
ホワイトハッキング | ハッキング |
---|---|
脆弱性の検出 | スキャニング |
資産の優先順位付け | 列挙 |
評価 | 攻撃 |
レポート | - |
軽減と改善 | - |
検証 | 攻撃 |
脆弱性の評価は必要不可欠!!!
教育・助言も仕事の内。
【AndroidTraining】ListView 3
Lesson
ListView 3
Training
下記の仕様を満たすアプリを作りましょう。
- 独自List(ImageViewとTextView)を作成して表示する
Snap Shot
Step by Step
1. 新規に画面を追加
ListViewを配置する
activity_training_list_view_actvity2.xml
を見る
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".TrainingListViewActivity2"> <ListView android:id="@+id/list_view_2" android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
2. 独自リストのレイアウト作成
ImageViewとTextViewを配置する
image_text_list_item.xml
を見る
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:id="@+id/list_item_image" android:layout_width="70dp" android:layout_height="70dp" app:srcCompat="@android:drawable/alert_dark_frame" android:contentDescription="@string/list_item_image_description" /> <TextView android:id="@+id/list_item_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" /> </LinearLayout>
3. 独自リストのアイテムを格納するクラスを作成
ImageTextListItem.java
を見る
/** * ImageViewとTextが配置されたリストに使うアイテム */ public class ImageTextListItem { private Bitmap mImage; private String mText; /** * Constructor. * * @param image 画像 * @param text テキスト */ public ImageTextListItem(@NonNull Bitmap image, @NonNull String text) { mImage = image; mText = text; } // alt + insert(Getter and Setter)で自動追加できる public Bitmap getImage() { return mImage; } public void setImage(Bitmap mImage) { this.mImage = mImage; } public String getText() { return mText; } public void setText(String mText) { this.mText = mText; } }
4. ArrayAdapterを継承した独自リストのためのAdaperクラスを作成
ImageTextListAdapter.java
を見る
/** * {@link ImageTextListItem}のアダプター。 */ public class ImageTextListAdapter extends ArrayAdapter<ImageTextListItem> { private final int mResource; private final List<ImageTextListItem> mItems; private final LayoutInflater mInflater; /** * {@inheritDoc} */ public ImageTextListAdapter(@NonNull Context context, int resource, @NonNull List<ImageTextListItem> items) { super(context, resource, items); mResource = resource; mItems = items; mInflater = LayoutInflater.from(context); } /** * {@inheritDoc} */ @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { View view; if (convertView != null) { view = convertView; } else { view = mInflater.inflate(mResource, null); } // リストに表示するアイテムを取得 ImageTextListItem item = mItems.get(position); // Imageを設定 ImageView image = view.findViewById(R.id.list_item_image); image.setImageBitmap(item.getImage()); // Textを設定 TextView text = view.findViewById(R.id.list_item_text); text.setText(item.getText()); return view; } }
5. 独自リストの中身を作成と表示
TrainingListViewActivity2.java
を見る
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_training_list_view_actvity2); // ListViewを取得 ListView listView = findViewById(R.id.list_view_2); // リストに表示するアイテムを作成 ArrayList<ImageTextListItem> listItems = new ArrayList<>(); for (int i = 0; i < 3; i++) { Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.gohan); String text = "List item " + i; ImageTextListItem item = new ImageTextListItem(image, text); listItems.add(item); } // 作成したリストを表示する ImageTextListAdapter adapter = new ImageTextListAdapter(this, R.layout.image_text_list_item, listItems); listView.setAdapter(adapter); }
Code
ListView 2 · atuyan39/AndroidTraining@d202ae9 · GitHub
Reference
Memo
先人の知恵はすごい。
そして、ListView3だったのに、ListView2でコード作っている。
うまい管理方法を最終的には見つけたいが、今は気のまま実装しよう。
【Android講座】第2回 EditText, Log, Toastの基本について
Lesson 2で学ぶこと
- パーツ(EditText)について
- Log出力
- Toast表示について
- Step by Stepで実装
↓ Lesson2 アプリ
パーツについて
EditText
ユーザーの入力を補助するView
Lesson 2 Step by Step実装
基本の流れ
- 画面作成(Activityやlayoutの追加)
- 画面調節(パーツの追加や位置調節)
- イベント処理(ボタン押下された等)
- 画面更新(表示する、消去する等)
画面作成
EmptyActivityを選択して、新規にLesson2Activity.java
を追加する
画面修正
TextView, EditText, Buttonを配置する
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Lesson2Activity"> <TextView android:id="@+id/lesson2_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toTopOf="@+id/lesson2_edit_text" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/lesson2_edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:hint="@string/lesson2_edit_hint" android:autofillHints="@string/lesson2_edit_hint" app:layout_constraintBottom_toTopOf="@+id/lesson2_button" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lesson2_text_view" /> <Button android:id="@+id/lesson2_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/lesson2_button" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/lesson2_edit_text" /> </androidx.constraintlayout.widget.ConstraintLayout>
イベント処理
ボタンが押下された際の処理を追加
@Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_lesson2); // Viewを取得 TextView textView = findViewById(R.id.lesson2_text_view); EditText editText = findViewById(R.id.lesson2_edit_text); Button button = findViewById(R.id.lesson2_button); // Button押下時の処理を追加 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // ボタン押下時の処理を追加 } }); }
画面更新
// Log出力 Log.d(TAG, "input text:" + editText.getText()); // TextViewに入力されたテキストを表示させる textView.setText(editText.getText()); // Toast表示 Toast.makeText(getApplicationContext(), editText.getText(), Toast.LENGTH_SHORT).show();
code
【AndroidTraining】ViewModel 1
Lesson
ViewModel 1
Mission
下記の仕様を満たすアプリを作りましょう。
- ViewModelを使い、カウントアップさせる
Snap Shot
◆テスト
- 画面を回転しても、カウントアップが継続すること
- 画面がバックグラウンドへ移動しても、カウントアップが継続すること
Step by Step
1 . テンプレートから、New > Activity > Fragment + ViewModelを選択して、TrainingViewModelActivity
を新規に追加する
2 . FragmentのレイアウトファイルにTextView, Buttonを追加する
3 . ◆ViewModelの実装を行う
4 . LiveDataを定義する
private MutableLiveData<String> mText;
5 . ViewからLiveDataを取得できるようにメソッド追加
@NonNull public MutableLiveData<String> getText() { if (mText == null) { mText = new MutableLiveData<>(); // 必要であれば、初期化する。 // setValueはメインスレッドからLiveDataに通知する際に使う。 mText.setValue("Ready?"); } return mText; }
6 . ボタン押下を契機とする、非同期の処理を追加(カウントアップ)
public void onClickButton() { new Thread(() -> { for (int i = 0; ; i++) { String text = "count:"; try { Thread.sleep(THREAD_SLEEP_TIME); // postValueはメインスレッド以外からLiveDataに通知する際に使う。 mText.postValue(text + i); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); }
7 . ◆View(Fragment)の実装を行う
8 . ViewModelProviderを取得し、TrainingViewModelのインスタンスを保持する
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // テンプレートだとonActivityCreatedでViewModelの生成をしているが、 // 再描画されても同じViewModelを使えるようにonCreateへ移動(公式もonCreate推奨) mViewModel = new ViewModelProvider(this).get(TrainingViewModel.class); }
9 . onCreateView内でレイアウトを指定する(テンプレート作成される)
@Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.vm1_main_fragment, container, false); }
10 . Viewの取得とButton押下時の処理を追加
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Viewを取得 TextView textView = view.findViewById(R.id.vm1_text_view); Button mButton = view.findViewById(R.id.vm1_button); // Buttonの押下時の処理を追加 mButton.setOnClickListener(v -> mViewModel.onClickButton()); }
11 . LiveDataの取得と監視、そして変更時のTextViewへの描画を行う
// LiveDataの取得と監視 mViewModel.getText().observe(this, new Observer<String>() { @Override public void onChanged(String s) { // LiveDataに変更があった時の処理を追加 textView.setText(s); } });
Code
ViewModel 1 · atuyan39/AndroidTraining@c774d64 · GitHub
Reference
Memo
ViewModelは大きいテーマの一つなので、学びを深めていきたい。