プログラミングメモ

思った通りに動いてくれて嬉しかったこと

ブログ上にテロップテキストを表示してみる

概要

ブログ上へ表示可能な、テロップテキストjavascriptで作成してみました。

追記

marqueeタグって便利なのあったんですね~

<Marquee><font size="5" color="red">わずか1行で、テロップ表示!!</font></Marquee>

知らないって怖いな~(^▽^;)

サンプル

関数部

<script type="text/javascript">// <![CDATA[--
        function RunTicker(Text, Size, color) {

            if (typeof TickerIndex == "undefined") { TickerIndex = 0; } else { TickerIndex++; };
            var TickerName = 'TickerText' + TickerIndex;
            var len = Text.length;
            var arrText = Text.split('');
            var si = 0;
            document.write("<span id='" + TickerName + "'></span>");
            var Ele = document.getElementById(TickerName);
            var id = setInterval(function () {
                var buftext = '';
                for (i = 0; i < len; i++) {
                    var ti = si + i - len;
                    if (ti < 0 || ti >= len) { buftext += '&ensp;' } else { buftext += arrText[ti] };
                };
                Ele.innerHTML = buftext.fontsize(Size).fontcolor(color);
                si++; if (si >= len * 2) { si = 0 };
            }, 200);
        }
// ]]></script>

表示部

<p><script type="text/javascript">RunTicker('これが、テロップテキストです。', 5, 'red');</script></p>

解説

javascriptコードです。


関数部を
はてな表記、または、HTML編集の一番上に貼り付けます。
※実際には、一番最初の"表示部"のコード以前であれば動作するはずです。


後は"表示部"のコードを表示したい場所へ置きます。


文字列の設定ですが
RunTickerの()の内容を、","(ドット)区切りで3個要素を設定してください。


要素の詳細は、以下の通りです。

RunTicker('[ココに表示したい文字列]', フォントの大きさを数値で指定, '表示色')


表示色についてですが
"red"、 "yellow"、 "blue"など指定できますが
"#FFFFFF"形式でも指定できます。(#FFFFFFは、白となります。)
カラーコードについては、以下のサイト参照頂いたほうが良いでしょう。

html-color-codes.info

最後に

以前の

は、1つ以上を配置することが出来ませんでしたが
"表示部"のコードを複数配置することで、多数テロップテキストを表示可能です。

また、タグをspanとしましたので
一行内に、通常のテキストと、
を配置可能です。


ただ・・・


等角フォントの全角以外のフォントだと、文字により幅が変わる為
後続テキストが、次のようになります。


この部分が落ち着かない!!


Iphoneなどで見ると、もう最悪です・・・

難しいですね~(゚ー゚;Aアセアセ

JavaScriptで作ったパーツでブログを飾ってみる

概要

 

下の様な、虹色が流れる、ブログへ設置可能なテキスト表示部品です。

 

サンプル

<script type="text/javascript">// <![CDATA[
    var Rainbow = "ココに表示したい文字列";
    var Size = 5;

    var sci = 0; var len = Rainbow.length;
    document.write("<p id='RainbowText'>" + Rainbow + "</p>");
    var Ele = document.getElementById("RainbowText");
    var ArrColor = ["red", "orangered", "yellow", "green", "blue", "Indigo", "Violet"]
    RunRainbow();
    function RunRainbow() {
        var aft = ""; var tci = 6 - sci;
        for (i = 0; i < len; i++) {
            aft += Rainbow.charAt(i).fontcolor(ArrColor[tci]);
            tci++; if (tci > 6) { tci = 0 };
        }
        sci++; if (sci > 6) { sci = 0 };
        Ele.innerHTML = aft.fontsize(Size); 
        setTimeout('RunRainbow()', 300);
    }
// ]]></script>

 

解説

javascriptコードです。

はてなブログの、見たままでブログを作成している場合
例えば

ココから
ココまで

と作成していたとします。


その状態で、HTML編集に切り替えると下記のようになります。

<p>ココから</p>
<p>ココまで</p>

後は、”<p>ココから</p>”と”<p>ココまで</p>”の間に
上記ソースコードを丸々張り付けると、”ココから”と”ココまで”の間へ表示されます。


はてな記法の方は、そのまま張り付けてOKです。


ちなみに自分は、はてな記法を使ったのは、本日初だったしして・・・(;^_^A


次に、表示する文字列ですが
サンプルコード上側の”ココに表示したい文字列”
という所に、好きな文字列を入れてください。


そのすぐ下の

var Size = 5;

は、フォントのサイズです。


色の流れるスピードを変更したい場合は、サンプルコード下側の

setTimeout('RunRainbow()', 300);

というところがありますので、"300"という値を変更します。
値が小さくなるほど早くなります。

 

まとめ

あまり、javascriptでプログラムした経験ありません。
取り敢えず言い訳 ヾ(@°▽°@)ノあはは

サンプルコードが、長くなってしましました・・・

また、1ヵ所以上の配置が出来ないのが残念ですね。
改良の余地はありそうです。

フォルダ内のファイル一覧を取得し表示してみる

概要

指定した、フォルダ内のファイルを一覧表示します。

 

準備

WindowsフォームVBプロジェクトのフォーム上に

Button.Button1(FolderBrowserDialog表示用)

Button.Button2(ファイルリスト取得実行用)

ListBox.ListBox1(ファイルリスト表示用)

FolderBrowserDialog.FolderBrowserDialog1

を設置しましょう。

 

サンプル

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click

    'フォルダ選択画面を表示し
    'OKが押された時に、TextBoxへ選択フォルダのPathを表示
    If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
        TextBox1.Text = FolderBrowserDialog1.SelectedPath
    End If

End Sub

 

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    'TextBoxへ指定したディレクトリが存在するかのチェック
    If Not Directory.Exists(TextBox1.Text) Then
        MsgBox("指定のディレクトリは存在しません。")
    Exit Sub
End If

    'フォルダ内の一覧を配列に取得
    Dim Arrfile As String() = Directory.GetFiles(
    TextBox1.Text, "*", SearchOption.TopDirectoryOnly
    )

    '配列をListBoxへ表示
    ListBox1.Items.AddRange(Arrfile) 

End Sub

 

 解説

FolderBrowserDialogを利用し、Dialogでフォルダを選択可能としました。

FolderBrowserDialog.ShowDialog()を呼び出すだけで表示してくれます。

便利ですね~。

FolderBrowserDialog.SelectedPath()

選択されたフォルダのPathを取得します。

 

次に Directory.GetFiles ですが

TextBox1に指定したフォルダの

*すべてのファイル

SearchOption

引数として渡すと、ファイル一覧を配列で返してくれます。

 

SearchOptionは

TopDirectoryOnly 現在のフォルダのみ

AllDirectories サブフォルダを含む

がありますが

今回は、「指定フォルダのファイルのみ。」としましたので

TopDirectoryOnlyとなります。

 

実行結果

f:id:megrez11278:20170827124106j:plain

 

まとめ

「あるフォルダの全てのファイルに対して、一度に同じ処理を行いたい。」

時など、あるかと思いますが、そういう時などに有効です。

RaspberryPiファンコントロール

概要

CPU温度によりファンの回転数を制御します。

「RaspberryPi3は速度向上の代償として、発熱量が多くなった。

と言われています。

 

一応、熱対策としてファンを導入したのですが

ファンがフル回転した状態だと、気になる程の音を出していたのと

貧弱なケースのおかげで

「振動と共振して音量が倍増してしまう。」

という最悪な状態で、CPUは、涼しそうでは無かったです。

 

サンプル

CPUFan.py

# -*- coding: utf-8 -*-
import RPi.GPIO as IO
import commands
import time

 

#ピン番号指定

IO.setmode(IO.BOARD)

 

#10番ピンを出力として利用 

PinPut = 10
IO.cleanup(PinPut)
IO.setup(PinPut, IO.OUT )
 
#PWM設定(1秒間の間に5個のパルスを作成)
PWM = IO.PWM(PinPut, 5)
PWM.start(0)

 

while True:
    #CPU温度の取得
    temp = commands.getoutput("vcgencmd measure_temp").split('=')
    ftemp = float(temp[1].replace('\'C', ''))
 
    #温度により出力を算出(40~50℃の間を70~100%で)
    pw = (ftemp - 40) / 10
    if pw < 0: pw = 0
    if pw > 1: pw = 1

 

    Duty = pw * 30
    if pw > 0: Duty += 70
 
    #PWM変更
    PWM .ChangeDutyCycle(Duty)
    
    #CPU温度とファンパワーを表示
    print 'temp:' + str(ftemp) + ' FANPW:' + str(pw)

 

    time.sleep(1)

 

回路図

f:id:megrez11278:20170824223135j:plain

 

解説

PinPutの値を変えることにより

ファンコントロール出力のIOピン位置を変更できます。

IOの利用状況に応じて変更してください。

 

IO.BOARD指定ですので、ピンの並び順に数えた位置となります。

 

ちなみにGPIOの番号に対応させたい場合は

#ピン番号指定を

IO.setmode(IO.BCM)

とします。

 

ファンの電圧は、このサンプルの場合5Vとしてください。

ファンの種類によっては

低パワー時に回転出来ない可能性があります。

 

#温度により出力を算出

辺りを適正値に修正しましょう。

 

回路図作成はfritzingを利用しました。

 

http://fritzing.org/home/

 

ダウンロードサイトよりNo Donationを選択で

無料ダウンロードできます。

 

PWM・Dutyについては、PWM・Duty参考図を参照してください。

PWM・Duty参考図

f:id:megrez11278:20170824222627j:plain

 

Csvファイルを読み込みDataGridViewへ表示してみる

概要

Csvファイルを読み込みDataGridViewへ表示します。

なお、Csvファイル1行目はヘッダー行として扱い

DataColumnを生成します。

 

準備

WindowsフォームVBプロジェクトのフォーム上に

Button.Button1(DTTest呼び出し用)

DataGridView.DataGridView1

を設置してください。

 

適当な場所へ以下のようなCsvデータファイルを作成しましょう。

 

TestData.csv

教科,点数
国語,24
数学,75
理科,67
社会,37

赤点2教科ありますね… (爆)

 

サンプルコード

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles       Button1.Click
    CsvToGrid()
End Sub

 

Sub CsvToGrid()


    Dim Path As String = "D:\Temp\TestData.csv" 'CsvファイルのPathを指定
    Dim SR As New StreamReader(Path) 'StreamReader
    Dim linebuf As String 'データ保持用

    'DataGrid初期化
    DataGridView1.Columns.Clear()

    'Csvファイルより1行読込(ヘッダー行)
    linebuf = SR.ReadLine()

    'データが無ければ終了
    If linebuf = Nothing Then Exit Sub

    'DataGridColum(列)生成
    Dim ColArr() As String = linebuf.Split(",")

 

    For Each buf In ColArr
        DataGridView1.Columns.Add(buf, buf)
    Next


    Do

        'Csvファイルより2行目以降読込み
        linebuf = SR.ReadLine()

        'データが無ければループ終了
        If linebuf = Nothing Then Exit Do

        Dim RowArr() As String = linebuf.Split(",")

        'DataGrid行を追加
        DataGridView1.Rows.Add(RowArr)
    Loop

    SR.Close()

 

End Sub

 

解説

StreamReaderを使い、ReadLine()で1行ずつCSVファイルの内容を読み取っています。

ReadLine()を呼ぶ度に、Csvファイルの次の行の読み込みを行います。

後は、Split()を使い、","(カンマ)を機切り文字としてデータ毎に分割を行い

DataGridColumの生成、および配列データでRowを追加しています。

 

StreamReaderの動作中は、対象ファイルがロックされます。

処理が終わったら、Close()しましょう。

 

尚、Csvファイルは直接DataTableに読み込むことも可能ですので

機会がありましたら記事にしたいと思います。

 

実行結果

f:id:megrez11278:20170822220832j:plain

 

RaspberryPiについて

皆さん、こんにちは。

 

早速ですが

RaspberryPiってご存知でしょうか?

 

f:id:megrez11278:20170821210505j:plain

名前もロゴもすごく美味しそうですよね~(笑)

 

イギリス発祥のお菓子・・・ではありません。

私が、初めてこのネーミングを聞いたときは

恥ずかしながら食べ物かと思いましたので…

 

詳しくはこちらから。

Raspberry Pi - Wikipedia

 

セットアップ方法など、説明しようと思いましたが

色々な方が詳しく説明していらっしゃいましたので

誠に勝手ながら今回はこちらの方を頼らさせて頂きました。

deviceplus.jp

 

GPIOを利用した電子工作的なもの、Pythonなど興味ありますので

「ブログのネタに出来れば良いな~。」

と思っております。

 

とは言っても、電子工作もPythonも初心者ですので心配ですが…

 

今後ともよろしくお願いします。

VB.Netよりコマンドを実行

概要

VB.Netよりコマンドを実行し、結果をTextで返します。

 Function Runcmd(strcmd As String) As String

    'Processオブジェクト
    Dim proc As New System.Diagnostics.Process()

 

    With proc.StartInfo

        'ComSpecパスの取得
        .FileName = System.Environment.GetEnvironmentVariable("ComSpec")

 

        '出力読取り可能化
        .UseShellExecute = False
        .RedirectStandardOutput = True
        .RedirectStandardInput = False

 

        'コマンドプロンプトのウィンドウ非表示
        .CreateNoWindow = True

 

        'コマンド(/c:コマンド実行後、コマンドを実行したcmd.exeを終了)
        .Arguments = "/c " & strcmd
    End With

 

    'コマンド実行
    proc.Start()

 

    '実行結果取得
    Dim result As String = proc.StandardOutput.ReadToEnd()


    proc.WaitForExit()
    proc.Close()

    Return result

End Function

 解説

コマンド(String)を引数としてRuncmdを呼びます。

戻り値としてテキストで結果が返ってきます。

 

先日、ご紹介したフリーソフト

ServerLogon(ソフトと呼べる程のものではありませんが…)

は、net use~を引数としてRuncmdを呼んでいます。

megrez11278.hateblo.jp

 Runcmd呼び出しサンプル

準備

WindowsフォームVBプロジェクトのフォーム上に

Button.Button1(Runcmd呼び出し用)

TextBox.TextBox1(結果表示用)

をセットしてください。

 

TextBox1は、MultilineTrueにしましょう。

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click

    Dim text As String

    'コマンド

    text = Runcmd("ipconfig /all")
    TextBox1.Text = text

End Sub

 実行結果

f:id:megrez11278:20170821200910j:plain