読者です 読者をやめる 読者になる 読者になる

Code Log

プログラミングの勉強メモを残していきます。

Swiftのif, for while

Swift

//: Playground - noun: a place where people can play

import UIKit

var str = "Hello, playground"


//if
let score = 70

if score>=80 {
    print ("合格です!")
} else {
    print("不合格〜!")
}

print("\(score)点でした。")


//switch
let color = "blue"

switch color {
case "red":
    print("赤やね!")

case "green":
    print("緑やね!")
    
case "pink","yellow":
    print("ピンクか黄色だね!")
    
case "blue":
    print("青やね")
default:
    print("お前の色はなんだーーー!")
}

//tupple
let data = (1000,100,10)
let (sen,hyaku,jyu) = data
let hoge = sen + hyaku
print(hoge)

//label tupple
let user = (name:"yoshida", age:20)
print(user.name)


//for
for num in 1...10 {
    print(num, terminator: ",")
}

for _ in 1...15 {
    let num = arc4random_uniform(100)
    print(num, terminator: ",")
}


let numList = [1,2,3,4,5,6]
var sum = 0
for num in numList {
    sum += num
}

print("合計: \(sum)")


for (var i=0; i<5;i++) {
    let v = i*2
    print(v)
}

C# 指定したプロセス名のprocessを取得し、稼働時間、開始時間、プロセスIDを表示する。

C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace ProcessKiller
{
    public partial class Form1 : Form
    {
        bool isRun = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (isRun)
            {
                string pName = textBox1.Text;
                Process[] pList = Process.GetProcessesByName(pName);
                StringBuilder sb = new StringBuilder();

                label1.Text = "";
                foreach (Process p in pList)
                {
                    DateTime startTime = p.StartTime;
                    TimeSpan runTime = DateTime.Now - startTime;

                    int limitAddTime = int.Parse(comboBox1.Text);
                    DateTime limitTime = p.StartTime.AddMinutes(limitAddTime);

                    sb.Append("[ID:"+ p.Id +"] [プロセス名:" + p.ProcessName + "] [稼働時間:" +
                    String.Format("{0:00}",runTime.Hours) + ":" + String.Format("{0:00}",runTime.Minutes) + ":" + String.Format("{0:00}",runTime.Seconds) + "] [停止予定時刻:" + limitTime + "]" + System.Environment.NewLine);

                    var limitTimeOfDay = limitTime.TimeOfDay;

                    if ((limitTimeOfDay - startTime.TimeOfDay) < runTime)
                    {
                        p.Kill();
                        label4.Text = p.ProcessName + "(ID:" + p.Id + ")をkillしました";
                    }

                }
                label1.Text = sb.ToString();
            }  
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string pName  = textBox1.Text;
            if (String.IsNullOrEmpty(pName))
            {
                MessageBox.Show("プロセス名を入力してください");
                return;
            }
            timer1.Enabled = true;
            isRun = true;
            label4.Text = "監視開始します";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            isRun = false;
            label1.Text = "";
            label4.Text = "";
        }
    }
}

C# Helperクラスを使って、XMLにノードを追加する。

C#

f:id:sho322:20151201010253j:plain


XmlHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XmlOperator
{
    class XmlHelper
    {
        public static XmlNode AddElement(string tagName, string textContent, XmlNode parent)
        {
            XmlNode node = parent.OwnerDocument.CreateElement(tagName);
            parent.AppendChild(node);

            if (textContent != null)
            {
                XmlNode content;
                content = parent.OwnerDocument.CreateTextNode(textContent);
                node.AppendChild(content);
            }
            return node;
        }

        public static XmlNode AddAttribute(string attributeName, string textContent, XmlNode parent)
        {
            XmlAttribute attribute;
            attribute = parent.OwnerDocument.CreateAttribute(attributeName);
            attribute.Value = textContent;
            parent.Attributes.Append(attribute);
            return attribute;
        }

    }
}


Main

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XmlOperator.sample1
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            doc.AppendChild(docNode);
            XmlNode products = doc.CreateElement("productes");
            doc.AppendChild(products);

            XmlNode product = XmlHelper.AddElement("product", null, products);
            XmlHelper.AddAttribute("id", "100", product);
            XmlHelper.AddElement("productName", "コーヒー", product);
            XmlHelper.AddElement("productPrice", "150", product);


            product = XmlHelper.AddElement("product", null, products);
            XmlHelper.AddAttribute("id", "110", product);
            XmlHelper.AddElement("productName", "缶ジュース", product);
            XmlHelper.AddElement("productPrice", "120", product);

            doc.Save(Console.Out);
            Console.ReadLine();

        }
    }
}


C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)

C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)

C# XMLドキュメントにノードを挿入する

C#

f:id:sho322:20151130222102j:plain

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XmlOperator.sample1
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            doc.AppendChild(docNode);

            XmlNode productsNode = doc.CreateElement("products");
            doc.AppendChild(productsNode);

            XmlNode productNode = doc.CreateElement("product");
            XmlAttribute productAttribute = doc.CreateAttribute("id");
            productAttribute.Value = "1000";
            productNode.Attributes.Append(productAttribute);
            productsNode.AppendChild(productNode);

            XmlNode nameNode = doc.CreateElement("productName");
            nameNode.AppendChild(doc.CreateTextNode("ビックリマンちょこ"));
            productNode.AppendChild(nameNode);

            XmlNode priceNode = doc.CreateElement("productPrice");
            priceNode.AppendChild(doc.CreateTextNode("150"));
            productNode.AppendChild(priceNode);

            productNode = doc.CreateElement("product");
            productAttribute = doc.CreateAttribute("id");
            productAttribute.Value = "1010";
            productNode.Attributes.Append(productAttribute);
            productsNode.AppendChild(productNode);
            nameNode = doc.CreateElement("productName");
            nameNode.AppendChild(doc.CreateTextNode("ファンタオレンジ"));
            productNode.AppendChild(nameNode);
            priceNode = doc.CreateElement("productPrice");
            priceNode.AppendChild(doc.CreateTextNode("130"));
            productNode.AppendChild(priceNode);

            doc.Save(Console.Out);
            Console.ReadLine();
        }
    }
}

C# Process名指定でプロセスの稼働時間やIDを取得。一定時間以上稼働しているものをkillする。

C#

f:id:sho322:20151129235553j:plain

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.Diagnostics;

namespace TimerExample2
{
    public partial class Form1 : Form
    {
        bool isRun = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (isRun)
            {
                string processName = textBox1.Text;
                Process[] processlist = Process.GetProcessesByName(processName);
                StringBuilder sb = new StringBuilder();
                foreach (Process process in processlist)
                {
                    DateTime startTime = process.StartTime;
                    TimeSpan runTime = DateTime.Now - startTime;

                    var limitAddTime = 1;
                    DateTime limitTime = process.StartTime.AddMinutes(limitAddTime);

                    sb.Append("[ID:" + process.Id + "]" + process.ProcessName + "[稼働時間:" + runTime.Hours + ":" + runTime.Minutes + runTime.Seconds
                         + "][制限時間:" + limitTime + "]" + System.Environment.NewLine);
                    var limitTimeOfDay = limitTime.TimeOfDay;
                    if ((limitTimeOfDay - startTime.TimeOfDay) < runTime)
                    {
                        process.Kill();
                    }
                }

                label1.Text = sb.ToString();
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            isRun = true;
            timer1.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            isRun = false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }
    }
}

猫でもわかるC#プログラミング 第2版 (猫でもわかるシリーズ)

猫でもわかるC#プログラミング 第2版 (猫でもわかるシリーズ)

C# Timer機能を使って、一定時間おきに処理を発生させる。なんちゃってアラームの実装

C#

Timerこっンポー念とは、Tickと呼ばれるイベントを一定時間ごとに発生させる。
intervalで周期を設定する(ミリ秒)

f:id:sho322:20151129235515j:plain

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;

namespace TimerExample
{
    public partial class Form1 : Form
    {
        bool alarmState = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void StartButton_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime curTime = DateTime.Now;
            label1.Text = ((curTime.TimeOfDay.Hours).ToString()) + " : " + ((curTime.TimeOfDay.Minutes).ToString()) + " : "
                + ((curTime.TimeOfDay.Seconds).ToString());

            if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "")
            {
                DateTime alarmTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day,
                    System.Convert.ToInt16(textBox1.Text),System.Convert.ToInt16(textBox2.Text), System.Convert.ToInt16(textBox3.Text));

                if (DateTime.Now > alarmTime && alarmState)
                {
                    Console.Beep();
                }
                    

            }
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
                alarmState = true;
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked == true)
                alarmState = false;
        }

    }
}

C# ポケットリファレンス

C# ポケットリファレンス

  • 作者: WINGSプロジェクト,土井毅,高江賢,飯島聡,高尾哲朗,山田祥寛
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/12/03
  • メディア: 単行本(ソフトカバー)
  • 購入: 4人 クリック: 27回
  • この商品を含むブログ (5件) を見る

GruntでjavaScriptファイルを結合してミニファイする。

Grunt


Gruntは、フロントエンドの作業を自動化するためのタスクランナーのこと。


Gruntのコマンド群をインストールするために、grunt-cliをインストール

npm install -g grunt-cli


package.jsonの作成

npm init

Grunt本体のインストール

npm install --save-dev grunt


何もしないGruntfile.js

module.exports = function (grunt) {
	grunt.initConfig({});
	grunt.registerTask('default', []);
}

UglifyJSでJavaScriptのミニファイ

npm install --save-dev grunt-contrib-uglify

以下の2つのJSファイルを結合して圧縮。

test1.js

var hello = function(user) {
	console.log("hoge:" + user.name);
}

test2.js

(function() {
	var user = { "name" : "takashi"};
	hello(user);
})();

Gruntfile.js

module.exports = function (grunt) {
	grunt.initConfig({
		uglify: {
			dist: {
				files: {
					'dest/output.min.js' : [
					  'src/test1.js',
					  'src/test2.js'
					]
				}
			}
		}
	});

	//プラグインからタスクを読み込む
	grunt.loadNpmTasks('grunt-contrib-uglify');

	//defaultのタスクとして、上で定義したuglifyをセットする
	grunt.registerTask('default', ['uglify']);
}


実行すると、output.min.jsが出力される。

node output.min.js
hoge:takashi


黒い画面は怖くない ターミナルでWeb製作をパワーアップ

黒い画面は怖くない ターミナルでWeb製作をパワーアップ

C# XMLからデータを読み込んでDataGridViewに表示する。

C#

f:id:sho322:20151124141646j:plain
f:id:sho322:20151124141704j:plain

XMLファイル

<?xml version="1.0" encoding="utf-8" ?>
<users>
  <user>
    <name>takeshi</name>
    <password>take123</password>
    <mail>takeshi@gigimail.com</mail>
  </user>
  <user>
    <name>yoshida</name>
    <password>yoshida123</password>
    <mail>yoshida@gigimail.com</mail>
  </user>
</users>


C#

private void readXmlButton_Click(object sender, EventArgs e)
{
    XmlTextReader xmlDataReader = new XmlTextReader(xmlTextBox.Text);
    
    DataSet ds = new DataSet();
    ds.ReadXml(xmlDataReader);
    
    dataGridView.DataSource = ds.Tables[0];
}

C# XMLファイルを読み込んでTreeViewに表示させる。

C#


C#でXMLを操作するためには、System.Xml.XmlDocumentクラスを使う。
このクラスはメモリにXMLを全て取り込むため、巨大なXMLファイルの読み込みには向いていない。

巨大はXMLファイルはXmlReaderやXmlWriterを使う。

以下のpom.xmlを読み込んで、TreeViewに表示させてみる。

f:id:sho322:20151124113352j:plain

<?xml version="1.0" encoding="utf-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tripod.demo</groupId>
  <artifactId>Karthik-project</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>Karthik-project Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <properties>
    <jboss-as.deploy.hostname>localhost</jboss-as.deploy.hostname>
    <!-- Where to deploy. -->
    <jboss-as.deploy.user>admin</jboss-as.deploy.user>
    <jboss-as.deploy.pass>admin</jboss-as.deploy.pass>
    <plugin.war.warName>target/Karthik-project.war</plugin.war.warName>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
          <warName>target/Karthik-project.war</warName>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.jboss.as.plugins</groupId>
        <artifactId>jboss-as-maven-plugin</artifactId>
        <version>7.3.Final</version>
        <configuration>
          <hostname>localhost</hostname>
          <username>admin</username>
          <password>admin</password>
          <jbossHome>/home/smadugula/jboss-eas-5.2</jbossHome>
          <serverName>Standalone</serverName>
          <targetDir>target</targetDir>
          <fileName>target/Karthik-project.war</fileName>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

コードはこれ。

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.IO;
using System.Xml;

namespace myXmlSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            txtXmlFile.Text = Path.Combine(Application.StartupPath, @"../../pom.xml");
        }

        private void xmlReadButton_Click(object sender, EventArgs e)
        {
            treeXml.Nodes.Clear();
            XmlDocument doc = new XmlDocument();
            try
            {
                doc.Load(txtXmlFile.Text);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return;
            }

            ConvertXmlNodeToTreeNode(doc, treeXml.Nodes);
            treeXml.Nodes[0].ExpandAll();
        }

        private void ConvertXmlNodeToTreeNode(XmlNode xmlNode, TreeNodeCollection treeNodes)
        {
            TreeNode newTreeNode = treeNodes.Add(xmlNode.Name);
            switch (xmlNode.NodeType)
            {
                case XmlNodeType.ProcessingInstruction:
                case XmlNodeType.XmlDeclaration:
                    newTreeNode.Text = "<?" + xmlNode.Name + ">";
                    break;
                case XmlNodeType.Element:
                    newTreeNode.Text = "<" + xmlNode.Name + ">";
                    break;
                case XmlNodeType.Attribute:
                    newTreeNode.Text = "ATRIBUTE:" + xmlNode.Name;
                    break;
                case XmlNodeType.Text:
                case XmlNodeType.CDATA:
                    newTreeNode.Text = xmlNode.Value;
                    break;
                case XmlNodeType.Comment:
                    newTreeNode.Text = "<!--" + xmlNode.Value + "-->";
                    break;
            }


            if (xmlNode.Attributes != null)
            {
                foreach (XmlAttribute attribute in xmlNode.Attributes)
                {
                    ConvertXmlNodeToTreeNode(attribute, newTreeNode.Nodes);
                }
            }

            foreach (XmlNode childNode in xmlNode.ChildNodes)
            {
                ConvertXmlNodeToTreeNode(childNode, newTreeNode.Nodes);
            }
        }


    }
}

基礎からわかる C#

基礎からわかる C#

Gruntを使ってJavaScriptファイルを圧縮する。

Grunt
npm install grunt-contrib-uglify

uglifyプラグインは短縮されたJavaScriptファイルを出力します。

module.exports = function(grunt) {
	grunt.loadNpmTasks('grunt-contrib-uglify');
	grunt.initConfig({
		uglify: {
			target1: {
				src: 'js/sample.js',
				dest: 'js/sample.min.js'
			}
		}
	});

	grunt.registerTask('default', ['uglify']);
};

loadNpmTasksでpluginを読み込み、initConfigに渡すことでオブジェクトが認識されます。
registerTaskでタスクとして定義することで、圧縮を実行することができます。