1. 好久没更新了

    不错手机上写字确实不是太方便,希望在macbook上能改善一下,应该能有个不错的体验。

    其实还在纠结air 11、13的选择问题,到时实体体验下再看吧。

    差不多有半天时间在香港逗留,够了吧。

  2. 少年锦时

    “我忧郁的白衬衫”

    ……

    “情窦初开的 哦哦哦

    从不敢和你说”

    ……

    “秋天的时候 柿子树一熟

    够我们吃很久

    收音机靠坐在床头

    贪玩的少年抱着漫画书不放手

    陪我入睡的 是月亮的忧愁

    和装满幻梦的枕头”

    ……

    “晴朗蓝天下昂头的笑脸

     爱很简单”

     

    真的有点感觉走得太远,忘了为什么出发。

    今天翻看了很多老日记和旧邮件,怀念以前的日子。

     

    有兴趣把压箱底的数据整理一下,也许分析一下有点意思。做个查询的网站吧。

  3. 2015-05-20 20:33:52

    错过了今日,明年也许不一样了吧。明年今日。

    这里快成年记了。

    需要做的几点:

    1、url优化

    2、编辑器优化,最好有自动保存

  4. 厚积薄发

    终于把域名转到Google了,发现GAE也能使用根域了,于是又萌生了优化这个log程序的想法。

    自从GAE升级后,发现移植、迁移的成本太高,慢慢就淡化了这边,最近一次写东西已经快半年了,程序优化更是久远。

    然后同时意识到,今年一直忙活的东西,已经半年了却还是没起色,之前计划的三个月出原型,随着实践的过程,已经消散了。工作忙只是借口,没有想好该做什么,更没有想好该怎么做,这才是关键。

    但是也并非完全没有收获,首先从头到尾熟悉一个新的研发过程,算是实打实的技术积累,至少抽象出的一个框架,可以作为今后项目的基础,也不用再局限于GAE的瓶颈了;其次,认识到很多的不足,从对项目的盲目乐观,到技术的缺陷,都是后续的方向,比如iOS越来越应该投入研究了。

    再一次体会到,学不在精,泛泛尤佳。至少于我而言。当然,泛泛也要能拿出东西才算。

    GAE有GAE的好处,稳定、性能、免费。而且前几年已经花了这多精力做了这个,有空还是优化一下的好。

    VPS上呢,目前就当练手吧,把新的框架改成熟,必将作为今后的主力方向,毕竟相对而言,可移植性更为重要。

    所以总结就是先不急着拿出什么,目前的实力也的确拿不出什么,还是多积累,总会有用得着的时候吧。

  5. Django的url被重定向到local server 127.0.0.1

    这几天快被Django的url问题搞崩溃了,现象分两种。

    1、最严重的,在view里面redirect相对路径,会重定向到127.0.0.1导致无法访问

    这个问题是因为Apache的项目部署配置缺少了反向代理ProxyPassReverse:

    
    <VirtualHost *:80>
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        ServerName sadpast.com
    </VirtualHost>
    

    2、Django默认应该会有APPEND_SLASH,就是为没有末尾斜杠“/”的url自动加上,比如访问http://sadpast.com/login会自动重定向到http://sadpast.com/login/,现在的问题是被301重定向到了http://127.0.0.1:8080/login/,怎么改urls.py都没用,尤其是在解决了上面的反向代理问题之后,这个现象更显诡异,让人怀疑是APPEND_SLASH的实现问题。

    罢了,今天到此为止,好在这个问题不影响功能继续开发。

    更新:

    好吧,改了个跳转的逻辑回头一看问题2居然好了,估计是缓存的原因,真是坑爹~

    希望现在可以稳定,可以安心睡觉了。接下来需要解决文件上传的问题。

  6. Django扩展自带User表及新增Model数据模型

    使用AbstractUser扩展默认的User表:

    1、startapp创建account应用;

    2、新增account的models:

    
    from django.db import models
    
    # Create your models here.
    from django.contrib.auth.models import AbstractUser
    
    class Users(AbstractUser):
        coin = models.IntegerField(default=0)
    
    class Tasks(models.Model):
        title = models.CharField(max_length=100)
    

    3、在settings.py中添加account到INSTALLED_APPS(这一点很重要,因为这个导致的错误浪费了大量时间),其它的官方文档中说的什么AUTH_USER_MODEL在这种应用场景下可以无视;

    4、刷新数据库,python manage.py syncdb;

    5、在其它应用的view中引用:

    
    from account.models import *
    
    try:
        user = Users.objects.get(username='user1')
    except Users.DoesNotExist:
        user = None
    
    if not user:
        user = Users.objects.create(username='user1', email='email1', password='password1', coin=100)
        user.save()
    
    user.coin = 1000
    user.save()
    
    try:
        task = Tasks.objects.get(title='a task')
    except Tasks.DoesNotExist:
        task = None
    
    if not task:
        task = Tasks.objects.create(title='a task')
        task.save()
    

    6、OK,下一步就是创建各种form各种view了。

  7. Django使用自带用户系统报数据库错误no such table: auth_user

    是因为settings.py中sqlite3的数据库名称搞错了:

    DATABASES = {

        'default': {

            'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.

            #'NAME': 'task.db', # Or path to database file if using sqlite3.

            'NAME': os.path.join(os.path.dirname(os.path.dirname(__file__)), 'task.db'), # Or path to database file if using sqlite3.

            # The following settings are not used with sqlite3:

            'USER': '',

            'PASSWORD': '',

            'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.

            'PORT': '', # Set to empty string for default.

        }

    }

    这里本应该是数据库文件的路径,直接写成task.db是在settings.py同目录下,然而python manage.py syncdb却把task.db生成在了上一级目录及manage.py同目录,导致找不到数据库。

  8. 不经意间

    又是年尾了,吃着小馄饨的时候我就想起四年前的那个冬天,光谷的冬天。而现在又是在这个城市,想起2013年的种种,脑子里只有四个字,不经意间。

    是的,2013年不经意间发生的事太多了,多到回想起来感觉像是幻觉。但是现实却大概是年纪不小了,很多节奏跟着也快了。

    最重大的事,贷款买房了,虽然不大,地段也没那么好,但终究是通过几年的努力给自己的梦想一点鼓励;

    最惨痛的事,大病了两场,尤其是年初的百日咳,咳到肋骨都疼,后果是元气大伤,明显身体大不如前了;

    最成就的事,拿了一些奖项,两次去百度出差,工作得到认可;

    最喜悦的事,涨工资、升职级;

    最果敢的事,在最辉煌的时候选择离开,顺利回到武汉;

    最遗憾的事,没和那帮兄弟再爬一次大梧桐;

    最意外的事,与十年不见的同学聚会了;

    最幽默的事,买了五个小芒果,一天吃一个,然后,然后就过敏了;

    最难受的事,那一段时间,不小心让外婆和爸妈为我操心了;

    最自责的事,拖延症,一年下来没什么进步;

    最无聊的事,当然是斗地主了

    ……

    然后呢,其实还有最伤心的事、最曲折的事和最幸福的事,可惜她回去了。

  9. 羊台山

    深圳·2013-11-16

  10. Apache多站点映射

    这个必须得记一下,和小强研究了好久才找到原因。

    需求是通过Apache映射不同的子域名到不同的站点,其中一个是Apache自带的cgi,映射其目录即可,另一个则是django,需要通过proxy_pass代理到127.0.0.1:8080,本来挺简单的,但是实际设置了之后发现两个子域名总是指向一个站点,要么cgi要么django。

    最后才发现是NameVirtualHost *:80这个选项默认被注释掉了,打开之后就好了。

    总结httpd.conf内容的重点部分如下:

    NameVirtualHost *:80

    <VirtualHost *:80>

    ProxyPass / http://127.0.0.1:8080/

    ServerName work.sadpast.com

    </VirtualHost>

    <VirtualHost *:80>

    DocumentRoot /var/www/html/

    ServerName v.sadpast.com

    </VirtualHost>

    剩下的,就是在django下开发应用了。