Showing posts with label perl. Show all posts
Showing posts with label perl. Show all posts

Wednesday, January 29, 2014

Mojolicious

Salam,

Saya mmg tgh mencari pekerjaan tetap... hehehehe... kalau ada yg nak offer kerja boleh la... terima kasih didahulukan.

Ada hantar resume kat satu company ni... dia dah reply, tetapi kene buat satu assessment test. syarat nya kene pakai Mojolicious (http://mojolicio.us/) framework.

Pertama kali install and bermain dgn mojo ni... slow skit sebab nak pahamkan flow dia etc... as sebelum ni hampir kesemua development pakai framework sendiri. bila nak study framework org ni ambik masa skit.

Assessment dah hantar tak tau le mcmana result... sebab basic sgt buatnya... sebab x abis xplore mojo ni... byk kene study lg...

ada sesiapa biasa pakai? bleh la share skit....

Monday, July 22, 2013

PERL + DBD::Oracle

perghh!!!!! masalah yg hampir serupa berulang dkt Mountain Lion ni....

32bit vs 64bit.... seksa aku nak install perl module utk DBD::Oracle ni.

kene install instantclient dr Oracle. OK DONE..

bila nak build cpan module... perghhh!!!!!!!! azab nya....

and yes, aku berjaya make it running... tapi mcmana? aku x dpt nak terangkan... pusing... pening... hampeh...

hahahahhaha

Thursday, May 30, 2013

Isu JavaScript Antara Domain

Salam,

Lama tak post disini. terasa sibuk yg tak produktif.

saya menghadapi isu bermain dengan javascript apabila memerlukan perhubungan antara domain berbeza.

Sebagai contoh, javascipt di 'origin.site.com' memerlukan/memanggil sumber lain dari 'server.site.com' melalui panggilan XMLHttpRequest(AJAX).

Untuk isu keselamatan, javascript akan menidakkan perhubungan antara domain.

Tetapi jika anda mempunyai kuasa untuk mengubah sumber dari server dimana javascript itu dipanggil, ini ada penyelesaian mudah.

Tambah ini di kepala(header) document anda.

PERL/CGI:

print "Access-Control-Allow-Origin: *"

PHP:

header("Access-Control-Allow-Origin: *")

*diatas ini contoh untuk anda melihat bagaimana ia berfungsi. tetapi config diatas ini membenarkan dokumen anda dicapai oleh semua orang. untuk menhgadkan capaian, anda boleh meletakkan maklumat url yg mencapai dokumen anda. sebagai contoh:

PERL/CGI:

print "Access-Control-Allow-Origin: http://origin.site.com"

PHP:

header("Access-Control-Allow-Origin: http://origin.site.com")

* asingkan mengunakan ',' untuk lebih dari 1 capaian.

Ya, anda juga boleh memanipulasi ini dari bahasa pengatucaraan anda untuk disesuaikan dengan pengunaan & keadaan.

Happy Coding

Sunday, March 3, 2013

PERL + ImageMagick + Mac OS X Mountain Lion

Assalamualikum,

Setelah aku kehilangan sabar sebelum ni akibat byk sgt masalah nak bg imagemagick + perl + Mountain Lion jalan dengan sempurna, aku akhirnya berjaya juga.

Pendekatan yg aku pakai... kalau sampai haywire.. tinggalkan dulu sampai kita lupa semua step yg kita buat. start balik dari 0. hahahaha...

As aku sekarang ni di beri kelapangan masa. aku start balik apa yg aku dah tinggalkan agak lama.

uninstall/install semula ImageMagick

brew uninstall imagemagick
brew install imagemagick --build-from-source

*kalau blum install brew dlm Lion, bleh install pakai tutorial ini
Install Homebrew

dapatkan version imagemagick yg diinstall. atau taip

$>convert -v

Cari/download source imagemagick mengikut version yg telah diinstall.

unzip dan cari folder 'PerlMagick'

$>cd path_to_zip_folder/PerlMagick
$>sudo perl Makefile.PL
$>sudo make
$>sudo make install
$>sudo make test 

Itu sahaja.... kalau x boleh gak... ermmm... cuba lagi...cuba lagi.. dan kalau tak boleh gak .... tinggalkan dulu... dan cuba lg lain kali... muahahhaha...

Harap ini dapat membantu

Sunday, December 23, 2012

Parse Excel (*.xls & *.xlsx) File via PERL

Salam,

Lama tak post disini. selepas pemergian abah hujung bulan jun haritu. saya x ada idea nak tulis apa.

Baru hari ni ada kekuatan untuk menulis semula.

Harini saya nak kongsi mcmana nak parse excel fail yg mengunakan format MS Excel 2003(*.xls) dan kebawah serta format MS Excel 2007(*.xlsx).

Saya mengunakan PERL + Spreadsheet module dari CPAN.

Module Spreadsheet yg saya gunakan,

  • Spreadsheet::ParseExcel
  • Spreadsheet::XLSX

dua module di atas saya pilih sebab byk mengunakan function name yg hampir serupa cuma cara awal fail excel dibaca sahaja ada perbezaan dimana fail berformat *xlsx memerlukan iconv untuk dapat dibaca isi kandungannya.

Berikut contoh keratan

Untuk Fail berformat *.xls

################
sub getxls{
################ 
 
 use Spreadsheet::ParseExcel;
 
 opendir THISFILES, "$dir" or die "cannot open dir '$dir'";
 my @allfiles = readdir THISFILES;
 close THISFILES;
 foreach my $file(@allfiles){
  if($file =~ /\.xls$/i && $file !~ /^\~/i){
   
   my $parser   = Spreadsheet::ParseExcel->new();
   my $workbook = $parser->parse("$dir/$file");
   
   if ( !defined $workbook ) {
       #die $parser->error(), ".\n";
       print $parser->error() . "\n";
   }else{
    for my $worksheet ( $workbook->worksheets() ) {
     my ( $row_min, $row_max ) = $worksheet->row_range();
     my ( $col_min, $col_max ) = $worksheet->col_range();
     my $sheetname = $worksheet->get_name();
     print "$sheetname\n";
     
     for my $row ($row_min .. $row_max ) {
      for my $col ($col_min .. $col_max ) {
       my $cells = $worksheet->get_cell( $row, $col);
       my $cell='';
       if($cells){
        $cell = $cells->unformatted(); #unformated
        #$cell = $cells->value(); #clean
        print "$cell\t";
       }
      }
      print "\n";
     }
    }
   }
  }
 }
}

Untuk Fail berformat *.xlsx

################
sub getxlsx{
################
 
 use Spreadsheet::XLSX;
 use Text::Iconv;
 
 opendir THISFILES, "$dir" or die "cannot open dir '$dir'";
 my @allfiles = readdir THISFILES;
 close THISFILES;
 foreach my $file(@allfiles){
  if($file =~ /\.xlsx$/i && $file !~ /^\~/i){
   
   my $converter = Text::Iconv -> new ("utf-8", "windows-1251");
   my $workbook = Spreadsheet::XLSX->new("$dir/$file", $converter);
   
   if ( !defined $workbook ) {
       #die $parser->error(), ".\n";
       print $parser->error() . "\n";
   }else{
    for my $worksheet ( @{$workbook -> {Worksheet}} ) {
     my ( $row_min, $row_max ) = $worksheet->row_range();
     my ( $col_min, $col_max ) = $worksheet->col_range();
     my $sheetname = $worksheet->get_name();
     print "$sheetname\n";
     
     for my $row ($row_min .. $row_max ) {
      for my $col ($col_min .. $col_max ) {
       my $cells = $worksheet->get_cell( $row, $col);
       my $cell='';
       if($cells){
        $cell = $cells->unformatted(); #unformated
        #$cell = $cells->value(); #clean
        print "$cell\t";
       }
      }
      print "\n";
     }
    }
   }
  }
 }
}

if($file =~ /\.xlsx$/i && $file !~ /^\~/i){

Saya tapis untuk hanya fail *.xlsx sahaja diprosess. dan nama fail bermula dgn '~' juga di keluarkan dari senarai. PERL boleh membaca fail yang dhidden tetapi module ini akan menghasilkan ERROR apabila cuba memperosess fail sebegini. fail yg mengandungi '~' dipermulaan merupakan fail yg telah ditandakan untuk dibuang oleh OS ataupun sebagai fail backup. fail ini tidak boleh dilihat melalui fail browser.

happy coding....

Monday, January 2, 2012

Net::Twitter::Lite update_with_media support for uploading image to twitter.com

Salam,

as Net::Twitter::Lite version 0.10004, there's no function for update_with_media.

as i'm really need to post some pic to twitter. i make some changes to very useful easy to use Net::Twitter::Lite.

changes only ad file Lite.pm.

add after line: 23

        uploadurl => 'http://upload.twitter.com/1',

at line: 331, change from

                        Content_Type  => 'form-data',
to
                        Content_Type  => 'multipart/form-data',
*i'm just playing safe with this.

at line: 387, change from

         ? POST($uri, Content_Type => 'form-data', Content => [ %$args ])
to
         ? POST($uri, Content_Type => 'multipart/form-data', Content => [ %$args ])
*i'm just playing safe with this too.

Add after line: 1198

        [ 'update_with_media', {
            aliases     => [ qw// ],
            path        => 'statuses/update_with_media',
            method      => 'POST',
            params      => [ qw/status media[] lat long place_id display_coordinates in_reply_to_status_id trim_user include_entities/ ],
            required    => [ qw/status media[]/ ],
            add_source  => 1,
            deprecated  => 0,
            authenticate => 1,
            booleans    => [ qw/display_coordinates trim_user include_entities/ ],
        base_url_method => 'uploadurl',
        } ],

That's all.

And to use this function:

$result = eval { $nt->update_with_media({status => "$tweettext", media => ["/path/to/image.png"]}) };

my previous post, Post to Twitter Using Perl

You can download Lite.pm here.

Tuesday, November 29, 2011

Post to Twitter Using Perl

Salam,

cara paling mudah so far nak post ke twitter.com dari perl script.

guna module Net::Twitter::Lite dari cpan.

  
use Net::Twitter::Lite;

my $nt = Net::Twitter::Lite->new(
 consumer_key        => '',
 consumer_secret     => '',
 access_token        => '',
 access_token_secret => ''
);

my $result = eval { $nt->update("$tweettext") };
if($@){
 print "Problem when posting Ads to Twitter.com\n";
 print "$@\n";
}else{
 print "$result";
}

* untuk key & token boleh dapat dari twitter developer punya section. hanya pelu register kita punya apps.

Saturday, November 26, 2011

goo.gl utk link pendek

Sebelum ni aku ingatkan url pendek@tiny url yg biasa org pakai tu kene register kat mana2 database or domain hosting. rupa2nya x perlu... mudah je nak buat.

seperti biasa aku pakai Perl/CGI. install module WWW::Shorten::Googl from search.cpan.org

use WWW::Shorten::Googl;
use WWW::Shorten 'Googl';

$short_url = makeashorterlink($long_url);

$long_url  = makealongerlink($short_url);

# Note - this function is specific to the Googl shortener
$stats = getlinkstats( $short_url );

SImple je kan... amat membantu bila nak post url dkt twitter..

Thursday, September 22, 2011

PerlMagick: Annotate slow when query font

Aku facing masalah slow processing bila bermain dgn Annotate under ImageMagick.

pening gak cari punca masalah ni... tapi last sekali jumpa. berpunca dari imagemagick nak query font.

solution, define terus path ke font file. baru kembali laju...

$image->Annotate(font => "/Library/Fonts/MyriadWebPro.ttf",pointsize=>15, text=>"$txt",geometry=>'+705+272');

* nak selamat, copy terus font file (*.ttf) ke working folder. so bila kita copy script ke machine or server lain. x la ada isu timbul bila font yg kita define tak ada dlm machine or server baru tu.

Saturday, August 27, 2011

[checkperlmodules] The perl module Mysql could not be installed.

Salam,

Selepas upgrade perl dari version 5.8.8 ke 5.14 ... ada beberapa isu yang timbul... seprti sebelum ni berkaitan symlink exceutable file untuk perl.

sekali dgn itu gak ada 1 lg isu, isu berkaitan Mysql.PM ... Tajuk error dia

[checkperlmodules] The perl module Mysql could not be installed.

This module is required by cPanel, and the system may not function correctly until it is installed, and functional. Below is the results of the auto-install attempt:

Test Run
==============
Can't locate Mysql.pm in @INC (@INC contains: /opt/perl5.14/site/lib /opt/perl5.14/lib .) at - line 1. BEGIN failed--compilation aborted at - line 1.

nampak seperti module utk perl ber kumunikasi dgn mysql ada masalah. tetapi aku dah install DBD::mysql & DBI tanpa ada masalah. kalau tgk dr log klau dia exec $>cpan install Mysql dia akan mencari module DBD::mysql version 4.**38** idicate version lama punya perl module yg ada Mysql.PM di main lib dia.

Aku try post dkt forum cPanel.. tapi hampeh x de respond... mentang2 la aku noob kat situ... haram depa nak layan... x per.....

as aku punya script semua jalan without a problem... apa aku buat utk counter bende ni adalah... aku edit file

/scripts/checkperlmodules

pegi ke line 132, dah remove line yg ada "Mysql" dlm qw(). so far aku tak dpt lg notification failure tu lg...

aku akan update klau ada error lain timbul plak nanti....

Tuesday, August 23, 2011

cPanel - PERL not properly linked

Aku dpt error ni dari cPanel server client.

ini berpunca dari aku update PERL version dkt server cPanel tu.

ERROR 1,

The perl binary at /usr/bin/perl should be a symlink to /usr/local/bin/perl to ensure that all scripts execute with the same perl version. This condition has been linked to a number of hard-to-diagnose issues in the past.

To resolve this issue, rename the current /usr/bin/perl and create a symlink pointing to /usr/local/bin/perl.

cd /usr/bin
    mv perl perl-backup
    ln -s /usr/local/bin/perl perl

ERROR 2,

This module is required by cPanel, and the system may not function correctly until it is installed, and functional. Below is the results of the auto-install attempt:

Test Run
==============

Can't locate Mysql.pm in @INC (@INC contains: /opt/perl5.14/site/lib /opt/perl5.14/lib .) at - line 1.
BEGIN failed--compilation aborted at - line 1.

after tanya pakcik google, aku jumpa satu tips/rujukan yang mengatakan /usr/bin/perl mestilah symlink ke /usr/local/bin/perl ataupun /usr/bin/local/perl symlink ke /usr/bin/perl .... dimana salah satu mestilah symlink dah satu lagi executable file.

kalau megikut post aku berkaitan update PERL diserver cPanel sebelum ni mmg x da masalah utk script semua run. cuma cPanel ada isu bila kedua2 perl file di /usr/bin/perl & /usr/local/bin/perl merupakan symlink yg aku point ke location baru perl version 5.14.* di /opt/perl5.14/bin/perl

So apa aku buat. juat copy perl execytable file dr /ot/perl5.14/bin/perl ke /usr/local/bin/perl

so far x de masalah.

Thursday, August 18, 2011

ImageMagick + Perl + CentOs 5

Salam,

Post sebelum ni aku ada tulis mcamana utk upgrade perl dari 5.8.8 ke 5.14. sebab utama aku upgrade adalah kerana isu yang timbul berkaitan imagemagick.

Seperi yang sedia maklum ImageMagick merupakan satu aplikasi untuk memanipulasi imej yang menyediakan API utk bahasa2 programming berkomunikasi dgn nya. aku byk pakai image magick utk bermain dgn image seperti buat thumbnail, resize, crop, copyright overlay etc.

untuk install ImageMagick memang tak banyak masalah. kalau redhat @ centos kita bleh pakai YUM. memang mudah. cuma biasanya masalah timbul bila nak install PERL Module Image::Magick.

antara tips yang boleh aku share, sila pastikan kita install PERL Module version yang sama dgn version ImageMagick. kalau imagemagick version 6.2.8 pastikan kita download Perl Module version yg sama.

biasanya kita mistake bila nka install PERL Module terus pakai CPAN. akan ada masalah, sebab cpan akan ambik version paling latest. manakala ImageMAgick it self belum tentu yg latest kita install. bergantung kepada YUM server yg hostkan rpm file tu. normally yum or sever yg lebih krang serupa dgn tu dia x provide latest version. ini kerana mereka akan menyediakan apps yg compatible & dah di pre compile utk OS tertentu.

cara paling selamat,

  1. download ImageMagick zip file mengikut version yg kita dah install.
  2. extract zip file.
  3. pergi ke folder PerlMagick
  4. make dari situ.

mcm masalah yg aku hadapi... walau mcmana sekalipun aku make.. semua fail... tukar version... semua fail... sebab ada missing c comliper something....bla..ba.bla....

tu yg aku cuba nasib install perl version paling lates... pastu reinstall latest ImageMagick dr YUM.... dan reinstall Image::Magick dari cpan.... alhamdulillah semua berjalan lancar.....

Wednesday, August 17, 2011

Perl Upgrade on CentOs + cPanel

Salam,

subscribe VPS utk client, hari ahad lg dah dpt server. ada few issue yg melambatkan prosess configuration. paling tension issue perl + imagemagick. imagemagick ni mmg mengarut skit dia punya setting. dari windows, macos & linux.... bernasib baik la sapa2 yang boleh install berjaya pada cubaan pertama..

this issue aku dpt solve dgn upgrade perl v5.8.8(yg dtg sekali dgn server) ke perl v5.14 latest version dari ActiveState.

bawah step2 utk upgrade perl ke version 5.14

Check the current version of Perl

perl -v

If the older version of Perl is running on server, you get an output something like,

This is perl, v5.8.8 built for x86_64-linux-thread-multi

Steps to Upgrade perl version

1) Download the latest perl installer from ActiveState site.
http://www.activestate.com/activeperl/downloads

wget http://downloads.activestate.com/ActivePerl/releases/5.12.4.1205/ActivePerl-5.12.4.1205-x86_64-linux-glibc-2.3.5-294981.tar.gz

2) Extract the archive file as,

tar -zxvf ActivePerl-5.12.4.1205-x86_64-linux-glibc-2.3.5-294981.tar.gz

3) Change the directory to ActivePerl-5.12.4.**

cd ActivePerl-5.12.4.**

4) Now run the installer file as,

./install.sh

5) Check perl modules

/scripts/checkperlmodules

6) Force cPanel update

/scripts/upcp -–force

7) Check the new installed perl version using “perl -v” and you get an output something like,

This is perl 5, version 14, subversion 1 (v5.14.1) built for x86_64-linux-thread-multi

complete...

Monday, January 10, 2011

PerlMagick On RHEL 5

installing PerlMagick on RHEL 5 very easy...

yum install ImageMagick-perl

hehehe....

Thursday, January 6, 2011

ImageMagick & chartDirector

selesai.... lega..

sebelum ni aku ada masalah dgn perl di MacOS X 10.6.5

‎5.8 support perlMagick but fail with chartDirector...
5.10 fail with perlMagick but support chartDirector...

aku jumpa solution di:

http://globalmoxie.com/blog/imagemagick-install-osx.shtml

thanxs a lot....

Monday, January 3, 2011

Perl + Mysql + ImageMagick on MacOs X 10.6.5

MacOs X dtg sekali dgn perl 5.8.* & 5.10.*.. default akan point ke 5.10 .... semua ok utk normal usage...

but utk aku yg buat system development... aku perlukan tambahan aplikasi & module..

mula2 dpt laptop... aku terus config/install MySQL 5.5@latest dr mysql.com... semua ok.... aku pun install DBI & DBD::mysql for perl... DBI x ada masalah... but for DBD::mysql ada leceh skit.... kene force install baru leh berjaya...

sebelum itu, install module utk perl n MacOs X perlukan developers tool kit @ Xcode dari apple developer center. sebab by default Mac Os X x ada compiler ataupun 'make' yg kita perlukan utk install module.

semua ok setakat itu... tapi aku perlukan ImageMagick utk system development.. bila baca kat site ImageMagick.org dia suggest pakai MacPorts ...

aku pun download la macports.. and install imagemagick dari macports.... mmg senang & mudah... dia buatkan semua sekali utk kita.. tapi yang hampeh nya... dia installkan sekali new copy of perl 5.8.9 ... yg aku nampak maybe sebab perlMagick hnya ada module yg jalan kat 5.8.9 je la... it's ok... tapi keje aku duk menginstall module perl kat default system 5.10 tu sesia je la... hampeh.....

bil isu image magick setel... satu hal plak nak reinstall DBI & DBD::mysql kat 5.8.9 yg baru ni plak...

as macports dah tersedia install.. aku pun guna la macports utk install DBI & DBD::mysql...

satu hal plak jadi... x leh load mysqlclient.16.*** ... hampeh... bila cek kat internet... masalah ni timbul bila x jumpa ENV utk DYLD_LIBRARY_PATH .... satu hal lg aku duk pening nak tambah env path kat MacOs X ni...

temporary ni aku buat/modify kat ~.bash_profile and tambah new env baru yg aku nak declare... ok semua jalan selepas itu... alhamdulillah..

tapi x setel lg rupanya... bila aku run script dari web/apache... masalah x jumpa lib tu jadi balik... bila cek. apache x load env variable... pening lg.... last2 aku set kat vhost.conf pakai SetEnv .... baru la bleh jalan.... lega

x setel lg.... hahaha... bila run full script... mysql x leh pakai... sebab dynaloader detect version required x sama dgn version DBD::mysql yg aku install.... hampeh.. terpaksa install baru utk version yg compatiable... alhamdulillah semua berjalan seperti dikehendaki...

Thursday, January 14, 2010

PERL unicode handling

activePerl 5.10 better in term of handling unicode compare to version activePerl 5.6.1

but i'm still fail dealing with arabic unicode when extracting from pdf. &^%$#@

Tuesday, October 13, 2009

Push HASH into Array in Perl

Kawan yg bertanyakan Perl + AD bertanyakan soalan ini.. bagaimana nak bermain dgn perl array. lebih tepat sekali, memasukkan nilai HASH ke dlm ARRAY utk digunakan kemudian nanti.

contoh disini:

#define testing var
my %h = (
 1=>'k',
 2=>'l'
);

my @a = qw(
 a
 b
 c
);

#push hash to array
push @a, \%h;

#processing array
foreach my $insidea(@a){
 print "- $insidea\n"; 
 foreach my $insideh(keys %{$insidea}){
  print " ->${$insidea}{$insideh}\n";
 }  
}

Perl + Active Directory

dua minggu lepas, ada kawan dr forum mintak tolong bg idea + solution utk project involve Perl + AD.

Idea kawan tu, dia nak dpt automatic credential user yg browser dari perl script yg diaccess ke server utk membolehkan perl script tu auth kan user terus ke AD.

idea dia menarik dan praktikal tetapi implementation dia agak complicated. windows sendiri tidak membenarkan secara langsung browser access info yg diperlukan.

option pertama, Web server boleh mendapatkan maklumat REMOTE_USER dari environment variable. tapi REMOTE_USER x stable. kadang2 dpt maklumat, kadang2 x dpt. so cara ni x leh di laksanakan.

option kedua, pakai javascript + activeX. tetapi ini hanya jalan kalau mengunakan IE sahaja. firefox, chrome, opera.... X JALAN.... so cara ni pun x leh di laksanakan.

option ketiga, from server query balik client pakai LANMAN, tapi option ni hanya bleh buat bila dlm LAN shj, bukan WAN sebab server dgn client kene ada communication dalam network. so cara ni pun x leh di laksanakan.

aku kehabisan idea... other option x bleh mengharapkan perl shj la... Java Applet boleh membantu rasanya. ataupun 2rd patry aplication.

Aku ada baca pasal IIS dgn install certificate di client.. tapi aku x paham apa yg aku baca.... hahahha...

Thursday, September 10, 2009

Playing with PERL Hash

simple PERL script utk menunjukkan bagaimana bermain dgn Hash. cara pass hash ke sub/class/function dan cara retrive back value dari parameter/variable yg di terima. simple tapi cukup rasanya menerangkan pengunaan hash. amat berguna.

# init
my %t = (
 1=>'k',
 2=>'l'
);

foreach my $f(keys %t) {
 print $f,'=', $t{$f}, "\n";
}
print "\n";

# process
my $t = &passHash(\%t);

foreach my $f(keys %$t) {
 print $f,'=', $t->{$f}, "\n";
}
print "\n";

# copy
my %k = %$t;
foreach my $f(keys %k) {
 print $f,'=', $k{$f}, "\n";
}
print "\n";


sub passHash {
 my $r = shift;
 $r->{3} = 'new';
 return \%$r;
}