20100723

二猫远征记

二猫远征记

去通化。

这是二猫的第一次旅游。在这之前,没有去过公园,没有见过山,除了昆虫猫狗

和人,没见过别的动物,没坐过火车。在这之后几年,估计她会说:我来我见我

征服。

远征通化。

先是火车。在候车室的时候告诉她,这是长春站,从这上火车。三天后,回程的

时候,她说:到了长春站,就到家了。很好的持久记忆。

候车的时候,有别的孩子在哭。二猫挺安静。有个妈妈批评她的孩子:你看看那

小姐姐多听话,你啥啥啥。我趴二猫耳边:夸你呐。

然后是九个小时的火车。

好在坐的是两个人的坐,我和二猫妈挤着,二猫有个自己的小空间。伸直小腿一

直坐着,怎么劝也不站起来。"停车时才能站起来。"原来是怕摔到。

然后是出租车。再加上之前在长春的出租车,总的时间太长了,最终到家还是吐

了。抗晕车的训练,看来还任重道远。

当天,仍然保持习惯午夜之后才睡。

第二天和第三天,每天爬两座山。

第二天,准备先爬个小的,家旁边的一座。当年我经常没事的时候爬上去,有的

时候还带着狗,基本上十几分钟的事儿。

这一次发现太大意啦。刚开始上那条小路我还乐,因为对后面的路满有把握。我

抱着二猫先爬一段,回头二猫妈总想拽着草助力。二猫说:"妈妈也上不来啊。"

然后很快就发现了问题。草可及肩。而且密不透风。

我知道山顶有一块平地,寸草不生的。有这个保底,这及肩的草,也都努力克服

了。

终于快到山顶。山顶之前的一道沟,发现不对。那沟很浅,跳进去也就是没小腿

那么深。可是,草又密又高,还有很多灌木,带刺的也不少。这时早就是背着二

猫,而不是抱着了,但是仍然无法通过。

回头,万万不可能。那么陡的坡,只要一个失手二猫就满身刺了。

向左沿沟走,那有一片庄稼地,估计有路,或者向着记忆中的平台走,希望能走到草少的地方。

问二猫。二猫说:向左。

我说 我还是去探探前面吧。就是去那块平地,以几棵大树为目标。

折了段树枝帮助开路,走一半回来了。灌木开始比我高很多了。

还是按二猫的决定,向左。

我先踩出一条路。然后再回来抱二猫。二猫妈行走艰难,此时抱二猫已经不安全

了。

在草不那么密,不需要先开路的地方,我终于想到拍了两张照片。

接下来,是向近处的树林还是远处的松林,又犹豫了一阵。原本希望从近处的树

林边通过,结果根本不可能通到那里。

远处的松林附近,终于发现草矮到腰了。虽然仍然很密。到了庄稼地。

小土豆、小辣椒、小茄子、小玉米。二猫收获颇丰。

问 二猫怕不怕。

答 不怕。妈妈怕了。

下山的时候,二猫说:我要上山,我不回家。

回家的路上,看到了牛、鸭、鹅。还有鸡,这个以前见过,其余的都是新鲜的。

看牛和鸭很认真,比下一天公园看猴感兴趣多了。

检查,大家的腿上都挂了彩,我是长裤,好些。

用又氧水。二猫怕疼,后来一提腿上的伤就说,都快好了,快看不见了。

到家。我妈说另一座山好走些。看天色尚早,又出发。

这次路到是不难走,只是远些。从曾经是个小学的地方围墙外,绕到外环线,然

后到另一个村子,然后再绕回来。

半路上累得休息了好几气。尤其二猫的鞋后来湿了,只能一直抱着。才知道,稍

事休息是多么的必要。

回去的路上,二猫说 我不累。

刚一进家门,认出来了,大喊: 我不回家,我要上山。

在这第二座山的路上,碰到条小小的长毛狗,追着我们叫。我看二猫怕,抱着退,

狗越是要追。后来见二猫往我身上爬,吓到了,把她交给二猫妈,拿个破蒿子杆

冲向那狗。这家伙跑玉米地里没影了,二猫大笑。

还有一处。红色的石头,下面是一大片白花点缀的草地。我正扔石头下去,二猫

在远处喊:爸爸我也要扔那个球。

拿到石头以后,二猫说:我要向没人的地方扔。

恩。很懂事。可是此地只有三个人而已。

这一天,又是午夜才睡。

第三天

二猫累了,耍赖。我看书。后来想通了,又要爬山。

本来我想对付一下爬个矮的得了,后来发现是误会了,还是按昨天的计划爬了公

园,叫玉皇山。

二猫这个胆小的孩子,平时都不敢坐一两元钱投币的那种会摇的小动物车。这次

主动坐了两种火车。

看猴、看鸸MIAO,则没多大兴趣。可能,排除笼子的干扰是件挺吃力的事吧。反

正对相机,这事挺难的。

然后是望山亭,这已经翻过了山。我妈和哥正好追及。讨论了一下,去看曾经住

过的老房子,不知道怎么样了。

沿途给二猫讲,这里这里发生过些什么事。

老房子,已经完全是平地了。邻居们早都搬走,有几家根本不再住人,大门外荒

草丛生。

去了小时候哥带我放风筝的山包,那里现在是个凉亭。哥说看到条蛇,我们赶紧

又下来了。

在凉亭上,哥和我抓着铁条试试能把到此一游写多高(没写)。二猫妈说:你看

他们两个淘气呢。二猫说:再淘一个。

然后去了黑森森,远看绿得发黑的森林。

里面有种一捅就冒烟的真菌。二猫一边捅一边说 冒烟冒烟。后来大家找到好几

个,跟二猫一起捅。

两天,爬了四座山。

后来是亲戚们吃饭。没意思,二猫有同感,先走了。

第四天一大清早,返程。

在车站排除,二猫要出去玩。我指着入口说:咱们一会从这出去,上火车玩。

艰难的九个小时。二猫累趴下了。

到长春以后,二猫晕车。后来公共汽车、出租车地倒,一共12个小时。到家了。

最后一段,二猫坐在小婴儿推车里说,这是我小时候坐的。小脑袋靠在椅背上。

这是艰难的旅程。二猫独立做了一些决定,表达了自己的意见,参与克服困难。

后面还会有更多的困难,不过,相信二猫都会像这样一件件征服。

所有的困难,克服以后,都成为了回忆,成为你之为你的重要组成部分。

想拥有什么样的记忆,什么样的未来,就努力做现在吧。

两天八百公里,两天四坐山。

是为二猫远征记。

20100713

前一段时间写的aurora,用来统计文本文件里单词的数量的

前一段时间写的aurora,用来统计文本文件里单词的数量的。
源代码如下。


//// console版
#include "cai.h"
#include <iostream>
 
using namespace std;

// cai.exe -text file_name -delimiter file_name -skip file_name -dup file_name -sort freq
main(int argc, char* argv[])
{
    ios::sync_with_stdio(false);

    error err = OK;
    cmd_argument cmd;
    cmd = parse_cmd_argument(argc, argv, err);

    cout << "In memeory of Aurora(1984)" << endl;
    cout << "Programming by gift.young@gmail.com" << endl;    

    if (err!=OK)
    {
        cout << "cmd arguments parsing error." << endl;
        cout << "cai.exe -text file_name -delimiter file_name -skip file_name -dup file_name -sort freq|alph" << endl;
    }
    
    input_text(cmd.text_file_name, err);

    get_skip_table(cmd.skip_table_file_name, err);

    get_dup_table(cmd.dup_table_file_name, err);

    get_delimiter_table(cmd.delimiter_table_file_name, err);
    
    segement();

    remove_skip();
    
    remove_dup();

    output_vocabulary(cmd.sort);

}
 

/////
/// cai.h for console version.
/////

#include <vector>
#include <string>
#include <map>
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <cctype>

using namespace std;

struct cmd_argument
{
    string text_file_name;
    string delimiter_table_file_name;
    string skip_table_file_name;
    string dup_table_file_name;
    string sort;
};

vector<string> skip_table;
vector<char> delimiter_table;
map<string, string> dup_table;//varint(meaning) for key, root(mean) for value

string whole_text;
vector<string> text_segmented;
vector<string> text_skip_removed;
vector<string> text_dup_removed;
map<string, int> voc_output;

enum error
{
    OK,
    cmd_pasrsing_error
};

// cai.exe -text file_name -delimiter file_name -skip file_name -dup file_name -sort freq
cmd_argument parse_cmd_argument(int argc, char* argv[], error& err)
{
    cmd_argument cmd;

    if (argc != 11)
    {
        err = cmd_pasrsing_error;
    }
    else
    {
        cmd.text_file_name = argv[2];
        cmd.delimiter_table_file_name = argv[4];
        cmd.skip_table_file_name = argv[6];
        cmd.dup_table_file_name = argv[8];
        cmd.sort = argv[10];
    }
    
    return cmd;
}

void input_text(string file_name, error& err)
{
//    cout << "input:" << file_name << endl << endl;
    string line;
    int line_count = 0;
    ifstream f(file_name.c_str());
    while(getline(f, line))
    {
        whole_text += line+" ";
        ++line_count;
    }

    string foo = "Some Mixed Case Text";
    transform(whole_text.begin(), whole_text.end(), whole_text.begin(), ::tolower);

//    cout << line_count << " lines" << endl;
    
}

void get_skip_table(string file_name, error& err)
{
//    cout << "skip:" << file_name << endl << endl;
    string line;
    ifstream f(file_name.c_str());
    while(getline(f, line))
    {
        skip_table.push_back(line);
    }
}

void get_dup_table(string file_name, error& err)
{
//    cout << "dup:" << file_name << endl << endl;
    string line;
    ifstream f(file_name.c_str());
    stringstream ss;
    string variant;
    string root;
    string word;
//    cout << "---" << endl;
    while(getline(f, line))
    {
        ss.clear();
        ss << line;
        for (int i = 0; ss >> word; ++i)
        {
            if (i==0)
            {
                root = word;
            }
            else
            {
                variant = word;
                dup_table[variant]=root;
            }
        }
    }
}

void get_delimiter_table(string file_name, error& err)
{
//    cout << "delimiter:" << file_name << endl << endl;
    char space;
    ifstream f(file_name.c_str());
    while(f >> space)
    {
        delimiter_table.push_back(space);
    }
    

}

// whole_text is fileted with delimiter talbe into text_segmented
void segement()
{
//    cout << "skip:" ;
/*     for (vector<string>::iterator i = skip_table.begin(); i!=skip_table.end() ; ++i) */
/*     { */
/*         cout << *i << "\t"; */
/*     } */
//    cout << endl << endl;

//    cout << "dup:" << endl;
/*     for (map<string, string>::iterator i = dup_table.begin(); i!=dup_table.end() ; ++i) */
/*     { */
/*         cout << i->first << "\t" << i->second << endl; */
/*     } */
//    cout << endl << endl;

/*     cout << "delimiter:" << endl; */
/*     for (vector<char>::iterator i = delimiter_table.begin(); i!=delimiter_table.end() ; ++i) */
/*     { */
/*         cout << *i << "\t"; */
/*     } */
/*     cout << endl << endl; */
    
    
        ///

    for (vector<char>::iterator i=delimiter_table.begin(); i != delimiter_table.end(); ++i)
    {
        replace(whole_text.begin(), whole_text.end(), *i, ' ');
    }

    stringstream ss;
    ss << whole_text;
    string word;
    while(getline(ss, word, ' '))
    {
        if (word!="")
        {
            text_segmented.push_back(word);
        }
    }

/*     cout << "----------" << endl; */
/*     for (vector<string>::iterator i=text_segmented.begin(); i != text_segmented.end(); ++i) */
/*     { */
/*         cout << *i << endl; */
/*     } */
    
}

void remove_skip()
{
    bool skip = false;
    for (vector<string>::iterator i = text_segmented.begin(); i != text_segmented.end(); ++i)
    {
        for (vector<string>::iterator j = skip_table.begin(); j != skip_table.end(); ++j)
        {
            if (*i == *j)
            {
                skip = true;
                break;
            }
        }
        if (skip==false)
        {
            text_skip_removed.push_back(*i);
        }
        else
        {
            skip=false;
        }
    }

/*     for (vector<string>::iterator i=text_skip_removed.begin(); i != text_skip_removed.end(); ++i) */
/*     { */
/*         cout << *i << endl; */
/*     } */

}
    
void remove_dup()
{
    for (map<string, string>::iterator j = dup_table.begin(); j != dup_table.end(); ++j)
    {
        replace(text_skip_removed.begin(), text_skip_removed.end(), j->first, j->second);
    }
    text_dup_removed = text_skip_removed;

/*     for (vector<string>::iterator i=text_dup_removed.begin(); i != text_dup_removed.end(); ++i) */
/*     { */
/*         cout << *i << endl; */
/*     } */

}

bool more_freq (const pair<string,int>& a, const pair<string,int>& b)
{
    return a.second > b.second;
}

void output_vocabulary(string sorting)
{

    for (vector<string>::iterator i=text_dup_removed.begin(); i != text_dup_removed.end(); ++i)
    {
        voc_output[*i]++;
    }

    if (sorting=="freq")
    {
        vector<pair<string, int> > voc; //(voc_output.begin(), voc_output.end());
        for (map<string,int>::iterator i=voc_output.begin();
             i != voc_output.end();
             ++i)
        {
            voc.push_back(*i);
        }
        sort(voc.begin(), voc.end(), more_freq);
        cout << "-------------------" << endl;
        cout << "vocabulary\tcount sorted by freq" << endl;
        for (vector<pair<string, int> >::iterator i = voc.begin(); i != voc.end(); ++i)
        {
            cout << i->first << "\t\t" << i->second << endl;
        }
    }
    else
    {
        cout << "-------------------" << endl;
        cout << "vocabulary\tcount sorted by alph" << endl;
        for (map<string,int>::iterator i=voc_output.begin(); i != voc_output.end(); ++i)
        {
            cout << i->first << "\t\t" << i->second << endl;
        }

    }
    


    
}

//// GUI version
///auroraDlg.cpp
//////////////
void CAuroraDlg::OnOK() 
{

const char pszFilter[] = _T("TXT File (*.txt)|*.txt|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,  pszFilter, this);
CString strFilePath;
if(dlg.DoModal() == IDOK)
{
strFilePath = dlg.GetPathName();
}

char file_name[1024];
strcpy(file_name,  (LPCTSTR)strFilePath );
 
    error err = OK;
 
m_text_out = "reading...";
UpdateData(FALSE);
    input_text(file_name, err);
m_text_out = "reading...done";
UpdateData(FALSE);

get_skip_table("skip.txt", err);

    get_dup_table("dup.txt", err);
    
get_delimiter_table("space.txt", err);
     
m_text_out = "segmenting the text...";
UpdateData(FALSE);

    segement();
m_text_out = "segmenting the text...done";
UpdateData(FALSE);

m_text_out = "removing spaces...";
UpdateData(FALSE);
    remove_skip();
m_text_out = "removing spaces...done";
UpdateData(FALSE);

m_text_out = "merging the words duplicated...";
UpdateData(FALSE);
    remove_dup();
m_text_out = "merging the words duplicated...done";
UpdateData(FALSE);
 
m_text_out = "sorting...";
UpdateData(FALSE);
    output_vocabulary("freq");
m_text_out = "sorting...done";
UpdateData(FALSE);

m_text_out = text_out.c_str();
UpdateData(FALSE);



}

//// cai.h for GUI.h

#include <vector>
#include <string>
#include <map>
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <cctype>

using namespace std;

struct cmd_argument
{
    string text_file_name;
    string delimiter_table_file_name;
    string skip_table_file_name;
    string dup_table_file_name;
    string sort;
};

vector<string> skip_table;
vector<char> delimiter_table;
map<string, string> dup_table;//varint(meaning) for key, root(mean) for value

string whole_text;
vector<string> text_segmented;
vector<string> text_skip_removed;
vector<string> text_dup_removed;
map<string, int> voc_output;
string text_out;

enum error
{
    OK,
    cmd_pasrsing_error
};

// cai.exe -text file_name -delimiter file_name -skip file_name -dup file_name -sort freq
cmd_argument parse_cmd_argument(int argc, char* argv[], error& err)
{
    cmd_argument cmd;

    if (argc != 11)
    {
        err = cmd_pasrsing_error;
    }
    else
    {
        cmd.text_file_name = argv[2];
        cmd.delimiter_table_file_name = argv[4];
        cmd.skip_table_file_name = argv[6];
        cmd.dup_table_file_name = argv[8];
        cmd.sort = argv[10];
    }
    
    return cmd;
}

void input_text(string file_name, error& err)
{
//    cout << "input:" << file_name << endl << endl;
    string line;
    int line_count = 0;
    ifstream f(file_name.c_str());
    while(getline(f, line))
    {
        whole_text += line+" ";
        ++line_count;
    }

    string foo = "Some Mixed Case Text";
    transform(whole_text.begin(), whole_text.end(), whole_text.begin(), ::tolower);

//    cout << line_count << " lines" << endl;
    
}

void get_skip_table(string file_name, error& err)
{
//    cout << "skip:" << file_name << endl << endl;
    string line;
    ifstream f(file_name.c_str());
    while(getline(f, line))
    {
        skip_table.push_back(line);
    }
}

void get_dup_table(string file_name, error& err)
{
//    cout << "dup:" << file_name << endl << endl;
    string line;
    ifstream f(file_name.c_str());
    stringstream ss;
    string variant;
    string root;
    string word;
//    cout << "---" << endl;
    while(getline(f, line))
    {
        ss.clear();
        ss << line;
        for (int i = 0; ss >> word; ++i)
        {
            if (i==0)
            {
                root = word;
            }
            else
            {
                variant = word;
                dup_table[variant]=root;
            }
        }
    }
}

void get_delimiter_table(string file_name, error& err)
{
//    cout << "delimiter:" << file_name << endl << endl;
    char space;
    ifstream f(file_name.c_str());
    while(f >> space)
    {
        delimiter_table.push_back(space);
    }
    

}

// whole_text is fileted with delimiter talbe into text_segmented
void segement()
{
//    cout << "skip:" ;
/*     for (vector<string>::iterator i = skip_table.begin(); i!=skip_table.end() ; ++i) */
/*     { */
/*         cout << *i << "\t"; */
/*     } */
//    cout << endl << endl;

//    cout << "dup:" << endl;
/*     for (map<string, string>::iterator i = dup_table.begin(); i!=dup_table.end() ; ++i) */
/*     { */
/*         cout << i->first << "\t" << i->second << endl; */
/*     } */
//    cout << endl << endl;

/*     cout << "delimiter:" << endl; */
/*     for (vector<char>::iterator i = delimiter_table.begin(); i!=delimiter_table.end() ; ++i) */
/*     { */
/*         cout << *i << "\t"; */
/*     } */
/*     cout << endl << endl; */
    
    
        ///

    for (vector<char>::iterator i=delimiter_table.begin(); i != delimiter_table.end(); ++i)
    {
        replace(whole_text.begin(), whole_text.end(), *i, ' ');
    }

    stringstream ss;
    ss << whole_text;
    string word;
    while(getline(ss, word, ' '))
    {
        if (word!="")
        {
            text_segmented.push_back(word);
        }
    }

/*     cout << "----------" << endl; */
/*     for (vector<string>::iterator i=text_segmented.begin(); i != text_segmented.end(); ++i) */
/*     { */
/*         cout << *i << endl; */
/*     } */
    
}

void remove_skip()
{
    bool skip = false;
    for (vector<string>::iterator i = text_segmented.begin(); i != text_segmented.end(); ++i)
    {
        for (vector<string>::iterator j = skip_table.begin(); j != skip_table.end(); ++j)
        {
            if (*i == *j)
            {
                skip = true;
                break;
            }
        }
        if (skip==false)
        {
            text_skip_removed.push_back(*i);
        }
        else
        {
            skip=false;
        }
    }

/*     for (vector<string>::iterator i=text_skip_removed.begin(); i != text_skip_removed.end(); ++i) */
/*     { */
/*         cout << *i << endl; */
/*     } */

}
    
void remove_dup()
{
    for (map<string, string>::iterator j = dup_table.begin(); j != dup_table.end(); ++j)
    {
        replace(text_skip_removed.begin(), text_skip_removed.end(), j->first, j->second);
    }
    text_dup_removed = text_skip_removed;

/*     for (vector<string>::iterator i=text_dup_removed.begin(); i != text_dup_removed.end(); ++i) */
/*     { */
/*         cout << *i << endl; */
/*     } */

}

bool more_freq (const pair<string,int>& a, const pair<string,int>& b)
{
    return a.second > b.second;
}

void output_vocabulary(string sorting)
{

    for (vector<string>::iterator i=text_dup_removed.begin(); i != text_dup_removed.end(); ++i)
    {
        voc_output[*i]++;
    }

    if (sorting=="freq")
    {
        vector<pair<string, int> > voc; //(voc_output.begin(), voc_output.end());
        for (map<string,int>::iterator i=voc_output.begin();
             i != voc_output.end();
             ++i)
        {
            voc.push_back(*i);
        }
        sort(voc.begin(), voc.end(), more_freq);
//        cout << "-------------------" << endl;
//        cout << "vocabulary\tcount sorted by freq" << endl;
text_out = "vocabulary\tcount sorted by freq\r\n";
vector<pair<string, int> >::iterator j;
        for (j = voc.begin(); j != voc.end(); ++j)
        {
            //cout << j->first << "\t\t" << j->second << endl;
stringstream ss;
string num;
ss << j->second;
ss >> num;
text_out += j->first;
text_out += "\t\t";
text_out += num;
text_out += "\r\n";
        }
    }
    else
    {
//        cout << "-------------------" << endl;
//        cout << "vocabulary\tcount sorted by alph" << endl;
text_out = "vocabulary\tcount sorted by alph\r";
map<string,int>::iterator k;
        for (k=voc_output.begin(); k != voc_output.end(); ++k)
        {
            //cout << k->first << "\t\t" << k->second << endl;
stringstream ss;
string num;
ss << k->second;
ss >> num;
text_out += k->first;
text_out += "\t\t";
text_out += num;
text_out += "\r\n";
        }

    }
    


    
}

/////////////////////////
///////// diff console GUI
$ diff cai.h GUI/aurora/cai.h
29a30
> string text_out;
249,253c250,264
<         cout << "-------------------" << endl;
<         cout << "vocabulary\tcount sorted by freq" << endl;
<         for (vector<pair<string, int> >::iterator i = voc.begin(); i != voc.end(); ++i)
<         {
<             cout << i->first << "\t\t" << i->second << endl;
---
> //        cout << "-------------------" << endl;
> //        cout << "vocabulary\tcount sorted by freq" << endl;
> text_out = "vocabulary\tcount sorted by freq\r\n";
> vector<pair<string, int> >::iterator j;
>         for (j = voc.begin(); j != voc.end(); ++j)
>         {
>             //cout << j->first << "\t\t" << j->second << endl;
> stringstream ss;
> string num;
> ss << j->second;
> ss >> num;
> text_out += j->first;
> text_out += "\t\t";
> text_out += num;
> text_out += "\r\n";
258,262c269,283
<         cout << "-------------------" << endl;
<         cout << "vocabulary\tcount sorted by alph" << endl;
<         for (map<string,int>::iterator i=voc_output.begin(); i != voc_output.end(); ++i)
<         {
<             cout << i->first << "\t\t" << i->second << endl;
---
> //        cout << "-------------------" << endl;
> //        cout << "vocabulary\tcount sorted by alph" << endl;
> text_out = "vocabulary\tcount sorted by alph\r";
> map<string,int>::iterator k;
>         for (k=voc_output.begin(); k != voc_output.end(); ++k)
>         {
>             //cout << k->first << "\t\t" << k->second << endl;
> stringstream ss;
> string num;
> ss << k->second;
> ss >> num;
> text_out += k->first;
> text_out += "\t\t";
> text_out += num;
> text_out += "\r\n";

俯卧撑暂停,昨天开始恢复

俯卧撑暂停,昨天开始恢复

一周多以来,俯卧撑暂停,昨天开始恢复。

最初打算停俯卧撑是因为头疼似乎要感冒,这个时候心肺功能差到不能支撑俯卧
撑这等高强度的体力运动,但是勉力支撑了。隔天左手腕疼,用右手腕一顿治疗,
其结果是当天根本不能承重,仅可以敲计算机键盘,于是俯卧撑有理由暂停了。
再隔天,开始发烧。

然后,是一周多不能撑。

牢记"球员一般都是从伤病期或者冬歇期开始堕落的",所以昨天开始恢复。刚
结束的时候心中窃喜,没事儿。然后是接连几分钟倒气儿,估计脸色煞白,因为
恶心够呛。今天又继续,心肺正在恢复,没有昨天那么难受了,只是左腕又开始
疼了。

很郁闷,难道人生最黄金的时段已经在不经意间结束了?

想喝酒,胃不行;想别咖啡,戒了。

唉。

我想没有人能说:我在最艰难的时候没有放弃。因为你并不知道你的更艰难是不
是已经到来了,也许后面有更艰难的,这只是刚刚开始呢。

不过,我们也许可以说:我在比你更艰难的时候没有放弃过。或者,我比你们更
坚韧。

想起个笑话。

当年高中的时候体育课,老师掐表大家比赛屏气。

老师开始数秒:开始,多少多少秒啦,多少多少分啦。

还屏着气的就举着手,不行了就放下。

我眼前都发黑了,还有不少人举着手。我终于败下阵来。

结果老师统计的时候才知道,这帮家伙有不少是从一分钟甚至更晚才开始屏气,
而不是像我从最开始。

所以,我以三分钟排行第一。而那些四五分才放下手的,有的才屏气一分钟而已。

所幸,我没有憋死,终于发现了这个秘密。那就是很少有人像你一样尽力。你特
别难受的时候,有很多人比你更难受。

所以,坚持,是一个秘诀。

当然,后来才知道还有富二代这种事。所以在劝导学生应该如何做人的时候,我
一向非常小心。一是我并不成功,无以教人,二是说不定对面爷是位富二代,心
里不定多鄙视我这点见识呢。

所以,修正,坚持,对于穷小子来说,是一个秘诀。

当然,后来才知道还有 劳动致富已经成了传说 这种事。这太超乎我的想像力
和思考能力了,不提也罢。

就像俯卧撑。就有那种天赋异禀根本不用练也牛得不行的人,还有那种根本不需
要练连喘气都可以有人代劳的人,就有那种连气都可以不喘的人。不过,那对我
有什么意义呢?

虽然俺也是社会动物,但是从没有人能替俺过这生活。大家如此不同,又怎么能
通过相同的路径到达。。。谁知道是否相同的目标呢。

所以,还是努力练下去。每天一百。我没有别的路可走,所以只能依此前行。

当你别无选择,还有什么可以苦恼的。

20100709

[数码单反] 人眼到底是定焦还是变焦?

 
 

Sent to you by Young via Google Reader:

 
 


发信人: suiyecc (something to forget), 信区: DSLR
标 题: 人眼到底是定焦还是变焦?
发信站: 水木社区 (Thu Jul 8 17:34:04 2010), 站内

请看:

==最顶级的摄影器材==规格详细说明书
镜头结构图


有效像素:约 5 亿 7600 万像素
感光元件:光电探测器细胞
感光元件尺寸:7~12mm直径,大约1/3寸 (小DC还不如)
最大文件像素尺寸:30358 x 18973 (16:10)
等效焦距:22 mm 定焦镜(超广角~可视范围大约接近180度)
光圈值: F2.0~F11
快门:B~1/240(大脑这个图像处理器只能接受1/24秒的快门,超过这个值会变成连续的图像...录影?哈哈.电影一般都是24FPS嘛)
动态范围:20 EV (胶片算啥...)
对焦模式:自动 / 手动 / 无限远
测光模式:中央重点测光
ISO感光度:自动(1~800)
电力供应:食物
储存媒体:大脑
防抖:六条肌肉控制搭配小脑处理器


特殊功能:
人脸自动识别
低画质自动补偿
预判运动追焦

另外这个相机有2个版本

G版的附带
胸部自动对焦
美腿自动对焦

L版的
美男自动识别
铭品自动对焦


资料
http://chinese.engadget.com/2008/09/02/eye-brain-and-photo/




------------------

豆友补充:

超高速自动对焦
还可以搭配各种眼镜(滤镜)。
自动除尘。
完美的自动白平衡
完美的曝光补偿
支持泡面5分钟快速充电功能
双镜头立体成像
每秒23张连拍

http://www.douban.com/note/49449037/
--
我支持过的球星:90老马,94芭蕉,98耳朵,02谢逊,06鸡蛋,10梅小西!


※ 修改:·suiyecc 于 Jul 8 17:34:19 2010 修改本文·[FROM: 166.111.64.*]
※ 来源:·水木社区 newsmth.net·[FROM: 166.111.64.*]

 
 

Things you can do from here: