とある組み込み屋のブログ

駆け出しの組み込みソフトウェア屋が技術的なことから日常的なことまで、色々書きます。

ビジネス

情弱ビジネスという言葉がありますね?
YouTubeとかの広告で散々見かけますが、奪う側と奪われる側が顕著な例だと思いました(笑)
「あんなのに手を出す人がいるのか・・・?」
と思う時点でいるんですよね。。。
世界は広いです。
【絶対稼げる!】・・・
の文言とか、あとはこんなワードも聞いたことはあるのでは。
オンラインサロン、プログラミングスクール、Webライター(爆笑)、
最近だとNFTとか仮想通貨もそうです。仮想通貨は古いか。
こういう、「新しいもの」に吊られて人が集まってくるのは人間の性ですし、
そこをうまくついたビジネスなんですよね。
昔からあるじゃないですか。
「壺要りませんか?」
って。
「人が集まる」 = 「カネ」
なんですね。

人が集まれば価値は相対的に高まっていきますし、搾取される側、搾取する側がくっきりしてきます。
あとこういうビジネスをやっていてイニシアチブを取っている人は頭が良いです。
学歴も非常に良かったりします。
まあそこに集まってくるのは有象無象ですが・・・(笑)

まあこういう情弱ビジネスは絶対なくならないですし、
不況になればなるほど、金を回すためにメディアを介した布教や囃し立て、煽りが増します。
「~で・・・円稼いだ!」とかの煽り文句、最近だとYouTubeだけでなく、テレビでも見ますしね。
これが射幸心、羨望心をくすぐるんじゃないでしょうか。
特に昔から他国と比較して大きく規制もされてこなかったパチンコ・パチスロが大普及している日本の文化では、
射幸心を煽るクリティカルなワードですね。(笑)
ますます貧しい人から金持ちが金を巻き上げていきます。
多分好景気だとこういう話は少なくなる気がするんですよね。
みなさん心に余裕ができますし。
情弱ビジネス、こういったものに対してしっかりと分別が付けられる人が、「頭の良い人」であると思いますし、
私もそういった人であり続けたいです。

(そういうのにハマってしまっている友人が居たら縁を切るか距離を置こうネ!説得は効かないヨ!)

ぽかみす

sizeof

C言語

 sizeof(型、変数、etc...);

という演算子がありますね
この演算子について恥ずかしながら色々勘違いしていました...
勉強しなおさないとですね。
少し極端な例ですが、例えばこんなプログラムがあったとして、

#include <stdio.h>

int example(int *p);
int main(){
    int array[3] = {1, 2, 3};
    int result;
    
    /* 直接sizeofで配列の要素数を求める */
    result = sizeof(array) / sizeof(int);
    printf("%d\n", result); // => 3

    /* 配列をポインタで渡して関数で大きさを求めたい */
    result = example(array);
    printf("%d\n", result); // => 3?

    return 0;
}

int example(int *p){
    return sizeof(p) / sizeof(int);
}

さて、コード上にも書いていますが、
関数にて求めた2個目のresultはどんな値を取ると思いますか?
結果から言うとこうなります。

3
1

なぜこうなるのでしょうか?
実は関数の

int example(int *p){
    return sizeof(p) / sizeof(int);
}

の部分、
sizeof()の引数にint*(intポインタ)を渡しています。
つまりこれはポインタのサイズを取得しているのです。
ポインタが確保しているメモリサイズを返しているんですね。
私のPCだと4バイト確保しているようで、これを実行すると4が出力されます。
sizeof(int)はintのバイトサイズなのでintは32ビットのため、4となります。
つまり4 / 4 = 1となり、出力のresultは1となっています。
memcpyを使う機会がありまして、その第3引数にsizeofを用いたのですが
そこにポインタを入れてしまい、いつまでも4つ分の配列の要素しかコピーできないという沼に陥っていました。。。
こういう演算子を使う時は定義を明確にして使用して濫用しないようにしたいですね。

余談

あと、マークダウン記法でソース書くときのシンタックスハイライトの言語指定ですが、
C言語ソースは小文字のcじゃないとダメなんですね。。大文字はダメらしい。。

Ruby

Ruby

最近Rubyも嗜んでおりまして、
これがまたとっつきがたく、、、
スクリプト言語なのでコンパイル不要の言語なので、
慣れてしまうと連続実行とかそういうのはお手の物の代物なのですが
やはりCとは勝手が違いますね笑
ただOpenSSLが標準のライブラリで入っているのは素晴らしいです。
DESとかAESとかそういう暗号化で遊ぶことができますし、面白いですよ。たとえば、2key TripleDESもこんな簡単に組めます。

require 'openssl'

msg = "\x00" *8
c1 = OpenSSL::Cipher.new("des-ede")
c1.key = "\x23" *16
msg = c1.encrypt.update(msg)
puts msg.unpack('H*')
puts __ENCODING__

edeって言うのはencrypt decrypt encryptのことで、
Triple DESとはその名の通りDESを3回暗号化、復号化、暗号化と繰り返し、
暗号化を行います。unpack('H*')というのは、暗号化されたものを16進数1バイトごとに配列にするようなものです。(適当、うろ覚え、、、)
3-key Triple DESというのと2-key Triple DESの違いは
ずばり鍵の長さですね。
2-keyは平文の2倍長、3-keyは3倍長。
2-keyは鍵を2分割して左側で暗号化、右側で復号化をかける。
3-keyは鍵を3分割して3つの鍵で暗号、復号、暗号のフローに割り当て。

上記のコードは平文8バイトで値はオール00(16進数)で、
鍵は23(16進数)が16回繰り返されている16バイトの鍵値の、
2-key Triple DESの単純なRubyプログラムです。
たった数行で組めてしまいます。
すごいですね。

休日でも

社会人になって感じていることですが、休日の時間管理も本当に大切ですよね。
事務的にやらなければいけないことも多く大変です。
今日はスマホのプラン変更に四苦八苦していました。
そして今日どうにかなる問題ではないことがわかり、明日またやることになりました。
スマホから少しずつ節約していくことができればと思っています。
お金に関しても考えていく必要がありますし。

結果

合格

基本情報技術者試験の合格証書が届きました。
合格発表の番号にはありましたが、いざこうして証書とか来るとようやく実感できますね。

組み込み

ところで組み込みの話をしてみようと思うのですが、(唐突)
組み込みだと俗にいうプログラミング言語はCが使われます。
C言語って「制作者の意図を妨げない」を売りにしている言語でして、
書いたことを素直にプログラムは実行してくれます。
つまり、意図しないで、裏で暗黙に何かプログラムが動いたり、作られたりすることは無いんですね。
あ、勿論オブジェクトファイルとかは作りますよ。ファイルを翻訳単位でリンクしないといけないので。
場合によってはバイナリファイルとかhexファイルとか作りますしね。
裏で暗黙に動いていたりするのは、JavaScriptとかそういう系ですね。裏でファイルの実体が作られる系の。
こういったものはwebで動かすんですね。
機器に組み込む際には裏でファイルが作られてしまうような言語は以ての外で、
プログラムのバイトサイズが明らかになるものでないといけません。
webのサーバーのように無限ではなく、メモリ容量は有限ですし、
そういった機器に組み込む際にプログラムを保管しておける部分も限られています。
なので、作ったファイルを素直に動かしてくれるCが未だに使われているんですね。
ここまでCについて色々語りましたが、腕が疲れたのでこのへんで。