forecho 的独立博客

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

MySQL 查询今日的数据数量

2014年04月22日

数据库我们存放的时间戳格式。

方法一:

先用PHP计算出时间戳。

1
2
// 获取今天开始的时间戳
$today = strtotime(date('Y-m-d 00:00:00', time()));

这个值就是今天凌晨的时间戳。 然后查询的时间大于这个值就可以了。

方法二:

直接用MySQ语句查询当天的记录。

1
SELECT * FROM message WHERE DATE_FORMAT(FROM_UNIXTIME(chattime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') ORDER BY id DESC

来深圳也一年了

2014年03月16日

2013年3月12号的票来的深圳,到现在已经满一年了。来说说感受吧。

慢慢的从一开始很反感加班,到现在开始接受加班,但是还是开始坚持自己的原则 - 提高自己的工作效率,尽量去减少没必要的加班。

慢慢的也能接受深圳快节奏的生活,每天上班一个小时的路程(半个小时地铁半个小时走路)的情况,上班也开始习惯在地铁上用 Kindle看书了,有时候都会感觉上班地铁时间太少。

1年来虽然小换了几份工作,但是对现在的公司还是比较满意的。公司有着十几个 PHP 工程师,公司氛围也还好,每天开开早会还是很不错的,虽然有时候觉得这早会的30分钟挺浪费时间的。公司给我提供了双显示器,实现了一直想要双屏开发的愿望。双屏开发还是很爽的,要是再配上我的 MacBook 开发就更爽了。

慢慢的也有机会接触比较大的项目了,就比方说现在做的微信统一企业的项目,这个项目做好了之后,相信以后会有更多的机会接触知名公司企业的项目了,到那个时候就会有很大的成就感的,这个在武汉就很难去接触。

深圳很潮湿的,回潮的时候楼梯上有水,刚开始我还以为是房东把楼梯给拖了一遍呢?没想到这个深圳特有的「景象」。

前一段时间跟设计部门开早会的时候,有人提议让其他人说某个人的缺点,一天说一个人,这个想法真不错。但是如果你跟某个人不熟的话还真说不出来,有的人你连第一印象都说不出来。

我记录了一下大家说我的缺点,以后就慢慢改正:

  • 比较闷骚。(好吧,这个我承认)
  • 不够 open。(这个其实跟上个差不多,特别是对女生,想来刚来公司的时候,旁边坐着一个设计的妹子,一个月我基本上没跟她说过话。-_-!!)
  • 有时候讲话的没思路(这个确实有,以前也被人提到过。语言表达能力太差,有时候说着说着自己都不知道自己再讲什么了-_-!!)
  • 胆小(这个确实也有,害怕跟陌生人说话)

基本上我只记住了上面几个。很感谢那些提出我缺点的人,我会慢慢改正的。 最后「做正确的事,等着被开除」,一起努力吧。

解决iPhone/iPad 按钮样式问题

2014年03月06日

你要的左边的按钮的样式,在Android上面显示是 OK 的,但是不知道为什么,iPad 和 iPhone 上面显示却是右边的按钮样式,很难看。 解决办法就是添加下面的代码:

1
-webkit-appearance: none;

或者是:

1
2
3
input[type="button"], input[type="submit"], input[type="reset"] {
    -webkit-appearance: none;
}

参考链接:

CSS submit button weird rendering on iPad/iPhone

CSS input button on iPhone

Mac 安装 PHP5.4 的 Mcrypt 扩展

2014年03月01日

忘记什么时候把 MacBook 的 PHP 版本升级到 PHP5.4了,然后准备学一下 Laravel 这个框架的时候,提醒 Mcrypt 扩展未安装。

安装这个扩展真是头疼,尽管有 Homebrew ,尽管能 Google 到很多英文很好的教程,有简单的命令的,有复杂命令的,但是照着教程敲代码还是安装不成功。

在终端输入 php -v 的时候,会出现下面报错代码:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so, 9): image not found in Unknown on line 0
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

但是我 /etc/php.ini 配置文件里面根本没有 /usr/lib/php/extensions/no-debug-non-zts-20100525/ 这个路径,也不记得这个东西在哪?怎么修改?

剩下的我只能继续 Google,找几份教程一起来,然后我发现了这个:Mcrypt installer for OS X 10.8/10.9 不注意的话,估计会忽略最下面的下载链接

我下载下来试了一下,安装步骤就跟安装软件是一样的,一直点下一步就好了,然后我在输出 phpinfo() 的页面,竟然搜索到了 Mcrypt ,这就说明我安装成功了,然后试了一下 Laravel 首页,果然成功了。

还是这个方便省事,感谢这个软件。

最后分享一个学 Laravel 的资源:https://github.com/maliang/LikeLaravel 

Sublime Text 3配置

2014年02月10日

安装 Packages 1、ctrl+` 2、输入命令:

import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

Preferences > Settings -User基本的配置:

{
    "font_size": 13,
    "ignored_packages":
    [
        "Vintage"
    ],
    "spell_check": false,
    "font_face": "YaHei Consolas Hybrid",
    "trim_trailing_white_space_on_save": true, //去除空格
    "update_check": false,
    "word_wrap": false
}

一些基本的插件:

  • Emmet:必装插件。

  • FileHeader:自动给文件加文件的注释信息。

  • TortoiseSVN:结合TortoiseSVN客户端使用。

  • FileDiffs:文件对比插件。

  • BracketHighlighter :高亮显示匹配的括号、引号和标签

  • TrailingSpaces: 高亮显示多余的空格和Tab

  • jQuery:必装插件

  • Alignment :等号对齐

  • CodeFormatter:代码格式化

注:可能是QQ和这个冲突了,自行设置了一下快捷键就可以用了。 打开 Preferences=>Package Settings=>Alignment=>Key Bindding - User 然后写入:

[
    { "keys": ["ctrl+alt+f"], "command": "alignment" }
]

或者改成其他不冲突的快捷键即可。

2013年给自己的一个胶带

2014年02月06日

2013年发生了很多事。

完成的事情有:

  1. 年后果断的辞职了。
  2. 辞职之前利用周六周末去庐山玩了一躺。
  3. 来深圳了。
  4. 找了一家小公司,被坑了。
  5. 有找了一家公司,公司环境挺好的,但是氛围很差,进去没多久就碰上裁员,继续被坑。
  6. 去了一躺云南,完成了去大理、丽江还有住青旅的心愿。
  7. 回来十一之后找了一家还不错的公司。
  8. 碰到一个志趣相投的同伴。
  9. 把「你丫闭嘴」项目上线了,虽然几乎没人访问。【泪】
  10. 学习 CakePHP 。
  11. 升级了固态硬盘,花了1500左右。
  12. 生日给自己买了一块机械手表。
  13. 生日弟弟送了一块飞利浦的剃须刀。
  14. 买了一个 iPad Air。
  15. 看完了5本书。
  16. 自认为喜欢上了思考。
  17. 开始追《全职猎人》动漫。
  18. 发现一个能让我看得进去书的好方法。
  19. 喜欢上了写作来记录自己的想法。
  20. 喜欢上了Podcast。
  21. 一如既往的对技术的热爱。

成为一流的人才

2014年01月26日

我们经常会听到一句话「不怕神一样的对手,就怕猪一样的队友」,但是你有没有想过这个「猪一样的队友」说的是否是自己呢?

2013年我来深圳找工作的时候,刚开始是抱着「自己工作经验不到2年,希望找个能让自己快速成长的公司」,工作找了很久,每次技术面试都很差,大多数公司都希望找到「一流」的人才,这个是事实。那段时间找工作再到换工作对自己打击很大。

再到后来看到了《乔布斯:遗失的访谈》,这个关于乔布斯访谈的节目,乔布斯的下面几句话对自己感触很大:

能进入这个行业,我感到很幸运
But what I was lucky enough to spend my life in, is like this,
我的成功得益于我发现了许多才华横溢、不甘平庸的人才
and so I built lots of my success of finding these truly gifted people, and not settling for B and C players, really going for A players.
而且我发现只要召集到五个这样的人
And I found something, I found when you get enough A players together, when you go through the incredible work to find you know 5 of these A players,
他们就会喜欢上彼此合作的感觉,前所未有的感觉
they really like working with each other, because they never had a chance to do that before,
他们会不愿再与平庸者合作,只招聘一样优秀的人
and they don’t want to work with B and C players, so they become self-policing, they only want to hire more A players.

和优秀的人工作,你进步很快,最重要的是那种工作的感觉真的是很棒,让你感觉到你不是一个人在战斗,你说的东西他们都能懂,他们说的你也感兴趣,就是这种感觉。之前看的《打造 Facebook》其中有讲到 Facebook 也是只招一流的人才。我这才恍悟过来,把自己变成一流的人才是一件多么紧急的事情啊,有更好的人才,公司为什么要选你?有现成的人才,为什么要花时间来培养你呢?

之前老是抱着「我技术不好,但是我对工资要求也不高;能让我去大公司,提高技术,甚至不高工资,管饭就行」这样糟糕的想法。公司招来一个菜鸟,让你弄一个东西,一两个月还搞不出来,那是在浪费他们的时间,对他们来说少给你的工资又算的了什么呢?你花两个月做出来的东西,他们不能用,然后又得再去找人重新做,这个损失才是真的很大。

之前废话了那么多,如果你认同我的观点,那么你可以继续往下看了。 前个星期一起开早会的同事提议大家,开会的时候可以说说主持早会人的一些缺点。轮到我的时候,得到了一些同事的肯定,认为我很热爱技术,说我的目标很明确的人,对我的鼓励很大。前一段时间堂弟对我推荐《全职猎人》动漫,看了几集,确实很适合我的胃口,越看越觉得很有意思,甚至是周末的时候花了一整天都在看,直到看到最新一集,很是精彩,因为很认同主角,主角现在虽然实力很弱,但是他想成为一名实力很强的猎人,在每次遇到实力比自己强的对手,不是去害怕,而是兴奋!他非常的享受战斗的过程,甚至有点让人感到「变态」,但是我是非常非常的喜欢这种精神。

记得12年过完年找工作的时候,一家公司老板面试我,给我的评价是「热爱技术,但是技术基础太差,但是愿意给我试用几天的机会」,加上这次同事评价 - 「我是个热爱技术,并且有着明确目标的人」,再加上朋友的评价是「很享受编程的样子」。这说明我的路没有走弯,我很感谢他们的评价。

但是这还不够,远远不够,我需要更多。我的技术其实还是很差,接触的东西越多,越觉得自己会的东西太少,我要看的书还有很多。我希望把自己打造成一流的人才。

表单多radio jQuery 不为空验证

2014年01月24日

一、如果表单是 POST 或者 GET 提交的话,可以直接这样写 jQuery:

$("form").submit(function() {
    var submitme = true;
    $(':radio').each(function() { // loop through each radio button
        nam = $(this).attr('name'); // get the name of its set
        if (submitme && !$(':radio[name="'+nam+'"]:checked').length) {
        // see if any button in the set is checked
            alert(nam+' group not checked');
            submitme = false;
        }
    });
    return submitme; // cancel the form submit
});

二、如果表单用的 Ajax 提交的话,我们还需要修改一下:

  1. 把提交按钮 type 由 submit 改成 button 类型,然后加一个 id=”submit ”。

  2. jQuery 代码如下:

    $(“#button”).click(function(){ var submitme = true; $(‘:radio’).each(function() { nam = $(this).attr(‘name’); if (submitme && !$(‘:radio[name=”‘+nam+’”]:checked’).length) { alert(nam+’ group not checked’); submitme = false; } });

     if (submitme) {
         // 防止重复提交
         $(this).attr({
             disabled: 'disabled',
             value: '正在提交...'
         });
         $.post("/admin/saveUserData",$("#user-form").serialize(),function(data){
             #do something
             ....
         });
     };  })
    

参考文章:http://stackoverflow.com/questions/10706925/jquery-ensuring-all-radio-groups-are-checked

Yii 非主键关联

2014年01月24日

1
2
3
4
5
6
7
8
9
10
11
function relations()
    {
        return array(
            'last_experience' => array(
                self::HAS_ONE,
                'Experience',
                '',
                'on' => 'user_id=last_experience.user_id'
            ),
        );
    }

jQuery Ajax 点击修改

2014年01月23日

先来一张效果图: view HTML页面代码如下:

<td align="center" onclick="changeLike(<?php echo $id ?>,'<?php echo $like_count; ?>',this)">
    <?php echo $value['like']; ?>
</td>

JavaScript代码如下:

function changeLike (id, like, obj) {
    $(obj).html('<input type="num" name="" size="5" value="'+like+'">');
    $(obj).find('input').focus();
    // 键盘Enter键提交
    $(obj).find('input').keydown(function(event) {
        if(event.which==13){
            $(obj).find('input').blur();
        }
    });
    // 更新数据
    $(obj).find('input').blur(function(event) {
        $(obj).html(this.value);
        $.get('/admin/ajaxLike/'+id+'/'+this.value, function(data) {
            like = data;
        });
    });
}

至于控制器代码就很简单了,用获取到的参数,更新记录,返回新纪录。下面是我用CakePHP写的action,请结合自身情况写代码:

public function ajaxLike($id, $like)
{
    $this->layout = 'ajax';
    $this->Article->id = $id;
    $this->Article->saveField('like', $like);
    exit($like);
}