Pages

2006-06-17

XML –ын тухай. (RSS)

XML буюу Extensible Markup Language –ын талаар програмистууд сайн мэдэх биз ээ. Өөрийн блог дээр XML- ашиглан хийж үзсэн нэг жишээг тайлбарлан үзүүлье. Энд хялбарыг бодон PHP хэл ашиглалаа.

Ер нь XML юу чадах талаар Marchal – XML by Example номноос товч үзүүлье:

Some of the areas where XML will be useful in the near-term include:

  • large Web site maintenance. XML would work behind the scene to simplify the creation of HTML documents

  • exchange of information between organizations

  • offloading and reloading of databases

  • syndicated content, where content is being made available to different Web sites

  • electronic commerce applications where different organizations collaborate to serve a customer

  • scientific applications with new markup languages for mathematical and chemical formulas

  • electronic books with new markup languages to express rights and ownership

  • handheld devices and smart phones with new markup languages optimized for these “alternative” devices

Эдгээрээс миний үзүүлэх жишээ бол дээрээсээ 4 дах буюу Syndicated content ашиглан ондоо веб сайтууд нэг мэдээллийг тараах тухай юм. Уг жишээг хийх болсон шалтгаан нь Хөл бөмбөгийн дэлхийн аварга шалгаруулах тэмцээний мэдээллийг мэдээллийн хүчирхэг хоёр суваг болох Yahoo, Google – хоёрын тусламжтайгаар нэгтгэн үзэх гэсэн хүслээс минь үүдсэн юм.

Та хаа нэгтээ сайтан дээр RSS гэсэн XML линк байхыг харсан байх. Энэ нь тэр сайт тухайн контентоо бусадтай XML – технологийг ашиглан хуваалцах сонирхолын үүднээс хийж тавьжээ гэж ойлгож болно.

Миний хувьд Google News- дээр FIFA Germany 2006 гэсэн ангилал үүсгээд тэр ангилалд харгалзах RSS –ыг, мөн адил Yahoo – дээрх FIFA Germany 2006 -ын RSS-тэй харьцуулах байдлаар гаргаж тавьсан юм.

Үүний тулд ямар код ашигласанаа одоо та бүхэнд дэлгэе.

Filename: lastRSS.php

<?php

class lastRSS {

var $default_cp = 'UTF-8';

var $CDATA = 'content';

var $cp = '';

var $items_limit = 0;

var $stripHTML = False;

var $date_format = '';

var $channeltags = array ('title', 'link', 'description', 'language', 'copyright', 'managingEditor', 'webMaster', 'lastBuildDate', 'rating', 'docs');

var $itemtags = array('title', 'link', 'description', 'author', 'category', 'comments', 'enclosure', 'guid', 'pubDate', 'source');

var $imagetags = array('title', 'url', 'link', 'width', 'height');

var $textinputtags = array('title', 'description', 'name', 'link');

function Get ($rss_url) {

if ($this->cache_dir != '') {

$cache_file = $this->cache_dir . '/rsscache_' . md5($rss_url);

$timedif = @(time() - filemtime($cache_file));

if ($timedif < $this->cache_time) {

$result = unserialize(join('', file($cache_file)));

if ($result) $result['cached'] = 1;

} else {

$result = $this->Parse($rss_url);

$serialized = serialize($result);

if ($f = @fopen($cache_file, 'w')) {

fwrite ($f, $serialized, strlen($serialized));

fclose($f);

}

if ($result) $result['cached'] = 0;

}

}

else {

$result = $this->Parse($rss_url);

if ($result) $result['cached'] = 0;

}

return $result;

}

function my_preg_match ($pattern, $subject) {

preg_match($pattern, $subject, $out);

if(isset($out[1])) {

if ($this->CDATA == 'content') {

$out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));

} elseif ($this->CDATA == 'strip') {

$out[1] = strtr($out[1], array('<![CDATA['=>'', ']]>'=>''));

}

if ($this->cp != '')

$out[1] = iconv($this->rsscp, $this->cp.'//TRANSLIT', $out[1]);

return trim($out[1]);

} else {

return '';

}

}

function unhtmlentities ($string) {

$trans_tbl = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);

$trans_tbl = array_flip ($trans_tbl);

$trans_tbl += array(''' => "'");

return strtr ($string, $trans_tbl);

}

function Parse ($rss_url) {

if ($f = @fopen($rss_url, 'r')) {

$rss_content = '';

while (!feof($f)) {

$rss_content .= fgets($f, 4096);

}

fclose($f);

$result['encoding'] = $this->my_preg_match("'encoding=[\'\"](.*?)[\'\"]'si", $rss_content);

if ($result['encoding'] != '')

{ $this->rsscp = $result['encoding']; }

else

{ $this->rsscp = $this->default_cp; }

preg_match("'<channel.*?>(.*?)</channel>'si", $rss_content, $out_channel);

foreach($this->channeltags as $channeltag)

{

$temp = $this->my_preg_match("'<$channeltag.*?>(.*?)</$channeltag>'si", $out_channel[1]);

if ($temp != '') $result[$channeltag] = $temp;

}

if ($this->date_format != '' && ($timestamp = strtotime($result['lastBuildDate'])) !==-1) {

$result['lastBuildDate'] = date($this->date_format, $timestamp);

}

preg_match("'<textinput(|[^>]*[^/])>(.*?)</textinput>'si", $rss_content, $out_textinfo);

if (isset($out_textinfo[2])) {

foreach($this->textinputtags as $textinputtag) {

$temp = $this->my_preg_match("'<$textinputtag.*?>(.*?)</$textinputtag>'si", $out_textinfo[2]);

if ($temp != '') $result['textinput_'.$textinputtag] = $temp;

}

}

preg_match("'<image.*?>(.*?)</image>'si", $rss_content, $out_imageinfo);

if (isset($out_imageinfo[1])) {

foreach($this->imagetags as $imagetag) {

$temp = $this->my_preg_match("'<$imagetag.*?>(.*?)</$imagetag>'si", $out_imageinfo[1]);

if ($temp != '') $result['image_'.$imagetag] = $temp;

}

}

preg_match_all("'<item(| .*?)>(.*?)</item>'si", $rss_content, $items);

$rss_items = $items[2];

$i = 0;

$result['items'] = array();

foreach($rss_items as $rss_item) {

if ($i < $this->items_limit || $this->items_limit == 0) {

foreach($this->itemtags as $itemtag) {

$temp = $this->my_preg_match("'<$itemtag.*?>(.*?)</$itemtag>'si", $rss_item);

if ($temp != '') $result['items'][$i][$itemtag] = $temp;

}

if ($this->stripHTML && $result['items'][$i]['description'])

$result['items'][$i]['description'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['description'])));

if ($this->stripHTML && $result['items'][$i]['title'])

$result['items'][$i]['title'] = strip_tags($this->unhtmlentities(strip_tags($result['items'][$i]['title'])));

if ($this->date_format != '' && ($timestamp = strtotime($result['items'][$i]['pubDate'])) !==-1) {

$result['items'][$i]['pubDate'] = date($this->date_format, $timestamp);

}

$i++;

}

}


$result['items_count'] = $i;

return $result;

}

else

{

return False;

}

}

}

?>

Энэ кодыг тайлбарлах нь илүүц гэж үзээд дараагын алхам болох үндсэн хуудас дээр ямар код байхыг харуулая:

Filename
: index.php

<?

// include lastRSS library

include './lastRSS.php';

// create lastRSS object

$rss = new lastRSS;

// setup transparent cache

$rss->cache_dir = './cache';

$rss->cache_time = 3600; // one hour

// load some RSS file

if ($rs = $rss->get('http://fifaworldcup.yahoo.com/06/en/fwc.rss?myYahoo=true')) {

echo "<font color='#FFBA00'><b>Last Build Date: </b></font><font color='#FCFF00'>".$rs['lastBuildDate']."</font>";

echo "<ul>\n";

foreach($rs['items'] as $item) {

$publish = strtotime($item['pubDate']);

echo "\t<a href=\"$item[link]\">".$item['title']."</a><br />\n";

echo "\t".$item['description'];

echo date("Y-m-d H:s", $publish);

}

echo "</ul>\n";

}

else {

die ('Error: RSS file not found...');

}

?>

Энд байгаа 'http://fifaworldcup.yahoo.com/06/en/fwc.rss?myYahoo=true' линк бол миний дээр бичсэн Yahoo-ын RSS бүхий XML – engine-ий хаяг юм. Та хүссэн мэдээллээ иймэрхүү үйлчилгээ нээсэн веб хуудаснуудаас авч болох бөгөөд, харин өөрийн веб дээр хэрхэн веб үйлчилгээ хийх талаар туслалцаа хэрэгтэй бол надтай холбогдож болно.

Амжилт хүсье.

2006-06-16

Гижиг хүргэсэн илтгэл

Харин энэ илтгэлийг уншаад ёстой загатнасан газар маажисан мэт сайхан... Та хэв шинжтэй юу? Заавал уншаарай.
http://www.tsahimurtuu.mn/print_preview.php?table=news&id=415

2006-06-13

Нулимс гаргасан илтгэл

Энэ илтгэлийг уншаад үнэхээр сэтгэлд нэг юм хөөрөөд явчихлаа. Бид чинь монголчууд... та заавал уншаарай http://www.tsahimurtuu.mn/print_preview.php?table=news&id=430

2006-06-08

Outsourcing-ын Мэдээлэл

Өнөөдөр IT Park -д Outsourcing – ын талаар төр , сургууль, компаниудын гурвалсан уулзалт болж төрөөс барьж буй бодлого болон IT Park-ын энэ талын зорилтын талаар мэдээлэл өглөө. “Bridge Company” – сонгон шалгаруулсан байна. Энд шалгарсан компани нь:
- Гадаад зах зээлээс ажил авч боловсруулаад өөрийн сонгосон туслан гүйцэтгэгч компаниар уг outsourcing-ын ажлыг гүйцэтгүүлэх
- Гадны зах зээлд гарахад нь туслан гүйцэтгэгч компанид гүүр болж өгөх гэсэн 2 үндсэн үүрэгтэй оролцох юм гэсэн ойлголтыг өгч байна. Энд гадаад зах зээл гэдэгт эхний удаа Япон улсыг сонгосон гэнэ. Учир нь:Дэлхийд Outsourcing – ын 3н том зах зээл байдаг.
1. Америк
2. Европ
3. Япон
Энэ 3-аас монголчууд арай илүү давуу талтай өрсөлдөж чадахуйц нь Япон улсын зах зээл гэж үзжээ. Наад 2т нь англи хэлээр бэлтгэгдсэн олон хүчирхэг өрсөлдөгчид байдаг, мөн япон хэлний хувьд тэдгээр өрсөлдөгчид сул талтай зэргээс үзэхэд, мөн энэ мэт олон хүчин зүйлийг тооцоолж үзэхэд энэ зах зээлд өрсөлдөх боломж монголчууд бидэнд харьцангуй бий нь эргэлзээгүй юм. IT Park- энэ талаар монгол компаниудаа дэмжих бодлого явуулж Бриж болон Туслан гүйцэтгэгч гэсэн оролцоотойгоор анхны алхамыг хийж буй бөгөөд энэ статусыг олгох шалгаруулалтыг явуулжээ. Эхний Бриж компаниар USI шалгасан бөгөөд IT park-аас удахгүй бридж компанитай хамтран ажиллах туршилтын компаниудыг сонгон шалгаруулах гэж байна.

2006-06-06

Танд хэрэгтэй гурван алхам



?intitle:index.of? chm "php"

Javapassion болон багш Sang Shin-ы тухай.

Энэ хүн Сан Микросистемсийн Технологийн архитекторч, энд тэнд Яава болон Соларисийн шинэ технологуудыг сурталчилж энэ талаар сургалт явуулдаг юм байна. Яава пасшионы хичээлийг энэ хүн [ SangSchedule ] багийнхаа гишүүдийн хамт бэлтгэн явуулж буй бөгөөд миний бодлоор [үзэж буйгаар] энд байгаа хичээлүүд, гэрийн даалгаварууд нь шинээр эхэлж буй болон илүү мэргэших гэсэн хэнд ч гэсэн хэрэг болох үнэхээр даацтай цар хүрээ сайтай материал болжээ. Би одоогоор Netbeans ашиглан жишээ гэрийн даалгаварыг ажлын хажуугаар хийж үзэж байна. Мөн AJAX -ын үндсийг заасан хэсгийг сонирхож үзсэн. Ер нь дажгүй шүү... AJAX -ын талаар цухас дурьдахад ирээдүйн нэгэн хүчирхэг технологийн нэгдэл [AJAX нь өөрөө олон технологуудын нэгдэлээс бүрддэг юм. Javascript, DOM, CSS, Servlet гэх мэт] дэлхий даяарын анхаарлыг татан улам улам хүчирхэгжиж байна шүү. Хэдүүлээ энэ зааг дээрээс л хоцорчихгүй юмсан. Програмист болохыг хүсэгчид урагшаа. -&gt; www.javapassion.com

2006-06-03

Би бас хөл бөмбөгийн хорхойтон...

Амьхандаа хөл бөмбөгийн сайт хийж үзэв ээ хөөрхий. Уг нь энэ 2 домайныг үнэд хүргэх гэж үзсэн боловч аз дутсан уу буруу тооцоолсон уу ямарч байсан зарж чадсангүй э. Германы ebay.de дээр 7 хоногийн дуудлага худалдаагаар оруулаад лав чадсангүй. Хаашдаа хөл бөмбөг эхлэх тулчихсан тул нэг иймэрхүү сайт хийгээд тавьчихлаа. Дээр нь байгаа мэдээллүүд Google and Yahoo 2 оос өдөр тутам цаг тутам шинэчлэгдэж байхаар бодож (RSS ашигласан) жижиг код бичсэн. За тэгээд олон таван юмаар яахав Хөл бөмбөгийн анхны чөлөөт сайтад тавтай морил.
Аан тийм монголчууд маань хөл бөмбөгөөр бараа сураггүй тул би Аргентины шигшээ багийг дэмжихээр тооцоолоод байгаа. (:D) Бас Итали-г найдлага тавьж болох баг гэж үзэж байна даа.

Javapassion - Java сурмаар байна уу?

Тэгвэл онлайн үнэгүй сургалтанд дараах линкээр хандан орно уу. Javapassion

Java certification - ы тухай.

Дээрх зураг бол Sun Microsystems компаниас тодорхой шалгуур давсан програм зохиогч, хөгжүүлэгч нарт олгодог сертфикатын ангилал бүтэц нь юм. Энд орсон товчлол нэрүүд:
(J2SE)-Java 2 Standard Edition
(J2EE)-Java 2 Enterprise Edition
(J2ME)-Java 2 Micro Edition
(SCJP)-Sun Certified Java Programmer
(SCJD)-Sun Certified Java Developer
(SCWCD)-Sun Certified Web Component Developer
(SCBCD)-Sun Certified Business Component Developer
(SCDJWS)-Sun Certified Developer for Java Web Services
(SCMAD)-Sun Certified Mobile Application Developer

Эдгээрээс
(SCWCD)-ын шалгалт өгөхөд:
Exam code: 310–081
Cost: $150
Number of questions: 69 multiple-choice questions

Мөн SCBCD-ын
шалгалт өгөхөд:
• Exam ID: CX-310-090
• Prerequisite: SCJP certification
• Cost: $150 (The cost may vary by country and also if you have discount coupons.)
• Number of questions: 70
• Pass score: 64 percent; that is, answer 45 questions correctly out of 70
• Maximum time allowed: 120 minutes