forecho 的独立博客

把生命浪费在美好的事物上

一切都来得及,就怕你不做

2013年09月04日

最近一直在忙着技术方面的事,文章都是一些技术问题。看在今天是我步入23岁第一天的日子上,我决定写一篇最近的总结。

最近两个月游戏基本上都没玩了,一心想着学多点技术,有时候看看Ruby、Python、Go、iOS开发以及mongoDB。不满足现在的PHP技术,一心渴望学到更多,但是刚开始去学一门技术真的是很难的,正所谓万事开头难,但是我觉得只要坚持下来了,过一阵子你一定会有收获的,至于这个时间是多长,收获有多少那完全看你努力的程度了。有时候你需要问问自己:「我真的努力了吗?」

这个就像我刚开始学Yii框架的时候,最开始头都摸不着,但是还是坚持下来了,看视频教程,写代码,然后用Yii开发项目,还好公司的项目是用Yii开发的,这样学起来更快,但是虽然称不上是高手,但是基本问题都能自己解决了。解决问题的方式也是一门学问,我现在一般都是用Google搜索资料,如果没有找到资料的话,我就把问题的关键词换成英文的,这个时候你会发现,另一扇大门向你敞开了,你唯一要做的就是把英语学好,能看懂别人用英文写的解决方法,目前我英语水平只是一般般,我准备通过自己翻译一本Yii英文教材来提升自己的英文水平,也顺便再巩固一下Yii。

有时候Ruby文档看烦了换着看Python文档,有时候去看Go文档,有时候去看看一些其他非编程类的书。Kindle买的确实很划算,有时候出门我都愿意背着Kindle,哪怕我只是看了半个小时的书,我都觉得值了。今年唯一一本用Kindle看完的书是《把时间当作朋友》,和我看的《拆掉思维里的墙》一样,都是教你如何管理自己以及如何开启心智的书。很不错的一本书,这本书其实的宗旨就是『所有学习上的成功,都只靠两件事:策略和坚持,而坚持本身就应该是最重要的策略之一』。难以坚持下去的事情,基本都是因为没有迫切的欲望和激情。最近我连周末睡懒觉的习惯都改了,觉得睡懒觉真是太浪费时间了,但是中午小睡半个小时还是值得的。《暗时间》看了大概60%了。最近越来越喜欢独立思考了,很喜欢独立思考的乐趣,我要争取做一个特立独行的人。最近看的《我给你讲过笑话,你可别哭》就是独立思考出来的文章,觉得有独立思考能力很有意思。

《暗时间》也是一本很有意思的书,并且是一个同行写的,交我们如何去管理自己的时间,还有一个专门的群组,氛围非常的好。上面的一篇文章《为什么你应该(从现在开始就)写博客》真的让人很受用。不应该觉得没人看你的博客就不写博客了,不为别人之为自己写博客,不要觉得文笔差了就不写,好的文笔都是慢慢写出来了,写的多了,文笔就好了。『人生中天大的真谛,都不敌一句「我乐意」来得实在,因为你是为自己真实地活着,你为自己设定的价值才是人生最大的真谛。』

发现最近越来越喜欢电影这个东西了,每周末我都会找时间去看几部电影,感觉非常的享受。并且这段时间一直在想办法提示自己的能力,为了以后能赚到更多的钱,去享受物质带来的美好生活,我现在必须很努力,而这个努力不应该只是说说而已。

记得有次面试,面试官问我「你有着什么梦想?你为了实现这个梦想做了什么计划?」。其实第一个问题,我以前早就考虑过了,我的梦想就是在26岁的时候要做一款百万个用户的产品并且成为一个架构师。但是第二个问题让我愣了一下,然后就敷衍过去了。事后我才发觉,我一直只是把自己的梦想挂嘴边,但是从来没有考虑过要去实现这个梦想要去付出怎样的代价,甚至都不清楚,实现这个梦想我要去做些什么?一直想着时间还早,但是现在我已经23年了,离梦想只有3年了,我却连实现这个梦想需要做些什么都不知道,太可笑了。

幸运的是我领悟得不算晚,我现在努力还来得及。就怕你不做。

感谢那些瞧不起我的人,是他们让我有了很大的动力。

个人有个缺点,喜欢逛空间,喜欢刷微博,知乎,V2EX。这可能都是在武汉上班太安逸了留下不好的习惯。以后一定要把握这个时间,尽量去减少这个不必要时间,正确的时间做正确的事。最近心情比较沉闷,好久没出去玩了,打算去云南旅游去,换一下心情。

最近一直在用Linux和Mac系统,感觉离开Windows

少了很多的烦恼。Mac还是最好的系统。

这篇文章我写的比较乱,是想到什么就写什么的,你可以简单的理解为意识流风格。

Comments

zaker: 写的蛮好的啊

ForEcho: 多谢赏识。话说你这个名字叫zaker是什么意思?这个App确实还不错。

zaker: 恩恩之前比较喜欢这个APP,zaker这个名字还蛮有意思的,所以就取了这个名字,话说在武汉毕业的?

zaker: 武汉交通职业学院的啊,我们学校在你们学校附近好像

ForEcho: 是的啊,你们学校叫什么?

zaker: 华师,现在在哪里工作啊?

ForEcho: 话说华师不是在广埠屯吗?我们学校在黄家湖大学城。我今年来的深圳。

zaker: 哦哦我记错了,在哪里工作啊?招人不啊?

ForEcho: 你也是PHPer?这边工作还是比武汉多的。

zaker: 之前做java现在在做php,新手~~~~

乔巴瑞: “难以坚持下去的事情,基本都是因为没有迫切的欲望和激情”我很喜欢这句话,看了这篇文字,感觉受益匪浅啊,真心该好好思考最近的生活状态了。。。

ForEcho: 就应该每过一段时间给自己打一针「精神鸦片」。

Mac强大的Homebrew - No Module Named PyQt4报错

2013年09月01日

安装了这个东西之后可以帮助你非常的省事的安装其他应用程序。官网链接。 其实还有一个MacPorts,跟这个Homebrew类似的功能,但是我更喜欢Homebrew的简洁。(这两个貌似不兼容,最好不要同时安装。) 一条brew install pyqt命令就可以安装完PyQt4的插件了。我就是用brew install mongondb安装的mongonDB。 这样安装完PyQt之后然后简单写了第一个程序,代码如下:

import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
widget.show()

sys.exit(app.exec_())

运行的时候报错:No module named PyQt4 但是明明我已经安装好了,通过搜索发现是PATH路径的问题。 解决方法是:vim .bash_profile 打开这个文件,然后添加下面代码:

export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/share/python:$PATH

OK,再运行前面的程序,正常弹出一个窗口,说明你成功了。 如果不确定自己的Python路径,可以用type python命令查看。   参考链接: https://github.com/mxcl/homebrew/issues/6176  https://github.com/mxcl/homebrew/issues/10324

PyCharm的SyntaxError:invalid Syntax错误处理

2013年08月30日

首先我这个代码是没有问题的,直接用终端python xxx.py运行是没有问题的。 但是我下载最先版本的PyCharm,然后导入项目,用它自带的Run运行后就报错SyntaxError:invalid syntax 然后我就去搜索,后来发现是Python版本的问题。我的Linux下有两个版本的Python,一个是2.7版的一个是3.3版本的。安装PyCharm的时候调用的是3.3版本的。 Python2.7打印格式是:

print 'a' #中间有空格
print ('a') #也支持这种方式

Python3不支持这种方式打印,只支持:

print('a') #必须有括号

因为print在python3中已经是一个函数而不是一条命令了 问题找到了,现在我们需要改PyCharm调用的Python版本,打开 File -> Settings -> Python In­ter­cepter -> Python In­ter­cepters ,然后在右侧点+添加你需要的版本即可。 现在重新运行程序,OK,正确打印,问题解决。

Comments

baocaixiong: 此文略无意义…

Code School 学习 Objective-C第一课笔记

2013年08月30日

学习地址是:http://tryobjectivec.codeschool.com/ 感觉非常有趣的体验,并且还能学习一下英文,英文单词都是比较简单的,我基本上都能看懂。 下面记录一下第一节课的笔记:

  • 申明数据类型都有NS字母开头。
  • 变量名称都有*符号开头。
  • 变量的值都有@符号开头。
  • 申明一个数组之后不能直接追加值。如果需要改变这个数组,需要重新赋值,可以参照12行代码。
  • 申明数组类型用[]符号,但是申明一个字典类型用的是{}符号。

Navicat for MySQL 11 Linux 破解方法

2013年08月28日

安装:解压后即可用。目录下的start_navicat文件为可执行文件。 破解:(找过好几个注册码都不能用,注册码生成器都是Windows平台的,Linux下不行) -—第一次执行start_navicat时,会在用户主目录下生成一个名为.navicat的隐藏文件夹。 -—把此文件夹删除后(删除文件夹命令是rm -rf .navicat),下次启动navicat 会重新生成此文件夹,30天试用期会按新的时间开始计算。

Yii中CLinkPager结合Bootstrap的样式分页

2013年08月09日

$this->widget(‘zii.widgets.CListView’, array( ‘dataProvider’=>$model->search(), ‘itemView’=>’_post’, ‘emptyText’=>’暂时没有数据’,
‘template’=>’{items}{pager}’, ‘pager’ => array( ‘header’=>false, ‘htmlOptions’=>array(‘class’=>’pagination’), ‘selectedPageCssClass’ => ‘active’,
‘hiddenPageCssClass’ => ‘disabled’, // ‘cssFile’=>false, // ‘maxButtonCount’=>25, // ‘selectedPageCssClass’=>’active’, // ‘hiddenPageCssClass’=>’disabled’, // ‘firstPageCssClass’=>’previous’, // ‘lastPageCssClass’=>’next’, // ‘firstPageLabel’=>’«’, // ‘lastPageLabel’=>’»’, // ‘prevPageLabel’=>’<’, // ‘nextPageLabel’=>’>’, ), ‘htmlOptions’=>array(‘class’=>’list-group’), ‘itemsTagName’=>’ol’, ‘itemsCssClass’=>’box-cell’, ‘pagerCssClass’=>’’, )); ?>

yii默认分页默认第一页是不显示首页和前一页的,加上上面的两行加亮代码就能解决这个问题。这样首页和上一页会总是显示。

Yii发邮件插件

2013年08月07日

一、Yii发邮件插件下载。 二,在配置文件/protected/config/main.php中载入组件,代码如下:

'components'=>array(
        'phpMailer'=>array(
            'class'=>'application.extensions.yiimailer.CPhpMailer',
            'host' => 'mail.myhost.com', //比如QQ的是smtp.qq.com
            'port' => 25,
            'from' => 'myname@myhost.com', //发件地址的用户名
            'fromName' => 'myname',//发件人
            'user' => 'username',//发件地址的用户名
            'pass' => 'password',//发件地址的密码
        ),
...

三、然后在控制器写入action,就可以发邮箱了,示例代码:

//发邮件
public function actionSendEmail()
{
    $mailer = Yii::app()->phpMailer->_mailer;
    $mailer->Subject = '人类已经阻止不了我发送邮件了';
    $mailer->Body = '<font color="red">hello, 我是葫芦娃</font>';
    $mailer->AddAddress('caizhenghai@gmail.com');
    //$mailer->AddAddress('xxx@gmail.com');
    $mailer->send();
}

  参考文章:http://www.yiichina.com/forum/topic/1417/ 其他yii发邮件插件以及方法:http://www.yiichina.com/forum/topic/63/

Yii 多表使用一个Model文件

2013年08月03日

表结构一样,现在需要把这些表全部都的数据都查出来,使用一个Model文件。 首先要声明三个私有变量:

private $tableName = 'fr_goods';//默认表名
private static $_models=array();
private $_md;

添加 构造函数:创建和初始化对象成员属性,代码如下:

public function __construct($scenario='search', $tableName = null)
{
    if($tableName !== null)
        $this->tableName = $tableName;
    parent::__construct($scenario);
}

把默认的function tableName() 改为如下:

public function tableName()
{
     return $this->tableName;

}

这个时候你调用的时候,输出tableName的时候,虽然成功了,但是数据还是没有变。 下面我们要改变数据元才行。   把默认生成的 function model(),改成如下代码:

public static function model($tableName = false, $className=__CLASS__)
{
    if($tableName === null) $className=null; // 这个字符串将节省内部CActiveRecord的功能
    if(!$tableName)
        return parent::model($className);

    if(isset(self::$_models[$tableName.$className]))
        return self::$_models[$tableName.$className];
    else
    {
        $model=self::$_models[$tableName.$className]=new $className(null);
        $model->tableName = $tableName;

        $model->_md=new CActiveRecordMetaData($model);
        $model->attachBehaviors($model->behaviors());

        return $model;
    }
}

最关键的是添加下面这行代码:

public function getMetaData()
{
    if($this->_md!==null)
        return $this->_md;
    else
        return $this->_md=static::model($this->tableName())->_md;
}

现在配置完成。下面我们写一个调用的小例子。 下面是Model的function search()代码:

public function search()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.

    $criteria=new CDbCriteria;

    $criteria->compare('id',$this->id,true);
    $criteria->compare('goods_sn',$this->goods_sn,true);
    $criteria->compare('language_ids',$this->language_ids,true);
    $criteria->compare('site_ids',$this->site_ids,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

Controller文件代码如下:

public function actionAdmin()
{
    $model=new KindsGoods('search', 'es_goods');//es_goods表名
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['KindsGoods']))
        $model->attributes=$_GET['KindsGoods'];

    $this->render('admin',array(
        'model'=>$model,
    ));
}

这个时候输出的结果如果是es_goods表的数据,那就说明你成功了。   参考文章:http://stackoverflow.com/questions/16399561/yii-one-model-for-multiple-tables