Sorting string lexicographically in Perl

algorithm perl

This situation comes from soralind, and it is an extension of this post.

(Minor update 2014-08-16: fix the bug of subroutine weight_sum  )

The aim is to sort strings lexicographically NOT alphabetically.  For example, an alphabet with predetermined order:  T A G C . For a set of strings: AT AC TG TC , to list them alphabetically:

AC
AT
TC
TG

lexicographical order:

TG
TC
AT
AC

Similarly, Schwartzian transform by weight is used.

Read more →

生物信息分析小贴士

bioinf devop

前几天帮别人做了细菌的基因组结构变异分析,有一些体会,特记录于此。

  • 实验分析设计仍然是最重要的。一开始没做好,后面就不好办了。
  • 一定要用脉冲场凝胶电泳简单拼装结果的正确性,一定要将gap补全。
  • 标准收费下,测序公司只按标准流程做分析,并不考虑课题背后的故事。所以科研团队还是要有自己的分析人员。
  • 不要忘了最基本的分子生物学知识,比如GC Island,GC skew。
  • 动手前,多向前辈请教。分析的时候先看有无现成的工具,实在没有再自己写程序。
  • 写程序一定要考虑可配置性,可重复性,可扩展性,争取一次编写、多处运行。逐渐积累自己的工具函数库,记录不常用的库。json格式配置更灵活,解析方便。
  • 不能在有“等用的时候再现学的”想法了,比如R绘图。
  • 分析文档要及时跟上,并逐渐完善,规范。
  • 不要临到最后了,再给老板看结果,一定要预留补充修改的时间。
  • 不能以交差的心态做事。
  • 合理安排时间,协调处理多件事情。

Read more →

读写Fasta文件的Go包(模块)

golang bioinf

github.com/shenwei356/bio/

Read more →

One-liners for Bioinformatics

bioinf note

last update: 2015-11-09

Count FASTA record (everyone knows)

grep -c '^>' file.fasta

Remove empty FASTA records

perl -ne ' if (/^>/) { $h = $_; $s =~ s/\s+//g; print "$h$s\n" if length($s) > 0; $s = ""; } else { $s .= $_ } END{$s =~ s/\s+//g; print "$h$s\n" if length($s) > 0;}' t.fa > t2.fa

Easier solution (fasta2tab and tab2fasta are availabe on github):

fasta2tab t.fa -l | awk -F'\t' '$3 > 0' | tab2fasta -l 70 > t2.fa

Read more →

Recommended WordPress Plugins

network

Here are some recommended wordpress plugins. Plugins in Bold are highly recommended.

last update: 2014-08-28

Security

  • iThemes Security
  • Limit Login Attempts
  • WP htaccess Control – Interface to customize the permalinks
  • Akismet (default install)

Basic plugin

  • Link Manager – Enables the Link Manager that existed in WordPress until version 3.5.
  • All in one Favicon – Easily add a Favicon to your site and the WordPress admin pages.
  • WP-PageNavi – Adds a more advanced paging navigation to your WordPress blog
  • Crayon Syntax Highlighter – Supports multiple languages, themes, highlighting from a URL, local file or post text.
  • Lightbox Plus ColorBox – Lightbox Plus ColorBox implements ColorBox as a lightbox image overlay tool for WordPress.
  • Download Manager – Manage, track and control file download from your wordpress site

Optimization

  • WP Cleaner – delete posts which don’t need any more,keep database clean and fast.
  • WP Super Cache – Very fast caching plugin for WordPress.

Read more →

Windows中命令行程序的运行方法

efficiency windows

本文指导初学者在Windows中运行命令行程序。

运行系统命令:

  1. 点击“开始”,点击“运行”,输入cmd,回车,进入cmd界面(黑色背景,白色文字)。
  2. 输入命令,比如查看IP地址等网络信息用ipconfig。如果需要更详细的方法,则输入ipconfig /h,会提示详细用法。

第三方命令行工具的运行方法:

Read more →

如何高效利用搜索引擎

network

很多问题,特别是编程方面,都能通过搜索引擎快速地获取答案。

首先,选择优秀的搜索引擎:Google。如果无法访问,可临时用必应(Bing)。不建议使用百度、360等搜索引擎。

如果Google不稳定,请不要说Google太差,那是其它的原因(×××),请修改hosts文件,或者翻墙。

对大多数人来讲,并不需要用到很高级的用法,只需要输入几个以空格隔开关键字即可。不要把搜索引擎当人而输入口语化的疑问句,而要输入关键字来陈述你的问题

Read more →

Linux无root权限用CPAN安装Perl模块

linux perl

通过设置环境变量,可在无root权限的情况下,用CPAN安装Perl模块到个人目录。

last update: 2015-09-09

编辑~/.bashrc文件,末尾添加如下设置。第一个变量$LOCAL_APP根据自己情况修改,后面可不修改直接复制。

# local app path
LOCAL_APP=$HOME/local/app

# local perl edition
LOCAL_PERL_EDITION=$LOCAL_APP/perl
export PERL5LIB=$LOCAL_PERL_EDITION/lib
export PATH=$LOCAL_PERL_EDITION/bin:$PATH

# local perl lib
LOCAL_PERL_LIB=$LOCAL_APP/perl5
export PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:$LOCAL_PERL_LIB"
export PERL_MB_OPT="--install_base $LOCAL_PERL_LIB"
export PERL_MM_OPT="INSTALL_BASE=$LOCAL_PERL_LIB"
export PERL5LIB=$LOCAL_PERL_LIB/lib/perl5:$PERL5LIB
export PATH=$LOCAL_PERL_LIB/bin:$PATH

Read more →

Perl Note

perl note

偶尔翻翻书Perl,记录一些平时用的少的东西。

last update: 2014-12-10

语法

perl中my与local的区别 

wantarray(),函数返回上下文判断参考Perldoc

sub context_sensitive {
    my $context = wantarray();
    return qw( List context ) if $context;
    say 'Void context' unless defined $context;
    return 'Scalar context' unless $context;
}

数学

一些数学相关的东西

use integer

性能

临时变量通常情况下能提高性能

use Memoize – Make functions faster by trading space for time。也可自己用临时变量、甚至数据库存储。

print性能: print "$_\n" < print $_. "\n" < print $_, "\n"

数据结构

Array slices: @cats[-1, -2]; @cats[0 .. 2];

Hash Slices

# %cats already contains elements
@cats{qw( Jack Brad Mars Grumpy )} = (1) x 4;

# equivalent to the initialization:
my %cats = map { $_ =&gt; 1 } qw( Jack Brad Mars Grumpy );

# Hash slices make it easy to merge two hashes:
my %addresses = ( ... );
my %canada_addresses = ( ... );
@addresses{ keys %canada_addresses } = values %canada_addresses;

Hash::Util can make hashes safer using lock. 

Read more →