Fu-koの足跡

コンピュータが苦手です。得体のしれない感じに抵抗があります。考えるのは好きです。すっきりしたロジックに感動します。ちゃんと理解すれば好きになれるはずと信じて、その過程を残そうと思います。

printfでの16進表示(符号拡張)

ダンプ表示プログラムを書いていて、符号有無とprintfの型変換に引っかかったのでメモ。

■問題
2桁16進数指定なのに上位がF埋めされて、8桁表示される場合がある。

■原因
ファイルから読み込んだバッファをchar型配列に格納していた為。
printfで出力する際にint型に暗黙の型変換され、0x80~0xFFが負数として出力されていた。

■対策
バッファを格納する型をunsigned char型配列に変更。

■詳細
0xFFを格納した際の、charとunsigned charでの動作の違いは下記の通り。

  • char型の0xFFは「-1」. printfの第二引数はintなので渡すと上位3バイトがFFFFFFで埋められて「FFFFFFFF」が出力される。
  • unsigned char型の0xFFは「255」. printfに渡すと上位3バイトが「000000」で埋められるので「FF」が出力される。

[確認用ソース]

#include <stdio.h>

int main()
{
	char c = 0xFF;
	printf("%02X\r\n", c);

	unsigned char uc = 0xFF;
	printf("%02X\r\n", uc);
}

[実行結果]

FFFFFFFF
FF

stringとStringBuilder

GWのまとまった時間を利用して、C#の基礎を勉強中。

string(System.String)型とSystem.Text.StringBuilder型の性能についてのメモ。

■文字列追加時

string(System.String)型→オブジェクトを再生成

System.Text.StringBuilder型→オブジェクトは再生せず、サイズを拡張

■動作時間確認

<ソース>

using System;
using System.Linq;
using System.Text;
using System.Diagnostics;

class Program
{
  static void Main(string[] args)
  {
    int N = 100000;
    Stopwatch sw = new Stopwatch();

    ////////////////////////////////////////////////
    sw.Start();

    string str = "";
    foreach (int i in Enumerable.Range(0, N))
    {
      str += i.ToString();
    }
    //Console.WriteLine(str);

    sw.Stop();
    Console.WriteLine(sw.Elapsed);
    ////////////////////////////////////////////////

    sw.Reset();

    ////////////////////////////////////////////////
    sw.Start();

    var strb = new StringBuilder();
    foreach (int i in Enumerable.Range(0, N))
    {
      strb.Append(i.ToString());
    }
    //Console.WriteLine(strb);
  
    sw.Stop();
    Console.WriteLine(sw.Elapsed);
    ////////////////////////////////////////////////
  }
}

<実行結果>

00:00:54.6094578
00:00:00.0234677

迷走中

目先の結果にとらわれすぎて

何がしたいのか、どうなりたいのかが分からなくなっている。

 

まわりの期待に応えようとして

自分で自分のハードルを上げて

動きにくくなっている。

 

原点に立ち戻ろう。

どうなりたいのか。

 

それに向かって何かする。一日ひとつでも。

それが即何か結果につながるわけでなくても。

続けることに意味がある。

 

人の話を聞こう。

自分の経験、考えと照らし合わせながらではなく、

その人が何を考えているのかを知ろうとしよう。

 

走ろう。

 

本を読もう。

 

英語に触れよう。

 

ピアノを弾こう。

 

 

7つの習慣の漫画版を読んだ。

少し心が楽になった。

 

 

迷って、何か見つけて、突き進んで、でも、気づけばまた迷いの中。

その繰り返し。

だけど、何度も繰り返すことで、徐々に自分をコントロールできるようになるのかな。

 

動けばいい?

windows APIを使って通信系のプログラムを作成しています。

 

疑似環境で動いても本番環境で動くかわからない。

RFCで基本的な仕様を確認しながら進めているけれど、

知識/経験がなさ過ぎて、本番環境での品質が保証できるのか。

不安しかない。

 

既存コードはコーディングスタイルも統一されておらず、

立ち上げの担当者がいないので、設計思想もコードから読み取るしかない状態。

クラス設計、関数設計にかなり悩まされます。

 

そんな中、先輩から言われた「動けばいい」。

その場は流したけれど、そんな気持ちで作りたくないのが正直なところ。

 

動くことは最低限。

まだそこが満たされていないので、それが最優先なのはわかっているけれど。

可読性、安全性、メンテナンス性、解析性、、、可能な限り追求したい。

次に誰が改修するかわからないし、

誰にでも理解しやすいものを作りたい。

 

それにしても、新しい概念を導入するって難しい。

今までは先輩の作った方針に乗っかってきたんだなと実感。

 

経験が少ないから。そんな言い訳したくない。

調べて考えて、いろんな可能性をイメージする。

 

今できる最大限のことをするんだ。

 

初めの一歩

コンピュータが苦手なソフトウェア開発者fu-koの備忘録です。

 

職場での環境の変化にあたふたしている自分が面白いので、

その思いを何らかの形で残そうと思い、blogという選択をしました。

 

2年強、同じチームで開発をしてきましたが、

限られた世界で慣れたことをする日々に不安を覚え、

違う世界を見てみたいと希望して別のチームに異動させてもらいました。

 

案の定、今まで何事もなくできていたことができない、

ちょっとしたメールの返信にものすごく時間がかかる、

そもそも開発力が全然ない、

想定はしていたけれど、無力さを感じる今日この頃。

 

頭では分かっていて、色々思うところはあるのに、

自分の立場とか、まわりの目が気になって、全然動けない。

わかってしまえば簡単なことなのに、適切な判断ができない。

視野は狭いし、あたふたしているだけ。

どつぼにはまっているのが自分でもわかってるけど、抜け出せない。

 

でもそんな自分が面白い。

不器用だなと思います。

 

せっかく得た環境。

失敗を恐れず、発信して、折られて立ち止まっても、いろいろ考えて、

へこむときはとことんへこんで、でもまた立ち上がって、、、

この機会にとことんもがこう。

 

いい人に囲まれています。

日々勉強になるし、恵まれていると感じます。

変に気を遣うから、逆に気を遣わせてしまうのだろうな。

 

さて、どうしようか。

 

アウトプットの生産性をあげよう。細かいことは気にしすぎない。大抵のことは取り戻せるのだから。

いったん立ち止まろう。でも足踏みしすぎない。違う視点で考える。意図を読み取る。いったん考えたら腹をくくる。

自分をもっと出そう。どうみられるかなんて後からついてくるもの。考えたって仕方ない。動いてから考えよう。

 

何もできない自分が自分なんだろうな。

できない自分を認めよう。

できないことの方が多いんだから。

 

明日はどんな自分に出会うのだろう。

楽しみだ。