2016/05/06

[c/c++]最近っぽいコードを書けるようになりたい

休みなので、ぐだぐだしていた。
いや、普段からぐだぐだしてるのかもしれないが、そこは忘れてくれ。

どういう経緯か忘れたけど、たぶん私が公開しているNFCライブラリを見てくださった方を見つけた。
このライブラリだと思う。ありがたや。
https://github.com/hirokuma/libhknfcrw_c

 

あ、と思ったのが、こちら。

https://twitter.com/rivarten/status/700385332777193474?lang=ja
image

これは「ごめんなさい!」と思った。
どういう風になっているかというと、static変数がべたべたと確保してあって、各関数はそれを直接アクセスしているのだ。
だから複数向けにしたかったら、まずはこの変数たちを何とかしてやらんといかんのだ。

 

いや、これを読んだ当初は、「あー、私は組み込み屋さんだから、最小限に仕上げたかったんですよー」と心の中で思っていたのだ。

どうせR/Wは1つしか持っていなかったし。
複数考慮するとその分の動作が遅くなるし、メモリも増えがちになるから、もういいことにしておいた。
当時取り組んでいた仕事が、関数コールしてよいシーンとよくないシーンが発生するような動作クロックで、ROMもぎちぎちなプロジェクトだったので、その影響が強く出ていたのは否定しない。

 

しかし・・・いろいろ考えると、そういうものでもないということに気付いてきた。
最近はROMも多いし、RAMも多い。
動作クロックもかなり速い。
なにより、作ったライブラリが省電力対応していないので、自分の言葉に説得力が無くてねぇ。。。

 

まあ、このときは、ライブラリとして仕立てるよりも、「どうやったらRC-S620/Sは制御できるの?」が先だったので、うん、ごめんなさい、というところだ。


これとは別に、仕事でC++の単体テストをしようとした。
そのときにテストスイートを使えば簡単にできるのだろうと思っていたのだけど、そうそう簡単にはいかず、その方法はあきらめてしまった。

 

この2件が近い時期だったので、ちょっとこれじゃまずいんじゃなかろうか、と思うようになってきた。
ツールを使ったりとか、ライブラリを使ったりとか、そういうところは新しいものを取り入れていたのだが、コーディングの技術がそれに追いついていないと言うことに気付いたのだ。

C/C++は枯れてきてて、特に組み込み向けなんて昔の知識にちょろちょろっと新しいのを加えれば済むだろうなどと甘いことを思っていたが、ちゃんと腰を据えて勉強し直すというか、最近の状況に合わせていかないとねぇ。
新しい酒は新しい革袋に、というやつだ。


モダンC言語プログラミング

この本が、よく出てきていたので、買ってみた。
まだ「C言語とオブジェクト指向」しか読んでないけど、途中までは「うんうん」と思っていたが、だんだん「うっ、ここまでやるの?」となってしまった。
まあ、何事も例に過ぎないのだけど、ここまでやれるというのは参考にすべきだろう。

 

長いこと分野が近いコーディングをしてきて、あまり失敗がなくなっていると、それが正しい、と思い込んでいることがあるので、謙虚になるところから始めねばなるまい。

↑↑↑
というのを文字にして自分に読ませないと、私は頑固な方だから、なかなか思い込むことができないのだ。
ときどきくどくなるかもしれんが、すまんな。

2 件のコメント:

  1. Twitterのアカウントの主です。
    はじめまして。

    久しぶりにnfc関係を調べて、ここに来ました。
    まず、すみません。
    背景を知らずにあんなことを言ってしまって。

    いや、本当にこのブログにはお世話になっています。
    色々と記録を残して頂いていて、本当に感謝しています。
    スライド資料等も色々読み、勉強になりました。
    libhknfcrw_cが最小限の実装だった事が勉強の助けになりました。
    libnfcとかだとこうは行きませんね。

    当時趣味で作っていたシステムで、
    シングルボードコンピュータに複数のNFCRWを接続して制御する、
    というものを考えていました。
    当初は独自でC++でクラス化したライブラリを作成してそれを利用しようとしましたが、
    色々と面倒になってしまって、結局目的を達成するためにnfcpyを利用しました。
    今そのプロジェクトはその他の技術的課題を乗り越えられず中断しています。

    コンピュータに色んなデバイスをくっつけて制御するのが好きなので、
    せっかく勉強したし、もう一度NFCライブラリのC++クラス化作業を再開しようかと考えています。
    勉強した内容は殆ど忘れてしまってますが。

    最近はNFCからBluetoothやWi-Fiへ橋渡しするのが流行りなんでしょうかね。

    返信削除
    返信
    1. コメントありがとうございます。

      この記事は「私の書いたソースをちゃんと読んでくれてる人がいる!」という喜びと、書かれていた内容が自分でも気にしていた実装だったので、記録を残したまででした。
      背景というか、言い訳ですね、うん。

      趣味で作っていたシステム、というのはよいですね。
      デバイスを動かしてしまうと満足するタイプなので、作りっぱなしになってるものが多いです。。。
      私もほとんど忘れかけているのですが、新しくライブラリを作り直したいところです。

      >最近はNFCからBluetoothやWi-Fiへ橋渡しするのが流行りなんでしょうかね。
      Androidなんかは、そんな感じですね。
      ペアリングだけNFCでやって、ペアができたらもっと高速の通信に切り替えるとか。

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。