Emotion Wave Tech Blog

福岡にあるエモーションウェーブ株式会社のエンジニアが書いています。

会議について

f:id:devew:20190320171234j:plain 良い会議とは、どういう会議でしょうか?

最近、会議や打合せに取られる時間が多いので、考えてみました。

時間の効率だけを考えると、、、 よく言われるように 「アジェンダを準備して、決断を下していく。 アジェンダ以外の情報のやりとりをするのは時間の無駄で効率が悪い。」

そう考えている人も多いのではないでしょうか。 大事な会議中に、アジェンダとまるで関係のないくだらない話をするなんてもってもほかだと 昔の上司にも言われた記憶があります。私もそう思っていました。

しかし、 良い結論を出すには、、、 合理的に時間を効率的に使った会議ではなくて、 気持ちよくくだらないいろんな話をしながら楽しんだ会議だというような話を聞いて、 確かに一理あるなと思いました。

時間の効率を求める会議であれば、アジェンダ通りの時間内で終わり、無駄話厳禁の会議が価値があり、 良い結論を求める会議であれば、リラックスしていろんな話をしながら結論を考える会議が価値があるのかな。

そう考えると、 単純に報告する・情報を共有することが目的の会議(効率を求める)は、前者のような会議体をとり、 何かの方向性や結論を決めることが目的の会議(良い結論を求める)は、後者のような会議体をとった 方が価値があるように思います。

ということは、一見ダラダラしているように見える会議でも、参加者同士がダラダラ感を感じずに話して、 結論まで辿りつけたのであれば良い会議ということになるのでしょう。 参加者と時間の制約は必要かもしれませんが・・・。

ということで、今後は開催する会議の性質に合わせた会議体まで考えて、 参加者が、価値がある会議だったと思える会議を行って行きたいです。

どちらにしても、 参加者全員が会議を行う目的を共有すること が大事なようです。

これが良い会議とは?への回答になるのかなと思いました。

USB外付けHDDのフォーマット

最近はUSBメモリも大容量になってきたといえ、USB外付けHDDの容量にはかないません。 PCのデータバックアップ時に特に力を発揮してくれます。 ちなみに個人的におすすめなのはコンパクトなUSB外付けディスク。 中身は2.5インチHDDで軽量コンパクトで、電源供給もUSBでOKです。 f:id:devew:20190320171341j:plain

出荷時にフォーマットされていてすぐに使えるのは便利なのですが、用途に応じてファイルシステムを変換する必要があります。

製品によりますが大体NTFSFAT32のどちらかで出荷されることが多いようです。 NTFSFAT32どちらも一長一短あり。

NTFS

Windows標準のファイルシステム形式 各フォルダのアクセス権を設定できる。 大容量ファイルも扱えます。 この形式でフォーマットされたディスクはWindowsでしか読み書きできません。

FAT32

汎用的なファイル形式 4GBまでのファイルしか扱えません。 この形式でフォーマットされたディスクはWindowsでもMacでも読み書きできます。

4GBといったらDVD1枚くらいの容量。 WindowsMac使うしビデオカメラで録画したりするから4GB以上のファイルあるよ泣 って人もいるかも知れません。

大丈夫。まだ救済策はあります。 FAT32の後継であるexFATという形式があります。

exFAT

汎用的なファイル形式 4GB以上のファイルも扱えます。 この形式でフォーマットされたディスクはWindowsでもMacでも読めます。 WindowsXPには対応していませんでした(今はOK)。 「今はOK」というのは2009年のWindowsUpdateで対応したらしいです。

elecomが表にしてわかりやすく解説してくれています。 http://qa.elecom.co.jp/faq_detail.html?id=4047

こうしてみるとexFATに軍配が上がるかなーと思います。 exFATにフォーマットするのは簡単。外付けHDDを接続してエクスプローラで右クリック→フォーマットでexFATを選択してフォーマットしましょう。

ちなみにXFSというフォーマットもあります。これは豆知識として留めといて下さい。

XFS

Linuxファイルシステム形式 各フォルダのアクセス権を設定できる。 大容量ファイルも扱えます。 この形式でフォーマットされたディスクはWindowsでは読み書きできません。 一般人はまず利用しないフォーマットだと思います。 ちなみにTeraStationのようなNAS(ネットワークHDD)はLinuxベースなのでこのフォーマットです。

2014夏

こんにちは。中原です。

すっかり夏ですね。

今週は夏休み(お盆休み)の方が多いのではないでしょうか。

弊社も8月13日(水)- 8月17日(日)まで夏季休暇となります。 8月18日(月)より通常どおり営業致します。

皆様、水難事故等に気を付けてお過ごしください。

f:id:devew:20190320171426j:plain

photo credit: Camdiluv ♥ via photopin cc

XamlでStyle適用させる方法

最近xmalコーディングばかりなので、xamlでのスタイルの適用について書きます。

まずは、x:Keyを使用してのスタイルの適用。 x:Keyでスタイルを定義し、StaticResourceでスタイルを適用されます。

<Window.Resources>
      <style>
            <Setter Property="Width" Value="100" />
            <Setter Property="Height" Value="25" />
            <Setter Property="Background" Value="Red" />
      </style>
</Window.Resources>

<StackPanel>
      <button>Button1</button>
      <button>Button2</button>
</StackPanel>

f:id:devew:20190320171507p:plain  

x:Key属性を取るとすべてのButtonにスタイル適用する事もできます。

<Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Width" Value="100" />
        <Setter Property="Height" Value="25" />
        <Setter Property="Background" Value="Red" />
    </Style>

</Window.Resources>
<StackPanel>
    <Button>Button1</Button>
    <Button>Button2</Button>
</StackPanel>

f:id:devew:20190320171525p:plain

 

BasedOn属性を使用してスタイルを継承し、追加することもできます。

<Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Width" Value="100" />
        <Setter Property="Height" Value="25" />
        <Setter Property="Background" Value="Red" />
    </Style>
    <Style TargetType="Button" x:Key="button_style" BasedOn="{StaticResource {x:Type Button}}">
        <Setter Property="Foreground" Value="White" />
    </Style>
</Window.Resources>
<StackPanel>
    <Button Style="{StaticResource button_style}">Button1</Button>
    <Button>Button2</Button>
</StackPanel>

f:id:devew:20190320171540p:plain

 

x:TypeでTargetTypeを継承しましたが、x:Key定義を継承する事もできます。

<Window.Resources>
    <Style TargetType="Button" x:Key="base_style">
        <Setter Property="Width" Value="100" />
        <Setter Property="Height" Value="25" />
        <Setter Property="Background" Value="Red" />
    </Style>
    <Style TargetType="Button" x:Key="button_style" BasedOn="{StaticResource base_style}">
        <Setter Property="Foreground" Value="White" />
    </Style>
</Window.Resources>
<StackPanel>
    <Button Style="{StaticResource button_style}">Button1</Button>
    <Button>Button2</Button>
</StackPanel>

f:id:devew:20190320171555p:plain

簡単ですが今日はここまでとします。 次回はTriggerについて書きます。

ナップサック問題を解いてみた

こんばんわ。

業務で組み合わせ最適化を扱う業務があったので、 ナップサック問題を解いてみました。

といっても、数学得意じゃないですし、Wikipediaに書いてる内容もほとんどわかってないですが。。。 色々調べた結果、「lpsolve」を使えば実現出来そうでしたので、これを使いました。 ※DLLは、リンク先のlp_solve_5.5.2.0_dev_win64.zipから取得しました。 ※lpsolve55のDLL読み込み部分は、lp_solve_5.5.2.0_vb.net.zipから取得しました。

ナップサック問題については、ここの例題を拝借しました。

lpsolveに関しては、日本語の参考サイトがほぼないので(英語読めないし)、適当に実装してるところもありますが、 たぶん、例題のサイトと同じ解になったので、あってると思います。 以下ソースです。

Module Module1
    Private Structure OkasiInfo
        Dim name As String
        Dim price As Double
        Dim kcal As Double
    End Structure

    Public Sub Main()
        Dim okashilist = Module1.GetOkashiList()
        lpsolve55.Init(".")

        Dim kcal = okashilist.Select(Function(v) v.kcal).ToList
        kcal.Insert(0, 0)

        Dim price = okashilist.Select(Function(v) v.price).ToList
        price.Insert(0, 0)

        Dim lp = lpsolve55.make_lp(0, okashilist.Count)

        'カロリーが高くなるように
        lpsolve55.set_maxim(lp)
        lpsolve55.set_obj_fn(lp, kcal.ToArray)

        '合計金額は、300円以下に
        lpsolve55.add_constraint(lp, price.ToArray, lpsolve55.lpsolve_constr_types.LE, 300)

        '各おかしは、1度しか選択出来ないように
        For i = 1 To okashilist.Count
            Dim row(okashilist.Count) As Double
            row(i) = 1
            lpsolve55.add_constraint(lp, row, lpsolve55.lpsolve_constr_types.LE, 1)
        Next

        '整数のみになるように
        For i = 0 To okashilist.Count
            lpsolve55.set_int(lp, i, True)
        Next

        '算出結果
        lpsolve55.solve(lp)

        Dim col_cnt = lpsolve55.get_Ncolumns(lp)
        Dim col(col_cnt) As Double

        '算出結果を取得
        lpsolve55.get_variables(lp, col)

        Dim sum_kcal As Integer
        Dim sum_price As Integer
        Dim j As Integer = 0
        For Each wk In okashilist
            If col(j) > 0 Then
                Console.WriteLine(String.Format("{0} \{1} {2}本", wk.name, wk.price, col(j)))

                sum_kcal = sum_kcal + wk.kcal * col(j)
                sum_price = sum_price + wk.price * col(j)
            End If

            j += 1
        Next
        Console.WriteLine("カロリ" &amp; ":" &amp; sum_kcal)
        Console.WriteLine("金額" &amp; ":" &amp; sum_price)

        Console.ReadLine()
    End Sub

    Private Function GetOkashiList() As List(Of OkasiInfo)
        Dim okasiList As New List(Of OkasiInfo)
        okasiList.Add(New OkasiInfo With {.name = "ポッキー", .price = 168, .kcal = 496})
        okasiList.Add(New OkasiInfo With {.name = "うまい棒", .price = 10, .kcal = 45})
        okasiList.Add(New OkasiInfo With {.name = "じゃがりこ", .price = 145, .kcal = 325})
        okasiList.Add(New OkasiInfo With {.name = "ベビースターラーメン", .price = 60, .kcal = 347})
        okasiList.Add(New OkasiInfo With {.name = "チロルチョコ", .price = 10, .kcal = 61})
        okasiList.Add(New OkasiInfo With {.name = "かっぱえびせん", .price = 124, .kcal = 486})
        okasiList.Add(New OkasiInfo With {.name = "サッポロポテト", .price = 124, .kcal = 446})
        okasiList.Add(New OkasiInfo With {.name = "都こんぶ", .price = 105, .kcal = 22})
        okasiList.Add(New OkasiInfo With {.name = "ヨーグレッとは入れもん", .price = 126, .kcal = 110})
        okasiList.Add(New OkasiInfo With {.name = "おにぎりせんべい", .price = 184, .kcal = 475})

        Return okasiList

    End Function
End Module