ごらくらいふ

プログラミングしたりゲームしたり

開発用CentOS仮想マシンを育成中。

ことの発端は使ってるCentOS7に最新のGitを入れたいなーというところから。

gitだけにとどまらず、CentOSを使う以上最新版のプロダクトを導入するにはmakeを使わざるを得ない。

そして、往々にしてuninstallのことは考えられていない。 やるかは脇に置いておいて、手作業でuninstallすることになり、その作業のためにはインストールに使ったtarballなどを記録しておかなきゃいけない。

そんな状況では、updateだってまともにできるかも分からない。 ならばスクラップ。スクラップ&ビルドが近道だ。

ということでVagrant+Ansibleの構成でもりもり仮想マシンを育ててる。

ついでにGitHubに載せた。

github.com

エウレカセブン ハイエボリューション 1 観てきました。(ネタバレ含有)

エウレカセブン ハイエボリューション 1 最高だった。

そう、最高。

この間エウレカセブン ハイエボリューション 1が公開されたので観に行ってきました。 公開前のPVではTVシリーズのカットと新規カットを織り交ぜて世界観ごと再編しましたという感じ。

以下、感想。多分にネタバレ含む。

続きを読む

CentOS7に`tig`をインストールした

(追記:2017-09-19 19:04)なんか変だなと思ったらCentOS6じゃなくて7だった。はやくdnfの世界に行かないと永遠に混乱し続けることになりそう。

Windowsの手元でCentOSのローカルマシンよく立ち上げてて、「ここにもtigが欲しいなー」と思ったのが始まり。 ちらっと検索してみるとrpmforgeとか使った手順が出てくるが、rpmforgeはもう終了しているので、この手順は使用できなかった。

ということで、仕方ないのでmakeインストールを実施した。あまり気は進まないけど。

前提

  • CentOS6にインストールする。
  • install先は/usr/local/binとする。
    • dotfilesbinも含めちゃってるから
  • マルチバイトに対応させる。

手順

インストールマニュアルに書いてあることを実施した。

素のままインストールすると、マルチバイト文字が文字化けしてしまうため、いくつかオプションを付与する。

  1. 依存パッケージの用意
    • git-core
    • ncurses|ncursesw
      • ncurseswが必要。
      • develパッケージのインストールが必要。
      • yum install -y ncurses-devel
    • iconv
  2. LDLIBS=-lncursesw CPPFLAGS=-DHAVE_NCURSETW_CURSES_H ./configure
  3. make prefix=/usr/local
  4. sudo make install prefix=/usr/local

所感

make installするとき、いつもuninstallするときどうすんだろうという気持ちがある。 tigMakefileにもuninstallがあったけど、インストールしたtigのバージョンに合わせてtarball回収するの?と。

その時付与したコマンドラインオプションも揮発してしまう。 じゃあmake installした際の出力をworklogにでも残していれば良いのかというと、 今回のケースでは$prefix/bin, $prefix/etcに書き出したことくらいしかわからないので、make uninstallよりも圧倒的に貧弱な対応しかできない。

やっぱパッケージっすよ。パッケージ。

参考URL

モバイル端末が5台に至ったのでスタンド(と集合充電器)を買った

モバイル端末がついに5台を超えたので、スタンドを買った。(あとUSB10ポート充電器

  • iPodと化したiPhone5
  • 水没して奇跡の復活を遂げたものの、新顔がメインを張ったため実験機送りになったiPhone5S
  • 水没野郎の代わりとしてメインを張ることになった新顔iPhone7
  • 重鎮iPad
  • 週単位で溜め込んだ通知に溺れるNexus6

まだ買って1ヶ月も経っていないが、端末それぞれを机に置くと面積を専有しすぎて本当に邪魔なので、買ってよかった感がある。

f:id:yajamon:20170912143323j:plain

それぞれ1.1mmの幅がある。端の方にひとつだけ1.5mmがある。タブレット用だと思う。 奥行きはNexus6がいい感じに納まるので、iPhone Plusシリーズも大丈夫だと思う。

ここにUSB10ポートの充電器から給電すると万能感がある。USB給電最高。早く遠距離ワイヤレス充電発展しろ。

とりあえず、5台スタンドなので、横に並べるかメタルラックこさえて上下に立体的に管理するかを考え中。

以下、買ったやつのアフィ

Bootstrapの学習をはじめた

今までちょっとした管理ツールとかばかり作っていたのでCSS frameworkは滅多に触ってこなかった。 CSSに集中せざるを得なかった案件もあるが、逆に全て調整しなくてはならずframeworkが入る余地もなかった。

と、いうことで。 モダンな(もうモダンじゃなくなってるか?)、いろんなところの基礎になってる感のあるbootstrapの学習に手を付けることにした。

github.com

とりあえずv4のドキュメントを読み進めて、Grid Layoutの基本的な部分までやった。 ここらへんはflexboxらしいので、flexbox学習の足がかりになりそうだなーという気持ち。

Componentsは色彩豊かで楽しそー。

WPFかじり: HTTP GETする

MSDNのHTTPページにリクエストを飛ばして、レスポンスから適当に表示してみる。

工程を分割

URIからリクエストの発行

var uri = "https://docs.microsoft.com/en-us/dotnet/framework/network-programming/http";
var request = WebRequest.Create(uri);
var response = await request.GetResponseAsync();

response.Close();
  • WebRequestはabstruct
  • WebRequest.Create(string uri)はFactoryで、http(s)部分を見つけるとサブクラスであるHttpWebRequestインスタンスを返却してくれるらしい
  • GetResponseAsync()を発行して初めてリクエストが飛ぶ

レスポンスを取り出す

var stream = response.GetResponseStream();
var reader = new StreamReader(stream);
var responseBody = await reader.ReadToEndAsync();

reader.Close();
  • Responseからはstreamが得られる

HTMLをパースして要素を取り出す

HtmlAgilityPackを使用する

var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(responseBody);

var title = htmlDoc.DocumentNode.SelectSingleNode("//title");

ViewModel全体コード

public class MainWindowViewModel :INotifyPropertyChanged
{
    private string _text;
    public string Text
    {
        get { return _text; }
        set
        {
            if (_text != value)
            {
                _text = value;
                NotifyPropertyChanged();
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public MainWindowViewModel()
    {
        fetchWebSite("https://docs.microsoft.com/en-us/dotnet/framework/network-programming/http");
    }

    private async void fetchWebSite(string uri)
    {
        var request = WebRequest.Create(uri);
        var response = await request.GetResponseAsync();
        var stream = response.GetResponseStream();
        var reader = new StreamReader(stream);
        var responseBody = await reader.ReadToEndAsync();

        var htmlDoc = new HtmlAgilityPack.HtmlDocument();
        htmlDoc.LoadHtml(responseBody);

        var title = htmlDoc.DocumentNode.SelectSingleNode("//title");
        Text = title.InnerHtml;

        reader.Close();
        response.Close();
    }
}

雑感

  • async methodからVMのpropertyをいじってもちゃんとUIに反映してくれるの優しい

参考リンク

WPFをかじりだした。Hello world.

直近、Web systemとしてC#に触れる機会が発生して、ついでにGUIアプリケーションの作り方にも触れたいと思ったのでかじった。

とりあえず@ITの連載をざっと流し読みして雰囲気を掴む。

public partial class MainWindow :Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MainWindowViewModel {
            text = "Hello World",
        };
    }
    public class MainWindowViewModel
    {
        public string text { get; set; }
    }
}
<Grid>
    <Label Content="{Binding text}" />
</Grid>

所感

  • MVVM
    • DataContextに突っ込んだオブジェクトのpublic propertyにBindできる
      • クラス生成しなくても即時生成objectでもbind出来なくはないらしい
  • エントリーポイントはApp.xaml
    • Buildすると中にMain()が生成されるらしい
    • Application.StartupUriにMainViewのPathが突っ込んである
      • Uriってことは、Routingあたりが居てView遷移の交通整理でもしてくれんのかな
  • View(Window?)のライフサイクルが知りたい
    • 泥のOnCreateとか、OnDestroy相当のやつ
    • View, ViewModelはいつ生まれても死んでもいいようにModelやら切り離す設計を強要してる?
      • Apprlcationのライフサイクルがあればそっち管理で十分か。あるか知らんけど。

ちょろい。いや、ちょろいと思わせてくれないと辛いんだけども。

参考URL

Insider.NET > 業務アプリInsider > 連載:WPF入門 - @IT