ฅxωxฅ@すてネコ

自己推薦一覧

自己推薦はありません

3年後の目標や野望


セキュリティエンジニア目指して邁進

セキュリティは、幅広くそこそこ深く(特化まではいかない)知識を求めます。 (ゼネラリスト寄りのスペシャリストのような矛盾を感じる) 色々と手を出してみたい自分には向いていると思うので、休暇などの空いている時間に勉強しながらセキュリティエンジニアもどきを目指して多方向の知識を吸収していきます。 (それによって、自分が他者の持ってる能力を評価できるようになれることも期待してます) ある程度基礎を固めたらバイナリ解析などの知識を深くやっていければ良いかなと...

年収評価シート

2017年/半年以内

社内検証用環境/IntelNUCを使ったESXi基盤構築+CiscoVIRLの構築

--------------------------------------- * **目的** * Intel NUC(ネクスト・ユニット・オブ・コンピューティング) に持ち運び可能なベアメタルハイパーバイザ環境を導入し、その上で仮想マシンやコンテナを構築テストできるようにすることが目的。 * **問題点** * もともと、Intel NUCにESXiをインストールすることが製品のサポート外。 * 以下記載したものはすべて情報収集や試行錯誤を繰り返した結果です。 * USB接続でNIC(ネットワークインタフェースカード)を追加したいという要望があったが、ESXi自体がサポートしている外付けNICがない。 * ESXiCustomizerを利用して、対応チップを搭載した外付けUSBのNICを探してそのドライバを組み込むという方法を見出して解決させました。 * バンドルしたUSBのNICが反応しない。 * 調べたところ、もともとインストールされているvmkusbというドライバと干渉してしまうことが原因だった。そのドライバをESXiのSSHモードを使い、無効化させることで動作するようにしました。 * ESXiが正常にシャットダウンできる個体とできない個体があった。 * 社内ルール上USBフラッシュメモリの使用を禁止されていたため、PXEブートでインストールさせていました。 * インストール時に失敗しているのではないかと疑うが、どうやら原因はそこではなかった。二台のBIOSのバージョンが若干新しいほうがシャットダウンできずHalt(マシンとしては完全に動作停止している状態)してしまうということに気が付き、両者のバージョンをあわせたところ両方シャットダウンできずHaltするようになった。 * ESXi以外のOSでACPIシャットダウン命令を流しても正常にシャットダウンされるため、ESXi側の問題であるとわかった。自分は、ACPIでシャットダウンできる機構を作ったほうが良いのではないかと提案したが、マネージャはHaltしてマシンが完全停止しているならば電源長押しで対応すればいいということで、マシンにテープ貼りをして電源のシャットダウン案内をしました。 ---------------------------------------

2018年/1年以内

SECCONに向けたセキュリティ・脆弱性調査

# 目的 --- * セキュリティに関する知識の向上と、技術者のスキルアップを目的とする。 * 問題を見て感じた閃きを共有する。   # やっていること --- - 全般的な研究・技術収集 * セキュリティは様々な分野を知る必要があると思ったため広い範囲の技術を集めています - オンラインCTFの問題をGoogle先生を使いながら解き進める * 解いていたのは主にこの2つ。問題は古くとも、現在日本で残っているであろう脆弱性に関する問題もあり興味深いです。(cgiやphpですね) [ksnctf](https://ksnctf.sweetduet.info/) [cpawctf](https://ctf.cpaw.site/) - どうしてもわからなかった問題を他の解答者のWriteUPをみて解いてみる。 * ただ、そのWriteUPもそこまで懇切丁寧には書かれていないものが多いため。答えにたどり着くためにどうするかを再び調べる必要がある。 - 自分なりの解きかたも模索してみる。 * アルゴリズムやツールを調べ、自分でPythonでコードを書くなど。 # 具体的にどんなことをしたか --- --- ### #1_[Math II](https://ksnctf.sweetduet.info/problem/17) :アルゴリズムを使って答えを絞り込む。 --- ### Question : ``` How important is modulo arithmetic in cryptography? Let x = 2748040023408750324411119450523386950660946398855386842074606380418316981389557916980086140301887947706700698930830779678048474531538039134089675000612962004189001422715316147779554460684462041893073445562829316520071658956471592707597247194589999870235577599858641217209525243986680999448565468816434633441308131788183291153809253610695081752296732033298647222814340913466738465892791206393936089466068684809286651197884210187525269355913763182559833600649423167126622527203197940618965341674710993871930168655984019611567024681974446413864111651893113475795042753452042221938667445789706741508160949598322950403760355305740757495122850819958219745478009476321531997688864567881328571570240278649150057863614800304034452842380274161491817926949213762740941829027657311016236224840157689532838274458699038989430527152474540367086746579688987076042252804910459873636444778218434530247647760637770881658596016745610672707638583665201858035977485748775481448417394363801163664632527695106599930657132405666766730530997168969743603771751166591137309462845077320233889570871715682231576283485837079838925927845291565664213349164253238166525895494203520538861102027123057706413048503799598270037162337386882901940037500301040636118696723417952777083334146545991127148023661461455142653367976629308434919237639329808504561590505864983890552051987234096577849288536293631380950881787840319976968198704697701966146561843819563765280293823120028941691560894722032503932540560461794190408016359786029679686957711035845785762377768203676919060935155382104877926736292611130243057909501332528103700463961697932230444978571571548190911155741113324573679444638703192583211952316173122745153529542339170631749363019742630339456502772150867703497326010832217054307087826776870481852284816747574983354077170761286175754243223519482572371717625453405597596790583499145036350302955327521461648262537855645876387858201576107385450844609238327605056916243564458120595540013872075267316304999752934829122583429168665162743589578036716137649553856654996867605565582594039606555708509284616434305172100068285925706963351193710675088846623856567419346569873886366829228933416064828304824833588800700991940600359503453201939139663042787644390810036292415117714919711827630953170559057272633043896443339064006637234499569232762828723613158050896065355005775876910820958296537497557737916521798848004761708690607167573807307291510879396794861418856342383200817566360552405183866698509354047737422523253071467100174078467454351746681775690022510266842064132386305358891086764558955802257688899610117102582837343655907837234028334304769930810792079059216436489942124896722072971246781926084943216581585837400274934104255861076781834022322597318553478829221018993823759479304536464719195824731739557957722610850860725276329731096193041588880149698625007746958307472328762247329346952956782896672291984502790479223886842985800649168009891087704339671376795754679245964575179873102014722210341771266309855717402003098724600141420936602986387680283404929020457247001371544838792904086327642729822000980710278752669990211765608002907900832262843253793831541691706704836397397798869236939393204666502455311086553874765248631328418556164635889080357612074921368044611251307530838475840480894307375072202500636365832958938363048173011687247738236161480446422712858040552310006617829659443118541556912488329721272939472554467384944920030182974546889304443711910957344160175437149714520561879951921970795705645045936350875827028675689840953101114431720413756855193291198455863087675930604549263160397353363504597829924339064422377323361781720524799661393081986371074530022532621955945720583925291264598924971169093688390536693144593482790588893095052569365154072722966434676949346037949263628957665599420417719951187489606010866702371368012263032537375401145460592536898818245350468847674995676417425737655723761467908866712060720593684978725896677308273. Find the value of y such that y101 = x. The flag is FLAG_y (in decimal notation). ``` yの101乗した値がxであることがわかります。 この問題のフラグはyの値が解答になると最終行に書いてあります。 ### Resolve : 問題通りの公式を使い、xより大きいか小さいか2分探索を利用して答えにたどり着きました。 高校生の時にCOBOLを使ってプログラムを組んだ経験上、ある程度のアルゴリズムは覚えていたのでそれをPythonで書いてみようとした結果が以下になります。 最大値と最小値を用いてだんだんと答えに近づいていくという方法を使って解を出しています。 おそらくもっと賢い解き方があると思いますが、自分はこれでなんとかできました。 ```python x = 2748040023408750324411119450523386950660946398855386842074606380418316981389557916980086140301887947706700698930830779678048474531538039134089675000612962004189001422715316147779554460684462041893073445562829316520071658956471592707597247194589999870235577599858641217209525243986680999448565468816434633441308131788183291153809253610695081752296732033298647222814340913466738465892791206393936089466068684809286651197884210187525269355913763182559833600649423167126622527203197940618965341674710993871930168655984019611567024681974446413864111651893113475795042753452042221938667445789706741508160949598322950403760355305740757495122850819958219745478009476321531997688864567881328571570240278649150057863614800304034452842380274161491817926949213762740941829027657311016236224840157689532838274458699038989430527152474540367086746579688987076042252804910459873636444778218434530247647760637770881658596016745610672707638583665201858035977485748775481448417394363801163664632527695106599930657132405666766730530997168969743603771751166591137309462845077320233889570871715682231576283485837079838925927845291565664213349164253238166525895494203520538861102027123057706413048503799598270037162337386882901940037500301040636118696723417952777083334146545991127148023661461455142653367976629308434919237639329808504561590505864983890552051987234096577849288536293631380950881787840319976968198704697701966146561843819563765280293823120028941691560894722032503932540560461794190408016359786029679686957711035845785762377768203676919060935155382104877926736292611130243057909501332528103700463961697932230444978571571548190911155741113324573679444638703192583211952316173122745153529542339170631749363019742630339456502772150867703497326010832217054307087826776870481852284816747574983354077170761286175754243223519482572371717625453405597596790583499145036350302955327521461648262537855645876387858201576107385450844609238327605056916243564458120595540013872075267316304999752934829122583429168665162743589578036716137649553856654996867605565582594039606555708509284616434305172100068285925706963351193710675088846623856567419346569873886366829228933416064828304824833588800700991940600359503453201939139663042787644390810036292415117714919711827630953170559057272633043896443339064006637234499569232762828723613158050896065355005775876910820958296537497557737916521798848004761708690607167573807307291510879396794861418856342383200817566360552405183866698509354047737422523253071467100174078467454351746681775690022510266842064132386305358891086764558955802257688899610117102582837343655907837234028334304769930810792079059216436489942124896722072971246781926084943216581585837400274934104255861076781834022322597318553478829221018993823759479304536464719195824731739557957722610850860725276329731096193041588880149698625007746958307472328762247329346952956782896672291984502790479223886842985800649168009891087704339671376795754679245964575179873102014722210341771266309855717402003098724600141420936602986387680283404929020457247001371544838792904086327642729822000980710278752669990211765608002907900832262843253793831541691706704836397397798869236939393204666502455311086553874765248631328418556164635889080357612074921368044611251307530838475840480894307375072202500636365832958938363048173011687247738236161480446422712858040552310006617829659443118541556912488329721272939472554467384944920030182974546889304443711910957344160175437149714520561879951921970795705645045936350875827028675689840953101114431720413756855193291198455863087675930604549263160397353363504597829924339064422377323361781720524799661393081986371074530022532621955945720583925291264598924971169093688390536693144593482790588893095052569365154072722966434676949346037949263628957665599420417719951187489606010866702371368012263032537375401145460592536898818245350468847674995676417425737655723761467908866712060720593684978725896677308273 y = 0 z = 100000000000000000000000000000000000000000 mx = z mn = 0 for i in range(1000000): y = z ** 101 print z if x >= y: mn = z z = mx + (mx - mn) / 2 + 1 else: mx = z z = mn + (mx - mn) / 2 - 1 if x == y: print "OK" break ``` --- ### #2_[Sherlock Holmes](http://ksnctf.sweetduet.info/problem/26) :Webページの脆弱性を突く。 --- ### Question : [http://ctfq.sweetduet.info:10080/~q26/index.pl](http://ctfq.sweetduet.info:10080/~q26/index.pl) * ページを開くとこのような表示に(本当はもっとリッチ) ``` A SCANDAL IN BOHEMIA A SCANDAL IN BOHEMIA I A SCANDAL IN BOHEMIA II A SCANDAL IN BOHEMIA III http://www.gutenberg.org/files/1661/1661-h/1661-h.htm ``` ファイル名を表示してリンクにしていると予測を立て、Perlに脆弱点がないか調べる。 /(スラッシュ)を差し込み|(パイプ)を繋げ、シェルコマンドを差し込む。 ``` http://ctfq.sweetduet.info:10080/~q26/index.pl/|ls ``` すると、現在の位置からlsコマンドを実行した結果を表示してしまう。 この脆弱性についてはIPAのISECに記載されていた。 > https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a04_02.html ### Resolve : * 実際にパイプを差し込んでOSコマンドを叩き込んだ結果  実行位置からのファイルを表示してしまいました。 [http://ctfq.sweetduet.info:10080/~q26/index.pl/|ls](http://ctfq.sweetduet.info:10080/~q26/index.pl/|ls) ``` A SCANDAL IN BOHEMIA A SCANDAL IN BOHEMIA I A SCANDAL IN BOHEMIA II A SCANDAL IN BOHEMIA III a_scandal_in_bohemia_1.txt a_scandal_in_bohemia_2.txt a_scandal_in_bohemia_3.txt flag.txt index.pl http://www.gutenberg.org/files/1661/1661-h/1661-h.htm ``` # アピールしたいポイント --- * 自分でなんとかしようと知っている限りのものをぶちまけて、それでもダメだったとしても諦めずに調べて結果にたどり着こうとする精神。 * セキュリティを研究とともに、広い分野の技術に触れたい。 * セキュリティにこだわっているわけではなく、広く知識を得るためにはと考えた結果のセキュリティ。 * 吸収したものはEvernoteにアウトプットして備忘録として記録していってます。 (実際に、この上記の事例はそのノートをベースに作成しました。) * セキュリティだけではなく、多言語で学んだアルゴリズムをうまく他の言語で表現できるようになりたい。 * コーディング技能はまだ未熟なので、さらに高度なプログラミングができるようになりたい。 

2018年/3ヶ月以内

Microsoft Teams のwebhookを使ってbot作成

## 目的 ---- Ansibleを利用したネットワーク自動化検証案件が終わり、上長に意味のないようなトレーニング資料を作成するようタスクを振られたことがきっかけ。片手間にAnsibleを使って自動化できるところがないか探したところ、検証環境へアクセスするためのVPNパスワードを定期的に社内ルールのパスワードに変更する業務を怠っている部長を見兼ねて勝手に自動化してしまおうと計画し、一週間でフルオートでパス変更からMicrosoftTeamsのWebhookコネクタで通知するシステムを完成させた。 ## 最終的なゴール ---- 自己満足するまで。 満足する条件は... - 思いつく限りbot化する - とにかくタスクを実行して結果を通知する - 社内の勤務者の半数以上が便利だと思ってくれそうなもの としました。 ## 活動詳細 ---- - SharePoint API 社内システムはSharePointをベースとしたページを利用している。このページから情報を取り出すには、認証が済んだCookieを利用しなければならず、この自動化に一番時間がかかった。 - Cisco 891J 検証環境サーバの目前に配置されているVPNルータである。外部から接続するには、このVPNに接続する必要がある。このルータのパスワードを毎月パスワード設定する業務を部長が行っていた。しかし、2018/03以降変更されておらず接続できなかった。社外のビジネスパートナーや社内の各部署に利用者がいたため、早急に対処をしようと独断で事に至った。 - ボット - VPNパスワード変更ボット パスワードの変更をSharePointから一定期間ごとに取得し、変更を察知した時点でAnsibleのvarsへ変更を加えて変更をかける。変更後に当月パスワードをMicrosoftTeamsで通知する。すべてフルオートで稼働。 - Lunchボット 社内食堂のメニューをSharePointから取得し、日替わりランチと週替わりランチを通知するボットを作成した。Microsoft Flowを利用することで、ノンコーディングでも実現できたがカレンダーのコピーを手動で行わなければならないことはイケていないと判断してボット化した。 - 交通情報ボット 交通アプリを使えばプッシュ通知で完結するものだが、入れていない社員もいたので。ボットで通知できれば便利だと感じて作成した。

2018年/3ヶ月以内

Ansibleを使ったネットワーク構成自動化

## 目的 ---- 某有名自動車会社のネットワークにおいて、Cisco機器の設定を自動的に構成管理して設定するシステムを提案するためのプロジェクトです。 ## 最終的なゴール ---- 自動的に機器情報を取得するためにAnsibleを採用。手作業で行っていた確認や設定を流す作業を自動化して運用効率を上げることを目標とした。Jenkinsによるタスク自動実行やAnsibleTowerを使いDevOpsに適した環境も視野に入れる。 ## 活動詳細 ---- - Ansibleについて Ansibleとは何かをまずは理解することから始まった。 結論としては、InventoryとPlayBookを組み合わせた構成管理ツールである。 使えるモジュールは日々増えており、今回はネットワーク機器の自動化だったことからios_moduleを採用した。SSHとPythonがあれば、管理ターゲットに一切のアプリケーションを用意する必要がない。 - Cisco機器について - Cisco機器を触ったことがほとんどなかったため、実際にコンソール接続接続してコマンドを打つことから始まった。実際のコンソール動作を見ながらAnsible-Playbookを作成することで、意図しない動作をしないか検証した。

2017年/1年以内

勤怠メールをミスしないために

# 目的 --- * 問題点:メールの誤送信問題(入社直後によく発生していた)が頻繁に発生。 * 主に勤怠に関するメールが誤送信される。 * 同一の名前の部署があり、間違った方向へ勤怠のメールを送信してしまう人が多数いた。 * 前回送信したメールのコピーをして、宛先間違いを回避する社員が多く。日付の表記が過去になっていて連絡が正常にできていない。 * 解決策:二重チェック 二重チェックは慢性化するだけなので、空いている時間に色々と考えた結果。 ### ---そうだ、アプリを作ろう。   # やっていること --- ### Azure web Appで動く簡単なウェブアプリケーションを作ろう!! - 要件 * 簡単なものでいい(勝手に個人で開発するだけだし) * 今のシステムをぶっ壊さないように(メールで連絡するのやめればいいだけなのにね...) * ミスを最小限に # 具体的にどんなことをしたか --- --- ### #STEP1 : まずは、簡単なものを。 ...と入力していたら20000文字制限に引っかかりました。後続の改修版を残します。 ### #STEP2 : 細かい修正とデザインもしっかりしてみよう。 ### Version 1.7.0 * UI改修。 * エスケープシーケンス入れてない!(と気がついて追加しました) ``` <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8" name="viewport" content="width=device-width,user-scalable=no"> <title> Dash Mail </title> <style TYPE="text/css"> body { background : rgba(52, 173, 82, 0.685); font-family : Meiryo; width : 95vw; } .listex { text-align : justify; text-justify : inter-ideograph; } div { //background : rgba(52, 173, 82, 0.685); width : 95vw; text-align : center; margin : 8px auto; border-radius : 5px 5px 5px 5px / 5px 5px 5px 5px; } .button { display : inline-block; background-color : rgba(189, 120, 30, 0.801); color : rgb(230, 230, 230); width : 85vw; height : 44px; border-radius : 10px 10px 10px 10px / 10px 10px 10px 10px; text-align : center; text-decoration : blink; line-height : 40px; outline : none; font-size : 20px; box-shadow : 1px 1px 1px 1px rgba(0, 0, 0, 0.623); } .critical { display : inline-block; background-color : rgb(243, 74, 52); color : rgb(224, 224, 224); width : 85vw; height : 44px; border-radius : 10px 10px 10px 10px / 10px 10px 10px 10px; text-align : center; text-decoration : blink; line-height : 40px; outline : none; font-size : 20px; box-shadow : 1px 1px 1px 1px rgba(0, 0, 0, 0.623); } .bottombutton { display : inline-block; background-color : rgb(45, 143, 255); color : rgb(250, 235, 168); width : 85vw; height : 44px; border-radius : 10px 10px 10px 10px / 10px 10px 10px 10px; text-align : center; text-decoration : blink; line-height : 40px; outline : none; font-size : 20px; box-shadow : 1px 1px 1px 1px rgba(0, 0, 0, 0.623); } .menuid { display : inline-block; margin : 8px auto; background-color : rgba(221, 186, 109, 0.897); color : rgba(82, 74, 2, 0.726); width : 85vw; height : 44px; border-radius : 5px 5px 5px 5px / 5px 5px 5px 5px; text-align : center; text-decoration : blink; line-height : 40px; outline : none; font-size : 20px; box-shadow : 1px 1px 1px 1px rgba(0, 0, 0, 0.623); } .long_menuid { display : inline-block; background-color : rgba(221, 186, 109, 0.897); color : rgba(82, 74, 2, 0.726); width : 90vw; height : 44px; border-radius : 5px 5px 5px 5px / 5px 5px 5px 5px; text-align : center; text-decoration : blink; line-height : 40px; outline : none; font-size : 20px; box-shadow : 1px 1px 1px 1px rgba(0, 0, 0, 0.623); } .bord { display : inline-block; background-color : #226666bb; color : #FFFFFF; width : 90vw; height : 48px; border-radius : 5px 5px 5px 5px / 5px 5px 5px 5px; text-align : center; text-decoration : blink; line-height : 48px; outline : none; font-size : 20px; box-shadow : 1px 1px 1px 1px rgba(0, 0, 0, 0.623); } input.form { width : 320px; height : 40px; } input.long_form { width : 320px; height : 40px; } textarea.form{ width : 90vw; height : 90px; font-size : 14px; //line-height : 40px; border-radius : 5px 5px 5px 5px / 5px 5px 5px 5px; outline : none; } input.date { width : 330px; height : 64px; } select.sellist{ width : 330px; height : 42px; } </style> <head> <meta charset=sjis> <script type="text/javascript"> //------Java Script--------// //==========================================================// // //【仕様】 // // ==========構成========== // HTML5 : Webページ表示 // JavaScript : メール本文構成 // localStorage : セキュリティ上設定保存をローカルに限定 // mailto : 標準メール転送 // ======================== // // ==========変数========== // +++ 一時設定(ブラウザを閉じると設定が消える) +++ // statid : 勤怠内容(遅刻/全休/午前半休/午後半休/直行/直帰/直行直帰) // staday : 開始日 // finday : 終了日 // reason : 事由 // // +++ 恒久設定(端末へ保存するデータ) +++ // dept : 部門 // inum : 社員番号 // name : 名前 // to0x : 宛先 // cc0x : cc宛先 // ftex : フッター(署名) // // //==========================================================// function Display() { main_window(); tmp_reset(); read_dom(); write_form(); } //WindowControlWindowControlWindowControlWindowControlWindowControl// function main_window() { document.getElementById('title_text').innerHTML = "メインフォーム"; document.getElementById("Setting").style.display = "none"; document.getElementById("Sending").style.display = "block"; document.getElementById("emc").style.display = "none"; } function setting_window() { document.getElementById('title_text').innerHTML = "設定フォーム"; document.getElementById("Setting").style.display = "block"; document.getElementById("Sending").style.display = "none"; document.getElementById("emc").style.display = "none"; read_dom(); write_form(); } function reset_window() { document.getElementById('title_text').innerHTML = "初期化フォーム"; document.getElementById("Sending").style.display = "none"; document.getElementById("Setting").style.display = "none"; document.getElementById("emc").style.display = "block"; } //WindowControlWindowControlWindowControlWindowControlWindowControl// //CautionCautionCautionCautionCautionCautionCautionCautionCaution// function fmt(){ dept = ""; inum = ""; name = ""; type = ""; ftex = ""; to0a = ""; to0b = ""; to0c = ""; to0d = ""; cc0a = ""; cc0b = ""; cc0c = ""; cc0d = ""; cc0e = ""; cc0f = ""; } function write_form(){ document.getElementById('dept').value = dept; document.getElementById('inum').value = inum; document.getElementById('name').value = name; document.getElementById('type').value = type; document.getElementById('ftex').value = ftex; document.getElementById('to0a').value = to0a; document.getElementById('to0b').value = to0b; document.getElementById('to0c').value = to0c; document.getElementById('to0d').value = to0d; document.getElementById('cc0a').value = cc0a; document.getElementById('cc0b').value = cc0b; document.getElementById('cc0c').value = cc0c; document.getElementById('cc0d').value = cc0d; document.getElementById('cc0e').value = cc0e; document.getElementById('cc0f').value = cc0f; } function read_form(){ fmt(); dept = document.getElementById('dept').value; inum = document.getElementById('inum').value; name = document.getElementById('name').value; type = document.getElementById('type').value; ftex = document.getElementById('ftex').value; to0a = document.getElementById('to0a').value; to0b = document.getElementById('to0b').value; to0c = document.getElementById('to0c').value; to0d = document.getElementById('to0d').value; cc0a = document.getElementById('cc0a').value; cc0b = document.getElementById('cc0b').value; cc0c = document.getElementById('cc0c').value; cc0d = document.getElementById('cc0d').value; cc0e = document.getElementById('cc0e').value; cc0f = document.getElementById('cc0f').value; } function write_dom(){ dom = localStorage; to0a = to0a.replace(/^\s+|\s+$/g,''); to0b = to0b.replace(/^\s+|\s+$/g,''); to0c = to0c.replace(/^\s+|\s+$/g,''); to0d = to0d.replace(/^\s+|\s+$/g,''); cc0a = cc0a.replace(/^\s+|\s+$/g,''); cc0b = cc0b.replace(/^\s+|\s+$/g,''); cc0c = cc0c.replace(/^\s+|\s+$/g,''); cc0d = cc0d.replace(/^\s+|\s+$/g,''); cc0e = cc0e.replace(/^\s+|\s+$/g,''); cc0f = cc0f.replace(/^\s+|\s+$/g,''); dom.setItem('dept', dept); dom.setItem('inum', inum); dom.setItem('name', name); dom.setItem('ftex', ftex); dom.setItem('type', type); dom.setItem('to0a', to0a); dom.setItem('to0b', to0b); dom.setItem('to0c', to0c); dom.setItem('to0d', to0d); dom.setItem('cc0a', cc0a); dom.setItem('cc0b', cc0b); dom.setItem('cc0c', cc0c); dom.setItem('cc0d', cc0d); dom.setItem('cc0e', cc0e); dom.setItem('cc0f', cc0f); } function read_dom(){ dom = localStorage; dept = dom.getItem('dept'); inum = dom.getItem('inum'); name = dom.getItem('name'); ftex = dom.getItem('ftex'); type = dom.getItem('type'); to0a = dom.getItem('to0a'); to0b = dom.getItem('to0b'); to0c = dom.getItem('to0c'); to0d = dom.getItem('to0d'); cc0a = dom.getItem('cc0a'); cc0b = dom.getItem('cc0b'); cc0c = dom.getItem('cc0c'); cc0d = dom.getItem('cc0d'); cc0e = dom.getItem('cc0e'); cc0f = dom.getItem('cc0f'); } //CautionCautionCautionCautionCautionCautionCautionCautionCaution// //TMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMP// //一時データの初期化 function tmp_reset(){ document.getElementById('statid').value = " "; document.getElementById('staday').value = " "; document.getElementById('finday').value = " "; document.getElementById('reason').value = " "; } //TMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMPTMP// //ButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButton// //保存ボタンの動作 function save(){ attention(); main_window(); read_form(); write_dom(); } //リセットボタン function clr(){ alert('設定をすべて消去しました'); main_window(); fmt(); dom.clear(); read_dom(); write_form(); } //メールを生成するメインコード function mailgen(){ fmt(); read_dom(); tmp_set(); dayform(); //終了日判定 if(finday < 0){ finday = ""; } bar = ""; if(finday > 0){ bar = "-"; } //メール本文 mailform(); } //一時データをフォームから呼び出す function tmp_set(){ statid = document.getElementById('statid').value; staday = document.getElementById('staday').value; finday = document.getElementById('finday').value; reason = document.getElementById('reason').value; } //ButtonButtonButtonButtonButtonButtonButtonButtonButtonButtonButton// //MainMainMainMainMainMainMainMainMainMainMainMainMainMainMainMain// //日付フォーマットの設定 function dayform() { tstaday = staday.replace("-",""); fstaday = tstaday.replace("-",""); staday = staday.replace("-","/"); staday = staday.replace("-","/"); tfinday = finday.replace("-",""); ffinday = tfinday.replace("-",""); finday = finday.replace("-","/"); finday = finday.replace("-","/"); } //メール生成メインプログラム function mailform(){ result = ""; bar = ""; sep = "%0A========%0A" var chform = ffinday; if ( chform > 0 ) { bar = "-"; } to00 = to0a + type + to0b + type + to0c+ type + to0d; to00 = to00.replace(/ /g,"%20"); cc00 = cc0a + type + cc0b + type + cc0c+ type + cc0d + type + cc0e + type + cc0f; cc00 = cc00.replace(/ /g,"%20"); //スペースを改行にする(苦渋の決断) ftex = ftex.replace(/ /g,"%20"); ftex = ftex.replace(/%20%20/g ,"%0A"); //エスケープシーケンス esc(); result +="<a href=mailto:" + to00 + "?cc=" + cc00 + "&subject=[勤怠連絡/" + statid + "]" + dept + "_" + name + "_" + fstaday + bar + ffinday + "&body=宛先各位%0A%0Aお疲れ様です、" + dept + name + "です。%0A以下の通り、勤怠連絡をいたします。" + sep + "■日程  :" + staday + bar + finday + "%0A■社員番号:" + inum + "%0A■所属  :" + dept + "%0A■氏名  :" + name + "%0A■種別  :" + statid + "%0A■事由  :" + reason + sep + "以上、よろしくお願いいたします。%0A%0D%0A" + ftex + ">アプリを立ち上げる</a>"; for (;result.indexOf('null') != -1;) { result = result.replace("null" ,""); } for (;result.indexOf(';') != -1;) { result = result.replace(";" ,"%3b"); } for (;result.indexOf(',') != -1;) { result = result.replace("," ,"%2c"); } result = result.replace(/\r\n/g, '\n'); result = result.replace(/\r/g, '\n'); result = result.replace(/\n/g,"%0D"); //上のループで作成されたテキストを表示する document.getElementById('show_mail').innerHTML = result; setTimeout(function(){ document.getElementById('show_mail').innerHTML = "再生成"; //alert('有効期限が切れました\n'); },10000); } //改行してクレメンスボタン function brbr() { ftex = document.getElementById('ftex').value; ftex += "%0A"; document.getElementById('ftex').value = ftex; } //エスケープシーケンス用コード function esc(){ name = name.replace(/\s+/g ,"%20"); reason = reason.replace(/\s+/g ,"%20"); //result = result.replace(/&/g,"%26%0d%0a"); //result = result.replace(/>/g,"%3e"); //result = result.replace(/</g,"%3c"); //result = result.replace(/;/g,"%3b"); } //ユーザにチェックを促す function attention(){ if (type == "%3b") { alert('端末はOutlook(PC)でお間違いないでしょうか?'); } else if (type == "%2c") { alert('端末はiPhoneでお間違いないでしょうか?'); } alert('端末本体へ\n情報を保存しました。\n (設定を間違えた場合は、\nもう一度設定フォーム\nを開いてください)'); } //MainMainMainMainMainMainMainMainMainMainMainMainMainMainMainMain// //================================================================// </script> <body> <center> <div class="bord"id="title_text">メインフォーム</div> </center> <div id="Sending" style="display:block"> <div> <div class="long_menuid">勤怠</div> <select class=sellist id="statid"> <option value=""> ※選択してください! </option> <option value="全休"> 全休 </option> <option value="午前半休"> 午前半休 </option> <option value="午後半休"> 午後半休 </option> <option value="直行"> 直行 </option> <option value="直帰"> 直帰 </option> <option value="遅刻"> 遅刻 </option> <option value="リフレッシュ休暇"> リフレッシュ休暇 </option> </select> </div> <div> <div class="long_menuid">開始日</div> <input class="form" type="date" id="staday"> </div> <div> <div class="long_menuid">終了日</div> <input class="form" type="date" id="finday"> </div> <div> <div class="long_menuid">事由</div> <input class="form" type="text" id="reason" placeholder="例)電車遅延のため"> </div> <div> <div class="button" id="show_mail" style="cursor:pointer" onClick="mailgen()" >これでOK?</div> <div class="critical" style="cursor:pointer" onClick="tmp_reset()">やり直す</div> <div class="button" style="cursor:pointer" onClick="setting_window()">メールの設定</div> </div> </div> <div id="Setting" style="display:none"> <div> <div class="long_menuid">部門</div> <input class="form" id="dept" type="text" placeholder="例)XDD-XX"> </div> <div> <div class="long_menuid">社員番号</div> <input class="form" id="inum" type="text" placeholder="例)01234"> </div> <div> <div class="long_menuid">名前</div> <input class="form" id="name" type="text" placeholder="例)山田太郎"> </div> <div> <div class="long_menuid">宛先</div> <div> <div> <input class="long_form" id="to0a" type="text" value="" placeholder="例)xxx@xxx.com"> <input class="long_form" id="to0b" type="text" value="" placeholder="例)xxx@xxx.com"> </div> <div> <input class="long_form" id="to0c" type="text" value="" placeholder="例)xxx@xxx.com"> <input class="long_form" id="to0d" type="text" value="" placeholder="例)xxx@xxx.com"> </div> </div> </div> <div> <div class="long_menuid">cc</div> <div> <div> <input class="long_form" id="cc0a" type="text" value="" placeholder="例)xxxxx@xxx.com"> <input class="long_form" id="cc0b" type="text" value="" placeholder="例)xxxxx@xxx.com"> </div> <div> <input class="long_form" id="cc0c" type="text" value="" placeholder="例)xxxxx@xxx.com"> <input class="long_form" id="cc0d" type="text" value="" placeholder="例)xxxxx@xxx.com"> </div> <div> <input class="long_form" id="cc0e" type="text" value="" placeholder="例)xxxxx@xxx.com"> <input class="long_form" id="cc0f" type="text" value="" placeholder="例)xxxxx@xxx.com"> </div> </div> </div> <div> <div class="long_menuid">署名(半角スペースx2で改行)</div> <div> <textarea class="form" id="ftex" type="text" value="" placeholder="例)T.yamada"></textarea> </div><br> </div> <div> <div class="long_menuid">使用機器</div> <select class="sellist" id="type"> <option value=""> ※選択してください! </option> <option value="%2c">iPhone </option> <option value="%3b">PC(Outlook) </option> </select> </div> <div> <div class="bottombutton" style="cursor:pointer" onClick="save()">保存してフォーム作成に戻る</div> <div class="critical" style="cursor:pointer" onClick="reset_window()">⚠初期化メニューを開く⚠</div> </div> </div> <div id="emc" style="display:none";> <div> <div class="bottombutton" style="cursor:pointer" onClick="main_window()">初期化しない</div> <div class="critical" style="cursor:pointer" onClick="clr()">⚠設定を消去⚠</div> </div> </div> </body> <center> <div class="bord">Auto Mailler beta 1.7.0</div> </center> </html> ``` ### 部署レビューでは良いレスポンスと悪いレスポンスが... **いいね!という意見:** * 便利でいいね! * これってうやったら使える?使いたい! ...などなど。同レイヤーの視点のエンジニアからは良いレスポンスが! **よくないという意見:** * 別に何回もチェックしてミスしなければいいし...ねぇ * これつかってミスしたらどう責任とるの? * 身内だけでレビューするのはいいけど、他の部署に広めないようにね。 ...などなど...上長クラスにはあまり良くないレスポンスが。 ...超否定的...これでもだいぶ頑張ったと思いたい... 修正は結構かけていて、それでもやはりこのようなアプリ開発はやったことあまりないので。うまくはいかないものですね... # アピールしたいポイント --- * 違う方面からのアプローチで解決しようと努力しました。 * HTML5,JavaScript,CSS,を使った簡素なアプリケーションではありますが、使えればそれでいいかなと。 * セキュリティ上サーバにデータを保存しない方向で、HTML5で実装されているDOMのローカルストレージを採用しました。

マネージメント能力

アピール項目


アウトプット

GitHub アカウント
あり
Qiita アカウント
未入力です
Speaker Deck アカウント
未入力です
SlideShare アカウント
未入力です
特にアピールしたいアウトプット
あり

今後、身につけなければいけないと思っている技術は何ですか?

## [ 2019 ] - 急激な環境変化への適応能力(技術ではないかもしれない) #### ストレス耐性は高い方だと思ってるのに...現職場でのストレスが非常によろしくない。 #### (否定的な意見しかもらえないSIerの社内エンジニアはやはり自分には難しい...せめて一つでもいいから肯定意見があれば変わるのかもしれない。それなら環境を変えるまで。) - 全てを捨てる勇気(これも技術ry) #### 転職/生活保護 どちらでもいいので現職場や今の負の生活を捨てることから始める。(奴隷人生やめたい) #### 既に人間として終わっている。(社会不適合??余裕のない生活が原因ではある。) - Kaggle面白そう #### 社内だとHadoopの研究(?)チームがあるが、ビッグデータを処理する基盤を構築するだけのチームで面白くない...Kaggleとか使える人がいない...自分で勉強するしかない。scikit-learnは一度触ってみたことがあるのでそれと似たものかなぁ程度。 --- ## [ 2018 ] - Ansibleなどの自動化(RPAではない、IaC) #### 人手不足解消を意識する #### 参考:Ansible徹底入門(翔泳社) - Dockerなどコンテナ技術。 #### オーバーヘッドの最小化は、今の時代当たり前となっている... #### 参考:Docker/Kubernetes実践 コンテナ開発入門(技術評論社/) - kubernetes #### コンテナオーケストレーションは大規模なコンテナ環境で役に立つので必須 #### 参考:https://qiita.com/r548/items/e6d1e4dcfdd9f8a7874d - Gitによるバージョン管理 #### 書き直しては戻してを繰り返すことが当たり前になってきたので必須となった - Webpackを使った開発でウェブアプリを作りたい #### それよりもLalabelやれ←(無意識) - Brainf*ckを使ってアセンブラの理解 #### あまりにも可読性がなさすぎて頭がオーバーフローするが、やはりアセンブラの基礎は理解必須である。 - バイナリ解析技能(アセンブラ) #### うさぴょんのx86本読んでも頭の中がこんがらる。

エンジニアとして影響を受けた本を教えてください

- Javaの絵本: プログラミングの講義で使用した教科書。 このとき自分はまだCOBOLなど手続き型言語しか経験がなかった。 オブジェクト指向言語に初めて触れた一冊。 - わかばちゃんと学ぶGit使い方入門: 入社直後にgitを使おうという流れになった時に出会った本。 何度か読み返している。 現状どうかというと、結局Gitを使っているのは自分と一部のエンジニアだけである。

あなたが一番パフォーマンスを出せるのはどんな環境ですか?

# [ 必須 ] ## 否定しかされない環境ではないところ * 現在そのせいで精神病んでて何も手をつけられない...一刻も早く現職場から立ち去りたい... * エンジニアらしいことをやろうものなら否定され続けるのがもういやになってきている... ## 自分の作ったものを認めてくれる * 自分のレベルが低いので、アイデアに対してアドバイスがもらえたりするエンジニアがいてほしい... (ただ単にユーザ視点の意見だけしか言われない現環境がすごく嫌だから) --- # [ あるといいなぁ... ] ## (物理的に)狭すぎず、(威圧感など)息苦しくない環境 * ネコを飼う感覚だと思います (なんだそれ)

キャラクター

直近で一番やりたいこと
技術を極めたい
好きなスタイル
好きな規模
水とプログラミングどっちが大事?
自信を持って人より秀でていると言える点
学習能力 / 分析力 / 問題解決力
スキルのタイプ
得意なフェーズ
会社を選ぶ一番の基準
プライベートとの両立
やりたくない分野
広告 / アダルト
その他の特徴
使用言語にはこだわらない / レガシーな環境を改善できる / 新しい技術はとりあえず試す / 多職種のバックグラウンドがある
その他のやりたいこと・やりたくないこと

## やりたくないこと
- 派遣はいやだ派遣は嫌だ....(うわぁぁぁ)
- 人海戦術する案件(現勤務中の会社がこれ)

## やりたいこと
- セキュリティの穴を探すこと
- プログラムコードを書くこと
- パソコンと友達になること

やりたい事

手を動かして設計してコードを書きたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
価値あるプロダクトを作り成長させたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
学び続けて技術力でプロダクトに貢献したい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
意義があることや社会に貢献できる仕事がしたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
人や計画の調整・マネジメントをしたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
レガシーなシステムの保守・運用・改善をしたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
企画や仕様を考えるところから関わりたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
業務効率を改善して一緒に働く人のためになりたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
全社横断的な共通基盤作りや強化をしたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい
組織や文化を作る・成長させる仕事をしたい
絶対やりたくない
あまりやりたくない
別に普通
やりたい
絶対やりたい

基本プロフィール

年齢
今年で20代中盤
好きな Text Editor
Vim,VScode
希望勤務地
東京都
希望年収
未入力
ただいまの期間
ドラフト参加受付中

  • この期間に審査合格した方は次回ドラフト参加になります
  • ドラフト初参加以外の方は次回のドラフト参加 / 不参加を選択してください
  • レジュメは更新できます
  • 審査は随時行っています
ご意見箱

要望、不具合報告、使いづらい点や感想など、なんでもお気軽にご連絡ください。

ฅxωxฅ@すてネコ
今年で20代中盤
Vim,VScode
参加ステータス
不参加
転職意欲
参加回数
4回
累計平均提示年収
500 万円
SIGN UP
SIGN IN


このサービスを友人に薦めたいですか?