2016年8月31日 星期三

安裝notepadqq(linux上的notepad++)在Ubuntu

安裝notepadqq(linux上的notepad++)
第一部分install qt  (https://wiki.qt.io/Install_Qt_5_on_Ubuntu)
1.
wget http://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-5.7.0.run
2.
chmod +x qt-opensource-linux-x64-5.7.0.run
./qt-opensource-linux-x64-5.7.0.run
3.
sudo apt-get install build-essential
4.
sudo apt-get install libfontconfig1
5.
sudo apt-get install mesa-common-dev
6.
sudo apt-get install libglu1-mesa-dev -y
第二部分 install notepadqq (https://github.com/notepadqq/notepadqq)
7.
sudo add-apt-repository ppa:notepadqq-team/notepadqq
8.
sudo apt-get update
9.

sudo apt-get install notepadqq

在Google Cloud Platform架設workerman使用Ubuntu16.04 X64、php7.0、

已安裝php7.0後
1、命令行运行apt-get install php-cli git gcc php-pear php-dev libevent-dev
2pecl install event
3、命令行运行(需要切换到root用户)echo extension=event.so > /etc/php/7.0/cli/conf.d/event.ini
4(cd 到你放網頁的地方,我是/var/www/html)
命令行运行git clone https://github.com/walkor/Workerman
5nano http_test.php
<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
 
// 创建一个Worker监听2345端口,使用http协议通讯
$http_worker = new Worker("http://0.0.0.0:2345");
 
// 启动4个进程对外提供服务
$http_worker->count = 4;
 
// 接收到浏览器发送的数据时回复hello world给浏览器
$http_worker->onMessage = function($connection, $data)
{
    // 向浏览器发送hello world
    $connection->send('hello world');
};
 
// 运行worker
Worker::runAll();
?>

6、到產品與服務(左上角Google Cloud Platform 旁那三槓)->網路->防火牆規則
 ->建立防火牆規則
(看這: http://www.jerrynest.com/tutorial-google-compute-engine-server/)

7、開啟內部防火牆:sudo ufw allow 2345
8、開啟測試php http_test.php start

9、瀏覽器 http://你的ip:2345

C# List達成多陣列效果

List<List<List<string>>> my3d = new List<List<List<string>>>();
List<string> my1d;
List<List<string>> my2d;
引用http://xyz.cinc.biz/2013/08/c-list.html
這寫法也神了~

北科大 校園入口登入 C#


 
 public partial class Form1 : Form
    {
        bool timeout = false;
       
        public Form1()
        {
            InitializeComponent();
            webBrowser1.ScriptErrorsSuppressed = true;
            textBox1.Text = "";
            textBox2.Text = "";
            web_con("https://nportal.ntut.edu.tw");
            progressBar1.Maximum = 100;//設置最大長度值
            progressBar1.Value = 0;//設置當前值
            progressBar1.Step = 20;//設置沒次增長多少
        }
        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 0;//設置當前值
            if ((textBox1.Text != string.Empty)&& (textBox2.Text != string.Empty)&& (textBox3.Text != string.Empty) && !(graduated.Checked&&ungraduated.Checked))
            {
                tabControl1.SelectedTab = tabPage2;
                progressBar1.Value += progressBar1.Step;//讓進度條增加一次
                logword_pass();
                string ss;
                if (ungraduated.Checked == true){ ss = "教務系統"; }
                else { ss = " 畢業生系統 "; }
                bool a = Check_Complete(ss, 15000);
                if (a)
                {   //----------------------------------------------------------------------------
                    progressBar1.Value += progressBar1.Step;//讓進度條增加一次
                    webBrowser1.Document.GetElementById("apFolder").InvokeMember("click");
                    bool b = Check_Complete("學業成績查詢專區", 3000);
                    if (b)
                    {
                        progressBar1.Value += progressBar1.Step;//讓進度條增加一次
                        if (ungraduated.Checked == true)
                        {
                            HtmlElement aaa = webBrowser1.Document.GetElementById("ap-aa").GetElementsByTagName("span")[7].GetElementsByTagName("a")[0];//apFolder
                            aaa.OuterHtml = aaa.OuterHtml.Replace("blank", "self");
                            HtmlElement bbb = webBrowser1.Document.GetElementById("ap-aa").GetElementsByTagName("span")[7].GetElementsByTagName("a")[0];
                            bbb.InvokeMember("click");
                        }
                        else if(graduated.Checked == true)
                        {
                            HtmlElement aaa = webBrowser1.Document.GetElementById("ap-Graduate").GetElementsByTagName("span")[1].GetElementsByTagName("a")[0];
                            aaa.OuterHtml = aaa.OuterHtml.Replace("blank", "self");
                            HtmlElement bbb = webBrowser1.Document.GetElementById("ap-Graduate").GetElementsByTagName("span")[1].GetElementsByTagName("a")[0];
                            bbb.InvokeMember("click");
                        }
                        else
                        {
                            error_message("impossble");
                        }

                        //------------------------------------------------------------------------------
                        bool c = Check_Complete("學生查詢專區", 3000);
                        if (c)
                        {
                            progressBar1.Value += progressBar1.Step;//讓進度條增加一次
                            webBrowser1.Navigate("http://aps-stu.ntut.edu.tw/StuQuery/QryScore.jsp");
                            bool d = Check_Complete("操行成績", 3000);
                            if (d)
                            {
                                progressBar1.Value += progressBar1.Step;//讓進度條增加一次
                                webBrowser1.Document.GetElementById("QryAll").InvokeMember("click");
                                MessageBox.Show("OK");
                            }
                            else
                            {
                                MessageBox.Show("成績頁面無法開啟,請提報錯誤給網站管理人");
                                web_con("https://nportal.ntut.edu.tw");
                            }
                        }
                        else
                        {
                            MessageBox.Show("學生查詢專區無法開啟,請提報錯誤給網站管理人");
                            web_con("https://nportal.ntut.edu.tw");
                        }
                    }
                    else
                    {
                        MessageBox.Show("學業成績查詢專區無法開啟,請提報錯誤給網站管理人");
                        web_con("https://nportal.ntut.edu.tw");
                    }
                }
                else
                {
                    MessageBox.Show("帳號錯誤或是學校伺服器回應過慢導致逾時跳出");
                    web_con("https://nportal.ntut.edu.tw");
                }
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            string gethtmlcode;
            gethtmlcode = gethtml();
            int[] a = get_all_indexof_from_artical(gethtmlcode, @"<table");
            string[] b = new string[a.Length];
            string[][] c = new string[a.Length][];
            string[][] d = new string[a.Length][];
            for (int i = 0; i < a.Length; i++)
            {
                b[i] = capturestring(gethtmlcode, @"<table", @"/table>", a[i]);
                c[i] = get_data_form_htmltag(b[i]);
                for (int j = 0; j < get_data_form_htmltag(b[i]).Length; j++)
                {
                    c[i][j] = remove_htmltag(c[i][j]);
                }
                d[i] = suit_Array_with_no_block(c[i]);
            }
            string f = "";
            for (int i = 0; i < a.Length; i++)
            {
                f += Environment.NewLine;
                for (int j = 8; j < d[i].Length - 9; j++)
                {
                    if ((j % 8 == 0) && (j != 0))
                    {
                        f += Environment.NewLine;
                        f += d[i][j] + "   ";
                    }
                    else
                    {
                        f += d[i][j] + "   ";
                    }

                }
            }
            textBox4.Text = f;
        }
        private void loading()
        {
            while (!(webBrowser1.ReadyState == WebBrowserReadyState.Complete))
            {
                Application.DoEvents();
            }
        }
        private bool Check_Complete(string keyword ,int timeout_time)
        {
            bool getkeyword = false;
            System.Timers.Timer t = new System.Timers.Timer(timeout_time); // 等多久
            t.Elapsed += new System.Timers.ElapsedEventHandler(check_timeout); //呼叫副程式
            t.AutoReset = false; //设置是执行一次(false)还是一直执行(true);
            t.Enabled = true;
            while (!getkeyword)
            {
                if(timeout)
                {
                    t.Close();
                    timeout = false;
                    return false;
                }
                foreach (HtmlElement he in webBrowser1.Document.All)
                {
                    if (he.OuterText == keyword)
                    {
                        timeout = false;
                        t.Close();
                        getkeyword = true;
                    }
                }
                Application.DoEvents();
            }
            return true;
        }
        private void logword_pass()
        {
            webBrowser1.Document.GetElementById("muid").SetAttribute("value", textBox1.Text);
            webBrowser1.Document.GetElementById("mpassword").SetAttribute("value", textBox2.Text);
            webBrowser1.Document.GetElementById("authcode").SetAttribute("value", textBox3.Text);
            webBrowser1.Document.GetElementById("Submit2").InvokeMember("click");
        }
        private string gethtml()
        {
            string gethtmlcode;
            System.IO.StreamReader getReader = new System.IO.StreamReader(this.webBrowser1.DocumentStream, System.Text.Encoding.Default);
            gethtmlcode = getReader.ReadToEnd();
            return gethtmlcode;
        }
        private string[] get_data_form_htmltag(string strTest)//get data between ">" and "<"
        {

            string[] matchvalue = new string[1000];
            int i = 0;
            //  <th??>.....<th??> ->  >...<th
            //>....</a>
            // @"<[^>]*>"
            //[a-zA-Z0-9_]
            //>[^<]*<
            MatchCollection matches = Regex.Matches(strTest, @">[^<]*<");
            foreach (Match match in matches)
            {
                matchvalue[i] = match.Value.ToString();
                i++;
            }
            if (i < 0)
            {
                error_message("no one word can remove");
                return null;
            }
            else
            {
                string[] get_value_Array = new string[i];
                Array.Copy(matchvalue, get_value_Array, i);
                return get_value_Array;
            }
        }
        private string capturestring(string text, string initial_text, string final_text) //"capturestring" means that you want to capture from "text" between "initial_text" and "final_text".it will return "carturedtext"
        {
            string capturedtext = "";
            int intial, final;
            intial = text.IndexOf(initial_text);
            if (intial == -1)//check initial_text is existed
            {
                error_message("can not find intial_text");
            }
            else
            {
                final = text.IndexOf(final_text);
                if (final == -1)//check final_text is existed
                {
                    error_message("can not find final_text");
                }
                else
                {
                    text = text.Remove(final);
                    text = text.Remove(0, intial);
                    text = remove_htmltag_2(text);
                    capturedtext = text;
                }
            }

            return capturedtext;
        }
        private string capturestring(string text, string initial_text, string final_text, int startIndex)  //"capturestring" means that you want to capture from "text" between "initial_text" and "final_text". it will return "carturedtext" if your "capturestring" is more one, you can change initial_start_location to get more
        {
            string capturedtext = "";
            int intial, final;
            intial = text.IndexOf(initial_text, startIndex);
            if (intial == -1)//check initial_text is existed
            {
                error_message("can not find intial_text");
            }
            else
            {
                final = text.IndexOf(final_text, startIndex);
                if (final == -1)//check final_text is existed
                {
                    error_message("can not find final_text");
                }
                else
                {
                    text = text.Remove(final);
                    text = text.Remove(0, intial);
                    text = remove_htmltag_2(text);
                    capturedtext = text;
                }
            }
            return capturedtext;
        }
        private int[] get_all_indexof_from_artical(string text, string keyword)//get all keyword indexof
        {
            int[] allindexofnum = new int[100];
            int num, i = 0;
            bool more = false;
            num = text.IndexOf(keyword);
            if (num < 0)
            {
                error_message("can not find any keyword");
            }
            else
            {
                more = true;
                allindexofnum[i] = num;
                i++;
                while (more)
                {
                    num = text.IndexOf(keyword, num + 1);
                    if (num < 0)
                    {
                        // MessageBox.Show("can not find more keyword");
                        more = false;
                    }
                    else
                    {
                        allindexofnum[i] = num;
                        i++;
                    }
                }
            }
            int[] indexofnum = new int[i];
            for (int j = 0; j < i; j++)
            {
                indexofnum[j] = allindexofnum[j];
            }
            return indexofnum;
        }
        private string remove_htmltag(string htmltext)//you can add another tag that you want to remove
        {
            htmltext = htmltext.Replace("<", "");
            htmltext = htmltext.Replace(">", "");
            htmltext = htmltext.Replace("\n", "");
            htmltext = htmltext.Replace("\r", "");
            htmltext = htmltext.Replace(" ", "");
            return htmltext;
        }
        private string remove_htmltag_2(string htmltext)//you can add another tag that you want to remove
        {
            htmltext = htmltext.Replace("<B>", "");
            htmltext = htmltext.Replace("</B>", "");
            htmltext = htmltext.Replace("<BR>", "");
            return htmltext;
        }
        private string[] suit_Array_with_no_block(string[] Array_with_block)//remove ""(<-yes this one, no data block) from Array
        {
            string[] a = new string[500];
            int i = 0;
            for (int j = 0; j < Array_with_block.Length; j++)
            {
                if ((Array_with_block[j] != ""))
                {
                    a[i] = Array_with_block[j];
                    i++;
                }
            }
            string[] sutableArray = new string[i];
            Array.Copy(a, sutableArray, i);
            return sutableArray;
        }
        private void error_message(string error_message)
        {
            if (error_message == "can not find any keyword") { MessageBox.Show("can not find any keyword"); }
            else if (error_message == "can not find intial_text") { MessageBox.Show("can not find intial_text"); }
            else if (error_message == "can not find final_text") { MessageBox.Show("can not find final_text"); }
            else if (error_message == " no one word can remove") { MessageBox.Show(" no one word can remove"); }
            else if (error_message == " impossble") { MessageBox.Show(" impossble"); }
            else { };

        }
        public void check_timeout(object source, System.Timers.ElapsedEventArgs e)
        {
            timeout = true;
        }
        private void web_con(string url)
        {
            webBrowser1.Navigate(url);
            loading();
            HtmlDocument document = webBrowser1.Document;//获取控件中的html文档,类似于网页中的document对象。
            document.Window.ScrollTo(610, 222);//将文档窗体滚动到指定位置,610表示横坐标
        }
        private void button3_Click(object sender, EventArgs e)
        {
            web_con("https://nportal.ntut.edu.tw");

        }
    }

2016年8月25日 星期四

C# WebBrowserReadyState.Complete沒用時,加計時跳出

呼叫timer.timer來計時,時間到強制跳出,
bool timeout = false;//全域
private bool Check_Complete(string keyword ,int timeout_time)
        {
            bool getkeyword = false;
            System.Timers.Timer t = new System.Timers.Timer(timeout_time); // 等多久
            t.Elapsed += new System.Timers.ElapsedEventHandler(check_timeout); //呼叫副程式
            t.AutoReset = false; //设置是执行一次(false)还是一直执行(true);
            t.Enabled = true;
            while (!getkeyword)
            {
                if(timeout)
                {
                    t.Close();
                    timeout = false;
                    return false;
                }
                foreach (HtmlElement he in webBrowser1.Document.All)
                {
                    if (he.OuterText == keyword)
                    {
                        timeout = false;
                        t.Close();
                        getkeyword = true;
                    }
                }
                Application.DoEvents();
            }
            return true;
        }
public void check_timeout(object source, System.Timers.ElapsedEventArgs e)
        {
            timeout = true;
        }

2016年8月24日 星期三

C# 確認網頁真的讀完,WebBrowserReadyState.Complete沒法用的時候

 確認網頁真的讀完,找到完整載入後才會出現的關鍵字當作判斷標準,用於WebBrowserReadyState.Complete沒法用的時候
 private bool Check_Complete(string keyword)
        {
            bool a = false;
            while(!a)
            {
                foreach (HtmlElement he in webBrowser1.Document.All)
                {
                    if (he.OuterText == keyword)
                    {
                        a = true;
                    }
                }
                Application.DoEvents();
            }

            return a;
        }