Google Motorola

為了搶專利,Google 死都要用 125 億美元買下摩托羅拉移動?

通常來說Google的收購保密做的都很爛(難道是故意的?),但這次Google終於做到了Apple式的保密性,他們剛剛宣佈(Larry Page作為CEO親自發的博文)以125億美元買下摩托羅拉移動(Motorola Mobility)。

摩托羅拉有80年的通訊技術歷史,也是在大概30年前首個推出世界上第一款移動電話StarTAC的公司。2007年Google宣佈Android之時摩托羅拉也是首批加入開放手機聯盟的成員之一,至此之後推出了大量的Android手機,尤其是Droid系列更是將摩托羅拉從衰落的邊緣拉了回來。

Google稱此次收購不會對Android作為一個開放平臺產生任何影響,摩托羅拉也繼續會以授權的形式使用Android(意思是Google不會開小灶兒),而Android也會保持開放(不會對別家使用Android產生影響)。Google稱會繼續讓摩托羅拉移動以一個獨立的業務運營。

此次收購顯然是針對Apple和微軟針對Android設備製造商進行專利訴訟之舉,摩托羅拉有著厚重的歷史積澱,手握大量移動領域的專利,理論上Apple和微軟無法再以此威脅Android,因為摩托羅拉手上也有Apple和微軟所沒有的專利,大家兩敗俱傷就沒有意義了。當然手握摩托羅拉專利之後,Google可以將這些專利轉移授權給HTC等專利匱乏的Android手機製造商,幫他們抵禦Apple和微軟的“流氓行徑”(至少Google認為他們是流氓的)。

 

phpExcel Class

phpExcel,操作excel很方便,尤其是可以方便的加入圖片,支持jpg gif png格式。

下載地址:http://www.codeplex.com/PHPExcel

下面是總結的幾個使用方法

 

include 'PHPExcel.php';

include 'PHPExcel/Writer/Excel2007.php';

//或者include 'PHPExcel/Writer/Excel5.php'; 用於輸出.xls的

//創建一個excel

$objPHPExcel = new PHPExcel();

//保存excel—2007格式

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);

//或者$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 非2007格式

$objWriter->save("xxx.xlsx");

//直接輸出到瀏覽器

$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);

header("Pragma: public");

header("Expires: 0");

header("Cache-Control:must-revalidate, post-check=0, pre-check=0");

header("Content-Type:application/force-download");

header("Content-Type:application/vnd.ms-execl");

header("Content-Type:application/octet-stream");

header("Content-Type:application/download");;

header('Content-Disposition:attachment;filename="resume.xls"');

header("Content-Transfer-Encoding:binary");

$objWriter->save('php://output');

——————————————————————————————————————–

//設置excel的屬性:

//創建人

$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");

//最後修改人

$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");

//標題

$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");

//題目

$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");

//描述

$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");

//關鍵字

$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");

//種類

$objPHPExcel->getProperties()->setCategory("Test result file");

——————————————————————————————————————–

//設置當前的sheet

$objPHPExcel->setActiveSheetIndex(0);

//設置sheet的name

$objPHPExcel->getActiveSheet()->setTitle('Simple');

//設置單元格的值

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'String');

$objPHPExcel->getActiveSheet()->setCellValue('A2', 12);

$objPHPExcel->getActiveSheet()->setCellValue('A3', true);

$objPHPExcel->getActiveSheet()->setCellValue('C5', '=SUM(C2:C4)');

$objPHPExcel->getActiveSheet()->setCellValue('B8', '=MIN(B2:C5)');

//合併單元格

$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');

//分離單元格

$objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');

//保護cell

$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // Needs to be set to true in order to enable any worksheet protection!

$objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');

//設置格式

// Set cell number formats

echo date('H:i:s') . " Set cell number formats\n";

$objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);

$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );

//設置寬width

// Set column widths

$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);

$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);

//設置font

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Candara');

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(20);

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);

$objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);

$objPHPExcel->getActiveSheet()->getStyle('D13')->getFont()->setBold(true);

$objPHPExcel->getActiveSheet()->getStyle('E13')->getFont()->setBold(true);

//設置align

$objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

$objPHPExcel->getActiveSheet()->getStyle('D12')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

$objPHPExcel->getActiveSheet()->getStyle('D13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);

//垂直居中

$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

//設置column的border

$objPHPExcel->getActiveSheet()->getStyle('A4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objPHPExcel->getActiveSheet()->getStyle('B4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objPHPExcel->getActiveSheet()->getStyle('C4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objPHPExcel->getActiveSheet()->getStyle('D4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

$objPHPExcel->getActiveSheet()->getStyle('E4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//設置border的color

$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300');

$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300');

$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');

$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300');

$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');

$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');

//設置填充顏色

$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);

$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080');

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);

$objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->getStartColor()->setARGB('FF808080');

//加圖片

$objDrawing = new PHPExcel_Worksheet_Drawing();

$objDrawing->setName('Logo');

$objDrawing->setDescription('Logo');

$objDrawing->setPath('./images/officelogo.jpg');

$objDrawing->setHeight(36);

$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

$objDrawing = new PHPExcel_Worksheet_Drawing();

$objDrawing->setName('Paid');

$objDrawing->setDescription('Paid');

$objDrawing->setPath('./images/paid.png');

$objDrawing->setCoordinates('B15');

$objDrawing->setOffsetX(110);

$objDrawing->setRotation(25);

$objDrawing->getShadow()->setVisible(true);

$objDrawing->getShadow()->setDirection(45);

$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

//在默認sheet後,創建一個worksheet

echo date('H:i:s') . " Create new Worksheet object\n";

$objPHPExcel->createSheet();

$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');

$objWriter-save('php://output');

 

The Web Based Spreadsheet

What is jQuery.sheet?

jQuery.sheet gives you all sorts of possibilities when it comes to giving your web application a spreadsheet style interface with MS Excel style calculations.

jQuery.sheet manages the sheet creation, viewing, and editing processes. It can even be used like a datagrid, without calculations.
For a complete list of all the MS Excel style functions that jQuery.sheet supports, take a look at the Demo, which is the documentation.

Why did I start jQuery.sheet? I like a challenge, I like to learn, I like to contribute, and I saw where other attempts at the same thing, although being nice, could be improved and I wanted to put some fun back into my javascript.

ref : http://visop-dev.com/Project+jQuery.sheet
Documentation as spreadsheet – Demo that comes with jQuery.sheet

MySQL 設定 Replication (Master – Slave)

MySQL 設定寫入 Master 後, 自動 Replication 到 Slave 去, 運作基本原理是:

  1. INSERT/UPDATE/DELETE 語法, 自動寫入 Master 的 binlog file.
  2. 由 GRANT REPLICATION 授權的帳號, 自動將 SQL 語法 repl 到 Slave 的 DB 執行.
  3. 因而完成 Replication 的動作.

下述詳細可見: MySQL 5.0 Reference Manual :: 15 Replication

設定 Replication 的操作 (Master)

  1. $ sudo vim /etc/mysql/my.cnf # 下面是 Debian Linux 的設定, 找到下面的設定, 新增/修改 成下面這樣子.

    #bind-address           = 127.0.0.1
    server-id               = 1
    log_bin                 = /var/log/mysql/mysql-bin.log

    # 若是 innodb, 且有用 transaction 的話, 需再加入下面兩行
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1

  2. $ sudo /etc/init.d/mysql restart
  3. $ mysql -u root -p # 進入 mysql
  4. mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’ IDENTIFIED BY ‘repl_pass’; # 先假設 帳號 repl, 密碼 repl_pass, 此步驟是 設定 repl 的帳號/密碼, 格式: GRANT REPLICATION SLAVE ON *.* TO
    ‘repl_user’@’%.mydomain.com’ IDENTIFIED BY ‘repl_password’; (Replace
    <some_password>with a real password!)
  5. mysql> FLUSH TABLES WITH READ LOCK; # 先讓 DB 不要再寫資料進去
  6. mysql> SHOW MASTER STATUS; # 這邊資料都要記好, 等一下設定 Slave 要用

+———————-+————+——————+———————-+
| File                                | Position       | Binlog_Do_DB | Binlog_Ignore_DB           |
+———————-+————+——————+———————-+
| mysql-bin.000014      |      232         |                                 |                                       |
+———————-+————+——————+———————-+

  1. mysql> quit # 離開, 準備倒資料
  2. 倒資料, 可以由下述的方法倒, 此次採用步驟 1
    1. $ mysqldump -u root -p DB > dbdump.sql
    2. $ mysqldump –all-databases –lock-all-tables >dbdump.sql
    3. $ mysqldump –all-databases –master-data >dbdump.sql # –master-data: 會自動將CHANGE MASTER 的語法帶在裡面
  3. $ mysql -u root -p # 進入 mysql
  4. mysql> UNLOCK TABLES; # dump 完資料後, 進去 mysql 解除唯讀
  5. 再來就是將 dbdump.sql scp 到 Slave 去即可.
  6. Master 就到此為止.

設定 Replication 的操作 (Slave)

  1. $ sudo vim /etc/mysql/my.cnf

    server-id               = 2  # server-id 不能與其它機器相同
    log_bin                 = /var/log/mysql/mysql-bin.log

  2. $ mysql -u root -p # 進入 mysql
  3. mysql> create database DBNAME;
  4. mysql> use DBNAME; source dbdump.sql; 或 $ mysql -u root -p DBNAME < dbdump.sql
  5. mysql> CHANGE MASTER TO
    MASTER_HOST=’MASTER_HOSTNAME’,
    MASTER_USER=’repl’,
    MASTER_PASSWORD=’repl_pass’,
    MASTER_LOG_FILE=’mysql-bin.000014′,
    MASTER_LOG_POS=232; # 這邊就要用到之前 Master 抄下來的值.
  6. mysql> START SLAVE; # 這樣子就會開始 Replication 了, 會將 LOG_POS 之後新的資料開始 sync 回來.
  7. mysql> show master status; # 檢查一下設定
  8. mysql> show slave status; # 檢查一下設定, 看是不是有異常狀況.

測試

  1. 在 master: mysql> create database test2;
  2. 在 slave: mysql> show database; # 應該會看到 test2
  3. 在 master 上的任何操作應該都會馬上 replication 到 slave 去.

其它相關網頁

 

MySQL 多台機器的多重 Replication 設定

要設定多台機器一直持續(一層一層) Replication 下去, 預設是有無法達到的.

註:

  • Replication 從 A -> B 照上面設定即可.
  • 但是 Replication 要設定 A -> B -> C, 會發現到, A -> B 是可以動的, B -> C 也是可以動, 但是 A -> B -> C 不會動.(A -> C 的指令, 不會被傳過去)

 

MySQL 多台機器多重 Replication 設定方式

想要作到 A -> B -> C, 只需要於 B 的 [mysqld] 設定下述即可:

log-bin=mysql-bin
log-slave-updates

範例

[mysqld]
server-id = 1
log-bin=mysql-bin
log-slave-updates

詳細說明: MySQL Reference Manual :: 15.1.2.3 Replication Slave Options and Variables

相關網頁

 

 

Warning: Call-time pass-by-reference has been deprecated的解决办法

问题提示如下:
Warning: Call-time pass-by- reference has been deprecated – argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name] (). If you would like to enable call-time pass-by- reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in c:\crm203 \modules\Reports\Report.php on line 370
修改 PHP.ini,allow_call_time_pass_reference = On。实际上,我在安装了Apache/2.0.58 (Win32) PHP/4.4.2,这个选项缺省是打开的,另外,我记得有朋友说另一个解决的办法是关闭错误报告功能。实际上,将上述php配置文件的值设为on可以视做一个解决的办法,但关闭报告功能估计是一种自己骗自己的方法,因为这是一个大的错误,不让他显示并不代表就可以解决掉。
我在解决这一问题中发现,一共有几个原因可能导致上述问题:
1.上述值被设置了off。解决方法:修改PHP.ini,allow_call_time_pass_reference = On。
2.如果你在windows下安装,而php安装目录 everyone没有读与执行的权限,可能也会导致这个问题;
3.如果php配置中的session目录设置不正确,也可能导致这一问题。包括配置文件中路径设置不正确和没有创建session数据目录;
4.如果php配置中的includes目录设置不正确,也可能导致这一问题。包括配置文件中中路径配置不正确和没有创建includes这个目录。
上述后三种情况,多数apache+php配置说明都有详细的描述,大家可以参考。

上面这个问题,通常发生在不使用vTigerCRM的安装程序,而是自己手工安装apache+php+mysql中,比如使用单独的安装文件或者easyphp安装包。都很有可能出现上述的问题。  上面是我在解决这些问题时一些经验,不一定有代表性,只希望大家在解决类似问题时提供一些参考。

php.ini中allow_call_time_pass_reference参数的意思

从php手册中可以找到:allow_call_time_pass_reference boolean

是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。

在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。

当allow_call_time_pass_reference=Off时<?php
function abc($a,$b){
echo “$a\n”;
echo “$b\n”;
$b = ‘cde’;
}

$a = ‘abc’;
$b = “bcd”;
//不好的用法,会引发一个php warnning
abc($a ,&$b);

echo “$b\n”;
?>要想通过引用来传递参数$b,程序可改为<?php
function abc($a,& $b){
echo “$a\n”;
echo “$b\n”;
$b = ‘cde’;
}

$a = ‘abc’;
$b = “bcd”;
//正确的用法
abc($a ,$b);

echo “$b\n”;
//output is:
//abc
//bcd
//cde
?>

 

Linux下安裝Subversion [SVN]

cd /usr/local/src/

wget http://subversion.tigris.org/downloa…n-1.4.5.tar.gz
wget http://subversion.tigris.org/downloa…s-1.4.5.tar.gz
wget http://www.sqlite.org/sqlite-3.5.2.tar.gz

tar xzf subversion-1.4.5.tar.gz
tar xzf subversion-deps-1.4.5.tar.gz
tar xzf sqlite-3.5.2.tar.gz

cd sqlite-3.5.2
./configure
make
make install
./sqlite3
.help
.exit
cd ..

cd subversion-1.4.5
./configure
make
make install
svn –version

Jquery延遲圖片傳取插件lazyload

一個可以減低因圖片過多已影響效能的插件.(老新聞了,今天終於的起心肝去找=”=)

http://www.appelsiini.net/projects/lazyload

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>   
<script src="http://www.appelsiini.net/projects/lazyload/jquery.lazyload.js" type="text/javascript" charset="utf-8"></script>
$("img").lazyload({
     placeholder : "img/grey.gif",
     effect      : "fadeIn"
 });