2015年2月3日星期二

Re: [PerlChina] git submodule与subtree现在那个用得多?

没用过subtree(第一次听说),一直用submodule,

搜索了一下,


原文作者认为subtree可以接受的缺点:

In my opinion the drawbacks are acceptable:

  • You must learn about a new merge strategy (i.e. subtree).
  • Contributing code back upstream for the sub-projects is slightly more complicated.
  • The responsibility of not mixing super and sub-project code in commits lies with you.
2,3 对我来说有点不可接受。

submodule 是独立的一个repo,每次更新了submodule,

只要到再到主repo 的根目录,commit 一下就好了(更新一下在主repo 中的hash)

我觉得没法再简单了。







2015-02-03 19:20 GMT-08:00 Beckheng Lam <bi.ken.lam@gmail.com>:
Hi All,
RT.
一直没有用过。
请用过的童鞋科普下。:)

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。

[PerlChina] git submodule与subtree现在那个用得多?

Hi All,
RT.
一直没有用过。
请用过的童鞋科普下。:)

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。

2015年1月9日星期五

[PerlChina] Re: 代发 1月18号 Perl上海社区活动

支持楼主!

在 2015年1月7日星期三 UTC+8下午12:26:51,Fangyuan写道:
Perl 上海社区2015年第一次活动:
Perl 的 Test-Driven Development  开发模式实践
时间 :2015年1月18日 下午 14点至16点
地点: 上海药物研究所 浦东张江祖冲之路555号
报名邮箱 : xu.hejun at 163.com

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。

2015年1月6日星期二

[PerlChina] 代发 1月18号 Perl上海社区活动

Perl 上海社区2015年第一次活动:
Perl 的 Test-Driven Development  开发模式实践
时间 :2015年1月18日 下午 14点至16点
地点: 上海药物研究所 浦东张江祖冲之路555号
报名邮箱 : xu.hejun at 163.com

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。

2015年1月3日星期六

[PerlChina] 招聘Perl Web前端和后端开发工程师(工作地点 上海)

公司名称:上海磐拓电子商务有限公司
我们是一家年轻的公司,在线销售多个品牌的户外运动装备。
现在招聘网页前端和后端开发两个职位,欢迎有意向做Perl Web开发经验的同学们加入,请将简历发到chengfangyuan#pantuo.com.cn(用@替换#)。


招聘职位详细信息如下:

Web Programmer
网页工程师

工作职责
1.将设计师的设计稿以及交互设计师的交互设计完整的实现;
2.负责前端框架搭建
3.不断研究新技术,并且很好的应用到产品中
4.参与产品需求、设计阶段的工作并从前端的角度提出意见
5.以用户为核心的开发工作,从前端的角度充分考虑用户体验、美观度及响应式网页设计;
6.主流浏览器兼容性测试(IE需支持IE8及以上);
7.改善代码,不断提升用户使用体验;

任职资格
1.学历:大专毕业以上
2.相关工作经验:2年以上 Web 前端工作经验
3.技能:
-熟悉 HTML5/CSS3/Javascript,熟悉jQuery框架,理解Ajax原理;
-掌握 SASS, Underscore.js, Grunt.js, Bootstrap框架 更佳;
4.良好的学习能力,能够独立解决技术问题更佳;
5.良好的沟通能力,具备团队合作精神
6.能独立在指定时间完成工作
7.有过电商类网站开发经验优先
8.遵守团队的代码格式、结构的规定,编写易读、易维护、高质量、高效的代码


System Programmer
系统工程师

工作职责
1.负责电子商务网站前端和后端程序开发/测试;
2.负责参与业务需求分析;
3.负责参与业务逻辑设计;
4.负责项目概要设计、详细设计、开发计划等的编制并实施;
5.负责系统开发测试、部署和集成;
6.负责解决开发过程中的技术问题;
7.参与代码维护与备份;

任职资格
1.学历:大专毕业以上
2.相关工作经验:2年以上
3.技能:
- 熟悉网站开发技术,HTML/CSS/Javascript;掌握SCSS/Grunt.js加分;
- 熟悉Perl语言,或者熟悉PHP/Python/Ruby,愿意学习Perl;
- 熟悉后端模版技术,掌握Template::Toolkit加分;
- 熟悉MySQL数据库,数据库设计/查询优化;
- 熟悉Linux/Mac开发环境;会使用 Git/Vim 加分;
- 良好的学习能力,愿意学习实践新技术;能阅读英文文档加分;
4.良好的沟通能力,具备团队合作精神
5.能独立在指定时间完成工作
6.能够持续接受工作压力和挑战
7.工作态度端正,耐心,细致,有自主工作意识

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。

2014年12月21日星期日

[PerlChina] PerlChina Advent Day21: MooX::Options

# MooX::Options

在写命令行程序的时候,我们肯定都用过 [Getopt::Long](https://metacpan.org/pod/Getopt::Long) 模块。不过我在看 Message::Passing 项目源码的时候,发现这个项目用的是另一个模块,而且跟整个项目的 Moo 风格还真是非常搭。今天给大家介绍一下,这个模块叫:[MooX::Options](http://metacpan.org/pod/MooX::Options)。

这个模块的特点,就是把每个命令行参数都当做是对象属性来处理了。为了在语法上更明确一点,该模块包装了一下 Moo 的 `has` 关键字,改叫 `option` 。此外,还提供了一些便捷功能,比如自动生成数组、自动加载 JSON 等。

下面是一个比较完整的常用功能示例:

## MyAppCmd.pm 示例

    package MyAppCmd;
    use Moo;
    use MooX::Options;
    option 'verbose' => (
        is => 'ro',
        negativable => 1,
        doc => "a Bool option",
        short => 'v'
    );
    option 'float' => (
        is => 'ro',
        format => 'f',
        doc => "a Float option",
    );
    option 'string_array' => (
        is => 'ro',
        format => 's@',
        autosplit => ',',
        default => sub { [] },
        doc => "an Array contains String items, you can use ',' to split it",
    );
    option 'integer' => (
        is => 'ro',
        format => 'i@',
        autorange => 1,
        doc => "an Array contains Int items, you can use '..' to generate ranges",
    );
    option 'json' => (
        is => 'ro',
        json => 1,
        required => 1,
        doc => "a JSON option you must provide",
    );
    1;

## myappcmd 程序示例

    use MyAppCmd;
    use DDP;
    my $opt = MyAppCmd->new_with_options;
    p $opt;

## 运行效果示例:

首先试试不加任何参数:

    $ perl moox_options.md.pl
    json is missing
    USAGE: moox_options.md.pl [-hv] [long options...]
        --float: Real
            a Float option
        --integer: [Ints]
            an Array contains Int items, you can use '..' to generate ranges
        --json: JSON
            a JSON option you must provide
        --string_array: [Strings]
            an Array contains String items, you can use ',' to split it
        --verbose:
            a Bool option
        --usage:
            show a short help message
        -h --help:
            show a help message
        --man:
            show the manual

然后加全部参数:

    $ perl myappcmd --json '{"key":"value"}' --string_array=a,b,c --string_array=d  --integer=1..4 --float=1.1 -v
    MyAppCmd  {
        Parents       Moo::Object
        public methods (7) : DOES, float, integer, json, new, string_array, verbose
        private methods (2) : _options_config, _options_data
        internals: {
        format => 's@',
            float          1.1,
            integer        [
                [0] 1,
                [1] 2,
                [2] 3,
                [3] 4
            ],
            json           {
                key   "value"
            },
            string_array   [
                [0] "a",
                [1] "b",
                [2] "c",
                [3] "d"
            ],
            verbose        1
        }
    }

可以看到,`$opt` 是一个 MyAppCmd 对象,你定义的每个 option 都是一个对象属性,可以用同名方法获取其值。

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。

2014年12月20日星期六

[PerlChina] PerlChina Advent Day 20: cpanfile

# cpanfile

传统的 Perl 风格,是将依赖模块写在 Makefile.PL 里。无奈这个单词实在给人太大精神压力,而且在一些项目应用中,我们也不需要除了依赖关系以外其他的 Makefile 内容。所以 modern perl 从 Ruby 学来了 Gemfile 的方式,叫做 [cpanfile](https://metacpan.org/pod/cpanfile)。

cpanfile 写法示例如下:

    requires 'perl', '5.20.0';
    requires 'Plack', '1.0'; # 1.0 or newer
    requires 'JSON', '>= 2.00, < 2.80';

    recommends 'JSON::XS', '2.0';
    conflicts 'JSON', '< 1.0';

    on 'test' => sub {
      requires 'Test::More', '>= 0.96, < 2.0';
      recommends 'Test::TCP', '1.12';
    };

支持 cpanfile 格式的安装工具,目前有两个:[cpanm](https://metacpan.org/pod/cpanm) 和 [carton](https://metacpan.org/pod/carton)。

cpanm 在之前的 advent 已经介绍过,可以说是目前最推荐的 cpan 客户端命令了。在有 cpanfile 存在的目录下,执行如下命令即可安装 cpanfile 里列出的全部依赖模块:

    $ cpanm --installdeps .

而 carton 则是学习 Ruby 的 bundle 命令。了解 bundle 的,基本可以直接照着习惯用 carton 就好了。如果不了解的,继续往下看。

## carton 用法

### 安装依赖

同样是在有 cpanfile 存在的目录下,执行如下命令安装依赖模块:

    $ carton install

和采用 cpanm 方式不同的是,这个命令会在目录下新生成一个文件叫 `cpanfile.snapshot`。这个文件里会记录你这次安装的时候的模块的确切版本,这样你通过 github 等方式共享给其他人、发布到服务器等的时候,再用下面的命令安装就可以同样做到安装完全一致的版本的模块了:

    $ carton install --deployment

### 执行

carton 和 cpanm 的另一个不同, cpanm 默认是把模块安装到系统目录里,用 -L 参数指定才会到指定目录。而 carton 默认是安装到当前目录的 **local/** 子目录下。所以,就需要利用 carton 命令来启动应用才能找到正确的路径:

    $ carton exec hypnotoad ./script/myapp

### 打包

carton 有专门的一个 bundle 命令。把之前 install 在 **local/** 里的模块,复制到 **vendor/cache** 目录下。然后通过下面命令来安装:

    $ carton install --cached

看起来似乎有点多此一举,分发的时候发哪个目录不都一样么?要点在于:carton 复制到 **vendor/cache** 目录下的,不是安装好的模块,而是各模块的 .tar.gz 包。这样,对于跨不同平台和系统环境的部署,这个会重新走一遍编译的过程,有些 XS 就不会有问题了。

好了,大家快给自己的项目加上 cpanfile 吧~

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com。
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com。
访问此群组:http://groups.google.com/group/perlchina。
要查看更多选项,请访问https://groups.google.com/d/optout。