岸原オカルト研究部

プログラミングを勉強していくブログです

Webサーバー公開ログ

 素敵な夜ですね。  ふと思い立ってWebサーバー触れるようにしようと思ったのでそのログを書きます。

HPの内容

 ポータルサイトです。そのうち要素が揃えばポートフォリオとしても機能するようにします。

サーバー契約

どのサービスにするか

 普通のVPS借りるならさくら、ロリポップ、エックスサーバーがいいようです。令和なのに懐かしい名前ばっかりだな…。  エックスサーバーは高価という事でひとまずさくらVPSの最安プランにしました。

 Herokuは独自ドメイン利用にStandardプラン(月700円)が必要です。最安でずっと続けられる拠点が欲しいので、ポータルページをHerokuに使うのはやめました。

 クラウドは触りたいですが従量課金が怖すぎて怖いです。また調べます。

実装作業

VSCodeの整備

 LiveServerを入れるとブラウザのテストが簡単にでき超便利です。   qiita.com

 HTMLとCSSを書いていきます。

Linuxがつらい

 Ubuntu desktop入れたことあるし余裕だろう とUbuntuに突撃したら死にました。  何一つとして意味がわからない。ファイル転送に一時間。ポートを変えてもなんにも言わない。

 CLIの習熟曲線については、人によって数ヶ月で慣れると言ったり数年かかると言ったりそれぞれ聞きました。  俺の場合はgitを触っていたので「Linuxの絵本」や「progate」CLIコース等はレベルに合わず、「新しいLinuxの教科書」という本を買いました。  苦戦しました……CLIわかんない~

ドメイン登録

 非常に時間がかかりました。とにかく反映が遅い。その上に何をやっているかさっぱりわからない。  納期数日で何かを外注しているような速度感でいたほうがよさそうです。

 最後は焦れて直接ドメイン購入サイトのサポートにメールで突撃しました。  単に住所の入力を間違っていました。

apache,SSL設定

 Linux頑張って勉強したので最後はそこそこ手が慣れて、apacheが元々便利なソフトであってくれたお陰でなんとかなりました。ありがとうapache...  SSLも少し手間取りましたがLet's encryptがすごすぎてすぐ終わりました。

完成

https://kisiharaoccc.dev

 ポートフォリオ等のポータルサイトです  完全に素のHTMLですがこれから他を頑張ります。  外から見える範囲でセキュリティ面とかツッコミあったら教えてほしいです。

現在岸原オカルト研究部では、黒魔術(WEB開発)を研究しています。 twitter:@kisihara_c

AtCoderで茶色になりました(色変記事)

素敵な夜ですね。


C#AtCoder入茶しました。
やったことはこちらの通りで
kisihara-c.hatenablog.com

  • 過去問
  • 本を読む
  • 他の方のコードを読む

事です。



一つの目標だったのでとても嬉しいです。緑に向かって引き続き力抜いてやっていきます。

やるぞ~



現在岸原オカルト研究部では、黒魔術(C#)を研究しています。
twitter:@kisihara_c

2021年作りたいものリスト

素敵な夜ですね。
来年作りたいものを超簡単な企画書集として書いておきます(結果として投げるかもしれないけど)
多分再来年も書きます

多分作る

crypt.c

概要:平文を鍵で簡単に暗号化でき、暗号を鍵で簡単に平文化できるWebアプリ
対象:安全な文字の受け渡しをしたい方、クイズゲームをしたい方
欲しい理由、詳細: 
友達との間で秘密の符号の受け渡しをしたい時が以前たまにあった 
今は遊び友達がほとんどいないので必要ないが 

brainfxxk.c

概要:Brainfuck翻訳機 既存のBrainfuckコードを色々な文字によるセットに変更可能
対象:Brainfuckで遊びたい方
欲しい理由、詳細:
一昔前「ほむほむ」(魔法少女まどかマギカ)のプログラミング言語等、プログラミング言語をその単体のテキストとして遊べるツールがよくあった
twitterのネタツイとして適当な文字列でできた適当な文字列を表示させるBrainfuckを投下しようと思って変換器を探したらどこにも見つからなかった

pomodoro.c

概要:お手軽ポモドーロタイマー
対象:ポモドーロタイマーを使う方
欲しい理由、詳細:
URLを叩いたウェブページだけでポモドーロテクニックを完結させる
もしそうできたら素敵だなと思った
俺自身はポモドーロテクニックは合わないのだが、まず自分で試してみようと思った時にまあまあの手間/ハードルがあった

Reminderer.c

概要:日時を指定するとその時間に自動でメールを送ってくれる
対象:扱いが難しそうなので自分だけで使う可能性大

VRCycleDazeDreams.c

fontmap.c

概要:一画面フォントブラウザ(ネットランキング付き)
対象:フォントを使うがフォント選びに毎回困る方
欲しい理由、詳細:
macだと優秀なフォントブラウザがあるようだが、windowsでは探しても見つからなかった
ローカルのフォントをWebブラウザに取り込み、任意の文字を入力すると一覧で出る
できればCRUDの勉強も兼ねて、フォントの名前を同意ありでネットに送信して
今人気のフォントを知れるようにしたい フォント名自体に権利はないはず ただ削除要請には対応したほうが良いか…?
フォントファイルの取り扱いに少しハードルを感じる

deadline.c

概要:各ユーザーが締切を登録し、自分の締切を表示させる
対象:締切のある作業がある方
欲しい理由、詳細:
締切を急かしてきて、それを簡単に共有できるサービスが欲しくなった

calender.c

概要:各ユーザーが予定を登録し、自分の予定を一覧表示させる
対象:個人や集団の予定をカレンダーにして公開したり保持したい方
欲しい理由、詳細:
予定を登録して、それを簡単に共有できるサービスが欲しくなりました
deadline.cと上手く連携・両立できるよう設計したいが、
とにかく超シンプルな手間と超シンプルな画面で、簡単な締切・カレンダーを誰とでも共有できるようにしたい
また、非公開設定にすれば非公開も可能
ユーザー登録も不要で、そもそも登録作業とかダリィ事やらせないでほしいんです、こっちは!
一意のIDとカレンダーが対応付けられ、URLを指定するだけでそれを見られる等の設計を考えています
この辺りはよく考えます

無理かもor数年がかりかも

garbledwords.c

概要:文字化け生成器
対象:文字化けした文書が欲しい方
欲しい理由、詳細:
既存の文字化け生成器は色々な理由で創作にそのまま使えず困っている。
既存の問題をすべて排除した文字化け生成器を作りたい。
種を受け取っての変換式文字化けの他に、長さを受け取ってのランダム文字列によるランダム長さの文字列も提供する。
文字コードの挙動が難しそうでハードルを感じる。

VRCbottlemail.c

概要:VRChatの外部サービス、一ユーザー一文書のみのメッセージ疎通が可能
対象:VRChatユーザー
ほしい理由、詳細:
最近始めた面白いゲーム(SNS?)、VRChatにはテキストチャットがない
コンセプト上理解できるが不便な面もある
ボトルメールと同等程度のメッセージ機能であれば恐らく情緒は壊さず利便性のみを上げるのではないか
そして自分自身も便利となる
荒らし対策はVRChatに乗っかる形で行う 確かAPIがあったのでうまくやれないかと思っている
APIの取り扱いや機能にハードルや未調査ポイントがある

→OAuthがない 今の所断念

texTrain

構想だけあるがだいぶ先まで無理かも

おわり

来年一個ずつ作っていきます。
もしどれかに興味を持って頂ける方がいたら色々教えて頂けないでしょうか。
既にあるor既に作った等も教えて下さい。

twitter:@kisihara_c

2020年自分のツイッターまとめログ

素敵な夜ですね。
自分用に2020年の自分のツイッターのツイート/RTを総まとめします。

私 kisihara.cは駆け出しのIT開発者です。
業務経験としてはSESの下働きをしているところで、一応開発と言い張れる内容のものの色々厳しく転職活動中です。
javascript/C#を触っていて主にゲーム、Webへの関心が高いです。

メモしておきたい

コロナウィルスと最も早期に戦った病院

働きながら米国の学士号

スタートアップで働く事について

フリーランスプログラマのログ

ドイツの大学院でCSを学ぶ

競プロログ

質問箱開発者のインタビュー

システムの納期は一意に定まらない

競プロに関係する数学用語

エンジニアとしての発信について

JavaC#の違い

エンジニアのキャリアについて

プログラミング言語Go完全入門の公開化

AWSのよさげな記事

javascript→ts移行記事

数え上げ問題の全分類(写像12相)

桃鉄と競プロ/アルゴリズム

最良のコンテンツマーケティング

弁護士ドットコムの構成

javascriptの学習法

アーキテクチャ設定について 十万行を超えるまで、設計は時間の無駄

やったことログ

プロトタイプベースについて

1/4ルール

理文横断の学者さんの文章
http://www.shayashi.jp/myfailures.pdf

HTML5ゲーム ドキュメント

見直したい

ポールグラハムのエッセイのまとめ

プログラミングについて止まった事

専門的技術力を高めるために大事なこと

優秀なプログラマになるために

すごい専門家とすごい素人

おすすめ参考書4冊

エンジニアのスキル

DMM CTOのインタビュー

CS雑誌

フレームワークを学ぶ時に大事なこと/php

プログラミングの勉強について/ruby

pythonの勉強について

いい感じの開発者になる8つの心がけ

エンジニアの勉強法

rails作者の自伝

情報学リンク

ぷよぷよの情報学論文

zennのサービス構成

現代javascriptの勉強について


大企業の最前線でコードを書き続けるためにやってきたこと

FastAPI

CS勉強ログ

OSS関連ドキュメント



自分の目標や感想等



おわりに

転職して勉強量増やしたらツイート数激増してるので来年は四半期に一回くらいまとめ記事を作るかもしれません。
後で見返すと思うので。

インターネットでいつもお世話になっております。今年は本当にありがとうございました。
来年もよろしくお願いします。

現在岸原オカルト研究部では、オカルト(IT)を研究しています。
twitter:@kisihara_c

自分用 個人のためのアジャイルサムライ


素敵な夜ですね。


アジャイルサムライと呼ばれる、ITのプロジェクトマネジメントの名著を読みました。
アジャイル開発と呼ばれる技術体系に関する本です。
個人活動に応用が効きそうなので自分用に纏めます。


アジャイル開発とは

・縦割りでない
・設計書→実装 の流れではなく、 毎週成果物を上げ確認する
・チームメンバーは全員ゼネラリストで、すべての行為を行える

特徴を持つ開発のこと。※アジャイルサムライより


・縦割りでない
→縦割りにする事はあるが、個人活動は縦割りみは少ない
・設計書→実装 の流れではなく、 毎週成果物を上げ確認する
→毎週成果物が目に見える
・チームメンバーは全員ゼネラリストで、すべての行為を行える
→チームメンバーは俺一人

以上により、取り入れどころはあるはず。

我々はなぜここにいるのか?

まず、我々はなぜここにいるのか? を明確にする事。どんなプロジェクトにも「なぜ」が必要。
その為には、

1、現場に向かう。

 トヨタシエナという車を北米向けに改善するため、シエナに乗って全米の全州を運転した。
 結果、車内で食事する際便利なように大量のカップホルダーが付き、オンタリオの厳しい横風に耐える安定性がついた。
 私自身が顧客になる事だ……。

2、司令官の意図を作る。

 サウスウエスト航空機内食にハーブチキンをつけるか議論になった時、CEOは「我々は最安航空会社だ、不要」と一喝した。
 個人なのでCEOとは俺であるが、逆にその為、なんでもいいので自分自身の意図を明確に持っている必要がある。

エレベーターピッチ

エレベーターピッチとはエレベーターの中で話せるくらい短い活動理念。
用意すべきで、あると外注等がやりやすい。

エレベーターピッチのテンプレート

潜在的なニーズ、抱えている課題)したい(対象顧客)向けの(プロダクト名)は(プロダクトのカテゴリー)である。
これは(重要な利点、対価に対して説得力ある理由)ができ、(有力代替手段)と違って(決定的な差別化)ができる。

インセプションデッキ

アジャイル開発スタートの際に決めるルールのこと。

1、我々はなぜここにいるのか? →前述
2、エレベーターピッチを作る →前述
3、パッケージデザインを作る →実質いつも作っている
4、やらないことリストを作る →実質いつも作っている

5、ご近所さんを探せ 利害関係者と予めコンタクトをとる。情報交換は重要。
→ここだけ難しい まあいろんな事やって友達いっぱいいるといいね?
6、解決案を描く 作品は何かの解決案でなくてはならない。
7、眠れなくなるような問題は何だろう? 調査する
→リスクを考え優先順位をつけ対処する

8、期間を見極める →集団プロジェクトでは半年が一つの目安。それ以上は血を見る覚悟で、との事。
9、何を諦めるのかをはっきりさせる →後述
10、何がどれだけ必要なのかをはっきりさせる

リスクとスコープ

時間、予算、品質、スコープはトレードオフ
時間、予算、品質を固定化し、スコープを操作する事が望ましい。

見積もりについて

製作期間の見積もりと実製作期間は、製作初期に決めたものほど役に立たない。
これをスティーブ・マクネルは不確実性コーンと名付けた。

アジャイル的考えでこれに対応するには、まず個々のタスク(通称:ストーリー)をそれぞれ相対的なサイズで見積もる。
絶対音感は希少だが、相対音感は皆大体持っているように、相対サイズは絶対サイズより比較的マシに見積もれる。
タスクAをx日単位と置き、タスクBを5x日単位等と想定する。

また、もっと抽象化して、タスクAをxポイントと設定しても良い。見積もりは本来あてずっぽうであり、大きさをただ測るものという事で、日数よりも手早く気軽でシンプルに測ることができる。
また、ポイント制だとベロシティ(ポイント消化速度)の概念が有用となる。

アジャイル開発では抽象度が高く便利なポイントが推奨されるが、個人開発ではどちらも大して変わらないと思われる。
日数で考えても時間経過速度の概念を一人で勝手に取り入れればポイント制と変わらないので。

MMFについて

MMFとはリリース単位のこと。いくつかのストーリーを纏めたもの。
ソフトウェアの機能の半分は使われないことが有名。不要なものはどんどん落とす。

現実と向き合う為に

1、新しくやりたいことができた→あるといいなリストを作り、全体の完成まで放置
2、製作速度が遅い→スコープを変えるor外注。
3、時間が足りない→スコープを変えるor外注。

リファクタリング

製作は続けていると修正に時間がかかるようになる。
こまめに手を入れて修正しやすい形に整え直し続ける。

継続的インテグレーション

その状態のままインターネットに上げられるようにしながら制作し続ける。
音楽なら一度一通り完成させてから段階を追って肉付けしていく。実験で入れた音をそのままにしない。
イラストならごくごく初期以外は全てそのまま公表可能にしておく。



以上がアジャイルサムライを読んで自分個人で応用が効きそうな範囲です。


現在岸原オカルト研究部では、オカルト(プロジェクトマネジメント)を研究しています。
twitter:@kisihara_c

ABC60~ABC100 ~C問題用競プロライブラリ

素敵な夜ですね。

ABC60~ABC100を解く中で必要になったメソッドを纏めたクラスを作りました。
C#で競プロを始める皆さん、お使いください!!


使い方

var a = new LittleMethods();
a.hogehoge();


コード

    class LittleMethods
    {
    	//整数二つを受け入れ、最大公約数を出す
        public long GreatestCommonDivisor(long a, long b)
        {
            // https://qiita.com/Jane35416555/items/0d9d6dd088049ce64e3d

            long x = 0;

            while (1 == 1)
            {
                if (a % b == 0)
                {
                    return b;
                }
                else
                {
                    x = a % b;
                    a = b;
                    b = x;
                }

            }

        }

		//整数二つを入れ、最小公倍数を出す
        public long LeastCommonMultipul(long a, long b)
        {
            // https://qiita.com/Jane35416555/items/0d9d6dd088049ce64e3d

            long x = GreatestCommonDivisor(a, b);
            return a * b / x;
        }

		//整数一つを入れ、素数ならtrueを返す
        public bool PrimeNumberOrNot(long x)
        {

            if (x == 1) { return false; }
            for (long i = 2; i * i <= x; i++)
            {
                if (x % i == 0) { return false; }
            }

            return true;
        }

		//整数一つを入れ、全ての約数をListで返す
        public List<long> DivisorAll(long x)
        {
            List<long> y = new List<long>();

            if (x == 1) { y.Add(1); return y; }

            for (long i = 1; i * i <= x; i++)
            {
                if (x % i == 0)
                {
                    y.Add(i);
                    if (x / i != i) { y.Add(x / i); }

                }

            }

            y.Sort();

            return y;

        }

        //https://stackoverflow.com/questions/4124189/
        //sqrtの精度に問題があると聞いたのでいざという時使えるよう調べた。decimalを入れるとルートしてdecimalで返す。
        public decimal SuperSqrt(decimal x,decimal epsilon = 0.0M)
        {
            decimal cur = (decimal)Math.Sqrt((double)x), prev;

            do
            {
                prev = cur;
                if (prev == 0.0M) return 0;
                cur = (prev + x / prev) / 2;

            } while (Math.Abs(prev - cur) > epsilon);

            return cur;


        }
        
        //階乗して返す
        public long Multipul_Fuctrial(long x)
        {
            long a = 1;

            for (int i = 2; i <= x; i++)
            {
                a *= i;
            }

            return a;

        }

		//特定の数で毎回割りながら階乗する。
        public long Multipul_FuctrialRemainderer(long x)
        {
            long a = 1;
            long b = (long)Math.Pow(10, 9) + 7 //ここは問題に寄る

            for (int i = 2; i <= x; i++)
            {
                a *= i;
                a = a % b;
            }

            return a;

        }
        
        //順列総当り用 戻り値:1 2 3,1 3 2,などなど各順列のリストのリスト
        //本番中に作ったので参考URLを紛失。申し訳ございません。
        public static IEnumerable<T[]> Make_PermutationList<T>(IEnumerable<T> col)
    	{

	        if (col.Count() == 1) yield return new T[] { col.First() };

    	    foreach(var x in col)
        	{
            	var selected = new T[] { x };
            	var unused = col.Except(selected);

            foreach (var y in Make_PermutationList(unused))
            {
                yield return selected.Concat(y).ToArray();
            }
        }

        
    }




現在岸原オカルト研究部では、黒魔術(C#、競プロ)を研究しています。
twitter:@kisihara_c

他の黒魔術研究↓
自分用 C#のLINQ周り全部書く - 岸原オカルト研究部
超インスタント競プロ環境構築 C# - 岸原オカルト研究部

競プロ初学ログ(C#)

素敵な夜ですね。

競技プログラミングの勉強を始めてから少し時間が経ったので競プロの初学についてのログを書きます。 Atcoderを使っています。 対象読者は未経験~灰です。私も灰です。

これを読んだ貴方はC#で競プロを始めてください。同志がいません。 ただし、解説が大体C++です。

競プロとは? Atcoderとは?

競技プログラミングの事で、競技としてプログラミングの問題を解く事です。 Atcoderとは、そのコンテストサービスです。

現代のAtcoderについて

やっている限り、人口の流入が激化しています。 良いことだと思いますが、なんだか高速で3完(3問完答)するか、4完しないと茶色になれないイメージを受けます。

学習の基本方針

  • まず実戦、無理でも時間を測って疑似コンテスト、そして間違えたものを直す
  • 過去問(や教本)

の2パターンがあると思います。 ただ前者はC問題まである程度解けてD、Eが解けたり解けなかったりする人向けだと思います。 素人なので後者を選びました。

過去問をどこから追うか

https://kenkoooo.com/atcoder/#/table/

問題傾向が固まった(※ただしレベルは固まっていない)ABC40~ 色々な記事でよく例問に上がり始めるABC80~ 以降全テストケースが公開されているABC100~ 現在の六問制になり始めるABC126~ 以上の四つが区切りとして目立ちます。

一番「こうしておけばよかったな」と思うのはABC080~090の後ABC126~に進む流れです。 特に~ABC125とABC126~ではC問題の難易度や立ち位置が違いすぎるので、ABCのC問題全部解くぜ~とやっていた際、先にABC126~をやったほうが良かったです。

いつ受験を始めるか?

10回受けるまでは正しいレートが出ないとの事で、回数稼いでおいたほうがいいという気持ちもあります。 ただ、勉強で後から実力を上げると、後から結局の所もう10回受験する必要が出ます。

周りを見渡すとバッチリ時間が取れるなら緑パフォまではレートが上がる速度よりも実力が上がる速度が早い気がするので、緑パフォまではABC本番はほっとくのが最適解です。 この限界利益は人によって異なる事になります。

教本について

茶色レベルまでは教本は不要と思われます。ただ各教本の所感は書きます。 逆にAtcoderProblemで茶色レベル表記の問題まである程度解けるようになったら読んだほうが良いと思われます。

チーター本

中級者向け。前半は初心者でも有用。連載記事の纏めなので解説が最低限。C#のコードが有るのは嬉しい!!

ピラミッド本

中級者向け。前半は初心者でも有用。非常にわかりやすい記述だが記述内容が中級者向け。

螺旋本

初心者向け……に見える中級者向け。数学でいうと公式の証明を載せている本で、平易だが初心者向けではない。 もちろん、数学をやるなら自分で公式を証明できたほうが良いのと同様そのうち勉強したいが、どう考えても今ではない。

蟻本

難易度に対して解説が簡単すぎる!!!!!

茶色になる為によく使う/欲しいもの カッコは優先度低

・小学算数、中学数学 ・計算量の概念 オーダーキツイっすよ… O>109からが危険と言われても109という数字が覚えられない

・配列に記録して添字で呼び出して計算量を減らす例のやり方 よく見る ・List、Sort 特に地図の作り方 よく見る ・階乗 作っておくと楽できる ・最小公倍数、最大公約数 本番で必要になった時一から作ると遅い ・素数判定、全約数 本番で必要になった時一から作ると遅い ・全探索 よく見る ・ビット全探索 まれによく見る

(・順列総当たり 頻度は低いがたまに出る 順列を出す関数さえ持っておけば楽だがその分差をつけられる様子) (・いもす法 同じく低頻度ながら、原理が簡単なのに緑問題へのラッキーパンチが期待できる)

(・DP 優先度極低だが、公式解説がトンチの末の離れ業みたいなC問題をDPで強引に解いた他の方の解答もあったりしたので そもそもダイクストラ法とかもDPの応用らしくなるべく早いうちに概念だけは知っておいたほうが後から得する気がした フィボナッチ数列への適用とか単純にクールでかっこいいし)

深さ優先探索幅優先探索はあんまり見ないし学習が面倒くさいので後回しにした(勿論D問題からは頻出と思われる) 二分探索もいもす法と同じくラッキーパンチが期待できると思うがヒネった形でしか見たことがなく知識が役に立ったことはない(勿論D問題からは頻出と思われる)

茶色の範囲での対計算量対処(想定O>109時の対処)については、配列添字呼び出し、算数・数学を使ったO(1)化、二分探索、いもす法等を見た。

ちまちま作ったライブラリはこちら

kisihara-c.hatenablog.com

現在岸原オカルト研究部では、黒魔術(C#、競プロ)を研究しています。 twitter:@kisihara_c

他の黒魔術研究↓

超インスタント競プロ環境構築 C# - 岸原オカルト研究部