記事一覧

好きなプログラミング言語・嫌いなプログラミング言語

先週のことですが、面白い記事を見つけました。
米国での記事ですが、開発者64,000人を調査し、開発者に愛されているプログラミング言語と嫌われているプログラミング言語のトップ25を挙げていました。
嫌われている言語のランキングは....
1.Visual Basic 6
2.VBA
3.CoffeeScript
4.VB.NET
5.Matlab
6.Objective-C
7.Assembly
8.Perl
9.Lua
10.Hack

というわけで1位は、Visual Basic 6!!
Visual Basic 6は最初のリリースが、1998年と間もなく20年のこのドッグイヤーの世界で言えば、過去の遺産も通り越して化石的な存在です。
そんな言語が1位ということは、裏返せば、まだまだ、現役でがんばっているということではないでしょうか。現在の技術からは問題も多々あるとも思うのですが、やっぱり、バランス良く一時代を築いた偉大な言語なんですね。ちょっと感動かも(笑)
プログラミングが受業に取り込まれる等、時代は変わっていきますが、このランキング、どう変わっていくのでしょうかね。
因みに愛されているプログラミング言語のランキングもありますのでまた、そんな小ネタ的な記事ですがどうぞ(^o^)

では、クマノミンでした♪

【Which Are The Most Loved and Most Hated Programming Languages|2017】
https://fossbytes.com/most-loved-and-most-hated-programming-languages/

Linux+C言語プログラミング備忘録~『NIC制御』

クマノミンです。
今回は、Linux+C言語プログラミングのうち、NICの制御というものの経験を以下に記しておこうと思います。
一般的には、一度、起動したシステム(NIC)を途中で停止したり、起動したりなんてケースはなかなかないとは思いますが....
【NICの状態取得】
まずは現在のNICの状態を取得することが必要です。
 例)#include "sys/ioctl.h"
   #include "net/if.h"
    ~
   struct ifreq ifr;
    ~
   strncpy( ifr.ifr_name, "eth0", IFNAMSIZ );
   rc = ioctl( fd, SIOCGIFFLAGS, &ifr );
    ~
上記の様にNICデバイスオープン後、ioctl()関数を実行すると構造体:ifr上にNICデバイスのステータスが格納されます。

【NICの起動もしくは停止】
取得したNICデバイスのステータスを更新することにより起動もしくは停止することができます。
 例)※の場合
    ~
   ifr.ifr_flags |= IFF_UP; ← ※停止の場合は、"ifr.ifr_flags &= ~IFF_UP;"
   rc = ioctl( sockfd, SIOCSIFFLAGS, &ifr );
    ~
上記の様にフラグ操作により、NICデバイスの起動や停止をすることができます。
応用としては、何らかのイベント毎にIPアドレスを可変させるとかとかで使える技ではないでしょうか。

Linux+C言語プログラミング備忘録~『時間制御』

クマノミンです。
今回は、Linux+C言語プログラミングのうち、時間制御というものの経験を以下に記しておこうと思います。
一般的にLinux+C言語プログラミングで時間の制御というとtime()関数で1970年1月1日 0時0分0秒からの経過時間(秒)を取得するが伝統的な方法です。
※蛇足ながら、この仕様が古い環境では、2038年問題を引き起こす元凶ですが....
ただ、この方法だと秒単位の制御しかできず、秒未満の制御はできません。そこでgettimeofday()関数を使う方法があります。
 例)
    ~
   struct timeval now_time;
    ~
   rc = gettimeofday( &now_time, NULL ) ;
    ~
上記の様に実行すると構造体:timevalのメンバーは以下の様に定義されており、
struct timeval {
time_t tv_sec;
suseconds_t tv_usec;
};

1970年1月1日 0時0分0秒基準にメンバー:tv_secには、経過時間のうちの秒数、メンバー:tv_usecには、マイクロ秒数が格納されます。これによりマイクロ秒数による制御が可能になります。
ただ、問題として、
 ①gettimeofday()関数は、C言語規格ではなく、POSIX規格のみに
  定義された関数
 ②POSIX規格に於いても非推奨となり、現在では、
  clock_gettime()が推奨されている
とあるため、clock_gettime()を使うと良い様です。
ただ、いずれにせよPOSIX規格のため、Windows上では専用のAPIで取得する必要があります。

Linux+C言語プログラミング備忘録~『ファイルシステムのフラッシュ』

クマノミンです。
今回は、Linux+C言語プログラミングのうち、ファイルシステムのフラッシュというものの経験を以下に記しておこうと思います。

プログラミングの中で必ずと言っていい位、出る課題のひとつとしてファイルアクセスがあるかと思います。例えば書込みを例に取ると流れとしては、open()~write()~close()になるかと思います。作法としては、何ら問題ありません。ただ、今時のモダンな環境下では、パフォーマンス向上のためのキャッシュが、OSカーネルやファイルシステム、ドライバと各所に埋め込まれているため、即時にディスク上に反映されるということはなかなかありません。そこでキャッシュ上のデータをディスクなどのデバイスへフラッシュする方法を以下に記します。
◯sync()
 例)#include "unistd.h"
    ~
   sync(void);
    ~
sync()関数は、上記の様に実行するだけで、バッファされたデータをファイルシステム上でフラッシュするものになる様です。ただ、仕様上、実際のデバイスへのフラッシュが完了する前に復帰するため、信頼性は今ひとつの様です。

◯ioctl()
 例)#include "sys/ioctl.h"
    ~
   rc = ioctl( fd, BLKFLSBUF, 0 );
    ~
ioctl()は、オープンしたデバイスに対する制御を行う関数で様々な機能を有しますが、そのうちのひとつとして、フラグ:BLKFLSBUFを指定することにより、どうもファイルシステム上にバッファされたデータを強制的にドライバ・デバイスへフラッシュする機能を有している様でより確実なフラッシュが可能です。ただ、どうも、ブロック型デバイスのみの様で予め、stat()関数で得られるデバイス・ステータス情報をS_ISBLK()マクロでブロック型デバイスであるか確認しておくと良い様です。

USB-シリアル変換器に関する考察

レガシィなインタフェースとは言え、その使い勝手の良さからまだまだ活躍し続けるRS-232Cシリアル・インタフェース。今時は、パソコンにはないインタフェースなので登場するが、USBからRS-232Cシリアル・インタフェースへ変換する変換器。使われる方も多くいるのではないでしょうか。弊社もよく使うインタフェースのひとつです。そんなUSB-シリアル変換器ですが、ふつうに家電店にも各社から様々な製品がリリースされており、選ぶのが困難なくらいです。弊社では、そんな中、内蔵されているチップに拘った選定をしています。
弊社では、FTDI社のFT232シリーズを推奨しています。このチップは、内蔵のFIFOの容量、特に受信バッファが物理的に大きいため、より受信時の取りこぼしの可能性が低くなるため、より信頼性が高いと言えます。
◯FT232BLスペック
ファイル 300-1.jpg

弊社で調査した結果、このFT232シリーズを使っているUSB-シリアル変換器は以下の二製品が存在していました。
◯ラトックシステム社:REX-USB60F
ファイル 300-2.jpg

◯バッファロー社:BSUSRC06
ファイル 300-3.jpg

弊社では、今回のUSB-シリアル変換器の様にひとつひとつ丁寧にコストのみならず、スペックにも拘っていきたいと考えます。
では、クマノミンでした。

【ラトックシステム社】
http://www.ratocsystems.com/

【バッファロー社】
http://buffalo.jp/

※本ブログの内容は弊社が独自に調査したものです。
 それぞれのチップ・機器の詳細については各メーカへ問合せください。

タナからひとつかみ-『Explorer++』-

今日は七夕、梅雨明けまでもう一息というところでしょうか。

今回のタナからひとつかみは、少し趣向を変えて、フリーウェアの紹介でも。

みなさまがふだん、使っているパソコン上のOSと言えば、恐らくWindowsですよね。Windowsといえば、ファイルの操作とかとかで必ず使うのは、Windows Expolorだと思います。でも、残念なことに複数のフォルダを同時に開くことができません。結果、デスクトップ上がExpolorのウィンドウだらけってことになりませんか??
そこで今回、紹介したいのが、『Expolor++』です。
ファイル 269-1.png

マルチタブ機能があるため、複数のフォルダを開いてもウィンドウはひとつとデスクトップがスッキリ。
また、ブックマーク機能もあるため、よく使うフォルダを登録しておけば、深い階層であっても一発で開くことができて、とても便利です。
他にも機能豊富なので、興味があれば、お試しあれp(^o^)q

では、クマノミンでした。

※1)あくまでも個人の感想なので、何かあっても保証はできませんよ(笑)
※2)google先生にたくさんの情報ページありです(笑)

BOMについて~私の失敗談~

今回は、BOMについての失敗談について書いてみたいと思います。

"BOM"(ボム)とは、正式には、バイトオーダーマーク (byte order mark) あるいはバイト順マーク(バイトじゅんマーク)と言われ、Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。このデータを元にUnicodeで符号化されていることおよび符号化の種類の判別に使用する。

以前、外部から入力したテキストファイルと内部で生成したテキストファイルとの比較を行うプログラムを作成したのですが、どうしても一致しないという不具合が発生しました。
テキストファイルなので、外部/内部いずれのファイルもテキストエディタで確認できるので開いてみると....
ファイル 262-1.jpg

うん、外部/内部いずれも見た目は同じ。なぜ、これが一致しないのやら(@o@)
悩むこと半日、神の声(?)、そういえば、今回の符号化形式は、Unicodeではないか!
早速、バイナリエディタで開くと
《外部からのテキストファイル》
ファイル 262-2.jpg

《内部で生成したテキストファイル》
ファイル 262-3.jpg

ガーン!(*o*)、外部からのテキストファイルはテスト用に自作したのですが、どうやら、BOM付でファイル出力する様になっていました。比較を行うプログラムは、バイトストリームで先頭から1byteづつ比較する様になっており...先頭3byteのBOMで不一致になっていることが判明!
更によくよく確認すると比較を行うプログラムは、以前のシフトJISを前提としたもので今回の仕様変更によるUnicodeは考慮していないとのこと。
原因がわかり、ホッとしました(^。^;A

【今回の教訓】
・Unicodeにより符号化されたファイルは、BOM付の場合もあるので、確認が必要
・文字コードに関する仕様変更時は、採用した文字コードの仕様に注意すること

そんな、クマノミンでした(TへT)
おわり。

タナからひとつかみ-『プログラミング言語C』-

"hello, world!"
世の中には様々なソフトウェア開発のためのプログラミング言語がありますが、多くの入門書などで最初に使われる例題が、この言葉を表示させようとするのではないでしょうか。

今回の”タナからひとつかみ”は、その原点となった例題から始まるC言語のバイブル『プログラミング言語C』。
ファイル 245-1.jpg

C言語の開発に大きく関わったブライアン・カーニハン(Brian W. Kernighan)とデニス・リッチー(Dennis M. Ritchie)によって書かれた世界でも有名なプログラミング言語に関する書籍のひとつではないでしょうか。ANSI規格制定までは、C言語のリファレンス的な扱いもされ、C言語に携わる技術者にとっては、バイブルというべき存在です。

ただ、当時の歴史背景等々でしょうか、プログラミングについての初心者向けを対象としていないため、正直、いきなり手に取るにはいささか難解であるのではというのが、正直な感想です。プログラミングについての初心者が初めてC言語に触れるのであれば、巷にある初心者向けの日本人の手で著された入門書の方をお勧めします。
本書は、シンプルで良質なサンプルコードを通じ、C言語の哲学について記された良書ではないかと思います。そのシンプルさは、UNIX哲学にも通じるものがあるのではとさえ思います。改めて、C言語について見つめ直すにいかがでしょうか。

では、クマノミンでした。

データ記述言語:JSON の紹介

こんにちは、クマノミンです。
今回は、データ記述言語:JSON についての紹介をしてみたいと思います。

データ記述言語:JSON(ジェイソン、JavaScript Object Notation)とは、 JavaScriptにおけるオブジェクトの表記法をベースとしたデータ記述言語の1つである
【特徴】
○近似の技術としては、XMLがあるが、比較的、単純で軽量である
○JavaScriptをベースとしているので、Ajax(ウェブブラウザ内で非同期通信とインターフェイスの構築などを行う技術の総称)の分野でも注目され、幅広く使われ出している
○JavaScriptをベースとしているが、C言語を始め、多くの言語でエンジンがOSS(Open Source Software)として提供されている
【文法】
○左中括弧"{“ではじまり、右中括弧"}"で終わる
○オブジェクトは、キーと値のペアで構成され、コロン“:"で区切られる
 また、複数のオブジェクトは、カンマ" , "で区切る
○データは下記の型をサポートする
 ・文字列(Unicode形式)
 ・数値型(10進数表記のみ、整数・浮動小数点可※指数表示も対応可)
 ・真偽値(trueともしくはfalse※小文字であること)
 ・配列
 ・オブジェクト

例)
  {
    "name": "クレミア  太郎",
    "age": "4",
    "birthday": [
    {
      "year": "2011",
      "month": "9",
      "day": "26"
    }]
  }

【JSONに関するエンジン】
JSONに関するエンジンのうち、C言語で且つ、OSSで提供されているものは、下記の様なものがある
・Jansson     ・parson
・js0n      ・LibU     ・json-c
・json-parser   ・jsonsl    ・WJElement
・M's JSON parser ・cJSON    ・jsmn
・cson      ・ujson4c   ・nxjson
・frozen     ・JSON_checker ・YAJL
※他、多数

◯Janssonを使ったサンプル
 ※なお、下記のソースは動作保証するものではありません
  詳細などは付属.APIリファレンスを参照にしてくださいませ
<JSONで記述された構文を解析する>
#include <stdio.h>
#include "jansson.h"

int main( int argc, char *argv[] )
 json_error_t error;
 json_t   *root_f;
 json_t   *root_str;
 
 root_f = json_load_file( "./sample.txt", 0, &error ); // JSONファイルの取得
 if( NULL != root_f ) {
  // ファイルからJSONオブジェクトを取得できた場合
  root_str = json_object_get( root_f, "name" );   // 氏名(キー:"name")を取得する
  if( NULL != root_str ) {
   if( json_is_string( root_str ) ) {
    // 正常に文字列として取得できた場合
    printf( "name:%s\n", json_string_value( root_str ) );
    …
   (省 略)
    …
  
  json_decref( root_str );              // JSONオブジェクトの開放
  json_decref( root_f );               // JSONオブジェクトの開放
 }
 
 exit 0;
}

<JSONで記述された構文を出力する>
#include <stdio.h>
#include "jansson.h"

int main( int argc, char *argv[] )
 json_t   *root_f;
 json_t   *root_str;
  …
  (省 略)
  …
 root_f = json_object();                // 新オブジェクトの生成
 if( NULL != root_f ) {
  // 新オブジェクトの生成が成功した場合
  root_str = json_string( "クレミア 太郎" );
  if( NULL != root_str ) {
   json_object_set( root_f, "name", root_str );
  }
   …
   (省 略)
   …
  json_dump_file( root_f, "./sample.txt", 0 );    // 所定のファイルへ出力する
  
  json_decref( root_str );              // JSONオブジェクトの開放
  json_decref( root_f );               // JSONオブジェクトの開放
 }
 
 exit 0;
}

◯その他
 JSON構文をチェックするに以下の様な便利なサイトもある
 《JSONLint》
 http://jsonlint.com/

Altera社、買収される!

こんにちは、ハルモグラ(m'・ω・`)mです。

少し前になりますが、Intel社がAltera社を買収するというニュースが飛び込んできました。買収金額は約167億米ドル(約2兆円)だそうです。
ファイル 189-1.png
巨額なM&Aで驚きましたが、Intel社は何を目指しているのでしょうか。
以前から両社は、業務提携していましたし、その可能性は有ったのかもしれません。
パソコン市場が伸び悩み、反対にサーバーやスマホ分野が好調だということですが、最近のサーバー市場では、マイクロプロセッサーからFPGAへ移行する動きが有るようです。つまり、パソコン市場以外の分野への市場開拓に本腰を入れ出したということでしょうか。

一Alteraユーザーとしては、両社に相乗効果をもたらすM&Aであることを期待します。そして、私の仕事にも効果的に作用すれば、嬉しいですね。