發表文章

OJ的建置(1)--建立資料庫

圖片
想把online judge弄得專業一點,所以資料庫的管理是必要的,我選擇了mysql,因為想要用linux當主機。 先上 codecademy ,學習學習。有三章左右,我學完第一章基本語法後就開始配環境了,先在cygwin上練習!! 由於學校主機的mysql好像要帳號,沒門道,所以我便想辦法配個環境,沒想到cygwin上就可以啦!! 首先,我得到stack overflow的大神 幫助 ,找到了cygwin安裝的 方法 。以下是我操作的截圖。 (我的 setup-x86_64.exe在downloads中) 連上後,跟一般鏡像站的介面一樣,然後搜尋處鍵入mysql(還是sql我忘了),把選項改成install。接著下一步就可以下載下來囉! 其實我發現從GUI直接開setup,然後選原本列表內的鏡像站,就有sql可以下載了,還是不太清楚上面在幹嘛XP (好像是port下載,不一樣,說到port,我就想到我悲慘的freeBSD QQ , 還是Mint(Ubuntu)的apt-get好用 ... ) mysql載下後,要進行一些 設定 ,把server架起來。 就三行 ( 直接在cygwin的TCL下指令 ): # To begin MySQL setup run the following: mysql_install_db # Run mysql - you'll get a firewall alert from windows if you have it active. mysqld_safe & # Immediately following that, it would be wise to run the following: mysql_secure_installation ( 一些密碼設定之類的 ) 這樣就算設定完成了。 因為一開始只有root帳號(要其他的帳號要再加,我也還沒 研究 ) 所以下   mysql -u root -p   以  root  身分先登入  server 。 一登入,可以先下 show databases ; 看看有那些databases。 然後用 create database 名稱 ; 指令創造資料庫。 用system 後可接bash shell 指...

[MySQL] 建立資料庫 on Cygwin

圖片
想把online judge弄得專業一點,所以資料庫的管理是必要的,我選擇了mysql,因為想要用linux當主機。 先上 codecademy ,學習學習。有三章左右,我學完第一章基本語法後就開始配環境了,先在cygwin上練習!! 由於學校主機的mysql好像要帳號,沒門道,所以我便想辦法配個環境,沒想到cygwin上就可以啦!! 首先,我得到stack overflow的大神 幫助 ,找到了cygwin安裝的 方法 。以下是我操作的截圖。 (我的 setup-x86_64.exe在downloads中) cygstart -- /path/to/setup-x86.exe -K http://cygwinports.org/ports.gpg (/path/to/setup-x86.exe 看你的安裝檔位置) 增加 User URL :   ftp://ftp.cygwinports.org/pub/cygwinports 連上後,跟一般鏡像站的介面一樣,然後搜尋處鍵入mysql(還是sql我忘了),把選項點一下改成install(10.1.18-1)。 (2017/2/9 update: 兩個條目都下,否則  mysql_install_db 會出現 "FATAL ERROR: Could not find ./bin/my_print_defaults" 而可能更新緣故,原本 mysql  變成了 mariaDB) 接著下一步就可以下載下來囉! 其實我發現從GUI直接開setup,然後選原本列表內的鏡像站,就有sql可以下載了,還是不太清楚上面在幹嘛XP (好像是port新增,鏡像內容不一樣,可能其他的只有提供 library 吧, 說到port,我就想到我悲慘的freeBSD QQ , 還是Mint(Ubuntu)的apt-get好用 ... ) mysql載下後,要進行一些 設定 ,把server架起來。 就三行 ( 直接在cygwin的TCL下指令 ): # To begin MySQL setup run the following: mysql_install_db # Run mys...

踩地雷機器人-MineSweeper Solver

圖片
這個是高中地科老師提過的課題,耳聞同學中有人做出來了,當然,讀這科的要不落人後,開始實做吧。 對於這個目標,首要就是對項目的留意,除了自己上網查資料,生活中接觸到相關內容也要留心,像幾個月前同學介紹看sitcon的直播,就有查一些幾年前的影片,當中剛好就看到 從技術面簡介線上遊戲外掛 介紹 一些API的調用,就直接去google這些名詞了。 由於升級到win10,原本的M$game都進去xbox裡了,踩地雷也進去了,我覺得用舊版的應該比較好做,新版的花花綠綠的,根本就變成花園了,地雷變瓢蟲...受不了 > < 而且對於畫面的規劃感覺不是很好,還要滾輪滑動螢幕?! 怒載 舊版 首先比較麻煩的就是畫面像素分析,但剛好踩地雷數字的顏色都有分開所以只要抓那格的顏色就好了。( 3 7 8的顏色都一樣,所以我是看周圍狀態去變動3 , 7和8) 先把matrix做出來吧!! 我參考了一下這篇 自動化連連看 ,差不多了解流程。 像素怎抓??首先要抓到form的headler(名稱),我是用spy++(VS2010自帶的...剛好有裝 : ) 首先要注意的是headler,因為minesweeper程式開下去玩的時侯會生成一個child form,那個headler是抓不到的(因為根本沒有),所以要再借助API抓child form's headler 整句下來會變這樣: wndPaneParent = FindWindow(NULL , "Minesweeper"); // wndPaneParent 是一種windows API 的資料型態 , 名為 HWND , 宣告方式 : HWND 變數 ; if(!wndPaneParent) puts("no such wnd !!") , exit(1); // 除錯 wndPane = GetWindow( wndPaneParent , 5); // wndPane亦同 if(!wndPane) puts("no child wnd") , exit(1); //除錯 再配合一下標尺工具 FSCapture (真的不錯用 螢幕截圖都靠它了,還可以錄影 >///< 其中與其用標...

Discovered the New World

#!/bin/bash for (( i=1 ; i <= 225 ; i++ )) do     nslookup 140.119.160.${i} | tail -2 | head -n 1 | grep "cs" >> n_host done 1.162.119.140.IN-ADDR.ARPA    name = dns.cs.nccu.edu.tw. 3.162.119.140.IN-ADDR.ARPA    name = test.cs.nccu.edu.tw. 10.162.119.140.IN-ADDR.ARPA    name = meetingroom.cs.nccu.edu.tw. 11.162.119.140.IN-ADDR.ARPA    name = venus.cs.nccu.edu.tw. 12.162.119.140.IN-ADDR.ARPA    name = jupiter.cs.nccu.edu.tw. 18.162.119.140.IN-ADDR.ARPA    name = clhan.cs.nccu.edu.tw. 23.162.119.140.IN-ADDR.ARPA    name = sakura.cs.nccu.edu.tw. 25.162.119.140.IN-ADDR.ARPA    name = ts.cs.nccu.edu.tw. 26.162.119.140.IN-ADDR.ARPA    name = ts_2.cs.nccu.edu.tw. 27.162.119.140.IN-ADDR.ARPA    name = ts27.cs.nccu.edu.tw. 28.162.119.140.IN-ADDR.ARPA    name = ts28.cs.nccu.edu.tw. 29.162.119.140.IN-ADDR.ARPA ...

[Windows] Cygwin - Unix-like env

由於覺得windows 的 cmd 真是太醜了,font 又改不太起來,最後找著找著竟又找回了Linux。 cygwin 是一堆dll檔兜起來的類Unix/linux環境,支援的東西真是不少,至少我目前玩到的tmux(要裝) ncurses socket都找的到,當然,有個vim可以用,超爽的。 http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=47282   這網頁有介紹及載點 來講講使用上的感想 心得好了 我已經決定捨棄pietty了,在cygwin裝了openssh後不僅取代了pietty的ssh還附贈了scp可以用,從今以後,我不用再用圖形化介面開ftp(檔案總管)下載了,直接command line下指令,方便! 另外當然就是自己寫的各種東西啦,socket甚至不用裝就有支援,(ncurses還是要裝一下),之前寫的program都run得起來,更浪漫的是script也可以! 所以根本就是無痛轉換啦,vimrc bashrc profile tmux的setting 啦,全部複製過來就可以用了,家目錄的bin再過來,這windows根本就我的天下,哈哈哈,難用的cmd,再見了! 其中啊,有個cygwindrive,就是共用資料夾,連到c槽及d槽,所以如果你家目錄建在c,可以類似無窮迴圈般一直開門開門,開開開開開下去@@(離題了) 我覺得如果寫程式沒有太多的linux環境需求,用這個就可以取代虛擬機了,不過可惜的是也不是全部的指令都有,所以如果要完全掌握linux,只玩cygwin還是不足的。 好像可以支援創多帳號,並從遠端連到windows的cygwin bash shell,我目前可能還不去碰這塊,因為沒有需求,cygwin也還不是很熟。 不過說到帳號,cygwin剛建起來,是以windows使用者名稱創家目錄,又可能是因為寫給個人電腦軟體的關係,並沒有登入畫面,於是我就自己刻了一個,還蠻好玩的哩! 以下的getch是網友刻的getch( ncurses的要iniscr() 太難用了 ) 為了達到有**效果,所以才找了網上大神的code一用 來源  http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?...

[C/C++] 多人聊天室

程式碼趨近完成,寒假的課題終於也算是接近告一個段落了。 多人的server其實也跟兩人版的差不多,不過就是要注意client資料的宣告,可以預留一個位置做拒絕用,當人數已達上限時,多一個位置,把人accept進來後sign給他人數已滿的訊息,繼而close掉。 這次在寫的過程中,一個bug de了很久,就是為client啟動執行緒時把參數傳入create_thread時,由於傳的是i的位址(我用迴圈跑客戶資料陣列),在傳進去被存為另一變數前,父程序的i已經又跑完迴圈i++了,所以傳進去的值會比原本多一,於是recv接到的是fd==-1的client,結果就發生錯誤喽。這bug我de了好幾個小時才發現,資質駑鈍啊~~~ 原先看這篇是教傳址: http://pthreadpthread.blogspot.tw/2012/03/pthread.html 後來這篇有另外教傳值: http://pccts.blogspot.tw/2007/11/pthreadcreate.html (*真是讓我@@) 所以歸納一下本篇和上篇的差異:要把程式分成兩部分伺服端和客戶端,客戶端沒甚麼不同,伺服端多了一個重點就是多執行緒的管理,開啟與關閉,關於伺服端接受資料也可以用select接,取代執行緒的建立,不過我還是偏好執行緒,因為select好像要一直跑迴圈,我怕造成負擔。 pthread_create()建立執行緒 pthread_exit()用於該執行緒內 將線程結束(如果用exit()會造成整個程式結束) pthread_cancel()將指定執行緒結束 //欲結束執行緒內加這句  pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL );  設置狀態 可參考: http://jyhshin.pixnet.net/blog/post/42432082-linux-pthread-cancel-part2 mycode都在github上喔~^^ 悄悄話:我發現學校主機直接run server端,外面連得上去,看來port並沒有特別鎖起來。 下一步,啊~~我想寫破解踩地雷的程式......轉戰windows平台!!  

[C/C++] 簡易 socket 雙人聊天程式

先前為了能把tetris連線,於是小小研究了下socket的用法, 終於,我的程式不再只是會用system() call 其他程式,而是真正的進入雙向的溝通。 一樣在linux的環境下開發,算是要寫連線程式前的暖身。 我覺得以下這篇看看,就能對socket有初步認識,也就能開始使用了   Linux Socket Programming 淺談–教你的程式如何透過網路溝通 參考範例: socket 範例程式 參考範例,利用thread建立多執行序(相關用法見 這篇 )接收訊息, 再搭配ncurses(要裝才有喔,可以參考我 這篇 )寫出一個聊天室。(我把client sever寫一塊兒) mycode: github上喔 效果: https://asciinema.org/a/cqri8tzq9qfd81g0djocabvmc    compile 時你可能需要加的一些 flag : -lncurses -pthread -lsocket -lnsl   測試: 可以用crtl+alt+F(n)做到切換tty(n),例如要切到tty1就按crtl+alt+F1,用兩個tty做連線, 又或者用screen指令開兩個視窗進行連線測試 (linux 下) screen指令有可能不是預設的,所以要另外裝, $ sudo apt-get install screen   有可能遇到伺服器掛掉,裝不起來,可以過一段時間再裝,或者爬文,換伺服器。(不行的話那用tty測吧) screen指令的簡單操作: ctrl+a然後w 查看現在開了那些screen ctrl+a然後數字鍵 切換screen   2017/5/8 update: 我現在是都用 tmux 切 terminal 了啦 ...,要不就開兩個 terminal 吧... 下一步,寫出多人聊天室~~