限りなくノンフィクションに近いある日のフィクション

ゴールデンウィーク始まりましたね。ニコニコ超会議とかコスホリとか行きたかったなー。やっぱ、東京っていいなー。

某施設のための集計システム他諸々を受託開発にする話になって、ウェブも絡んでくる話だったので、社内でのミーティングに参加させられてたのですが・・・憂鬱です・・・。関わりたくなくない。。。

開発は、今時の時流に乗って、某大手のクラウドサービスを利用することになっているのですが、開発のメインとなるリーダー(L)の、あまりの計画性の無さ、場当たり的開発手法に、非常な不安を禁じ得ない。

さらには、その打ち合わせに参加している人達の全員が、ウェブアプリケーションのコードを一行も書いたことのない人達(A/B/C・・・)ばかりでシステム営業さんの集まり。新聞やテレビなどのメディアで報道されているレベルの知識と、日頃の業務知識で、聞きかじったIT用語を駆使して喋るもんだから、話は平行線。

A「ハッカーがウェブサーバーを乗っ取ったら、データベースサーバーからデータを抜き取られる!」
【心の声】いやいや、そうなんだけどね・・・ハッカーが乗っ取るのは脆弱性を放置したサーバーであって・・・・

B「ウェブサーバーからデータベースサーバーへのアクセスは禁止にしないとね。」
【心の声】ウェブシステムを全否定するんですね????

B「データベースサーバーから一定時間毎にウェブサーバーに貯めた一時データを取りいくプログラムをバッチで走らせれば!」
【心の声】たかだか受付/ステータス表示にそんな大袈裟なことする必要あるの・・・???

C「何か他に方法は?」
L「それは開発が始まってからどうとでもかなるから・・・」
【心の声】え???どうとでもなるって・・・(゚◇゚) 仕様を決めないで開発はじめちゃうの(゚◇゚)

僕「テーブルの構成とかのデータベース設計は誰がいつ頃してくれるんですかー? 最初に決めてくれないと」
L「それはまだ分からない各々のデータベースを用意してもらったら集めて纏めるから」
僕「いやいや、チームで開発するんだから、データベース設計は最初にきちんと決めておいてくれないと・・・」
L「そういうのは開発の裏の話だから、どうとでもなりますよ」
【心の声】おいおい、お前一人だけで開発すんじゃねーんだよ!!!

ここで僕は、心が折れてしまった。 っていうのも、僕はこの会社の社員じゃないのでこれ以上口を挟んでも、これからの仕事がやりにくくなるのでダンマリを決め込むことにした。

L「とりあえずどういう機能がいるかを担当者からヒヤリングしないと」
【心の声】え??? まだそのレベルなの??? おいらが参加する必要ないじゃん!!!

C「そもそもクラウドにする必要あるの? オンプレミスですれば・・・」
【心の声】こいつ、今更何言ってるの??? よくいるよね「そもそも ○○○ じゃない?」とか言ってちゃぶ台ひっくり返すバカ。

【心の声】そもそも(笑) 、何のミーティングなん???

だれかタスケテ。

ファイル名に使えない文字

C# 備忘ログ。

テキストボックスに入力したワードをそのまま ディレクトリの作成やファイル作成とかのメソッドに渡すと、例外が飛んでくることがある。ほとんどの場合、?,:,/ などの文字をエスケープしてない!のが原因。めんどくさいのう! と思いながら、それらの文字をフィルタリングするメソッドを書いてたんですが・・・結構気の利くメソッドを見つけた。

Path.GetInvalidFileNameChars()とPath.GetInvalidPathChars()メソッド。

単純にコールすると、ファイルシステム上で使えない文字をchar[]配列に格納して返してくれる! ・・・が、ドキュメントを見ると、頼りないお言葉が・・・

このメソッドから返される配列は、ファイルおよびディレクトリの名前に無効な文字の完全なセットが含まれているとは限りません。

おいおい!仕事放棄するなよぅっっっッ!
ってなわけで、結局、”CON”やら”PRN”とかは自前でフィルタリングしないといけない・・・と。

//using System;
//using System.Text.RegularExpressions;
//using System.IO;
//using System.Linq;
//...
/// <summary>
/// ファイルシステムで使用できない文字をエスケープする。
/// CON,PRNなどの文字列の場合は、before,afterを前後に付けて返す。
/// 制御文字などの文字は、16進文字コードに変換する。
/// </summary>
/// <param name="str">検査する文字</param>
/// <returns>エスケープされた文字列</returns>
public static string EscapeInvalidPathChars(string str,string before="x",string after = "x")
  {
    string rv = Regex.Replace(str,
                              string.Format(@"([{0}])",Regex.Escape(new String(Path.GetInvalidFileNameChars()))),
                              m => Uri.HexEscape(m.Value.First()));

    if(Regex.Match(rv,@"^(CON|PRN|AUX|NULL|COM\d|LPT\d)$",RegexOptions.IgnoreCase).Success)
      rv = string.Format("{1}{0}{2}",rv,before,after);

    return rv;
  }

そういえば・・・CONCON問題とかあったのう。。。ブルースクリーンで一喜一憂してた時代でほのぼのしてたなー

Tweet image download agent.

【追記】2017/09/19 現在「いいね」画像のTL取得に失敗しているみたい。原因究明中(デバッグ中)使用しているアカウントがロックされたので、ちょっとお手上げ。ログインするととたんにロックされるのでビルド済みのファイルは公開中止。アカウントを永久凍結されると困るので、これにて終了(^^;; チキンハートw

ちょうどGUIをWinFomsからWPFに移行中でそろそろ完了しつつあったのでちょい残念。でもまぁ、WPFのバインディングやら非同期やら勉強できたので、いい教材だったかなと。


【追記】 2017/08/27 二段階認証に対応。画面をちょっと変更。ファイル拡張子の判別がちゃんと機能してなかった・・・他色々修正しまくり。


【追記】 2017/08/20 set-cookieヘッダの取得方法を若干変更。 現在2段階認証には対応しておりません。今度対応させます。


【追記】 2017/08/19 ログイン後の画像取得が失敗する不具合を修正。


【追記】2017/08/18 ↓の原因をほぼ特定。暫定的に修正したものを更新予定。


【追記】2017/08/17 ログインのプロセスが変更になった関係で、現在、ログインが成功しても画像の取得に失敗します。ログイン自体が失敗している模様です。また調査次第修正できるようであれば、修正します m(__)m


【追記】2017/07/09 取得するファイルタイプ(拡張子)、ファイルサイズの上下限を設定できるようにした。コードのリファクタリング実施。


【追記】2016/09/06 テキストボックスのところをコンボボックスに張り替え。新しいものから10個まで入力履歴を記憶できるように修正。他、諸々修正。


【追記】2016/04/27 GW前に、ちまちま修正他、検索ワードに対応。これで画像収集が捗るわい(^^;


ちょっと前に書いたツイッターの画像を一括ダウンロードするやつ、のGUI版を 非同期タスクのお勉強も兼ねて日曜プログラミング(^^;

コンソールでコマンドを打つ方が慣れているのでわざわざGUIみたいなクソめんどくさいもん書く必要もなかったんですが・・・。

とくに最近、C#でアシンクやらアウェイトやらウェイタブルとか今まで見たこともないキーワードがガンガン出てくるようなコードを見る機会が多くなったので、勉強がてら練習で作ってみました。・・・・というレベルです(m_m)
とはいいつつ、awaitとかasyncとかまだよく分からないので、Task.Run()をふんだんにちりばめてみました(^_^;;; ま、自分で使うツールだから動けばいいや。
検索とかはまだ実装していません、というか、自分には必要ないので、やるつもり無し。時間があればまたブラウザで解析して・・・時間があれば・・・。
そもそもこの手のツールは他にもっと便利なソフトが窓の杜とかVectorとか探せばあると思うので。。。
動画とかも落とせればいいかなー、とか思って昼休みにchromeの開発者ツールでちょっと調べてみたけど、結構めんどくさそうですね・・・。

twitterimageagent-1 twitterAgent2

Twitter APIじゃないので、ブラウザでの表示方法が変更されると誤動作するでしょう。

ビルド済みのファイルとあまり綺麗では無いソースファイルは、OSDN.JPの作業部屋 ↓↓↓から。(使い方よく分かってません・・・)
https://osdn.jp/users/earlgreyx/pf/TwitterImageDownloadAgent/wiki/FrontPage

CSSで文字回転

HTMLで表組みを組んでいくと、カラム数が多くなるとどうしても↓の左端のように不格好になりますよねぇ。。。。
damedame
イラレとかで文字を縦書きにして描画してSVGで書き出して配置すれば一応解決しますが・・・できるならそんなメンドッチーこと抜きに、画像を使わずCSSだけで済ませたい・・・。

はじめは、writing-mode プロパティを使えば縦書きにできるやろ???? と思ってth要素にwriting-mode: vertical-lrと設定してみたけど、だめだった。それならば・・・と思って、<th>タグ内のテキストを<span>タグで囲ってやり、そのspan要素に writing-mode: vertical-lr;を設定すれば一応縦書きになってくれた。
でも、望んでいるものと違う。縦書きだとアルファベットが90度回転してしまうので、縦書きではなく、横書きのまま90度回転した状態になってほしいんだな。。。

で、CSS3ならtransformプロパティでテキスト回転できる!ってのをグーグル先生に教えてもらって早速やってみたんですが・・・これがなかなか、圧倒的な知識不足でスマートな指定が分からない。試行錯誤して下記のような感じにできました。
kaiten
しかし・・・やり方がスマートじゃない・・・・。

<!-- HTML 抜粋 -->
<tr>
  <th><span style="margin-top:3em;">ほにゃらら</span></th>
  <td>
     ナンチャラ<br>
     かんちゃら
  </td>
</tr>

で、CSSは

/* ベンダープレフィックスは省略 */
th {
  vertical-align: middle;
  text-align: left;
  width: 1em !important;
}
th > span {
  transform: rotate(-90deg);
  transform-origin: left top;
  display: inline-block;
  white-space: nowrap;
  position: absolute;
  line-height: 1;
}

ようするに、セル内のspan要素を反時計回りに90度回転。デフォルトでspan要素の中心で回転するので不揃いになるので、回転軸は 左端上に設定。これだけではダメで、左端で回転するのでせっかくth要素でvertical-align:middleにして縦中央表示させているのにずれてしまう。これを補正するため、span要素にわざわざstyle属性で、span要素内の文字数の半分の長さだけマージンを設定。

span要素を補正するのはスクリプトを使って、文字数を割り出して・・・って自動でやればいいかもしれない。

/* サンプル */
(function($)
{
  $('th > span').each( function(){ $(this).css('margin-top', $(this).width() / 2); } );
}(jQuery);

一応画像は使わずできたけど、正直やり方が強引過ぎて納得できない。たぶんもっとCSS3のプロパティとか探せばパシッとスマートな設定(プロパティ・値)があるのかもしれないけど・・・ザラッと調べてみた感じ見つけられなかった。

グーグル先生にどういうワードで検索すればヒットするんだろ・・・T(;_;)T 教えてエロい人!

SQLServer on Linux !?

これは、マイクロソフトがWindowsを捨て去る布石なのか??

来年中盤以降に マイクロソフトのサーバーソフトウェア群における中核とも言える SQLServer の Linux 用・・・(たぶん Redhat Enterprise Linux用だと思うんだけど)をリリースするという・・・。
http://blogs.microsoft.com/blog/2016/03/07/announcing-sql-server-on-linux/

SQLServerがLinux上で稼働する、ということは、次に来るのは当然 “.NET Framework on Linux”とか???(Monoプロジェクトがありますけど・・・) もしそうなったら、もうWindows Serverである意味がないやん!

サーバーOSに関して考えればOSを選んでからサーバーウェアを選ぶという時代じゃないですよね。実現したいサービスがあって、それを実現するためのサーバーウェアを選択して、それから最終的にOSを選ぶ・・・っていう。

さらにクラウドコンピューティングとか仮想化とか・・・、正直、OSなんか、もう、どれでもいいんですよね。なんかもうWindowsとかLinuxとかMacOSとかBSDとか、どれでも、いいんすよ。

ま、こんなこと、今更感が満載なんですけどね。
追記:
そういえば、マイクロソフトは Xamarinも買収しましたよね。SQLServer on Linuxも含め、いずれはmonoプロジェクトも取り込んで、ネット上のクライアントとなるアプリ開発、サービス開発に必要なバックエンドソフトウェアと、必要なものがほとんどすべてマイクロソフトからリリースされることになったわけで。