顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


文章 - caterpillar

頁: [1]
1
嗨!小第最近試著記錄一些 Python 3 的心得,還請先進有空造拜不吝指教 Orz
http://caterpillar.onlyfun.net/Gossip/Python/index.html

2
各位先進,小弟使用GLib的g_spawn_async_with_pipes寫了個簡單的小程式測試。。。

當我寫了一個test.c
代碼: [選擇]
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char input[80];
    gets(input);
    puts(input);
    return 0;
}

而在下面這個程式中使用g_spawn_async_with_pipes()對子程序送資料:
代碼: [選擇]
#include <string.h>
#include <glib.h>

int main (int argc, char *argv[]) {
    char *cmd[]={"./test", 0};
    char data[] = "caterpillar";
    int input;
    char buffer[80];
   
    g_spawn_async_with_pipes(NULL, cmd, NULL, 0,
                             NULL, NULL, NULL,
                             &input, NULL, NULL,
                             NULL);
   
    write(input, data, strlen(data));
   
    return 0;
}

執行上面這個程式,可以顯示"caterpillar"沒問題。

另外,我再試著寫一個test.c
代碼: [選擇]
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char data[] = "caterpillar";
    puts(data);
    return 0;
}

然後用這個程式去嘗試讀得子程序的輸出:
代碼: [選擇]
#include <string.h>
#include <glib.h>

int main (int argc, char *argv[]) {
    char *cmd[]={"./test", 0};
    int output;
    char buffer[12];
   
    g_spawn_async_with_pipes(NULL, cmd, NULL, 0,
                             NULL, NULL, NULL,
                             NULL, &output, NULL,
                             NULL);
   
    read(output, buffer, 12);
    buffer[11] = '\0';
    printf("From child: %s\n", buffer);
   
    return 0;
}

也可以順利讀得資料。

若我同時讀寫子程式,例如test.c:
代碼: [選擇]
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char data[12];
    gets(data);
    puts(data);
    return 0;
}

代碼: [選擇]
#include <string.h>
#include <glib.h>

int main (int argc, char *argv[]) {
    char *cmd[]={"./test", 0};
    char data[] = "caterpillar";
    int input, output;
    char buffer[12];
   
    g_spawn_async_with_pipes(NULL, cmd, NULL, 0,
                             NULL, NULL, NULL,
                             &input, &output, NULL,
                             NULL);
   
    write(input, data, strlen(data));
    read(output, buffer, 12);
    buffer[11] = '\0';
    printf("From child: %s\n", buffer);
   
    return 0;
}

那麼程式就會停住,似乎是read()在讀取資料該行,敢請問該如何才能正確的利用g_spawn_async_with_pipes同時讀寫子程序呢?

3
沾一下 jserv 的光,關於GTK,小弟近來正在研究,並將一些筆記撰寫下來,還請先進不吝指教:
http://caterpillar.onlyfun.net/Gossip/GTKGossip/GTKGossip.html

7
找這個檔案中,有關於前序後序中序的介紹:
http://www.freepgs.com/caterpillar/chm/AlgorithmExamples_Trad.CHM

9
雜七雜八 / firefox 1.0
« 於: 2004-10-02 10:06 »
引述: "huckly"
我打錯了  firefox應該只有英文版吧


這邊有中文化版本。。。。
http://moztw.org/

10
引述: "hoyo"
嗯,寫書容易嗎?那是不簡單喔,不知道學園裡除了鳥哥還有誰出過書的?


在台灣寫書其實不如各位想的單純,寫書不只是作者單方面的事,它牽涉到作者與出版社的關係、版稅的問題、業務的推廣意願、市場、與學校的關係(校園書)等等,尤其是在景氣不好,書市越來越難作的情況下,要出一本書的中間過程是越來越複雜了。

舉個例子好了,過去有一間老字號的出版社,如果要業務推廣您的書的話,要看「您的誠意」。。。。這是後來該間出版社的幾個老作者與經理親口說的,至於是哪一間,就不便說明了。

侯大作者自已也說過,要當一個自由寫作者,很多人都會很懷疑他是否吃的飽,以VB出名的王大作者也說過,要當一個好作者,首先要先有一到三年沒有穩定收入的心理與實質準備,很慶辛他們都闖出名堂了。

網路上有幾個由網站成名而出書的例子,例如鳥哥、竹貓星球、小正正、工友,說實在的是無心插柳,出版社大都是看在網站的人氣來出書,這類的網站成名後出書會有一定的族群支持銷售量,對出版社來說有一定的保障,在這之前,網站本身必須長期經營,得到網友的認同,這並不是那麼的容易的,也沒有人會這麼開始來跨入寫書,而成為生活收入的來源。

所以寫書本身就不容易了,要寫好書就更難,想寫好書的並不是沒有,但有些人是「專」靠這吃飯的,一但如此,這些作者就會受到市場的牽動,寫的太難沒有市場、寫的太簡單會被說灌水、寫的太多會被說老師不懂這麼多,不會教,您寫這麼多幹嘛?鳥事真的很多。。。。但這些人寫的書其實佔市面上書的三分之二以上,多數是工作室與出版社自已養的大、小作者,少數是自已奮鬥的獨立作家。

我過去曾經從事過一段寫書工作,屬於工作室下養的「大」作者(出書但不掛名,以工作室名字為作者名),因為我寫的書有一定的水準,也因此比較接近運作核心,瞭解不少出版事業的複雜,目前我為了讓自己能有更大的成長空間,已經離開了這個位置了,所以可以稍微透露當中的一些小內幕,不過我還是點到為止吧!。。。。

11
引述: "jameslfp"
Sorry,不是故意要一文多貼,而是貼錯了,想說貼在另一個部份較適合。

不過,上面有人說,台灣沒什麼好書,也並不是這麼回事,
你看過候老師寫過「快樂學win98」、於是這邊也有個想法,那些自認為候老師書寫的最好的高手,我只能說,這是思考方向的偏差,也許那是你程度好,看不起基礎的電腦教學書籍吧,如果有一天,你的父母親想學電腦,你願意教他們嗎?還是拿本Thank in Java給他們看,我想並不是這樣子吧。


小校一下,是Thinking in Java,不是Thank in Java。。。。

12
引述: "Anonymous"
台灣根本沒啥好電腦圖書!!
覺得語言方面侯老師算還不錯(他譯書也很多)!!
其餘啊!!根本沒有一些出版社說是很好的!!
文魁,旗標這些都是出版一些入門書!!入門用戶可以考慮!!
再來要進階就得靠自己了!!不然就去亞馬遜買些國外編的書.....


到國外購書前,可以先在「維科書局」找找看,通常會有的,而且訂價通常比較便宜,而且可以省一筆運費。

13
程式討論版 / 一些提供免費原始碼的網站
« 於: 2003-08-03 21:54 »
不嫌棄的話,可以到小弟的站看看,有我整理的一些常見程式範例,以及我自已寫的一些程式 :lol:  :lol:

14
拾人牙慧 / [分享]使用Qt Designer設計視窗
« 於: 2003-07-21 11:38 »
Qt是使用C++語法,在Source Level跨平台的視窗程式設計方案,您可以使用Qt來開發Linux或Windows下的視窗程式,而Qt也提供了繪圖、檔案存取、網路等等相關的模組,使得它不再限於開發視窗程式。

弟最近研究Qt有一小段時間,也完成了一些基本的入門教學文件,各位可以來看看,瞭解如何使用Qt的網友,可以藉由Qt Designer來協助設計視窗外觀,所視即所得的環境可以省去不少的版面配置時間。

http://www.caterpillar.onlyfun.net/phpBB2/

相關內容均在Qt Programming下。

以下貼上Qt Designer的入門文件:

========================================================

在開發Qt視窗程式時,我們可以使用Qt Designer的所視即所得環境,協助我們進行視窗外觀的設計,並透過指令產生對應的*.h與*.cpp檔案,這邊介紹Qt Designer的一些簡單的使用方法。

首先開啟Qt Designer,執行選單中的[File/New]指令(或按Ctrl+N)新增要使用的視窗類型,如下圖所示:


接下來的畫面與Visual Basic很像,我們在左邊的Toolbox選擇元件,在中間的表單區域以拖拉的方式配置元件,在右邊的Property Editor設定相關屬性,假設我們的元件如下配置:


接下來我們進行簡單的Signals - Slots連結,執行選單中的[Tools/Connect Signal/Slots]指令(或按F3),然後選擇發出Signal的元件,接著會出現以下視窗,在這邊我們簡單的設定按下按鈕後關閉視窗:


您可以執行選單中的[Preview/Preview Form]指令(或按Crtl+T)來預覽配置成果,接下來我們執行[File/Save]指令(或按Ctrl+S),將之儲存為form1.ui檔,這個檔案一堆描述元件屬性的標籤所組成,我們可以使用下面的指令來產生*.h檔:
代碼: [選擇]
uic -o form1.h form1.ui

然後我們使用下面的指令產生*.cpp檔:
代碼: [選擇]
uic -i form1.h -o form1.cpp form1.ui

您可以直接開啟這兩個檔案來看看它們的內容,並根據實際需求再作些修改,下面是我們產生的*.h檔內容:
代碼: [選擇]
/****************************************************************************
** Form interface generated from reading ui file 'form1.ui'
**
** Created: 銝�  7��21 11:11:59 2003
**      by: The User Interface Compiler ($Id: qt/main.cpp   3.1.2   edited Dec 19 11:45 $)
**
** WARNING! All changes made in this file will be lost!
****************************************************************************/

#ifndef FORM1_H
#define FORM1_H

#include <qvariant.h>
#include <qwidget.h>

class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QPushButton;
class QLabel;

class Form1 : public QWidget
{
    Q_OBJECT

public:
    Form1( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
    ~Form1();

    QPushButton* pushButton1;
    QLabel* textLabel1;

protected:

protected slots:
    virtual void languageChange();

};

#endif // FORM1_H


下面是產生的*.cpp內容:
代碼: [選擇]
/****************************************************************************
** Form implementation generated from reading ui file 'form1.ui'
**
** Created: 銝�  7��21 11:12:43 2003
**      by: The User Interface Compiler ($Id: qt/main.cpp   3.1.2   edited Dec 19 11:45 $)
**
** WARNING! All changes made in this file will be lost!
****************************************************************************/

#include "form1.h"

#include <qvariant.h>
#include <qpushbutton.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>

/*
 *  Constructs a Form1 as a child of 'parent', with the
 *  name 'name' and widget flags set to 'f'.
 */
Form1::Form1( QWidget* parent, const char* name, WFlags fl )
    : QWidget( parent, name, fl )
{
    if ( !name )
setName( "Form1" );

    pushButton1 = new QPushButton( this, "pushButton1" );
    pushButton1->setGeometry( QRect( 80, 130, 131, 31 ) );

    textLabel1 = new QLabel( this, "textLabel1" );
    textLabel1->setGeometry( QRect( 50, 50, 191, 51 ) );
    QFont textLabel1_font(  textLabel1->font() );
    textLabel1_font.setPointSize( 18 );
    textLabel1->setFont( textLabel1_font );
    textLabel1->setAlignment( int( QLabel::AlignCenter ) );
    languageChange();
    resize( QSize(293, 215).expandedTo(minimumSizeHint()) );
    clearWState( WState_Polished );

    // signals and slots connections
    connect( pushButton1, SIGNAL( clicked() ), this, SLOT( close() ) );
}

/*
 *  Destroys the object and frees any allocated resources
 */
Form1::~Form1()
{
    // no need to delete child widgets, Qt does it all for us
}

/*
 *  Sets the strings of the subwidgets using the current
 *  language.
 */
void Form1::languageChange()
{
    setCaption( tr( "Form1" ) );
    pushButton1->setText( tr( "Click me" ) );
    textLabel1->setText( tr( "Qt Designer" ) );
}


我們使用下面這個main.cpp程式來測試成果:
代碼: [選擇]
#include "form1.h"
#include <qapplication.h>

int main(int argc, char **argv) {
    QApplication app(argc, argv);

    Form1 *fm = new Form1();
    app.setMainWidget(fm);
    fm->show();

    return app.exec();
}


下圖為執行結果,按下按鈕會關閉視窗:

頁: [1]