Category Archives: Varkrs

搭建个人博客的通用步骤

周围很多同学渐渐想要搭建自己的博客,但是拜僵化的教育所赐,很多软院的同学到大三甚至毕业了都还不是十分清楚该如何搭建一个个人博客。一般来说,wordpress本身已经做的十分简单易用,甚至其目的是给非程序员一个搭建博客的渠道,讽刺意味的是,除了一些爱折腾的同学,搭建一个简单的个人博客常常让人感到很迷茫。我自己也曾经是这样。这里给大家简要描述一下总体要经历的步骤吧。

注册域名

既然是个人博客,与新浪博客的区别就在于:高度的自定义。自定义包括彰显个人审美品位的页面,代表个人的域名(而不是yourid.sina.com这种二级域名),还有很多其他你希望的特定功能,例如广告、流量统计等等。域名是自定义的第一步。

免费域名

现在比较流行的是.tk,你可以注册一个yourname.tk,而不用付费。链接:http://www.dot.tk/zh/index.html?lang=zh

付费域名

如果你想要yourname.com或者yourname.me这样的域名,就必须找一个域名注册商去购买。一般是按年付费。国内的域名注册商可以注册,但是你必须进行个人备案才能使用,一般都不用。一般使用的域名注册商:

Godaddy: http://www.godaddy.com/ 老牌注册商,支持支付宝付款。如果你在支付的阶段停住,过几天godaddy就会给你邮件各种优惠吗,最高的是7折左右,所以如果不着急,可以试试。

Namecheap: http://www.namecheap.com/  这两年起来的注册商。由于前一阵子godaddy犯了一个和政府同流合污的错误(支持SOAP法案),namecheap成了最大的受益者。如果你有visa,在这里也可以,便宜不到哪去。

购买服务器(php空间)

注册完域名暂时不要配置。去买服务器。就是你的网站的后台。Wordpress是php写的,而php空间(英文是hosting)是搭建php网站最方便的方式,一般会有一个很用户友好的控制面板(相对于命令行比起来)。这里你去google搜索php空间,一堆一堆的。在天猫的时候一个同事给我推荐了一些,都很便宜,放在下面:

Hellohost: http://hellohostnet.com/hosting.html 我用的新手套餐#3,绰绰有余

Linost

HomeZZ

购买空间的时候一般会让你设置域名,填你刚注册的域名就好了。购买完之后会给你一个ip,就是你服务器的地址,和你的后台访问的地址,浏览器访问这个地址会显示后台的控制面板,常见的是CPanel 和 DirectAdmin,用起来差不多,无非是包括:

  • 数据库Mysql管理
  • 文件Files管理
  • 域名、子域名管理
  • 如果你明白ftp是怎么回事,一般有ftp服务,可以试试filezilla

配置域名

回到你的域名注册商那,例如godaddy,给域名添加一条A记录,将@指向你买的服务器的ip。@的意思就是yourname.com,是一个代词,相当于将yourname.com绑定到了服务器的ip上。同时也可以设置www的子域名指向同样的ip,这样大家用www.yourname.com和yourname.com都能访问你的博客了。

wordpress

去百度wordpress,然后下一个最新版的wordpress压缩包。这里有整个后台的代码。

按照wordpress网站上的的要求修改wp-config-example文件,包括重命名成wp-config、设置数据库名、数据库用户和密码。

这三个值都和你的服务器有关。访问你的服务器的控制面板,前面提到的cpanel或者directadmin中,进入Mysql管理,创建一个数据库,button很小,仔细找找。名字随便起,这个名字就是要填入config文件的DB_NAME。而数据库的用户名和密码一般和你后台面板密码一样,如果不一样应该也会提示你,或者你在面板上能设置。

修改完config文件将wordpress所有文件重新打包。这时打包最好不要用原来的打包方式(解压后有一个wordpress文件夹)。选中wordpress文件夹中的所有文件,用右键打包成zip,这样解压后是所有文件。另外,rar是windows下的格式,忘掉rar吧,不够通用。

都搞定后,在服务器的控制面板上的文件管理中,找到public_html文件夹或者www文件夹,进入,并上传刚才压缩好的文件夹。你要相信面板一定给你提供了上传的地方,所以仔细找找,directadmin在文件目录显示页面的最下方。如果实在找不到,用ftp上传吧,百度弄个filezilla。

注:在传到服务器上之前可以自己先装一个wamp,就是本机上的服务器试一下,把wordpress跑起来了,有信心了再上传~当然,如果你用的不是windows,我想你大约不需要我这样指导。

开始使用

上传完了,在服务器的文件目录中解压。一般有extract按钮。千万别抱怨按钮小、难找,有就不错了,要不然你得一个个文件上传,累死你。如果你按照我刚才说的方法打包,那么public_html或者www的文件夹下面就会有一堆文件。否则,就只有一个wordpress文件夹。这两种情况都能运行。

删除掉public_html下原先有的index.html文件。一定要删哦~要不然你一定认为你的wordpress坏了。

访问yourname.com,这时,如果一切正常,那么你就能看到wordpress的用户指导页面了,后面就一步步配置就完了。如果是那种解压完之后有个wordpress文件夹,那你得访问yourname.com/wordpress/,这样就可以了。如果觉得这样不爽,控制面板的文件管理提供了移动文件的功能,你把文件选中,copy to clipboard,类似于“复制”按钮,然后到你想要的位置,点击move clipboard to here之类的按钮就行了,类似于“粘贴”按钮。

按照wordpress用户指导配置完之后,会进入wordpress的管理页面(dashboard)。这时,你就可以在这个页面编辑、发表文章,修改主题,安装插件啥的。

再访问yourname.com,就会发现你的博客已经显示出来了。

喝杯咖啡吧。;)

State Pattern in JavaScript

In recent coding I encounter a situation that in different contexts, the button’s action should change accordingly. In other words, the page has several states, and in different states, the action of a same button should be different. I know in Java we have State Pattern in hand to deal with this situation, which take the advantage of Java’s OO features like inheritance and polymorphism. I don’t want to use JavaScript’s class which would definitely raise the complexity of the codes. With the help of the realization of Strategy Pattern in Book JavaScript Patterns, I write something like this.

Say, we have two buttons in the page, which are add and del. SPAGE is the namespace.

var SPAGE = {
    btn: {},  //collection of all btn's click event handlers
          //it has different states
              //in this example there are two buttons: add, del

    states:{ //state set of btn
        full: {}, //state 1: full
        half: {}  //state 2: half
    },

    setState: function(s){ //switch state
                  this.btn = this.states[s];
              }
}

SPAGE.states.full = (function(){ //realize event handlers of state 'full'
    var add = function(){
        print('full add click');
    }
    var del = function(){
        print('full delete click');
    }
    return {
        add: add,
        del: del
    }

})();
SPAGE.states.half = (function(){ //realize the methods of state 'half'
    var add = function(){
        print('half add click');
    }
    var del = function(){
        print('half delete click');
    }
    return {
        add: add,
        del: del
    }
})();

//set state and call
SPAGE.setState('full');
SPAGE.btn.add();    //click the button add
                    //output: full add click
SPAGE.setState('half');
SPAGE.btn.del();    //click the button del
                    //output: half delete click

So, I think I take advantages of JavaScript’s nice features of objects. I don’t know how you guys solve the similar situation. Any discussion is welcomed warmly~:)

玩客实验室产品介绍

Varkrs’ Lab开始运行也有一个多月了,产品的定位和方案也逐渐稳定,这里简要的介绍一下吧。这四款均是实验性质的小产品,不知道会不会有人用,但至少我自己还有部分开发者会用,哈哈~放在博客中会不会让人偷走捏?如果你能自信做的比我们更好,嘿嘿~:)

shunote.com树形笔记

主要用来帮助学生进行复习的。知识性的书籍一般都呈现出结构化的特点,因此可以利用这种结构化做成树形的笔记。Word、evernote等笔记软件重在平时的知识积累和管理。而shunote则注重在讲一本书中的系统性的知识以树形结构数字化,然后分享,交流,并用来帮助自己复习。注册域名的时候发现treenote.com貌似也在研发一款类似的产品。不过这可真的不算山寨呀。

gaosuTA.me 告诉TA

社交网络打通了现代人的信息流,问题在于,“非现代人”貌似被遗忘了。如何向自己的亲人展示自己平日的生活呢?对于妈妈级别甚至爷爷奶奶级别的人物,要让他们学习互联网实在是一件很困难的事。如果专门为自己做一个页面,然后让他们在电脑前只需要观看,或许更为合适。这种单向的社交网络适合于非常亲近但是又不在一起的人。当然很有中国特色,国外的父母们或许操作互联网都很熟练吧,国内的父母都被网瘾搞怕了。人人推出了一个家庭空间,其实也是希望解决类似问题,只是感觉做的还是很不到位。

zpwall.com社团照片墙

一个社团刚刚建立起来的时候,大家都互相不认识,如果建立一个qq群,或许名字能够熟络,但若想很快的将名字和人对上号,恐怕得等大家互相加了人人。Zpwall让同一个社团的成员能够上传自己的照片,填写自己或其他成员的资料,从而让成员快速认识,同时可以帮助社团制作自己的宣传页面。

YouTu游图

这是一款移动端产品,目的在于帮助用户整理照片。很多时候从景区归来,把照片拷贝到电脑中,仅仅是未分类的一堆“IMG_0000”的东西,如果能够自动按照游玩的不同地方进行文件夹归类,同时照片的名字就是用户当时发的那条微博心情该有多好。当然很多女生告诉我她们享受整理照片的过程,好吧,那么用户定位在懒的爱旅游的对单反没要求的男生。

Varkrs’ Lab 产品生命周期

Varkrs产品生命周期和一般产品周期相类似,由于为学校内的社团性质,因此对运营不做要求,当然如果产品足够优秀,恰当的运营是必须的。

1.      idea讨论

此阶段是提出一个初步idea的阶段,将想法提出到Varkr’s Lab论坛供大家讨论。如果觉得讨论的结果还不错,可以由idea提出者将idea设计成产品,进入产品PK。

2.      产品PK

Varkrs’ Lab每两周进行一次Product Review,全员参加。成员可以在这里提出他的产品,需要准备一个简短的ppt,将产品解释清楚。PPT包括但不限于一下内容:

l  产品目标用户

l  用户的主要需求

l  产品的初步方案(需demo原型,可以是图片,也可以是axure)

l  现有的同类型产品

l  盈利模式(optional)

如果产品比较简单直观,也可以不准备ppt,将原型展示给大家,让大家理解。

提出产品后,每位成员对其提出质疑,产品提出者进行解答,消除大家的质疑。最终:

  1. 大家达成一致:进入开发阶段,排开发优先级
  2. 大家未能达成一致:提出者重新准备,在下一次Product Review提出

3.      预发布

产品PK中胜出的产品,将得到Varkrs所有开发人员的支持。由于Varkrs开发人员可能有限,采取动态虚拟团队的方式。即优先级高的Product现行开始,进行不同角色的人员配置,估算开发时间。由于不同项目中不同角色人员进入时间不同,从而可以根据具体情况,进行多个项目的并行开发。

  1. 产品提出者一般自动成为产品经理(PD),负责对产品进行完善的设计及需求文档的撰写
  2. 虚拟团队建立后,选出项目经理(PM)。PM和PD依然有开发的责任。
  3. PM和PD在Product Review会议后2天内估算产品的开发周期,必须小于两个月,否则修剪需求
  4. 在准备发布的网站上提出发布时间,公开对外预发布。

4.      产品开发

1)         技术选择:

产品最终需要发布,开发平台优先选用现有的云计算平台。包括:

GAE: 支持python Java语言

SAE:支持php语言

如果确实不能使用云计算解决,考虑使用付费IDC机房。费用由Varkrs’ Lab承担,不需要成员承担。

移动端应用开发平台自选。

2)         人员责任

PM在开发中负责项目进度控制,PD保证产品能够实现预期功能。如果产品不能如期上线,PM负责在产品主页上说明delay的原因,并承担主要责任。PM和PD重新规划产品方案,并确定新的产品发布时间。

3)         开发过程,推荐选用Scrum,由PD担任Product Owner,任意一人担任Scrum Master。或使用传统的瀑布流程,执行过程中可以借鉴Scrum的思路。Scrum教程:http://www.scrum.org/storage/scrumguides/Scrum%20Guide%20-%20CN.pdf#view=fit

4)         测试和上线贯穿在整个开发过程中,我们鼓励边开发边测试,不断迭代进行。开发人员进行代码自测,对代码负责。

5.      正式发布

在预发布的时间点上,产品正式上线发布,通过SNS进行宣传,并获得院内、校内同学反馈。虚拟团队可以解散投入其他开发,PD继续关注产品。

6.      用户数据分析/迭代

产品发布后,

1)         产品反响很好。PD收集用户数据,分析反馈,在Product Review中提出产品升级方案,通过后继续迭代开发。

2)         产品反响不好。PD可以选择分析用户数据并改进产品,在Product Review中提出后续方案。或选择放弃产品,转而投入开发其他产品。

Varkrs’ Lab starts up!

前两天把Varkrs Lab的论坛搭起来了,用的是Vanilla,因为v2ex那玩意是python的,只有php空间,只好选了一个替代品。居然不能发图!额啊……

成立这样一个社团应该是顺应时代的发展吧,这是一个idea满天飞,但是没有人去实现的时代。大家都想着自己的idea,打算自己来搞,生怕idea被别人知道,闭门造车,总归是容易走弯路的。把idea拿出来,大家PK一下,选择promising的去开发,群体的智慧大呀。

设立了一个规则,参与者必须每周提供三天的全力开发时间。这个要求算高,但其实也不高。看你如何去想大学生活了。刷刷SNS,打打dota,时间就这样过去了。如果把时间集中起来,做一些更有意义的事,等到大四了,总不会哀叹自己虚度青春。这个要求同时也把很多其他社团的成员挡在了门外,但我想,人毕竟不能太贪婪,选择一个社团,做好一件事,把那件事做到极致,应该是一件不容易的事。

我不知道这个社团能否在当前的环境下成功。阻力有很多,例如学院大约会去支持大家参加各种大赛,因此老蔡把一帮程序员已经圈走了。学院一直缺实验室,估计开发只能选择在寝室或者图书馆,看大家意志力了。

试试看吧,我想学院需要这样的社团,只是我对行政那一套不太感冒。宪法规定公民有集会自由,应该不会有麻烦吧。