プログラミングとかブログ

Unity/C#/SRPGStudio/RPGツクールMVの情報とかその他気になったことを調べて書きます。

【C#】数字文字列を総和する

LINQのSumを使いたかっただけ。

using System;
using System.Linq;

static void Main(string[] args)
{
    string numStr = "1234567890123456789";
    int sum = numStr.Sum(s => s - '0');

    Console.WriteLine(sum);//90
}

CEATEC2017に行った

幕張は遠いっすね。
展示会というと会社員ばっかで私服は浮くかなと戦々恐々としてたが、全くの杞憂だった。
そりゃスーツ率のほうが圧倒的に多いんだけど、ふつうに私服の人もいたし、高校生っぽいのもいたし、爺さんもいた。


とりたてて何か見たいものがあるわけではなかったが、一度行ってみたかったので。
やっぱりAIやIoT関連が多かった。
VRに仮想通貨、ドローンもあったし、トレンドをつかむには良かったと思う。
(いま気づいたがホール456しか回ってなかった)
当たり前だけどTDKとか大手はやっぱり壁に配置されるんだなと思った。

以下気になったやつを適当に。

超電導で動くリニアっぽいデモ。


やっぱり動きがあると目立つなぁと思った。
通信高速化とか視覚化しづらいものはどうしても気を引かれにくい。


タカラトミーのブースで、COZMOというおもちゃがあった。
Scratchみたいなプログラミングができるロボットらしい。

バンナムのとこのラジコンロボット。輸入してるだけっぽい?
f:id:shirakamisauto:20171007141927j:plain
グネグネ動いてキモい。
こちらもかんたんなプログラミングで動きをいじれるらしい。
誰でもプログラミングに触れられる時代はもうやってきていると感じた。
ハロはガンダム知らないのでスルーした。


NICTのブースで目を引いたのはWISDOM Xという検索システム。
wisdom-nict.jp
適当に単語を入力すると質問文を生成してくれる。
思いもよらない結果を出してくれるのは面白いと思う。


「全巻一冊 北斗の拳」という、紙媒体の中に電子ペーパーを突っ込んだやつのデモがあった。
さすがにページをめくるわけではなく、ボタン押下でページ送りする形態。
以前からめくれる電子ペーパーがあればなぁと思っていて、要するに製本風の電子ペーパーにデータをDLすると中身が変わるようなのを想定しているのだが、当然それぞれページ数が違うので無理だなと思っていた。
でもこれみたいにページ数を固定してしまえば可能なのかなとも思った。
コンテンツがハード依存になるというのが問題だけど。


やたら名前のかっこいい炎重工
自動無人ボートが目を引いた。
指定コースをぐるぐる回ってくれるらしい。


NEDOの展示で面白かったのはセンサーへの攻撃に対する防御の話。
IoTが流行るということはセンサー類も多用されるわけで、当然攻撃対象にもなる。
自動運転車のセンサーを狂わせて事故らせるとかやられたら大変だしね。
こういうセキュリティも必要なんだと感心した。
あと量子コンピュータのポスターもあった。
量子コンピュータとは書いてなかったけど、組合せ最適化問題が高速に解けるとあったし実質そうだろう。


海外の会社も参加してたんだけどガラガラでかわいそうになった。
担当が通話可能か判別しづらい外人だし、解説ポスターも英語だし、あれじゃあ近寄りがたいわ。
なんで参加したんだろう。

f:id:shirakamisauto:20171008143242j:plain
その海外企業ブースの展示。
説明がなかったので分からないが3Dホログラムらしい。
横に回ってみてもちゃんと形になっていた。
目を引く分、ここは人が集まっていた。


2時間ぐらいうろついて足が痛くなったから帰った。

【C#】自分がリツイートしたツイートをリンク付きでHTML出力するアプリとコード

RTしたツイートだけ確認したいなぁと思ったら検索クエリにないので自作。
DLはこちら

使い方

1.ツイッターの全ツイート履歴をダウンロードしてください
Twitter、「全ツイート履歴」をダウンロードできる機能、日本でも提供開始 -INTERNET Watch Watch
(フォルダ内のtweets.csvを開けば大体確認できるけどダルい)

2.ダウンロードした中身を適当なフォルダにつっこんで、そのフォルダをアプリにD&Dしてください

3.RetweetData.htmlが吐き出されるので開くとリンク一覧が出ます。

f:id:shirakamisauto:20170828154700j:plain

一部の文が途切れてるのは元データの仕様です。

コード

using System;
using System.IO;
using System.Collections.Generic;
using Microsoft.VisualBasic.FileIO;

namespace TweetDataExtractor
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = args[0] + @"\tweets.csv";

            using (var parser = new TextFieldParser(path))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");

                var urlList = new List<Tuple<string, string>>();

                //一行目読み飛ばし
                parser.ReadFields();

                while (!parser.EndOfData)
                {
                    var row = parser.ReadFields();
                    //リツイートならば
                    if (row[6] != string.Empty)
                    {
                        //本文の取得
                        var nameAndText = row[5].Replace("RT @", "");

                        //ツイートURLの生成
                        string userName = nameAndText.Split(':')[0];
                        var twId = row[0];
                        string twUrl = "https://twitter.com/" + userName + "/status/" + twId;

                        urlList.Add(Tuple.Create(nameAndText, twUrl));
                    }
                }

                //HTMLを作って吐く
                using (var sw = new StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\RetweetData.html"))
                {
                    sw.WriteLine("<html lang=\"ja\">");
                    sw.WriteLine("<body>");

                    foreach (var data in urlList)
                        sw.WriteLine("<a href = \"" + data.Item2 + "\" >" + data.Item1 + "</a ></br>");

                    sw.WriteLine("</body>");
                    sw.WriteLine("</html>");
                }
            }
        }
    }
}

【C#】return式1行だけしかないメソッドの省略記法

1行しかない関数に{}使うのはなんかヤダ。

//掛け算
static int Multiply(int x, int y)
{
    return x * y;
}

expression-bodied関数を使おう。
C#6.0から導入されたらしい。
ufcpp.net

static int Multiply(int x, int y) => x * y;

こうなる。1行でスッキリ。

例:

class Sample
{
    //掛け算
    static int Multiply(int x, int y) => x * y;

    static void Main(string[] args)
    {
        int n = Multiply(2, 5);
    }    
}

f:id:shirakamisauto:20170826145126j:plain