モスクワ生活 ~家探し編~
現地の駐在員に聞いたところ、みなさん次のサイトを用いて家探しをしたとのこと。
1週間事前出張(引継ぎ出張)のためロシア入りしていたので、週末に本サイトを見てみると 「がーん、ロシア語のみ」。仕方ないので、気合を入れフィーリングで本サイト内をGoogle翻訳を利用しながら調べていくと、最寄駅を中心とした検索箇所を発見し、物件リストを見ることに成功。出張時は家探しをする時間が殆どなかったので、1つの物件に絞り込みオーナーとアポを取り(正確には、ロシア語が話せないので会社のスタッフに協力してもらいアポを取り)下見を実施。満足できたのでオーナーと来月からよろしく!という固い握手を交わして帰国したところまでは良かったのですが、、、、
その後オーナーから 「今住んでいる人がまだ出ていかないからもう少し待ってくれ」と訳の分からない連絡を日本で受けました。。がーーん。しかも赴任の1週間前に。(直接ロシア語で会話できていないから何とも言えませんが、今思うとなんともイケていないオーナーだった気がします。)
他の物件を見ていなかったため、上記Webサイトで候補物件を検索し、モスクワにいる会社のスタッフに 「この物件空いている?来週から入れそうかな?」 というやり取りを繰り返し、会社のスタッフの強力なサポートもあり、渡航直前の2日前(金曜日)に何とか物件候補を決めした。ここからが自分らしいと思うのですが、翌月曜日(現地での業務開始日初日)のAM10時からオーナーと契約を取り交わす約束をし、無事家探しに終止符を打ちました。(自分の住む家を一度も下見しないまま契約しました。Web情報のみで。)
今回は単身赴任ということもあり、かつ家を早く決めないと会社のスタッフの方にも迷惑がかかる(言葉の問題もあり一人で家探しが出来ない)ということもあったため、普通の人からすると驚かれるかもしれませんが上記の流れで家を決めました。
幸い私が契約したオーナーさんは、とても親切なドイツ人の旦那さん&ロシア人の奥さんだったため、結果とてもラッキーでした。
モスクワ生活 ~準備編~
赴任前の準備として、就労VISA取得に向けた準備を2ヵ月程前からスタート。通常ロシア入国に必要なVISAを取得するためには、パスポートの残存期間が6ヵ月以上残っている必要があるが、就労VISA取得のためには3年以上(※1)残っていることが望ましいとのこと。
※1:MultiVisa利用時の有効期限が約3年弱となっているので、最低その期間以上残っていた方が望ましいと私なりに解釈。(パスポートの残存期間が短い場合、赴任後パスポートに紐づく労働許可省等の再手続リスクを回避するためにも、赴任期間中はパスポート更新する必要がないよう準備が必要。)
ところが私の場合、パスポートの残存期間が13ヵ月であったため、有楽町のパスポートセンターでパスポート更新を行う必要が出てきた。ここで問題が。通常残存期間が12ヶ月以上ある場合、別途理由書なるものを会社の押印付きで提出する必要がある。私の場合、社員サービスセンタに相談をするも返信が全く貰えなかったため、現法社長から残存期間が必要な旨のメールをエビデンスとして提出することで、何とか申請を受理してもらえた。(イレギュラー対応となるため、パスポートセンタの偉い方に相談して対応した方がよい。フロントの方だと、ルールとは違いますという事で相手にして貰えない可能性あり。)
上記に加えて、予防接種を3セットを打つ必要があるため、こちらについても早めの対応が必要。(合計で約1ヵ月間程度の時間が必要なので、早めに準備を開始する必要あり。)
尚、HIV検査結果(Negative)の提出も就労VISA申請時に義務付けられているため、人生で初めてHIV検査も実施。もちろん結果は「陰性」でした。
迷惑メール対策 : SPF, DKIM, DMARC
迷惑メール対策としての情報がわかりやすくまとまっているサイトがあったため、記載しておきます。
【URL】: http://itpro.nikkeibp.co.jp/atcl/column/17/100400412/?rt=nocnt
Python学習_その3
1年前に下書きした文章を見つけたので..... 久々に更新してみます
【関数例】:AUGC を入力すると、結果はATGCとなる。
(補足):U_to_T関数にAUGCを入れる。初めResult は空であり、AUGC を1文字づつif文を用いてチェックする。
---------------------------------
def U_to_T(nucs):
result = ''
for nuc in nucs:
if nuc == 'U':
result = result + 'T'
else:
result = result + nuc
return result
print(U_to_T('AUGC'))
---------------------------------------------
【コマンドライン引数】
【その他】:利用しているPython のバージョンを確認する
#python -V
python 2.7.12
【その他】:日本語のコメントを入力する
冒頭に次の宣言(UTF-8)を利用することを宣言するとエラーが出ずに日本語のコメントを書くことができる。
#!/usr/bin/python ← python が配置されているディレクトリの定義
# .*. coding: utf-8 .*. ← 日本語を利用するための宣言
【その他】:vim/vi エディタの環境整備方法
起動時にvim の設定ファイルを自動起動させるために、自分のホームディレクトリに次のコマンドを実行する。
vim ~/.vimrc
【その他】:Pythonのコード規約
・PEP8 ( Style Guide for Python Code):スクリプトがPEP8に準拠しているかチェックする。
・autopep8:スクリプトをPEP8に準拠した内容に修正する。
picoCTFにチャレンジ_no2
Web Exploitation JavaScrypt 40Point
該当WebページをChromeの開発ツールでソースコードを確認。
var key; // Global variable.
// Since the key is generated when the page // is loaded, no one will be able to steal it // by looking at the source! This must be secure!
function generateKey() {
var i = 1;
var x = 298;
var n = 5493;
while (i <= 25) { x = (x * i) % n; i++; }
key = "flag_" + Math.abs(x); }
generateKey();
// Encode the message using the 'key'
function encode() {
var input = $("#inputmessage").val();
var output = CryptoJS.AES.encrypt(input, key);
$("#outputmessage").val(output); }
上記のJavaScryptoを実行すればFlagが獲得できそうなことは判明したため、
下記の情報を参考にしながらJavaファイルを作成。ファイル名とClass名が異なっていたため、コンパイルエラーが発生したが、その点を修正し、 #javac Javascrypt.java でコンパイルを通し、 java Javascrypt にてFlagをGET。地道に努力してプログラムスキルを向上させないと・・・ 答えを見ながら試行錯誤しているがとても勉強になる!
(参考)URL
picoCTFにチャレンジ_no1
PicoCTFとは:
米国カーネギーメロン大学が開発したセキュリティ人材を主眼に置いたオンラインで参加可能なCTF形式の教育コンテンツ。Web/ソフトウェア/フォレンジック/暗号/脆弱性を中心にコンテンツが準備されている。
XORの問題: Pythonを利用して暗号化されているデータの複合を行う問題
-----------------------------------------------------
from collections import Counter ;
frequency = Counter( )
with open('encrypted', 'r') as f:
data = f.read() ;encrypted ファイルをすべて読み込み、dataに格納
for ch in data:
frequency[ch] += 1
c = frequency.most_common(10)[0][0] ;most_commonメソッドを用いて、多い要素10個を取り出し
m = ' '
print (repr(c) + ' decrypts to ' + repr(m)) ; 特に本行は必要なし
def xor(input_data, key):
result = ""
for ch in input_data:
result += chr(ord(ch) ^ ord(key)) ; "^" : 排他的論理和を示す
return result
k = xor(c, m)
print (xor(data, k))
-----------------------------------------------------
[参考URL]
http://www.lifewithpython.com/2014/05/python-count-elements-in-lists.html
Python学習_その2
Python学習_その1の続きです。(そろそろ配列という言葉も登場し、挫折ポイントが登場してきました。)
【リストとタプル】:Perl の配列に相当するものとのこと。。
・リストやタプルとは?: Perl の配列に相当するもの。
リスト:作成後に編集可能。 ※迷ったらリストにした方が良い。(🔰)
(書き方): x = [1, 2, 3]
タプル:最初に作成したものを後から変更ができない。
(書き方): x = (1, 2, 3)
※尚コマンドを用いて、タプル→リストに変換することは可能。
【出力結果を改行せずに表示する方法】
・文字列「Hello」 と「Python」 を表示する場合、特に考慮せずに print すると改行ありとなってしまう。
[改行ありのケース]
for w in [ 'Hello', 'Python'] ==> 結果 Hello
print (w) Python
[改行なしのケース]
for w in [ 'Hello', 'Python'] ==> 結果 Hello, Python
print w, ←ここがポイント
・コメントを挿入する場合
#:この列がコメント列として認識される。
「”」ダブルクウォーテーション or「 '」シングルクウォーテーション を
3つ以上並べて書く。(始まりと終わりに)
【辞書 ( x ) を用いての表示方法】※辞書を用いるときは、下記のような条件に合致する件数を調べたい時に利用するとのこと。。まだイマイチ理解できていない orz..
------------------------------------------------------------------------
x = {'even':0, 'odd':0} ## even, odd というキー
for i in [1,2,3,4,5]:
print ('i=' +str(i)) ## 処理を確認するために入れた表示
if i % 2 ==0: ## i を2 で割った余りが 0 であるならば
x['even'] += 1 ## 左記は、 x['even'] = x['even'] + 1 を意味する
y = x['even']
print ('y='+str(y))
else:
x['odd'] += 1
z = x['odd']
print ('z='+str(z))
print ('even=' + str(x['even']))
print ('even=' + str(x['odd']))
--------------------------------------------------
【勉強に利用したコンテンツ】
https://www.youtube.com/watch?v=FQabMlA5esM
2.
Pythonで学ぶ 基礎からのプログラミング入門 (1) Pythonでプログラミングを学ぶ理由とは? | マイナビニュース
3. Pythonを勉強するための教材
http://ww1.pep8-ja.readthedoc.org/ja/latest