GithubHelp home page GithubHelp logo

gnotes's Introduction

github-snake

gnotes's People

Contributors

gymgle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

gnotes's Issues

不是小明与小强的故事

先把故事写一下来,看过了或许可以再读一遍,也许你也会有故事之后我一样的想法。


  1. 小强每天在村里晃悠,爹妈看着发愁,心想这孩子将来怎么办呀;小明每日都苦读诗书,父母喜在心里,村里人都认定他必有出息。
  2. 那年,小强和小明都是十九岁,小强跟着村里的外出打工,来到了高速公路的工地,保底工资三千块;小明考上了一所重点大学,读的是道路与桥梁专业,学费每年五千多。
  3. 那年,小强和小明都是二十三岁小强的爹妈给他说个巧媳妇,是邻村的,特别贤惠;小明在大学里谈了个女朋友,是邻校的,很有文化。
  4. 那年,小强和小明都是二十四岁小强在老家结了婚,把媳妇带到工地上,来给他洗衣做饭,恩爱有加;小明终于大学毕业,找了施工单位工作,跟女友分居两地,朝思暮想。
  5. 小强每天很快乐,下了班就没事,吃了饭和媳妇散散步,晚上便和工友打麻将看电视;小明每天很忙碌,白天跑遍工地,晚上还做资料画图纸,好久不见的女友跟他分手了。
  6. 那年,小强和小明都是二十八岁,小强攒下了二十万,已是两个娃娃的爹,心想着回家盖栋漂亮的楼房;小明过了中级职称,还是单身一个人过,心想着再干几年就是高级了。
  7. 小强在农村老家盖了两层小楼,装修很漂亮,剩的钱买了一群仔,让媳妇回家种地养猪;小明在城里贷款买了一套新房,按揭三千多,父母给介绍了新女朋友,在城里上班很少见面。
  8. 那年,小强和小明都是三十一岁,小强媳妇从老家打电话来说:小强,现在家里有房有存款,咱喂喂猪,种种地,很幸福了,家里不能没有男人,你快回来吧;小明媳妇从城里打电话来说:小明,小孩的借读费要十五万呢,家里没有存款了,你看能不能找公司借点。
  9. 小强听了媳妇的话,离开了工地,回老家跟老婆一起养猪,照顾父母小孩;小明听了妻子的话,更努力工作,去了偏远又艰苦的工地,很难回家一次。
  10. 那年,小强和小明都是三十五岁猪肉价格疯涨,小强的一大圈猪成了宝贝,一年赚了十几万;通货膨胀严重,小明的公司很难接到项目,很多人都待岗了。
  11. 那年,小强和小明都是五十岁了小强已是三个孙子的爷爷,天天晒着太阳抽着旱烟在村里转悠;小明已是高级路桥工程师,天天顶着太阳皱着眉头在工地检查。
  12. 那年,小强和小明都是六十岁了,小强过六十大寿,老伴说:一家团圆多好呀,家里的事就让娃们操心吧,外面有啥好玩的地方咱出去转转;小明退休摆酒席,领导说:回家歇着没意思,返聘回单位做技术顾问吧,工地上有什么问题您给指导指导。
  13. 小强病了一场,小强拉着老伴的手说:我活了快七十岁了,有儿有孙的,知足了;小明病了一场,小明抚着妻子的手说:我在外工作几十年,让你受苦了,对不起。
  14. 由于长期体力劳动,吃的是自家种的菜、养的猪,小强身体一直很硬朗,慢慢就恢复了。由于长期熬夜加班、小明喝酒应酬、工地食堂饭菜也很差,身上落下很多毛病,很快就去世了。
  15. 八十岁的小强蹲在村头抽着旱烟袋,看着远远的山;远远的山上有一片公墓,小明已在那里静静睡去;小强在鞋底磕磕烟灰,拄着拐杖站起身,望了望那片公墓,自言自语地说:唉,都是一辈子呀……

谨以此向工作在大城市,付出了青春、爱情、亲情甚至生命的人。
人的一生很短暂,希望大家给自己多一些时间,给家人多一些关爱。


大学里第一次看到这个故事,那时多么向往小强的一辈子,自己的梦想就是回家种那一亩三分地。

几年后再次读到这个故事,想法已经同以前大不一样了。在老家,我有这样的儿时伙伴“小强”,现在在家种地养鸡做买卖,而他眼中在外奔波的我们却是让他羡慕的对象。

其实,几乎能读到这篇文章的都是那个“小明”,而写这篇文章的也肯定在现实中是那个“小明”,而“小强”是不会看这样的书读这样的文章,没兴趣。写这篇文章的“小明”也明显偏向了“小强”,虽然“外面的世界很精彩,外面的世界很无奈”,但“里边的世界有安逸,也有无味”,哪一样的人生有哪一样的精彩。

围城心态这么说:

围在城里的人想逃出来,城外的人想冲进去。对婚姻也罢,职业也罢,人生的愿望大都如此。

自己的幸福都在别人眼里。明白了这一点,就不再去想人生该怎么选择怎么走了。那天看到道哥的黑板报《歪打正着》,有句话正戳中了我的想法。

“人生中会不断面临选择,选择了,必然就有得有失。但微妙的是,在得失之间,未必会有对错之分。也许每条路都能走的通,只要你坚持走下去。 所以最重要的,并不是选择的路是否正确,而是做出决定本身。”

部署聊天服务

这周折腾了新鲜东西,用了两天的时间部署了局域网聊天服务Candy-基于Jabber服务的Javascript,以后可以不再用飞秋了。
开始让我放弃飞秋的原因很简单,和我聊天的人虽然和我处于一个公司内部的局域网,却不属于同一个深度,我的IP是10.0.xxx.xxx,对方的确实192.168.xxx.xxx。我们使用飞秋回碰到这样的情况:对方可以随时给我发消息,我却不能随时给他发消息,时常碰到飞秋提示对方一下线,很明显,我处于他的上级网络中。
Candy的搭建如官网所介绍,确实十分简单,但一路搭建下来,碰到不少问题,现正总结中,打算把部署过程写一遍。
好了,接下里去博客更新了。
技术改变生活,感谢这么多开源的项目和那些辛勤和汗水下无私奉献的人们!

我们都在向前走

聚首,欢乐,我都得跟你们告别

驻足,感怀,再回不到过去

不论这世道的艰难,扭曲

我还要去那繁华的都市

继续我未完成的梦想

舍弃欢聚

用一个人的伤

浇铸孤独的精彩

How it's work?

;File: test.asm

org 100h
mov ah,09
mov dx,text
int 21h
mov ah,10h
int 16h
int 20h

text db "How it's work?$"

asm

Hello 2014

2013年还是在入门徘徊,2014加油!

坚持的好文章

自己弄过站点以来,本打算定期推荐好的软件,不想开始的时候需要推荐的优秀软件多,后来就没得介绍了,而且发现一款好软件需要运气和时间,于是,站点荒凉得长草了。

这让我想到微信公众账号们每天一推的文章,真佩服他们的坚持,而且坚持每天都有新文章。

坚持每天写东西是个好事情,想想自己初中高中时几乎每天都写日记,虽然写完之后再也没读过。每天写东西,偶尔会产出一片高质量的文章,而想保证每天文章的质量真有些难度。如我愚笨之人,好几个月也许才会有那么一点半点的想法。

由此想到每天一推送的微信公众账号。最先注意到微信公众账号是为因为媒体转载WTP的《互联网时代的时间管理》,开始关注他的Github和微信账号以及他推荐的账号。几天下来,微信里的公众账号增长到十几个,慢慢的,文章读不完了,只挑着自己感兴趣的文章看两眼,其他索性就不去读了。

微信里不适合关注新闻类的公众账号,否则一天下来,互联网上,手机上看到的都是重复的新闻。微信的个人公众账号是否也不需要关注这么多?虽然写出好的文章很不容易,一旦成为好文章,就会被各类互联网媒体转载,即便没有使用微信,也会读到它,当初《互联网时代的时间管理》就是这样。又比如道哥的黑板报的《**黑客传说:游走在黑暗中的精灵》。这样就可以清理一批不再需要的关注了。

坚持写文章,好的文章总会被发现。不过既然在互联网上可以看到,又何必在手机上呢,何况手机的屏幕受限,看起来费劲。

从C语言小题目开始

从最简单的开始,有这样一个题目:1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?


于是,我这样写了:

// Test 1

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int i, j, k;
    for (i = 1; i < 5; i++)
    {
        for (j = 1; j != i && j < 5; j++)
        {
            for (k = 1; k != i && k != j && k < 5; k++)
            {
                printf("%d%d%d\t", i, j, k);
            }
        }
    }
    return 0;
}

运行结果是:

321     421     431     432     请按任意键继续. . .

显然这是错误的。

修改for循环,改成:

// Test 2

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int i, j, k;
    for (i = 1; i<5; i++)
    {
        for (j = 1; j != i, j<5; j++)
        {
            for (k = 1; k != i, k != j, k < 5; k++)
            {
                printf("%d%d%d\t", i, j, k);
            }
        }
    }
    return 0;
}

运行结果显然也是错误的:

111     112     113     114     121     122     123     124     131     132
133     134     141     142     143     144     211     212     213     214
221     222     223     224     231     232     233     234     241     242
243     244     311     312     313     314     321     322     323     324
331     332     333     334     341     342     343     344     411     412
413     414     421     422     423     424     431     432     433     434
441     442     443     444     请按任意键继续. . .

错误分析

Test 1 中,当i = 1时,j = 1 会因条件j != i && j < 5导致不执行第二层for循环,继而i++而成为2.

Test 2 中,for中的判断语句使用了逗号表达式,逗号表达式又称顺序求值运算符,对于表达式1, 表达式2, ..., 表达式n,整个逗号表达式的值是最后表达式n的值。这样就能理解Test 2 的结果为什么是这样了。

这个题目正确的代码应该是这样的:

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int i, j, k;
    for (i = 1; i<5; i++)
    {
        for (j = 1; j<5; j++)
        {
            for (k = 1; k < 5; k++)
            {
                if (i != j && i != k && j != k)
                    printf("%d%d%d\t", i, j, k);
            }
        }
    }
    return 0;
}

正确的结果应该是:

123     124     132     134     142     143     213     214     231     234
241     243     312     314     321     324     341     342     412     413
421     423     431     432     请按任意键继续. . .

总结:

  1. 不能忽视细节;
  2. 逗号表达式的值是最后一个表达式的值;
  3. 有待勤加练习!

高考

又到了填报志愿的时候。
依稀记得05年填报志愿前后的一些片段,已经模糊了,连不起来了。
应该还有那个时候的日记,写过之后再没看过。
一晃八年过去了。
能不老么。

兔子问题

/*
 * 题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
 */
#include <iostream>
using namespace std;

int main()
{
    long f1, f2;
    f1 = f2 = 1;
    for (int i = 1; i < 24; i += 2)
    {
        cout << "" << i << " 个月有 " << f1 << " 对兔子" << endl;
        cout << "" << i+1 << " 个月有 " << f2 << " 对兔子" << endl;
        f1 += f2;
        f2 += f1;
    }

    return 0;
}

运行结果:

第 1 个月有 1 对兔子
第 2 个月有 1 对兔子
第 3 个月有 2 对兔子
第 4 个月有 3 对兔子
第 5 个月有 5 对兔子
第 6 个月有 8 对兔子
第 7 个月有 13 对兔子
第 8 个月有 21 对兔子
第 9 个月有 34 对兔子
第 10 个月有 55 对兔子
第 11 个月有 89 对兔子
第 12 个月有 144 对兔子
第 13 个月有 233 对兔子
第 14 个月有 377 对兔子
第 15 个月有 610 对兔子
第 16 个月有 987 对兔子
第 17 个月有 1597 对兔子
第 18 个月有 2584 对兔子
第 19 个月有 4181 对兔子
第 20 个月有 6765 对兔子
第 21 个月有 10946 对兔子
第 22 个月有 17711 对兔子
第 23 个月有 28657 对兔子
第 24 个月有 46368 对兔子
请按任意键继续. . .

当然还可以计算36个月的情况,如果要算48个月、60个月等等更大的数据,要使用long long类型了定义f1 f2

新发现

发现新大陆后拖到现在才写下这几个字。

最近发现的新东西真不少,Github的Issue博客、Markdown简单更好用、微信上订阅了不少公众账号,追随牛人,与他们一起修行。原来微信公众账号注册的时候需要提供真实姓名、手机号和身份证照片,推送的内容要通过审核才能被收到。

另外发现的两款免费VPN,Windows、Mac、Android、iPhone/iPad都可使用:
1.VPN Gate——日本筑波大学的学术实验
2.海盗VPN——一个充满了自由精神的VPN

在新鲜中获取的成就感

大学那会,玩过很长一段时间的神泣。现在想想为什么不玩了,一个是因为耗时间,升级超级慢;一个是因为国服的外挂满天飞。

毕业后几年后的今年,想起神泣来,找到了美国服务器,发现大学同学已经在美服玩过一段时间了。兴冲冲地回味大学的激情,发现没了时间,没有悠闲,再也没有了大学的悠哉无虑。

接着用按键精灵写了脚本,调试完了挂在那里让猎人自己打怪升级了。

再后来又觉得无趣无味,按键精灵自动打怪的小小成就感消失之后,再也没打开过游戏。

又开始弄网站,放弃GAE上搭建的网站;发现了Farbox,很新鲜这样的模式,无奈模版少,又不能搜索;又发现了Jekyll,开始折腾;又发现了Openshift,又开始折腾;在Godaddy上买域名;又发现了JekyllBootstrap框架,终于又用JB搭建了Github上的博客,上一周就像打了鸡血一样,不辞辛苦地折腾,折腾得津津有味,每小有进展,欣然忘食。

但是Github上搭建的博客如果不是为了Project,真是对不起Github。虽然我很喜欢Markdown的简洁,但把曾经的几十篇文章转换为Markdown的过程中,发现Markdown也让人烦,链接必须用或者[][]片尾批注,图片也是这样麻烦。如果使用了Jekyll,还必须在每篇文章中加上YAML头。

虽然折腾完了Jekyll,现在也不想在Github上做博客了。倒是Github的Issue博客依然可以用来写。

新鲜的东西了解后,又要去发现新鲜了,这样才能不断地汲取到久违的成就感。

三个数大小排序

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

#include <iostream>
using namespace std;

int main()
{
    int x, y, z, tmp;
    cout << "Input three integer:" << endl;
    cin >> x >> y >> z;
    if (x > y)
    {
        tmp = x;
        x = y;
        y = tmp;
    }
    if (x > z)
    {
        tmp = x;
        x = z;
        z = tmp;
    }
    if (y > z)
    {
        tmp = z;
        z = y;
        y = tmp;
    }
    cout << x << y << z << endl;

    return 0;
}

如果只是想找出三个数中最大或最小的那个,要求不使用if语句,如何实现?

#include <iostream>
using namespace std;

int findMax(int a, int b, int c)
{
    return ((a > b) ? a : b) > c ? ((a > b) ? a : b) : c;
}

int findMin(int a, int b, int c)
{
    return ((a < b) ? a : b) < c ? ((a < b) ? a : b) : c;
}

int main()
{
    int x, y, z;
    cout << "Input three integer:" << endl;
    cin >> x >> y >> z;
    cout << "Max: " << findMax(x, y, z) << endl;
    cout << "Min: " << findMin(x, y, z) << endl;

    return 0;
}

Vector in C++

《C++ Primer》被评为久负盛名、无可替代的C++经典著作当之无愧,最近开始温习C++,从大学一直没弄懂的一些东西,终于有所领悟,知其然,知其所以然了。

比如:

  • 为什么C++的头文件没有.h扩展名,而且要加上using声明;
  • 为什么头文件中只能声明而不要定义变量;
  • 原来内置类型的初始化也可以直接初始化:int ival(1024);//这是直接初始化int ival = 1024;//这是复制初始化
  • 原来const引用不神秘;
  • 原来stringvector是最基本的标准库类型;
  • string中,当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型;(P75中文第4版 or P86 英文第4版);
  • 原来vector的操作很简单,之前用vector经常编译不通过,因为IDE是VC 6.0,VC 6.0对C++的标准支持的不好,现在换成了Visual Studio Express 2013 for Windows Desktop,竟然可以成功编译了!

现在把《C++ Primer》第4版中的习题3.13实现一下,这是一个关于vector使用的小题目。

习题3.13
读一组整数到vector对象,计算并输出每对相邻元素的和。如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> ivec;
    int ival;
    cout << "Enter numbers(Ctrl+Z to end):" << endl;
    while (cin >> ival)
        ivec.push_back(ival);

    if (ivec.empty())
    {
        cout << "No element?!" << endl;
        return -1;
    }

    cout << "Sum of each pair of adjacent elements in the vector:" << endl;
    for (vector<int>::size_type index = 0; index < ivec.size() - 1; index += 2)
    {
        cout << ivec[index] + ivec[index + 1] << "\t";
        if ((index + 1) % 6 == 0)   // Output six numbers every line
        {
            cout << endl;
        }
    }

    if (ivec.size() % 2 != 0)   //The last element is not summed IF the total number is odd
    {
        cout << endl
            << "The last element \""
            << ivec[ivec.size() - 1]
            << "\" is not been summed." << endl;
    }

    return 0;
}

bitset in C++

在《C++ Primer 4th》中介绍了第三种C++标准库:bitset,能够简化位集的处理。

习题3.24

考虑这样的序列1,2,3,5,8,13,21,并初始化一个将该序列数字所对应的位置置为1的bitset<32>对象。然后换一个方法,给定一个空的bitset对象,编写一小段程序把相应的数位设置为1。

使用 Visual Studio Express 2013 for Windows Desktop 实现如下:

#include <iostream>
#include <bitset>
using namespace std;

int main()
{
    /*
    因为bitset读入位集的顺序是从右向左:最右侧是低阶位,最左是高阶位。
    00000000010000000010000100101110是满足要求的序列,
    其对应的十六进制表示是0x20212e,
    最简单的方法是:
    bitset<32> bitvec("00000000010000000010000100101110");
    或者是:
    bitset<32> bitvec(0x20212e);
    以下使用另一种方法:
    */
    bitset<32> bitvec;
    int x = 0, y = 1;
    int z = x + y;
    while (z <= 21)
    {
        bitvec.set(z);
        // 1,2,3,5,8,13,21 其实是斐波那契数列
        x = y;
        y = z;
        z = x + y;
    }
    cout << bitvec << bitvec.count() << endl;

    return 0;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.