転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

放置気味なこのブログが、最近急にアクセスが増えてきている。

放置気味なこのブログが、最近急にアクセスが増えてきている。

何事も飽きっぽい性分なのだが、例に漏れずブログ更新も飽きてしまっていた。「100記事書けばアクセスが増える」、「200記事書けばアクセスが増える」、「300記事書けばアクセスが増える」とネットの情報につられて、一時期は毎日更新してたどり着いた結論が

「どんなに書いてもアクセスが増えない!!」

だった。というのも、アクセスが増えるような高クオリティーの記事を300記事書いて初めてアクセスが増えるのであって、何も考えずにただ書いただけの300記事ではアクセスが増えるわけではない。元々その事実に気づいてはいたが、結果をつきつけられて一気にブログを更新する気力がなくなってしまった。

そもそもブログを始めた動機は、「ブログを書けば月に5万円ほど小遣いを稼げそう」というもので、ブログ更新そのものに目的を置いていないため、ブログ更新のその先が何もないとやる気を失ってしまうのは当然だ。ここで自分の意見を書いておくと、「ブログで収益を出すのは死ぬほど大変」ということ。当たり前だが、ブログで収益を得るためには「面白い記事」という結果が求められる。しかも、コンスタンスに。
こう考えると、失敗しても給料が毎月いただけるサラリーマンという職業は、素晴らしいと実感する。

と、約500文字かけてブログを放置するに至った経緯をまとめたのが、この記事で言いたいのは、そんな放置していたブログが急にアクセスが増えてきているというタイトルそのまんまのこと。
これまで、月平均500アクセスから700アクセス程度だったのだが、月に2000アクセスまで伸びてきた。最近、ブログ更新していないのに!

人間、結果が出るとやる気が出るというもの。もちろん、収益に繋がるほどのアクセスではないが、変化が目に見えることが嬉しい。
ということで、今この記事を更新するに至ったわけだが、やはり大事なのはクオリティーが低くても300記事を更新したという事実。となると、このまま10年くらいブログを更新し続けて、記事が3000記事くらいになればアクセスも月に20000アクセスぐらいになるのでは?と考える。(もちろん、そう単純ではないのだが。。。)そこで大事になってくるのが、継続力だ。

物事を継続するために必要なこと

冒頭で飽きっぽいと自己分析をしているぐらいだから、継続力が圧倒的に足りていないのは重々承知している。だからこそ、継続させるための工夫をこらす必要がある。
そこで、ブログを続けることで得られるメリットを考えてみた。

  1. 続けていれば、お金を得られる。
  2. 仕事で報告書などを書くことが多いため、文章力が身につく。
  3. 自分が書いたものを、多くの人に読んでもらえるのは単純に嬉しい。
  4. さらには、スターがついたりなど、ポジティブな反応があればなお嬉しい。

考えついたのが、この4点。分析をすると、「1、2は自分に利益があるメリット」、「3、4は自分の承認欲求が満たされるメリット」だと考える。
1は達成する難易度が高い、2は結果がわかりづらい(文章力があがったことを実感じづらい)が、3、4ははてなブログのアクセス数や、スター機能で結果が分かりやすいし、今もアクセスが増えたり、スターもたまにいただいているので難易度としてもそこまで高くない。

とすると、ブログを継続する意味はあると考える。自分の場合は、「やらなくてはならないこと」と頭で認識してしまうと一気にやる気が削がれる。
だからこそ、これらメリットを十分に意識しつつ、さらには「ブログを書くのが楽しい」という、行為そのものを目的化させないと何事も続かないと思う。(そうなるまでが、大変だが。。)

ということで、これからもゆるーくブログ更新していきます。

【ゲームプレイ】【F1_2017】レースゲーム初心者がワールドチャンピオンを目指す

突然ですが、急にF1にハマりだした。
これまで車関係に全く興味がなく、何なら周りにF1好きがかなりいたのにも関わらずだ。

きっかけとしては、Netflix制作のF1のドキュメンタリー。これはね、俺みたいな素人にもF1の魅力が伝わるように作られてるからホントおすすめです。

www.netflix.com

で、F1の2020シーズンを楽しみに待っていたら、まさかの新型コロナウィルスにより第1戦目のオランダグランプリが延期。。で、2戦目以降も延期の連続で、4月になってもシーズン開始の目処が立っていないとか。

見たいのに見れないとなると、さらに興味は湧いてきたんで、こんな本を買った。 

エンジニアが明かすF1の世界

エンジニアが明かすF1の世界

 

全くの素人には内容ちょい難しめやけど、これまた面白い。レーサーではなく、エンジニア視点からF1の面白さが語られてるところが、たまりません。

と、F1の興味が高まりまくったところで、F1のゲームを購入。もともとレースゲームはかなり不得意というか、ほぼやったことなく飽きる可能性があるので、ソフトは中古でF1 2017にした。F1 2019でもよかったんやけどね。 

F1 2017 - PS4

F1 2017 - PS4

  • 発売日: 2017/09/14
  • メディア: Video Game
 

さっそくゲームを始めたんやけど、このゲームはチュートリアルが無いのに、操作方法がよくわからん。というか、F1マシンの細かな設定が色々できるんやろうけど、専門用語が多すぎて、何をどうしていいかわからん。
これは、ゲームで練習しつつ、F1のことも勉強してかなあかん。。ということで、勉強した内容はこのブログに書き留めていく。
あと、自分がどれだけ上手くなっているか確かめるためにも、レースの様子をYouTubeにアップしていくことにした。


#1【F1_2017】レースゲーム初心者がワールドチャンピオンを目指す

 順調にうまくなっていったら、ハンコンも購入しようかな。 

C#を勉強する16_その他の文字列操作

文字配列から文字列を生成する

// 配列の生成
var chars = new char[] { 'P', 'r', 'o', 'g', 'r', 'a', 'm', };
// 文字配列から文字列の生成
var str = new string(chars);

数値を文字列に変換する

C#では、数値を文字列に変換する方法が、「ToStringメソッド」と「String.Formatメソッド」の2通りある。しかし、ToStringメソッドには色々制限があるため、基本的にはString.Formatメソッドを使うのがよい。

int number = 12345;
// 文字列変換
Console.WriteLine(string.Format("{0}", number));

指定した書式で文字列を整形する

この場合も、string.Formatメソッドを使う。

string familyName = "yamada";
string lastName = "taro";

Console.WriteLine("FamilyaName={0}; LastName={1}", familyName, lastName);

C#を勉強する15_文字列の連結と分割

次は文字列の連結と分割。文字連結といえば、+演算子

var name = "山田" + "TARO";

連結はこの+演算子でだいたい事足りるが、文字列配列の場合はJoinメソッドを使うと便利な使い方ができる。

var languages = new[] { "C", "Java", "VB", "Ruby" ,};
// 区切り文字を指定
var separator = "+";
var result = String.Join(separator, languages);
// C+Java+VB+Rubyと出力される
Console.WriteLine(result);

Joinメソッドは、指定した区切り文字で文字配列の各要素を連結したが、Splitメソッドでは指定した文字で文字列を分割することができる。

var text = "The quick brown fox jumps over the lazy dog";
// {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog" }が格納される
string[] words = text.Split(' ');

Splitメソッドはオーバーロードされたメソッドもあり、これを使うと複数の区切り文字を指定できる。

var text = "The quick brown fox jumps over the lazy dog.";
// 空白とピリオドを区切り文字に指定している。
// 第2引数は、空の配列要素を含めないように指定
string[] words = text.Split(new[] { ' ', '.' },StringSplitOptions.RemoveEmptyEntries);

ここまで文字列連結についてまとめてきたが、文字列は不変オブジェクトである。
以下のようなコードの場合、s1は新たな6文字分のインスタンスが作成されている。

var s1 = "ABC";
s1 = s1 + "XYZ";

毎回インスタンスを作成していたのでは非効率なため、StringBuilderクラスが用意されている。

var sb = new StringBuilder();
// 文字列を追加
sb.Append("やまだ");
sb.Append("TARO");

// やまだTAROと出力
// ToString()メソッドで、文字列に変換
Console.WriteLine(sb.ToString());

C#を勉強する14_文字列の変換

次は本当によく出てくる文字列の変換。競技プログラミングの問題で、「本当は'L'と入力するところを、誤って'i'と入力した。プログラムで'i'の部分を'L'に変換すること」などがある。

文字列の前後の空白を取り除く

var target = " non-whitespace ";
// 空白が取り除かれた文字列を返す
var replaced = target.Trim();

上では前後の空白を取り除いたが、前と後ろの空白だけ取り除きたい場合のメソッドも用意されている。

var replace1 = target.TrimStart();
var replace2 = target.TrimEnd();

指定した位置から任意の数の文字を削除する

var target = "01234ABC567";
// ABCが削除され、文字列「01234567」を返す
var result = target.Remove(5, 3);

文字列に別の文字列を挿入する

var target = "01234";
// 01abc234を返す
var result = target.Insert(2, "abc");

文字列を変換する

var target = "I hope you";
// hopeがwishに置き換えられ、I wish youを返す
var replaced = target.Replace("hope", "wish");
var target = "I hope you";
// 小文字を大文字に変換し、返す
var replaced = target.ToUpper();
// 大文字を小文字に変換し、返す
var replaced2 = replaced.ToLower();

C#を勉強する13_文字列の検索と抽出

前回は、文字列の判定だった。そのため戻り値はboolだったが、今度は文字列の抽出を行う。

部分文字列を検索し、その位置を求める

var target = "1234ABC567";
// 0から始まるため「4」を返す
var index = target.IndexOf("ABC");

文字列の一部を取り出す

var target = "1234ABC567";
var index = target.IndexOf("ABC");
// 指定した開始位置から最後まで取り出す
var searchStr = target.Substring(index); // ABC567が抽出される

Substringは、取り出す長さも指定できる。
ここで注意が必要なのが、第2引数に渡すのは第1引数から数えば長さということ。以下であれば、Aからスタートした長さなので長さを3にすると「ABC」と出力されるが、長さを6を指定すると「ABC567」が出力される。

var target = "1234ABC567";
var index = target.IndexOf("ABC");
// ABCを抽出する
var searchStr = target.Substring(index, 3);

C#を勉強する12_文字列の判定

前回に引き続き、文字列の操作編。今回は文字列の判定です。
文字列に関わらず、ソースを書く際気をつけないといけないのが、nullpointerexceptionだ。Stringクラスの静的メソッドには、このnull判定が用意されている。

// null あるいは空文字列の場合、trueを返す
if(String.IsNullOrEmpty(str)) { }

空文字かどうかだけ調べる場合は

// 空文字列の場合、trueを返す
if(str == String.Empty) { }

あと、こんな判定もある。

// null 空文字列か空白文字列かを調べる
if(string.IsNullOrWhiteSpace(str)) { }

ここまではnull判定だったが、文字列判定といえば「その文字列に〜が含まれているか」などの判定が多い。まずは、指定した部分文字列で始まっているか調べる方法だ。

// 指定した部分文字列で始まっている場合は、trueを返す
if(str.StartsWith("Visual")) { }

StartsWithがあるなら、EndsWithもある。

// 指定した部分文字列で終わっている場合は、trueを返す
if(str.EndsWith("Exception")) { }

次は、指定した部分文字列が含まれているかを調べる。

// 指定した部分文字列が含まれている場合は、trueを返す
if(str.Contains("Program")) { }

上は、文字列が含まれているかどうかだったが、次は文字が含まれているか。

var contains = str.Contains('b');

ここまでは部分文字列が含まれているかだったが、「小文字が入っているかどうか」など条件を満たしているかをチェックするにはLINQを使う。

var target = "C# Programming";
// 小文字がある場合は、trueを返す
var isExists = target.Any(c => Char.IsLower(c));

Anyメソッドは、文字列のうちいづれかが条件を満たしているとtrueを返した。すべての文字列が条件を満たしているかチェックする場合は、Allメソッドを使う。

var target = "141421356";
// すべての文字が数字の場合、trueを返す
var isAllDigits = target.All(c => Char.IsDigit(c));