合計 昨日 今日

taketoshi
 
記事: 218
登録日時: 2010年10月30日(土) 14:49
お住まい: 日本国
日記: 日記を見る (208)
日記
- 8月 2017
スマートミラー作ってみた (0)
   2017年8月25日(金) 00:01
電子看板ソフトの部 (2)
   2017年8月20日(日) 16:59
物凄く人が作った物を欲するときがある。 (2)
   2017年8月15日(火) 23:31

+ 7月 2017
+ 6月 2017
+ 5月 2017
+ 4月 2017
+ 3月 2017
+ 2月 2017
+ 1月 2017
+ 12月 2016
+ 11月 2016
+ 10月 2016
+ 9月 2016
+ 8月 2016
+ 7月 2016
+ 6月 2016
+ 5月 2016
+ 4月 2016
+ 3月 2016
+ 2月 2016
+ 1月 2016
+ 12月 2015
+ 11月 2015
+ 10月 2015
+ 9月 2015
+ 8月 2015
+ 7月 2015
+ 6月 2015
+ 4月 2015
+ 3月 2015
+ 1月 2015
+ 12月 2014
+ 10月 2014
+ 9月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 2月 2014
+ 1月 2014
+ 12月 2013
+ 11月 2013
+ 10月 2013
+ 9月 2013
+ 8月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 4月 2013
+ 3月 2013
+ 2月 2013
+ 1月 2013
+ 10月 2012
+ 9月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 4月 2012
+ 3月 2012
+ 2月 2012
+ 1月 2012
+ 12月 2011
+ 11月 2011
+ 10月 2011
+ 8月 2011
+ 7月 2011
+ 6月 2011
+ 5月 2011
+ 4月 2011
+ 3月 2011
+ 2月 2011
+ 1月 2011
カテゴリー
フィード
次へ

スマートミラー作ってみた

パーマリンクby taketoshi on 2017年8月25日(金) 00:01

どうも。僕です。

表題の通りスマートミラーを作ってみた。

C#でネットからニュースと天気予報を取得するソフトを作り
マジックミラーの裏にディスプレイをはめ込んで出力してます。

組み読み用のパソコンはスティックPCを使用
http://pcsyosinsya.com/review_dospara_dgstk1.html
(ラズパイの方が向いてそうだなー・・・・)

P1018449.JPG
P1018449.JPG (227.83 KB) 表示数: 12 回


ミラーの中のモニタに情報が浮かび上がり近未来感あふれる仕上がりです。
洗面台に組み込めば忙しい朝でも情報の取得が可能ッ!

改良しながらもう少し遊んでみようかと思っています。


#YuOさんと沖殿。前述の日記でアドバイス頂きありがとうございます。
#一通り目を通させていただきました。レスは後日書かせていただきます。
添付ファイル
最後に編集したユーザー taketoshi [ 2017年8月25日(金) 00:14 ], 累計 1 回

コメント数: 0 閲覧数: 198

電子看板ソフトの部

パーマリンクby taketoshi on 2017年8月20日(日) 16:59

どうも。僕です。

お遊びでC#を用い、組み込み用のサイネージソフトウェアを作っています。
ニュース情報はNHKのRSSを取得し、天気はライブドア提供のWetherHackから取得しています。

汚いけどコードはこんな感じ、エラー処理なんぞも未実装。

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Globalization;
using System.ServiceModel.Syndication;
using Codeplex.Data;
using System.Xml;
using System.Net;
 
namespace デジタルサイン
{
    public partial class Form : System.Windows.Forms.Form
    {
        public Form()
        {
            InitializeComponent();
        }
 
        private void GetNowTime()
        {
            DateTime dt = DateTime.Now;
            DateTime today = DateTime.Today;
            Hour_label.Text = dt.Hour.ToString();
 
            if (dt.Minute < 10)
            {
                min_label.Text = string.Format("0{0}", dt.Minute.ToString());
            }
            else
            {
                min_label.Text = dt.Minute.ToString();
            }
            day_rabel.Text = today.ToString("MMMM.dd", new CultureInfo("en-US")); ;
            week_label.Text = today.ToString("dddd", new CultureInfo("en-US")); ;
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            time_timer.Start();
            tenn_timer.Start();
            NewsTimer.Start();
            GetNowTime();
            GettWeatther(); SetWetherlabel();
            GetNews(); SetNews();
            ResizeWindow();
        }
 
        private void time_timer_Tick(object sender, EventArgs e)
        {
            GetNowTime();
        }
 
        private void tenn_timer_Tick(object sender, EventArgs e)
        {
            tenn.Visible = !tenn.Visible;
        }
 
        private void NewsTimer_Tick(object sender, EventArgs e)
        {
            NewsCountUp(); SetNews();
        }
 
        private void Form_SizeChanged(object sender, EventArgs e)
        {
            ResizeWindow();
        }
    }
}
namespace デジタルサイン
{
    partial class Form
    {
 
        static List<SyndicationItem> newsbase;//ニュース格納配列の宣言
        static int nNowNewsNumber = 0;//表示中のニュース番号
 
        //リストにニュース情報を格納する関数
        static void GetNews()
        {
            const string url = "http://www3.nhk.or.jp/rss/news/cat";
 
            for (int i = 0; i < 6; i++)
            {
                string szRSS = String.Format("{0}{1}.xml", url, i);              
                using (XmlReader rdr = XmlReader.Create(szRSS))
                {
                    SyndicationFeed feed = SyndicationFeed.Load(rdr);
                    newsbase = new List<SyndicationItem>();//ニュース格納配列の実体化
 
                    foreach (SyndicationItem item in feed.Items)//情報の取得
                    {
                        newsbase.Add(item);
                    }
                }
            }
        }
 
        //ニュース番号のインクリメント関数
        public void NewsCountUp()
        {
            if (nNowNewsNumber == newsbase.Count - 1)
            {
                nNowNewsNumber = 0;
            }
            else
            {
                nNowNewsNumber++;
            }
        }
 
        //ラベルにニュース情報を表示する関数
        public void SetNews()
        {
            newstitle_label.Text = newsbase[nNowNewsNumber].Title.Text;
            newssentence_label.Text = newsbase[nNowNewsNumber].Summary.Text;
        }
 
        public struct watherstruct
        {
            public string date;//日付
            public string telop;//天気情報
            public dynamic todaymax;//最高気温
            public dynamic todaymin;//最低気温
            public dynamic sentence;//天気概要文書
        }
 
        static List<watherstruct> watherbase;//天気情報構造体リストの宣言
        const string NO_VALUE = "--";
 
        //天気情報の取得関数
        static void GettWeatther()
        {
            var url = "http://weather.livedoor.com/forecast/webservice/json/v1?city=130010";
            var req = WebRequest.Create(url);
 
            watherbase = new List<watherstruct>();
 
            using (var res = req.GetResponse())
            using (var s = res.GetResponseStream())
            {
                dynamic json = DynamicJson.Parse(s);
                watherbase = new List<watherstruct>();
                //天気概況文
                var situation = json.description.text;
 
                //ここから天気予報データの取得スタート
                foreach (dynamic g in json.forecasts)
                {
                    watherstruct temp = new watherstruct();
                    temp.date = g.date;
                    temp.telop = g.telop;
                    if (g.temperature.max != null)
                    {
                        temp.todaymax = string.Format("{0}℃", g.temperature.max.celsius);
                    }
                    else
                    {
                        temp.todaymax = string.Format("{0}℃", NO_VALUE);
                    }
                    if (g.temperature.min != null)
                    {
                        temp.todaymin = string.Format("{0}℃", g.temperature.min.celsius);
                    }
                    else
                    {
                        temp.todaymin = string.Format("{0}℃", NO_VALUE);
                    }
                    temp.sentence = json.description.text;
                    watherbase.Add(temp);
                }
            }
        }
 
        //天気情報の表示関数
        void SetWetherlabel()
        {
            wather_label.Text = watherbase[0].telop;
            maxtemplature_label.Text = watherbase[0].todaymax;
            mintemplature_label.Text = watherbase[0].todaymin;
        }
 
        private int width = 0;//ウインドウサイズ横
        private int height = 0;//ウインドウサイズ縦  
       
        //ラベルコントロールのサイズ調整と位置調整関数
        public void ResizeWindow()
        {
            width = this.Size.Width;
            height = this.Size.Height;
            Point pt_hour = new Point(width - 700,44); ;
            Hour_label.Location = pt_hour;
 
            Point pt_min = new Point(width - 350, 44); ;
            min_label.Location = pt_min;
 
            Point pt_tenn = new Point(width - 450, 26); ;
            tenn.Location = pt_tenn;
 
            Point pt_day = new Point(width - 650, 256);
            day_rabel.Location = pt_day;
 
            Point pt_week = new Point(width - 650,405);
            week_label.Location = pt_week;
 
            Size sz_newssize = new Size(width - 200,height - 100);
            newssentence_label.Size = sz_newssize;
 
        }
    }
}


C#でソフトウェアを開発したのは初?かもしれないが
200行ちょっとでネットから情報を拾ってこれるコードが作れるなんて素敵。
同時に今まで使ってたピュアCやWinAPIのマゾさに驚愕。

C#の勉強もそんなにしてないけどCやらC++の基礎ベースがあるからすんなり入ることが出来ました。。

.png
.png (11.44 KB) 表示数: 146 回


次回はこれを予め作っておいたガジェットに組み込みます。
添付ファイル

コメント数: 2 閲覧数: 279

物凄く人が作った物を欲するときがある。

パーマリンクby taketoshi on 2017年8月15日(火) 23:31

普段の生活に追われて頭が回らなくなったとき物凄く人が作った物を欲するときがある。
ゲームではない、小説ではない。それは漫画か映画だ。

夏休みの最後に。家内が「君の名は」をレンタルしてきたので家族全員で観覧しました。
最初は高校生の恋愛モノを観る年齢でもないのだが・・と思っていたのだけど、
意外な展開が待っていて期待より楽しんで見る事が出来ました。
仕事に戻る前に少しリフレッシュできたと思う。

全編を通してどっかで見たことある光の演出・・・と思っていたら
この人ファルコムでイース2エターナルのOPムービー作ってたのね。
これこそ高校生の時ハートを鷲掴みされた思い出があります。

君の名は。オッサンが見ても楽しめました。

コメント数: 2 閲覧数: 300

C#でNHKニュースのRSSを取得して表示する

パーマリンクby taketoshi on 2017年7月30日(日) 11:55

サイネージを作るために次はニュースのRSS取得テストを実施中
コード自体はなんてことないです。某所のサンプルコードを改変してNHKニュースを表示。

まずはコンソールでテスト。

.png
.png (44.6 KB) 表示数: 170 回


問題なく表示されてる。

C#の.netは高度な技術の実現が本当に楽ちんですね。
コードはこんな感じ。

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Xml;
using System.ServiceModel.Syndication;
 
namespace RssReader
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://www3.nhk.or.jp/rss/news/cat0.xml";
 
            using (XmlReader rdr = XmlReader.Create(url))
            {
                SyndicationFeed feed = SyndicationFeed.Load(rdr);
 
                Console.WriteLine("title:" + feed.Title.Text);
                Console.WriteLine("description:" + feed.Description.Text);
                Console.WriteLine("--- items ---");
 
                foreach (SyndicationItem item in feed.Items)
                {
                    Console.WriteLine("item Title:" + item.Title.Text);
                    Console.WriteLine("詳細:" + item.Summary.Text);
                    Console.WriteLine("Data:" + item.PublishDate.ToString());
                    Console.WriteLine("");
                }
            }
        }
    }
}


次はGUI化してお天気+時計+ニュース情報の表示である。
添付ファイル

コメント数: 3 閲覧数: 392

C#からお天気情報を取得して表示する

パーマリンクby taketoshi on 2017年7月25日(火) 22:13

C#でlivedoorが提供してるウェザーハックにリクエストを投げて
帰ってきたデータをJSONで受け取って表示するサンプルプログラムを動かしてみた。

なんでこんなことしようかと思ったというと、
スティックPCを使ってサイネージを作って展示しようかと思ってます。

とりあえずコンソールでテスト。

.png
.png (21.95 KB) 表示数: 143 回


何とか取得出来てる。

ただ、最高気温と最低気温が取得できない事があって「????」状態になってます。
ライブドアの天気予報本家ページにも最高気温が載ってない事もあるし。
取得したデータを除くと元から入ってないっぽい。降水確率もとってみたいな。

さてさて調べまする。
添付ファイル
最後に編集したユーザー taketoshi [ 2017年7月25日(火) 22:14 ], 累計 1 回

コメント数: 0 閲覧数: 357

オンラインデータ

登録ユーザー: みけCAT