Fieldsetで表題と罫線がアンバランスなのを修正する

こんにちは。beaglesoftの真鍋です。

弊社ではDHTMLXというJavaScriptのライブラリをTypeScriptを利用してWebアプリケーションを作成しています。そんな中で出てきた技術情報を少しずつ公開できればと思っています。

dhtmlxFormのFieldsetを利用する

dhtmlxにはさまざまなライブラリがありますが、特によく利用するものとしてdhtmlxFormがあります。これは入力フォームを作成するときには欠かせないライブラリになっています。

このdhtmlxFormですが、入力フォームを作成するためにいろいろな部品が提供されています。そんな中でも今回はFieldsetを利用したときにタイトルの罫線がずれることがあるので其の対応方法についてまとめました。

事象

入力フォームを作成するときには、データのまとまり毎にカテゴライズを行います。そのようなときにFieldsetを利用します。具体的には次のような入力画面です。

dhtmlxField1.png (7.7 kB)

ごくごく普通の入力画面です。しかし、赤枠で囲った部分を見てみると罫線の表示に違和感があります。特に、右の端は線が重なっているものの若干ずれていたりします。

まぁ、些細なことなので気にしなければいいという話もあるのですが、もう少しなんとかならないかとも思います。

対応してみた

そこで、とりあえずいろいろと試してみたのですがこのようになりました。

dhtmlxField2.png (8.2 kB)

線の重なりがずれたりすることなくそれらしく見えていると思います。

変更前

dhtmlxField1_n.png (6.9 kB)

変更後

dhtmlxField2_n.png (6.5 kB)

対応方法

対応方法ですが、CSSを修正することになります。といっても、本体のCSSを修正するのではなく画面描画後にCSSを修正するのでたいしたことではありません。

// windowの作成
const dhxWins = new dhtmlXWindows();
const window = dhxWins.createWindow("facility", 20, 30, 650, 700);

// formのアタッチ
const form = window.attachForm();

// データのロード
form.loadStruct(this.getFormJson(isEdit), () => {
    $(".fs_legend").css("width", 75);
});

loadStructメソッドの第2引数には完了時の処理を定義できるので、その中でCSSを変更しています。対象となるクラスはfs_legendでこの幅を文字数に合わせて調整すると表示が変更されます。

さいごに

dhmlxは日本で利用している会社はあまりないようですが、とても便利なライブラリですので是非利用してみてください。

JavaScript UI Library, Ajax Components & HTML5 Framework - DHTMLX

また、弊社ではシステム開発のお仕事を募集しております。お役に立てることがございましたらお声がけいただければと思います。

C#でバイト配列の生成

こんにちは。beaglesoftの真鍋です。

EntityFrameworkを利用しているとバイト配列を利用することは結構あると思います。SQL Serverのrowversion型は楽観制御のVersion列として利用することが多いですが、次のようにすると簡単に作成できます。

double d = 1d;
var target = BitConverter.GetBytes(d);
Console.WriteLine(BitConverter.ToString(target));

> 00-00-00-00-00-00-F0-3F

double型は64bitの浮動小数点なので、8バイトです。一方で、SQL Serverのrowversion型も8バイトです。そのため、double型の値からバイト配列を生成することで期待値を作成することができます。

double (C# リファレンス) rowversion.aspx)

もちろん、long型でも問題ないです。

void Main()
{
    var l = 1L;
    var target = BitConverter.GetBytes(l);
    Console.WriteLine(BitConverter.ToString(target));
}


> 01-00-00-00-00-00-00-00

long (C# リファレンス)

ちなみに、int型は32bitなのでこうなります。当たり前ですね。

void Main()
{
    var i = 1;
    var target = BitConverter.GetBytes(i);
    Console.WriteLine(BitConverter.ToString(target));
}

> 01-00-00-00

それにしてもLinqPadが便利ですね。

AWSのアカウントをGitHubにpushしてしまった…

ことの起こり

昨日うっかりとしたミスからGitHubの公開リポジトリへAWSのアクセスキーIDとシークレットキーをpushしてしまいました。理由は、.zashrcに環境変数としてAWSのアクセスキーIDとシークレットキーを設定している状態で.zahrcをgit管理するためにpushしました。

pushしたとたんにメールが送信されてきた

GitHubへpushしたとほぼ同時にメールが送信されてきました。たまたま、一段落したのでPokemon GOをはじめようとしていたため、手元にiPhoneがありメールにすぐ気づきました。私信ではないので全文を載せておきます。

  • 件名

    I think I found your aws credentials

  • 本文

    Hi, It looks like you put your aws credentials on github here: https://github.com/yoichiro-manabe/dotfiles/commit/.....

    If these are actually aws credentials, you shouldn't post 'em on github. I found it, so someone else probably did too. If these are real, you should do the following:

    1. You should first change your aws credentials. As soon as you push code to Github, you should treat any exposed credentials as compromised. This page describes how to delete and reset aws credentials: http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html
    2. Look at your account to see if anyone has already started to use it. Go through all the AWS services to make sure no one messed with anything else. (in particular look for ec2 instances in all the regions). An easy way to know where to look is to go to your billing page and view all the areas that accumulated charges for the month.
    3. If you see any suspicious activity, contact aws support, and shut down the servers that the hacker has set up.
    4. Then you should use a safe method to manage your credentials in your code (i.e. by using env variables or a config file that is ignored through .gitignore)

    I'd be happy to hear any feedback or questions you have about this email. And, if you want to never get an email like this again, let me know, and I'll make sure that you are never emailed again.

    Best, Michael

    P.S. If you are wondering how I found your credentials, I made a program that scans through github looking for aws credentials. When it finds one, the program sends an email (this one) to the person that made the commit.

このメールはmKurrels/testHelpfulOwlにあったtestHelpfulOwlリポジトリにあるとおり、GitHubにAWSに関する情報を公開すると数秒でメールが送信されてくるサービス?から送信されていたメールでした。

どのようなアルゴリズムで検出しているのかなどはわからないですが、このメールのおかげで私は助かりました。とても感謝しています。

対応

とりあえず、次のことを行いました。

  1. IAMアカウントに関連するアクセスキーIDとシークレットキーを無効化のあと思い立って削除
  2. IAMアカウントのアクセスアドバイザーを確認してサービスへのアクセス状況の確認
  3. 請求情報の確認
  4. すべてのリージョンのEC2インスタンスで知らないインスタンスがないかの確認
  5. GitHubのリポジトリの削除

今考えると、1についてはIAMアカウントに関連するアクセスキーIDは無効化にする方が良かったのかもしれません。やはりそのときになると「とりあえずこうしよう」と思いついたことを行ってしまうので良くないです。

ここまでで、とりあえず特におかしなことはなかったのでいったん様子を見ることにしました。

今後の対応

今回のことは正直なところ自分がやらかすとは思っていませんでした。ただ、冷静に考えるとまず間違いなくやらかしそうなことでした。GitHubにpushすることはごくごく普通にあることです。

何が書いているかすべて把握していないけど、個人の物だからと軽い気持ちでpushしたのが今回の事象で、個人の環境だけであったことは不幸中の幸いでした。

とりあえず、うっかりGitHubに公開したを防ぐ方法はprivateリポジトリを利用することくらいしか思いつかないので、いったんそれを実践します。公開するときはセルフレビューしてからにしようと思います。

あとは、公開してしまったときに影響範囲を小さくするためのアカウント情報の管理を考える必要があります。

さいごに

うっかりミスを通知してくれた Michael さんに感謝します。彼が言うようにこのようなメールを受信することがないようにしたいです。

また、QiitaやTwitterで何度か話題になっているインシデントですが、対岸の火事と思わず自分のこととしてとらえるようにしたいと思います。