Category: Ruby & Rails

  • 确认一个 Email 地址是否存在

    前些天做销售的同事给我出了个题目: 她的客户数据里有很多的 Email 地址都是过期的或者错误的, 因此群发发邮件时会收到很多退信. 但是由于数量较大, 又不好手工去一一找出哪些地址是无效的. 有没有可能用程序解决呢? 当然是可能的啦, 思路: 首先肯定不能通过发邮件来测试, 因为, 乱发垃圾邮件那是违法的. 于是我采取三个步骤: 利用 regex 从 Email 地址的格式上先淘汰一些, 例如连 @ 都没有的那肯定不是合格的 Email 地址. 再从 DNS MX 记录上淘汰一些. 如果某域名没有有效的 MX 记录, 那该域名结尾的任何 Email 地址都是无效的. 最后使用 SMTP 协议”假装”发邮件, 只查询收件人是否存在, 便挂断. 基本能够达到目的, 但不保证 100% 准确. 因为… 很多发垃圾邮件的专业户也是这么做的, 所以一些邮件服务器对此是提防的. 程序如下. require ‘net/smtp’ require ‘dnsruby’ class EmailValidator def check_format(email) m…

  • 用一秒钟解数独(Sudoku)

    最近要热身一下准备做编程工作了, 想起来以前曾计划写个程序解 Sudoku 但一直拖拉也没做成, 那说做就做吧. 首先我从手机里的 Sudoku 游戏里抄了一道高难度的题目, 写成九行九列的一个方阵. 然后找到已知的数字, 猜测未知的数字. 基本算法是递归. 经过一些优化, 从第一个能解题的版本的 4.6 秒改善到第三版的 1.1秒. 改天再战, 希望能进 1 秒内. 源码我放 GitHub 了, 这里就不重复贴了.  

  • 免费的正版之路 III

    这回咱要说的都是干活用的好东东了,而且同样都是免费使用的:-) 首先是重量级的Aptana WEB IDE,也就是用来写javascript的。随着AJAX应用越来越多,js开发已经不再是copy&paste那么简单了。我其实没用过其它的WEB IDE,所以不好多说了。另外一个好消息,Aptana通过插件的方式把RadRails搬了过来,做ruby on rails也没问题了,而且沾了Aptana的光,Radrails也好用了许多。看图吧: 另一个好东东是用来做HTML的,叫做Nvu(读n-view),也不错,功能也不比Dreamweaver差多少吧? 剩下2个小软件,用于ftp和sftp的WinSCP,以及用于SSH的Putty,就不贴图了,界面简洁,功能够用。

  • 做了一个简单的报表软件

    报表选项页和项目清单页: 生成报表结果(使用Gruff Graph做的) 呵呵,rails还是很好玩的。这个软件虽然很简单,但是已经能代替很多Excel功能了,而且可以多人协作。继续努力。

  • 小试rails当中对多重选择表单的处理

    keys: ruby rails multiple checkbox 今天上班给老板写个项目销售管理的小东西,其中涉及到多重选择的处理。目前感觉rails在这方面相对弱,也许因为rails在其它方面太强了吧。总之,对于用rails处理multiple checkbox,还真需要些基础知识。 例子中的任务是为一个项目project指定人员user_file,这显然是一个N对N(HABTM)的关联,按照David的建议,我把关联表project_user_map也作为实体处理了。 介绍一下模型 model: class Project … has_many :project_user_maps end class ProjectUserMap belongs_to :project belongs_to :user_file end class UserFile has_many :project_user_maps end 先说view: <% form_tag :action => ‘edit_member_2’, :id => @project do %> <% for user_file in @all%> <%= check_box_tag( ‘selected_file_ids[]’, user_file.id, @members.include?(user_file))%><%= user_file.name%> <% end %> <br/> <%=…

  • 牛刀小试RegEx

    RegEx中文叫做正则表达式,虽然不是很新的东西了,我很纳闷我居然是才开始了解它。在数据库中查询keyword一般是写成 select * from tablename where columnname LIKE ‘%keyword%’ 而java我记得不是很清楚了,大概是 if(myString.indexOf(keyword) != -1){ //do things… } 这个只是简单匹配,如果有复杂要求就要写多得多的代码了。例如判断keyword是否是一个数字开头,紧跟1个小写字母,跟随若干数字,最后以”pattern”结尾等等,就不是一行代码能写出来的了。对于上例,RegEx+Ruby的写法就是 if keyword =~ /^\d[a-z]\d+pattern$/ #do things end 上式中,//是RegEx的边界,类似””是字符串的边界一样。接下来^代表匹配的开始;\d代表数字,就是0 – 9;[a-z]就是一个从a到z的小写字母了;+是后缀,表示1个或多个,因此\d+就是1个或多个数字的意思了;最后作为关键字的pattern直接写上即可;$代表匹配的结束。 更灵活的应用就是|符号和()括号了。例如判断文本是否包含x或X,RegEx就可以写 /x|X/ 如果要判断文本是否包含多个连续的x或者X,例如xXX、XxX,RegEx就可以写 /(x|X)+/ 如果要判断文本是否包含XXX、XXXX、XXXXX,RegEx可以写 /X{3,5} / 目前的了解就是这么多了,不过以上这些组合起来应该已经可以应付很多种情况了。继续学习。 UPDATE: Regex tutorial from guru99.com

  • ruby笔记之一

    1,随意,更象人类的语言 java: if(a == b) { System.out. ….//already forgotton? 🙁 } ruby: puts “it’s right!” if a == b 2,纯粹的OOP java: MyClass my = new MyClass(“param”); //’;’ required int i = Math.abs(-5); ruby: my = MyClass.new(“param”) #no ‘;’ required i = -5.abs #see, even -5 is an object 3,灵活 java: public String hello(String sir){ return…

  • 开始ruby,开始rails

    终于放下包袱了,我要重新开始,从ruby on rails开始了。 我的包袱是什么呢?是Java。从2000年年底开始,Java、JSP(好多人问是JavaScript么?晕……)、JavaServlets到后来的Struts、Tapestry、Hibernate,真是没少花时间呢。好在我不必遗忘Java才能学习Ruby:-) 自从去年开始做bjqnc.com(小区的网站,纯兴趣),我对Java的感觉就发生了变化。我最终选择了xoops,实在无奈的是xoops是基于php和smarty的,完全陌生的东西。而我熟悉的Java呢?开源项目颇多,唯独没有能用得上的。于是我开始了磕磕绊绊的php+smarty的应用。于是我又回到了编辑模版的原始阶段了,不甘心…… 为了做自己的xoops module,我找到了网友alex的笔记,跃跃欲试,后来好歹算是成功了。于是就像遇到了救星,赶忙把alex的msn加了进来:-) 后来alex说到ror(ruby on rails),我顿感无知,于是去ror网站上恶补一气,看了15分钟做blog那个视频,嗯,It’s the one. 当然了,Java还是很了不起的,我现在用的radrails就是来自Eclipse,哈哈。 本周要做个日志管理软件,算是练练手。待续了……