プログラミングは面白い

プログラミングの事を中心に色々書いていきます

どうやらHSP

えー、わたくしどうやらHSP持ちのようです。
最近、このHSPというのを知ったのですが、こいつの概要はググったら色々出てくるので興味がある方は調べてみてください。
すっごいざっくり言うと、めっちゃ繊細な人の事を指すようです。
精神疾患とかではなく、生まれ持った気質らしいです。

なんか昔からやたら周りが気になる性格ではありました。
人ゴミに行くと信じられないくらい疲れるし、飲み会とかも途中で帰って一人になりたい、とか普通です。
一人の時間めっちゃ大事。

そしてとにかく考え込む。
悩んで悩んで悩みぬかないと次に進めません。
非繊細さんからすると、何でそんな悩むのか分からないようなのですが、何で悩まないのか逆に分かりません。

人の考えが分かるといいますか、もちろん毎回当たるわけではないのですが、何となく何考えてるのか分かってしまいます。
子供の頃から友達とケンカした後とか、どのタイミングで謝ったら良いか、みたいなのがすっごい良くわかります。
今謝ってもダメだな、とか、なんかそうゆう空気みたいなのが分かるんです。

で、むかしこの話を友達にした事があったのですが、"そんなのわかんねーし、そもそもそんなの考える?"みたいな返答でした。
あれ?これって皆そうじゃないの?ってその時は思ったのですが、もしかしたらこれもHSP特有の何かなのかもしれません。

どうしても人に気を使ってしまうので、目上の方とメシを食いに行くと自分が全然食べられないです。
特に焼肉がめんどくさい。
お肉って人それぞれ好きな焼き加減があるじゃないですか?
そこで色々考えます。

ここで適当に焼いて皆の皿に取り分けていった方がいいかな?
いやでも、自分で食いたいタイミングとかあるだろうし皿の上にお肉いっぱいになると嫌かな?
肉焼きのプロじゃないし、好みの焼き加減まで聞いて焼くのは無理だ...
かと言って何もしないと気を使えねーやつだなって思われそうだしな...
どうしようかな...

みたいな事を皆の話を聞きながら考えているので、あまり会話は頭に入ってきません。
で、結局は適当に焼いて皿の上に乗っけていきます。
皆の食べるペース見ながら肉焼いて、話を聞いて、酒頼んで、みたいな事してるので自分の分が食えない。

仕事でも人に何かを頼んだりするのが苦手です。
頼るのが苦手。
異常に迷惑を掛けたくない気持ちが強いので、相手の作業を止めて質問したり、何かをお願いするのが億劫です。
色々考えてしまうので。
なのでPGとして初めて現場に入った時には質問がうまく出来なくて先輩によく怒られました。
今でも質問は苦手。

何でこんな性格なのかなぁ...
と何度も思ったのですが、HSPの特性を知った事で最近心が軽いです。
自分だけじゃなくて、他にも同じように生きづらさを感じてる人がいるなんて...
しかも5人に1一人の割合なので結構いるという。

これは病気でもないし、治る治らないの話ではないので、今後はもう少し生きやすい方法を模索していこうと思っています。
HSP関連の本を読みながら、あるある!って共感してるのが楽しい今日この頃w

1つ謎が解けた

昨日投稿した記事の2番の謎が解けました。

2. useを記載しなくても動くのは何故か

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 何故これで動くの...?このRouteクラスとgetメソッドはどこから呼ばれてるんだ...?
Route::get('/', function () {
    return view('welcome');
});

ファサードについて

まずこの謎を解くにはファサードと言う機能を知る必要がありました。
Laravelではこのファサードというのが良く出てくるようです。

Route::get
みたいなのがファサードです。

普通、クラスメソッドを呼び出すにはまずクラスのインスタンス化が必要ですよね。

$test = new TestA();
$test -> testmethod();

こんな感じですね。
これをファサードを使用して呼び出すと、こんな感じになります。

TestA::testmethod();

わざわざインスタンス化しないでメソッドを呼び出す事が出来るようです。
便利!
だけど、パッと見どのファイルに書かれてるクラスなのか分かりづらい気もしますね。

で、このファサードの仕組みなのですがまだキャッチアップし切れていません。
config/app.phpエイリアス設定されたクラスはuseを使用しなくてもファサードで呼び出せるようになるようです。
しかも自作も出来ちゃうらしい。
この辺は時間がある時にもう少し調べてみます。

ひとまず、なぜuseを使ってないのにクラスメソッドを呼び出せるか、
そして、どこを見ればそのクラスを呼び出してるのかが分かるようになったので前進ですね。

けど、明示的にuse文を使用した方が良いのか、useなしで記述した方がいいのか、どっちなんだろう?
謎が謎を呼ぶ...

フレームワークは便利だけどこうゆうブラックボックス多くて不安になります。
全部を知る事はたぶん無理だけど、まずは点をたくさん増やして、線にしていくのが良さそうです。

勉強したての頃は脳死で"こうゆうもの"って気にせず使っていたような気がします。
今は色んな事が気になって調べて、ある程度答えを出せるようになったのは成長の証でしょう。

参考URL

【Laravel】ファサードとは?何が便利か?どういう仕組みか? - Qiita
ファサード 6.x Laravel

Laravelで謎エラー

久しぶりにLaravelを触ってます。
謎現象が起きたのでメモ。
ちなみに問題は解決したのですが謎は解けてないので、ご存知の方からのコメントをお待ちしています。

環境

ubuntu 20.04(WSL)
PHP 7.4
Laravel 6.19.1
VSCode

現象

php artisan serveを叩くと下記エラーを吐く。
BadMethodCallException : Method Illuminate\Routing\Route::get does not exist.

原因

routes/web.phpで記述されている下記のuseがおかしい。
use Illuminate\Routing\Route;

解決方法

use Illuminate\Routing\Route;

use Illuminate\Support\Facades\Route;
に書き換える

不明な事

Laravelのプロジェクトを作成した際に、上記のuse文は予め記載されていた。
ただ、プロジェクトを作成してすぐサーバーを立ち上げて、127.0.0.1:8000にアクセスした際にはちゃんと初期ページが表示されていた。
これは推測だけど、新しいコントローラーを作成した後にサーバーを立ち上げようと思ったらこの現象が起きた。

また、このuse文がなくても何故か正常に動く。
この挙動がほんと謎。
一体どこから呼ばれてるんだ...
なんか怖い。

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 何故これで動くの...?このRouteクラスとgetメソッドはどこから呼ばれてるんだ...?
Route::get('/', function () {
    return view('welcome');
});

まとめると...
1. なぜデフォルトで間違ったuse文が記述されていたのか
2. useを記載しなくても動くのは何故か

この2点が本当に謎。
ただ、2に関してはもしかしたらオートローディングってのが関係してるかもしれない。
まだあんま調べてないけど。
これじゃなかったらもうホントわけからん

久しぶりのPHPな上に、フレームワーク分からなくて色々困惑している。
出鼻をくじかれるのはお約束。
まぁ勉強しながらまったりやって行こう。

参考URL

php - Call to undefined method Illuminate\Routing\Route::get() - Stack Overflow
composerについて初期学習まとめ - Qiita

毎日大変

全然ブログ更新してないな...
飽きちゃうんだよなぁ...

てことで、軽く近況。
おじさんは毎日頑張ってPGとして日々成長しているはずです。
しかし、やった事のない機能の実装だと、工数を算出できないので大変です。
使ったことないライブラリが絡むと、工数はさらに伸びます。

この辺は経験あるのみですね。

そういえば、私はたまにloto7を買います。
なんかランダムだと嫌だけど、自分で考えるのも面倒だったのでプログラムを作ってみました。
まぁこれもランダムではあるのですが、自分で作ったしなんとなくセーフですw

ササっと作ったやつなので動作おかしいかもしれないけどw
ループの回数やrandの数値を変えればloto6とかでも使えます。
いつかこのプログラムで大金を当ててみせましょう。

package main

import (
    "time"
    "math/rand"
    "fmt"
    "sort"
    )
    
func main(){
    var nums []int

    for len(nums) < 7 {
        chekFlg := true
        rand.Seed(time.Now().UnixNano())
        num := rand.Intn(38)
        
        if len(nums) > 0 && num != 0 {
            for _, v := range nums {
                if v == num {
                    chekFlg = false
                    break
                }
            }
            if chekFlg {
                nums = append(nums, num)
            }
        } else if num == 0 {
            continue
        } else {
            nums = append(nums, num)
        }
    }
    
    sort.Sort(sort.IntSlice(nums))
    fmt.Println(nums)
}

Goに苦しむ日々

さて、開発にアサインされて早くも3ヶ月が経ちました。
最初は本当にコードをさっぱり追えず、何をしてるのかわかりませんでした。
まぁ言い訳をするならば、それまではPHPをメインに勉強をしていたわけで、
いきなりGoやVueを理解できるわけないわけで。

Goにもだいぶ慣れてはきましたけど、それでもまだまだわからないことだらけ。
やっとポインタの概念は分かってきたかな?
それでもやっぱり???となる事あるけども。

今日は出来そうで出来ない、Goのハマったポイントを備忘録として残しておきます。

型が構造体のスライスと、string型のスライスの中身をappendする方法です。
わかると、何でこんなのでハマってたんだろう?となるんですけどね。
悔しい限りです。

package main
import "fmt"
func main(){
    
    type Test struct {
        ID string
    }
    
    var tes []Test
    array := []string{"1", "2", "3", "4", "5"}
    
    for _, v := range array {
        tes = append(tes, Test{v})
    }
    
    fmt.Printf("%+v\n", tes)

    // [{ID:1} {ID:2} {ID:3} {ID:4} {ID:5}]

}

これだけです。
割と基本ぽいですね。
何が分からなかったのか覚えてないのですが、この処理がうまく出来ずハマってました。
まだまだですね。

あ、それとブログタイトル変えました。
pythonから始まった私のエンジニア人生ですが、恐らく今後、触ることはあまりないかなーと...
PHPも今やってないし、今後もまた言語変わるかもしれないので。

私の様に高年齢でエンジニアを目指す人はきっと世の中にたくさんいるでしょう。
そんな人達に少しでも希望を持ってもらえるようなブログにしたいですね。

今一人、本当にエンジニアになれるのか不安を抱えながら独学をしているそこのアナタ。

大丈夫、頑張っていれば必ずエンジニアになれます。
1ミリでもいいので、昨日よりも成長しましょう。
その積み重ねがきっと大事。

とまぁ、駆け出しの私が偉そうに語ることではないんですけども。
寝よ

開発にアサインされて一月半が経ちました。思ったより地獄です

12月に受託開発に無事アサインされました。
しかし、思ったよりも開発現場は地獄…
決して炎上しているわけでもないし、計画通りに進んでいます。
何が地獄かと言えば、”とにかく何も出来ない”ことが地獄…。

何も経験がないので当たり前なのは分かっています。
ですが、今まで仕事をしてきて、ここまで足を引っ張る経験がなかったのでツライ…
何か質問をすれば、先輩エンジニアの手を止めてしまう。
しかし、質問しなければ先に進まない…
このジレンマがほんとキツイ。

開発言語はGoとVueです。
12月は主にフロント側の改修を担当し、1月からはサーバー側も触り始めました。

今まで独学で学んでいた事は何だったのだろう…と言うくらい、圧倒的無力…
Goでは聞いたこともないアーキテクチャを採用していて、何がどうなってるのかキャッチアップするのが大変でした。
今は多少、どんな形で実装しているのか徐々にわかってきましたが…
しかし無力…

てことで、VueとGoを使ってアプリを作ることにしました。
極力、今の開発に似せて作ってみます。
正直、簡単なアプリなのでVuexとか、大規模開発で使用するようなアーキテクチャは不要なのですけど、まぁ勉強ということで。

で、さっそく画面側でわからない事が発生し、無事に解決したので備忘録として書いておきます。
まず、わからなかったことは、コンポーネント化したモーダルを、別コンポーネントから呼び出す方法がわからなかったのです。
BootStrapを使用しているので、こいつの書き方も理解しないとなりません。
他にもやり方はあるのでしょうが、簡単なBootStrapとVueを使用したモーダルの開閉方法です

まず、VueでBootstrapが使えるように準備をしましょう。
このページ見れば導入は出来ると思います。
Bootstrap を Vue.js で使ってみよう - Qiita

導入が終わりましたら、testmodal.vueというモーダルコンポーネントと、
それを呼び出すtop.vueというコンポーネントを作成します。
まずはtestmodal.vueからです。

<div>
   <b-modal id="modal-1" title="BootstrapVue">
      <p class="my-4">Hello from modal!</p>
  </b-modal>
</div>

このページはBootStrapの公式そのままのコードです。
モーダルを開くボタンはtestmodal.vueに必要ないので削除してあります。
Modal | Components | BootstrapVue

んで、次にTop.vueです。

<template>
    <div>
  <b-button v-b-modal.modal-1 variant="danger">モーダルOPEN</b-button>
  <TestModal></TestModal>
    </div>
</template>

<script>
import TestModal from '@/components/testmodal'
export default {
    components: {
        TestModal
    },
}
</script>

これで完了です。
コンポーネントでは、testmodal.vueを使えるようにインポートし、
モーダルを開くボタンを設置するだけです。
top.vueにある、

v-b-modal.modal-1

がミソなのかな?
v-b-modalディレクティブを使用して、子コンポーネントのIDと紐づけているようです。
あとはBootstrap側でよろしくやってくれるみたいですね。
まずは基本的なことを一つ一つ理解していこう…

Vueもやりたいし、JavaScriptもやりたいし、Goもやりたいし、やりたいこと一杯。
地道にコツコツ頑張ろう。

※もし間違っていたらごめんなさい。

久しぶりに…

ブログを書いてみます。

さて、転職をして約1年が経ちました。
相変わらずPHPはやっていますが、アサインされた現場がヘルプデスクでした…
まぁ仕事に不満はないし、今までよりもNWに強くなれたのは収穫です。
しかし、肝心なエンジアとしての経験はまだまだ皆無。

現場で自分が使う、簡単なシステムをPHPで作ったり、
LAN内でサーバー建てて公開してみたり、みたいな事はできるようになりました。
けど、やっぱりそれは"開発経験"とは見られないわけで。

てことで、社長に直訴して今の現場を外してもらい、
開発現場にアサインしていただける流れになりました。
とはいえ、12月くらいからかな?
しかし今はPHPの案件がないようで、Go言語ならワンチャンあるかも、
とのことだったので一昨日からGoを勉強してます。

今までPHPだったので型を指定する機会が全然なかったのですが、
Goは型指定が必要だったり、そもそもコンパイル言語なのでササっと反応が見れるPHPと比べると少し面倒が多いです。
ポインタの概念もややこしいし、恩恵がまだわかりません。
GoでWebアプリ作ってみたいな。
やっぱりWeb系が好き。

PHPもやりつつ、Goも頑張る。