2013年9月15日 星期日

perl 開檔

http://tw.perlmaven.com/open-and-read-from-files
讀取檔案:

use strict;
use warnings;

my $filename = 'xxx.txt';
open(my $fh, '<:encoding(UTF-8)', $filename) || die "Could not open file '$filename' $!"; # $fh stand for filehandle

my $count = 0;

while (my $row = <$fh>) {
    chomp $row;
    print "$row\n";
    $count++;
}

close($fh);

( 上述編碼在blogspot用syntax highlight有bug,從HTML轉到撰寫時會變成亂碼 )

http://ind.ntou.edu.tw/~dada/cgi/Perlsynx.htm
$_ The default input and pattern-searching space.
$! Contains the current value of errno.

取代檔案:
http://stackoverflow.com/questions/4732937/how-do-i-read-a-file-line-by-line-while-modifying-lines-as-needed ( 使用Tie::File )
xxx.txt濾出來的內容存成ref ($v)後對bbb.txt一行一行去取代第二個match的城市

use Tie::File;
my @file_array;
tie @file_array, 'Tie::File', 'bbb.txt' || die "END! $!";

$country = '';
$count = 0;
my $city = '';
my $no_match_ref;
my $no_match_ref_count = 0;

$v = {
          'Bolivia' => {
                         'El Beni' => 'El Beni'
                       },          
          'Canada' => {
                        'Newfoundland' => 'Newfoundland',
                        'Yukon Territory' => 'Yukon Territory'
                      },
        };

for my $line (@file_array) {
#    s/測試/一二三/g;         # Replace PERL with Perl everywhere in the file
    
    # country line
    if( $line =~ /v ===/ ){
        my @country_arr= split(/"/, $line);
        $country =  $country_arr[1]; 
    }
    
     #city line
    if( $line =~ /ss\(f,\s\d/ ){
        my @city_arr = split(/"/, $line);
#        print $line,"\n";
        $city = $city_arr[1];
#        print "country:$country, city:$city, deftag:$v->{$country}{$city}\n"; # - #832
        
        if($v->{$country}{$city}){
            my $index = 2;
            $file_array[$count] =~ s/($city)/--$index == 0 ? $v->{$country}{$city}:$1/ge; 
        }
        
        if(!$v->{$country}{$city}){
            $no_match_ref->{$country}{$city} = $city;
            $no_match_ref_count++;
        }
        
        # &use_reg_exp_to_match(); # no use, because I will use SQL 
    }
    $count++;
    
}

print Dumper $no_match_ref;
print "\n no_match_ref counter:$no_match_ref_count"; # - #296


untie @file_array;

算ref 的key個數
$v = {
          'Bolivia' => {
                         'El Beni' => 'El Beni'
                       },          
          'Canada' => {
                        'Newfoundland' => 'Newfoundland',
                        'Yukon Territory' => 'Yukon Territory'
                      },
          ...
        };
$count = 0;
foreach my $val ( keys %{$v} ){ #方法一,用foreach跑
  $count++;
}
print "\n$count\n";
print scalar keys $v; #方法二

在sublime用正規式搜尋中文
http://stackoverflow.com/questions/1585914/matching-chinese-characters-with-regular-expressions-php
[\x{4e00}-\x{9fa5}] --> One char between 4E00 and 9FA5

http://www.regular-expressions.info/unicode.html
\p{Han} 是perl的用法 ( 未試驗 )

如何將有改過的檔案檔名做唯一輸出?
工具:cygwin, sublime, ( Komodo Edit 8, perl編輯器 )
1. 將資料夾拉到cygwin上,以直接cd 進入該目錄
2. $ ls -R work* > ls_files.txt
3. 開sublime,將ls_files.txt的檔名濾出來到 all_files.txt另存新檔
4. 寫 filter_template.pl 去開 all_files.txt檔案,讓修改過的樣板為唯一
use strict;
use warnings;

use Data::Dumper;

open(my $fh, "<:encoding data-blogger-escaped-all_files.txt="" data-blogger-escaped-count="" data-blogger-escaped-die="" data-blogger-escaped-exist="" data-blogger-escaped-file="" data-blogger-escaped-my="" data-blogger-escaped-my_array="" data-blogger-escaped-not="" data-blogger-escaped-or="" data-blogger-escaped-row="<$fh" data-blogger-escaped-while="">) {
    chomp $row;
    push @my_array, $row;
    $count++;
}
close($fh);

sub uniq {
    return keys %{{ map { $_ => 1 } @_ }};
}

print join(" ", uniq(@my_array)), "\n";


5. $ perl filter_template.pl > result.txt
result.txt即為結果。讀檔進來的$row尾端會換行(未解決)
參考:
push 值到陣列
http://perl.hcchien.org/ch03.html
push @my_array, $row;
How do I remove duplicate items from an array in Perl?
http://stackoverflow.com/questions/7651/how-do-i-remove-duplicate-items-from-an-array-in-perl
sub uniq {
    return keys %{{ map { $_ => 1 } @_ }};
}

@my_array = ("one","two","three","two","three");
print join(" ", @my_array), "\n";
print join(" ", uniq(@my_array)), "\n";




2013年9月14日 星期六

URL decode

例如一個網址字串為
https://www.google.com.tw/?gws_rd=cr&ei=Mkk0UuLLForgkAWZi4D4DQ#q=test+url+decode

要將他解成一般字串
1. 使用線上URL decode工具:
http://meyerweb.com/eric/tools/dencoder/
2. 使用perl URL::Encode 模組
安裝
$ cpan
cpan> install URL::Encode

use URL::Encode qw/url_decode/; #如果只有寫 use URL::Encode ,則需使用URL::Encode::url_decode()去叫函數

$url = "URL字串";

print url_decode($url);
print "\n";

cpan安裝的模組會裝在哪?
http://blog.longwin.com.tw/2008/03/debian_linux_perl_cpan_newbie_2008/
site (於 local 直接 "# cpan> install Package 安裝" 或 "sudo perl -MCPAN -e 'CPAN::Shell->install("Text::Wrap")' 安裝", 會往下述路徑裝)

1. Modules installed by the local administrator for the current version of Perl
2. /usr/local/lib/perl/version
3. /usr/local/share/perl/version
4. Where version indicates the current Perl version ($Config{version}).

2013年9月4日 星期三

javascript 行尾是否要加分號

http://darknuminous.pixnet.net/blog/post/27620166-javascript%E7%9A%84%E5%88%86%E8%99%9F%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85
斷行JavaScript會多幫你加一分號
所以下面的這句:
return
true;
等同於
return;
true;
這會造成大錯誤,切記不要隨便斷行。

http://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript
下面這情況會出錯
// define a function
var fn = function () {
    //...
} // semicolon missing at this line

// then execute some code inside a closure
(function () {
    //...
})();

http://stackoverflow.com/questions/1482999/utility-to-auto-insert-semicolons-in-javascript-source-code
文內推薦使用 http://www.jslint.com/ 去優化js

http://stackoverflow.com/questions/13572602/how-to-upgrade-jslint-in-aptana
在aptana (3以後) 直接使用jslint
1. 視窗 -> 偏好設定 -> Aptana Studio -> Validation

視窗 -> 偏好設定 -> 直接搜尋Validation
2. 勾選Build和Reconcile (不確定哪個所以兩個都勾)
3. 開啟問題視圖(但因為專案下有太多檔案之前沒照jslint規則走和內含樣板符號,所以會列出很多錯誤,所以還是關掉了)

ps. 匿名函數的三種寫法:
http://dancewithnet.com/2008/05/07/javascript-anonymous-function/
1. 函数字面量:首先声明一个函数对象,然后执行它。
(function(){
  alert(1);
} ) ( );
2. 优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。
( function(){
  alert(2);
} ( ) );
3. Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。
void function(){
  alert(3);
}()
在console中下面代碼會出錯
(function() {
  console.log("test2");
})()
(function() {
  console.log("test1");
}())
test2
test1
但是把test1放到前面,只會出現test1就出錯了

ps.
使用jslint後遇到的問題,如何通過jslint驗證:
http://stackoverflow.com/questions/4979252/jslint-error-move-the-invocation-into-the-parens-that-contain-the-function
message: "Move the invocation into the parens that contain the function"
To pass JSLint's criteria, it needs to be written like this:
}(jQuery));
Though I think that particular criteria is a bit subjective. Both ways seem fine in my opinion.
(function () {})() makes a bit more sense to me since you wrap the full function, then call it
(function () {}()) looks like you're wrapping the result of the function call in a parens ...
- 結論 - 第一種方法雖然不會過,但是比較有sense

The “unexpected ++” error in jslint
http://stackoverflow.com/questions/3000276/the-unexpected-error-in-jslint
just do i += 1

"use strict";
http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it
http://peihsinsu.blogspot.tw/2012/04/javascript-use-strict.html
use strict是ECMA-262 Edition 5定義的新語法,表示要用嚴格的Javascript語法來執行,有一些過去慣用的寫法就會出錯,例如使用變數前沒有用var宣告。
use strict主要是影響他所在的scope,如果在函數中使用,並不會讓global scope以及其他未使用的函數變成use strict。

joomla心得

***** 20130904_0100 *****
( 西螺人主機晚上有時候ssh會連不進去 )
中文化:
http://www.joomla.org.tw/tutorial/item/%E5%AE%89%E8%A3%9D%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87%E8%AA%9E%E8%A8%80%E6%AA%94
1. 進入管理區 - http://www.my.com/administrator/
2. 在上方的選單中選取「Extension」選單,再選取它的子選單「Extension Manager」=> 點按中間那一排連結的「Install Languages」連結 => 勾選「Chinese Traditional」 => 點按右上角的「Install」圖示按鈕
3. 遇到問題 - 出現錯誤訊息 - "Install path does not exist" ( 因為部份資料夾不可寫入 )
4. 解法 -
http://www.joomla.org.tw/component/kunena/Joomla-25x/21733-%E5%AE%89%E8%A3%9Djoomla-v2-5-2%E7%89%88%E5%BE%8C%E7%84%A1%E6%B3%95%E4%B8%AD%E6%96%87%E5%8C%96
下這行指令
$ chmod 777 administrator/manifests/packages/ administrator/language/ language/ tmp/
然後執行步驟2. ,即可完成安裝
5. 設定預設語言 - 後台選"Extensions" => "Language Manager" => 可以設定前台(Site)和後台(Administrator)的預設語言(點星星圖示即可)
ps.
http://docs.joomla.org/Languages_cannot_be_installed_using_install_languages
3.0版本作法(未測試) - 1. 下載預言包,手動安裝 2. 用他patch裡面的fix到joomla中

***** 20130905_0200 *****
開始閱讀joomla 2.5 文件:
http://docs.joomla.org/Developing_a_Model-View-Controller_Component/2.5
components資料夾(前、後台)是放前後台網頁內容的資料夾,需照文件中命名規則走
在前台新增一頁:
yoursite/components/com_helloworld/helloworld.php # 內容為Hello World!
可以使用這頁開啟 yoursite/index.php?option=com_helloworld
出現錯誤:Error loading component: com_helloworld, 1  *3
http://www.joomlapolis.com/forum/154-advanced-members-support/161857-solved-error-loading-component-comcommunity-1
I disabled a selection of JEvent modules which resolved the issue.
http://joes32blog.blogspot.tw/2009/12/joomla-15-jevents.html
照這篇方法,後台找不到manage events
 --- 以上先暫停,先從JControllerLegacy 、 JModelItemLegacy、 JModelFormLegacy開始 ---

***** 20130907_0230 *****
開發一個MVC/基本元件( Developing a MVC Component/Developing a Basic Component )
http://docs.joomla.org/Developing_a_Model-View-Controller_%28MVC%29_Component_for_Joomla!2.5_-_Part_01
( 簡中教程:http://www.xingzai.org/joomla-doc/joomla-2-5-mvc-%E7%BB%84%E4%BB%B6%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B%E3%80%901%E3%80%91.html )
原本是在joomla專案根目錄下直接建立目錄和檔案,在 index.php?option=com_helloworld 頁面總會出現紅色錯誤 ( Error loading component: com_helloworld, 1  *3 ,只要建立 yoursite/components/com_helloworld/helloworld.php 即讀得到該頁面 )
解法:
在英文教程中點選  archive 下載zip檔,該系列每篇教程大部分都有archive可以下載
發現zip檔中的xml檔案是1.6版本的內容,因為這篇的關係 - http://forum.joomla.org/viewtopic.php?f=642&t=773247 所以把內容改成網頁上面的xml檔,並把version="2.5.0" 改成你joomla的版本2.5.x ,看版本可以去後台,登入後畫面下方可以看到版號 - ( 未測試不改xml內容會如何... )
將xml檔案、admin資料夾、site資料夾重新壓縮成zip檔,windows系統勿壓縮成rar檔,否則會出現Unknown Archive Type的錯誤
Unknown Archive Type的錯誤相關解法:
http://www.adonismedia.com/component/k2/item/233-unknown-archive-type-in-joomla-the-solution
最後,將zip檔使用後台Extensions=>Extension Manager: Install 在  Upload Package File 中上傳
(原文: Create a compressed file of this directory or directly download the archive and install it using the extension manager of Joomla. )
最後即可在 /index.php?option=com_helloworld 與 /administrator/index.php?option=com_helloworld 中看到沒有錯誤訊息的component頁面(雖然上傳zip檔後Extension Manager: Install工具仍出現錯誤: JInstaller: :Install: Cannot find XML setup file *2 ,但似乎不影響結果)

其他:
關於JControllerLegacy: http://blog.sina.com.cn/s/blog_ade1969201016aj8.html

***** 20130908_0200 *****
研究 com_helloworld-1.6-part01.zip ( 放在: http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Developing_a_Basic_Component )
直接下載英文教程上的archive中xml為version="1.6.0",測試直接upload可正常使用
helloworld.xml
其中的 name, creationDate, author, copyright, authorEmail, authorUrl, version, description 標籤會存到
aso82_extensions( aso82為當初安裝時系統給的亂數prefix ) 資料表中的manifest_cache欄位,以json格式儲存

{
    "legacy": false,
    "name": "Hello World!",
    "type": "component",
    "creationDate": "November 2009",
    "author": "John Doe",
    "copyright": "Copyright Info",
    "authorEmail": "john.doe@example.org",
    "authorUrl": "http://www.example.org",
    "version": "0.0.1",
    "description": "Description of the Hello World component ...",
    "group": ""
} 

extension的type屬性會存到資料表中的type欄位
( 如何搜到這資料表的: 打開phpmyadmin => 點資料表 => 點搜索 => 將xml的description內容貼到"尋找之文字或數值"input上 => radio選所有文字後搜索 => 即可發現 1 項資料符合 - 於資料表 aso82_extensions )
files標籤的folder屬性為zip檔中資料夾名稱,其下結構與zip檔資料夾下檔案和資料夾結構相同
administration標籤對應到joomla後台
如何移除安裝好的component?
https://kb.siteground.com/how_to_uninstall_a_component_in_joomla_25/
後台 -> Extensions -> Extension Manager -> 打開Manage分頁 -> 下拉選單Select Type選擇Component -> 發現Hello World!在列表中(可點選status上的圖示讓他disable掉,只有前台disabe,後台介面依然還在)
移除component:
勾選Hello World! => 點右上角 uninstall
移除後,前後台頁面都會不見
使用git觀察uninstall Hello World component後,專案中移除了哪些檔案:
#       deleted:    administrator/components/com_helloworld/helloworld.php
#       deleted:    administrator/components/com_helloworld/helloworld.xml  ( 在zip檔中此檔放在根目錄 )
#       deleted:    administrator/components/com_helloworld/index.html
#       deleted:    administrator/components/com_helloworld/sql/index.html
#       deleted:    administrator/components/com_helloworld/sql/updates/index.html
#       deleted:    administrator/components/com_helloworld/sql/updates/mysql/0.0.1.sql
#       deleted:    administrator/components/com_helloworld/sql/updates/mysql/index.html
#       deleted:    components/com_helloworld/helloworld.php
#       deleted:    components/com_helloworld/index.html
ps. 資料庫設定檔在根目錄的 configuration.php 檔案中

***** 20130910_0130 *****
研究 com_helloworld-1.6-part02 ( 放在:http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_a_view_to_the_site_part )
前台 index.php?option=com_helloworld 四隻關鍵檔案呼叫順序依序是:
1. site/helloworld.php
2. site/controller.php
3. site/views/helloworld/view.html.php
4. site/views/helloworld/tmpl/default.php
關於site/helloworld.php -
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import joomla controller library
jimport('joomla.application.component.controller');  //必須,否則會出錯
 
// Get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance('HelloWorld');
// 如欲代不同參數進去,ex. HelloWorld2,在site/controller.php必須新增HelloWorld2的class,因為JController::getInstance 只會抓到site/controller.php這隻檔案
 
// Perform the Request task
$input = JFactory::getApplication()->input;
$controller->execute($input->getCmd('task'));
// 這兩行在zip檔中為一行:$controller->execute(JRequest::getCmd('task')); ,亦可執行

// $controller->bear(); //亦可呼叫自訂函數,需在HelloWorldController類別中新增該函數
 
// Redirect if set by the controller
$controller->redirect();

關於 site/controller.php -
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controller library
jimport('joomla.application.component.controller'); // 這邊註解掉,目前無異狀
 
/**
 * Hello World Component Controller
 */
class HelloWorldController extends JController
{
    //可新增自訂函數
}
// 或新增其他類別,ex. class HelloWorld2Controller extends JController

關於 site/views/helloworld/view.html.php -
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * HTML View class for the HelloWorld Component
 */
class HelloWorldViewHelloWorld extends JView
{
        // Overwriting JView display method
        function display($tpl = null) 
        {
                // Assign data to the view
                $this->msg = 'Hello World'; // 欲顯示的內容
 
                // Display the view
                parent::display($tpl); // 類似smarty的 dispaly()
        }
}

parent::display($tpl); - 類似smarty的 dispaly(),default.php是預設的,設定在JView物件中(但不知為何 protected $_layout = 'default2'; 這邊修改後,在public function getLayout()仍傳回'default' ),如欲代其他樣板進去ex. 'bear',則必須在tpml資料夾中新增default_bear.php

關於 site/views/helloworld/tmpl/default.php - 類似smarty的tpl內容,寫HTML的地方

***** 20130914_0200 *****
研究 com_helloworld-1.6-part03.zip ( 在 http://docs.joomla.org/Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_03 )
與前一隻zip檔案不同之處是新增了 site/views/helloworld/tmpl/default.xml
使用後台工具上傳zip檔,可以直接上傳,無須移除再上傳
本教程目標是新增一個Menu Item Type(直接連結到前面教程新增的component), 什麼是 Menu Item Type?在後台Menus中的( User Menu, Top, About Joomla, Australian Parks, Main Menu , Fruit Shop )新增或修改時所選擇的Menu Item Type屬性,選擇不同Menu Item Type後會自動刷頁代入網址,儲存時Alias不設定的話會自動代成Menu Title的內容(全小寫)
測試:新增一個Top類型的Menu(選擇自訂的Menu Item Type)
結果:在前台上方選單中新增了一個連結,點進去後是HelloWorld的component
ps. com_helloworld-1.6-part02.zip 教程中有附上 JControllerJView 的文件連結,文件中小圖示代表的意思在這裡,或直接mouseover上去有提示。

***** 20141016 *****
查joomla版本
$ find ./ -name version.php
./libraries/cms/version/version.php
version.php內容:
public $RELEASE = '2.5';
..
public $DEV_LEVEL = '25';
所以版本是2.5.25,亦可在後台登入後的下方看

使用WordBridge套件將wordpress整合到joomla上
去 http://extensions.joomla.org/extensions/authoring-a-content/blog-integration/17095 下載 com_wordbridge_for_joomla_1.6-0.5.zip — Joomla 1.6/1.7/2.5 component (release 0.5) (因為我joomla是2.5.25版本)
安裝方法:
https://github.com/cognidox/WordBridge
1. 登入joomla後台 (http://your.joomla/administrator
2. 選擇 Extensions -> Extension Manager -> Install screen ->  選擇剛剛下載的 com_wordbridge_for_joomla_1.6-0.5.zip  然後點Upload & Install
出現錯誤:
JFolder::create: Could not create directory
原因:
因為當初我的joomla是在windows上做的,現在移到linux上,所以要修改configuration.php設定:
public $log_path = 'C: \\... \joomla/logs'; => public $log_path = '/var/www/html/.../joomla/logs';
public $tmp_path = 'C:\\...\joomla/tmp'; => public $tmp_path = '/var/www/html/.../joomla/tmp';
出現錯誤:
Warning: Failed to move file!
原因:
去後台的site --> System Information --> Directory Permissions --> Status 查是否所有資料夾都Writable
沒有的話改joomla資料夾權限
# chown www-data:username -R joomla
再刷新檢查,可以寫入後就能上傳plugin了
使用Component:
1. 登入joomla後台
2. 使用 Menu Manager新增一個new menu item
3. Menu Item Type選擇 WordBridge -> List of blog entries
4. 在WordBridge Settings 設定 Wordpress blog name為
    a. 如果你的wordpress是放在私人網址上就填:myblog.example.com/wordpress(資料夾下也可)
    b. 放在http://example.wordpress.com/上的話填:example
5. 儲存
6. 在前台點選新的表單後就會出現該wordpress上的內容

***** 20141222 *****
(Joomla 3.3.6)
自訂 HelloWorldViewHelloWorld ( components/com_helloworld/views/helloworld/view.html.php )
中 parent::display($tpl); 的$tpl
ex.
parent::display('test');
則必須新增檔案default_test.php在 components/com_helloworld/views/helloworld/tmpl/default_test.php
由trace libraries/legacy/view/legacy.php 中的function display和 function loadTemplate 中得知
更多請參考 官方 JViewLegacy 文件

***** 20150126 *****
存取joomla資料庫
http://developer.joomla123.com.tw/com/backend-component/edit-and-form.html
INSERT - 在com_contact/controllers/contact.php 的submit()內有效:
$db = JFactory::getDBO();
$sql = "INSERT INTO #__helloworld (`id`, `greeting`, `catid`, `params`) VALUES (NULL, 'tedbear', '0', '')";
$db->setQuery($sql);
$db->execute();
SELECT -
$db = JFactory::getDbo();
// Or using $db = $this->_db;
$sql = "SELECT * FROM #__blog_articles";
$db->setQuery($sql);
$results = $db->loadObjectList();
ps. 範例blog 元件
https://github.com/asika32764/joomla-blog-component-example


解決DS沒有定義的bug
因為DS常數已經被移除了。要用的是DIRECTORY_SEPARATOR
解法1. 
com_xxx/xxx.php加入這行:
if(!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
解法2. 
安裝這個套件:
http://digitaldisseny.com/en/joomla-extensions/solve-undefined-ds-constant-joomla-3-error
github plg_sys_dsconstant:https://github.com/digitaldisseny/plg_sys_dsconstant/

2013年9月3日 星期二

linux top 使用

感謝小黑教學,因為有陣子測試機實在太慢了,所以使用top看到底是出了什麼問題
發現記憶體和swp都被吃光了

top
1 - 展開cpu數量
Z - 顏色
B - 亮度
W - 寫入設定檔
h- 叫說明書出來
n - 打自己的名字
$ top -p 11357(PID)  #觀察某個pid
對某個列去排序(Rellik教過忘了)

ps使用 (感謝rellik)
$ ps awux |grep httpd | grep tw | awk '{print $17}' |uniq -c # 看server上哪些人有開httpd

Linux 小技巧- 如何查看目前誰登入在linux 的機器上面
http://www.fibe-mini.com.tw/linux-%E5%B0%8F%E6%8A%80%E5%B7%A7-%E5%A6%82%E4%BD%95%E6%9F%A5%E7%9C%8B%E7%9B%AE%E5%89%8D%E8%AA%B0%E7%99%BB%E5%85%A5%E5%9C%A8linux-%E7%9A%84%E6%A9%9F%E5%99%A8%E4%B8%8A%E9%9D%A2.html
想要知道目前和之前誰登入到你的linux 機器嗎?

可以利用指令 “w" 或 “last"

就可以馬上知道現在有誰登入到你的伺服器,還有之前登入的帳號和時間

只要在terminal 終端機上輸入這兩個指令就可以馬上知道這台機器目前有誰上線,並可以從last 查詢到這台機器最近幾次是由那個ip 連線進來




2013年9月2日 星期一

perl 使用指令和Storable模組儲存perl格式資料到檔案

因為mysql撈出來中文資料有亂碼
所以想將他存到檔案中,再試看哪個模組( Text::Iconv(有些字會失敗)或 Unicode::MapUTF8 )可以正常轉換成utf-8

perl -MStorable -e '$text = "BEAR!!";  $target = "/home/your_name/git/data.txt"; Storable::nstore({text=>$text}, $target);'
nstore第一個參數必須使用hash,不然會出錯(error log裡面沒報錯,但沒執行nstore,似乎要用eval())

perl -MStorable -e '$target = "/home/your_name/git/data.txt"; $info = &Storable::retrieve($target); print $info->{text}'

使用terminal在mysql上下SQL出現亂碼:
Rellik: 因為terminal預設是utf8,但資料庫存big5進去,所以會亂碼
方法1. 使用Rellik的.screenrc 在那個分頁按 alt+a b =>轉成big5 ,然後ctrl+l 清畫面,再下一次SQL,就正常了
方法2. 在putty上字形要設定細明體(非新細明體),然後windows -- Translation 的地方選use font encoding(最下面那個),缺點是出來的字正常但複製到記事本上是亂碼。(但Ike的不會)
細明體才會是big5,選Courier則否

更多:
http://help.cs.nctu.edu.tw/help/index.php/Setting_-_%E5%B7%A5%E4%BD%9C%E7%AB%99%E7%B7%A8%E7%A2%BC%E8%A8%AD%E5%AE%9A(UTF-8)
工作站編碼設定(UTF-8)

http://help.cs.nctu.edu.tw/help/index.php/Setting_-_%E5%9C%A8%E5%B7%A5%E4%BD%9C%E7%AB%99_UTF-8_%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A%E4%B8%8B%E4%BD%BF%E7%94%A8_Big5
在工作站 UTF-8 環境設定下使用 Big5 - 用法與Rellike的.screenrc檔案相同

http://www.bootf.com/67.html
Putty在默认情况下没有使用UTF-8编码,因此在显示中文的时候会出现乱码。 ( 與Rellik說法有出入 )

如何印出$ENV變數 ( 部份變數參照export內的設定 )
老天尊: Do you know how to dump $ENV in perl?
Chase: print DUMPER(\%ENV)
老天尊: ok, thanks.
老天尊: I have a question.. why we can't dumper $ENV directly?
Chase: you can
Chase: $ENV is a hash though
Chase: now a scalar var
老天尊: print STDERR Dumper $ENV
echo nothing.
Chase: because it is %ENV
老天尊: ohoh
Chase: it's a hash and NOT a hashref
解法:
$ perl -MData::Dumper -e 'print Dumper \%ENV'