Monday, February 12, 2007

Creating an RSS Reader: the Reader

In this article we are going to discuss how to create a PHP-based RSS reader. It would be helpful if you know something about XML, but not really necessary. RSS documents have three main tags: Title, Link and Description. And they all do exactly what their names suggest. I will go into detail about these tags in my second article dealing with “building an RSS file.” For now, we will only focus on the “reading” part of the article.
A downloadable file is available for this article.
As an extra I will introduce a database aspect of the reader. We will use the database to store and retrieve the latest stories. To continue with this article you will need PHP 4 and higher and optionally MYSQL.

Below is an example text from an RSS document:

Start example text

<item>

<title>First example</title>

<link>www.mylink.com/someplace.html</link>

<description>Some description, blah,blah,blah
</description>


</item>

<item>

<title>Thousands set to attend todays celebration</title>

<link>http://
www.mylink.com/someplace.html /NewsTopStories?m=318</link>


<description>blah,blah,blah </description>

</item>

End example text

Code

To create an RSS Reader in PHP, we need to:

  1. Create a function to read the start tag (start element).

  2. Create a function to read the end tag (endElement).

  3. Create function to read the text associated with the tags.


A typical RSS document will have the following structure:

<RSS>

<channel>

<item>

</item>

</channel>

</RSS>

A start tag is a tag without the “/” character, for example: <items>. An end tag is a tag with the “/” character, for example: </item>.

So the start and end tag functions will search for the “<item></item>” tags and once they have found those, it will be a simple matter of retrieving the text data from them to display.


Now, PHP provides us with several XML-related functions, a few of which we will be using here:


xml_parser_create() – Creates an instance of the xml parser object. Xml_parser_create() is a class. In order to use any class we need to instantiate it, or create a copy of it.

To create a new copy:

$xmlParser = xml_parser_create();

xml_set_element_handler() – Searches and sets the start and end elements(tags). This function sets the start and end tags for the parser. It accepts three parameters:

  • The parser: references the parser that is calling the handler.

  • The tagname: contains the name of the element for which the handler is called.

  • The attributes: an array that contains the element's attributes.


The parameters are used later in this article.


xml_set_character_data_handler() – This handles the text part of the tag elements. This function takes two parameters, the parser and data.




  • The parser: references the parser that is calling the handler.

  • The data: contains the character data as a string.


You can get more information about these and other XML functions at:


http://uk2.php.net/manual/en/ref.xml.php

The first thing we do is set the global variables that are going to be used by the functions.


$GLOBALS['titletag'] = false;

$GLOBALS['linktag'] = false;

$GLOBALS['descriptiontag'] = false;

$GLOBALS['thetitletxt'] = null;

$GLOBALS['thelinktxt'] = null;

$GLOBALS['thedesctxt'] = null;

These variables are going to be used to read in tag information from the RSS file that is going to be used with this reader.


The function below deals with the starting element. This function searches through the document to find one of the three tags we discussed earlier:


function startTag( $parser, $tagName, $attrs ) {

switch( $tagName ) {



case 'TITLE':

$GLOBALS['titletag'] = true;

break;

case 'LINK':

$GLOBALS['linktag'] = true;

break;

case 'DESCRIPTION':

$GLOBALS['descriptiontag'] = true;

break;

}

}

This next function deals with the end tag:

function endTag( $parser, $tagName ) {

switch( $tagName ) {



case 'TITLE':

echo "<p><b>" . $GLOBALS[the'titletxt'] . "</b><br/>";

$GLOBALS['titletag'] = false;

$GLOBALS['thetitletxt'] = "";

break;

case 'LINK':

echo "Link: <a href="". $GLOBALS['thelinktxt'] . "">" .
$GLOBALS['thelinktxt'] . "</a><br/>";


$GLOBALS['linktag'] = false;

$GLOBALS['thelinktxt'] = "";

break;

case 'DESCRIPTION':

echo "Desc: " . $GLOBALS['thedesctxt'] . "</p>";

$GLOBALS['descriptiontag'] = false;

$GLOBALS['thedesctxt'] = "";

break;

}

}

This next function verifies the tag that the text belongs to. Once we know which tag it is that we are dealing with, we set the global variable to true.

function txtTag( $parser, $text ) {

if( $GLOBALS['titletag'] == true ) {

$GLOBALS['thetitletxt'] .= htmlspecialchars( trim
($text) );




} else if( $GLOBALS['linktag'] == true ) {

$GLOBALS['thelinktxt'] .= trim( $text );

} else if( $GLOBALS['descriptiontag'] == true ) {

$GLOBALS['thedesctxt'] .= htmlspecialchars( trim
( $text ) );


}

}


Now that we have created the required functions, let's continue with the meat of the code:


function parsefile($RSSfile){

// Create an xml parser

$xmlParser = xml_parser_create();

// Set up element handler

xml_set_element_handler( $xmlParser, "startTag", "endTag" );



// Set up character handler

xml_set_character_data_handler( $xmlParser, "TxtTag" );

// Open connection to RSS XML file for parsing.

$fp = fopen( $RSSfile,"r" )

or die( "Cannot read RSS data file." );



// Parse XML data from RSS file.

while( $data = fread( $fp, 4096 ) ) {

xml_parse( $xmlParser, $data, feof( $fp ) );

or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));


}



// Close file open handler

fclose( $fp );

// Free xml parser from memory

xml_parser_free( $xmlParser );

}

The above function calls both the startTag/endTag functions to loop through the XML file and displays the contents.




While it is good to have an RSS reader that can read any RSS document, it would be even better if you could store that information in a database and read it at your leisure when you are not connected to the Internet. It would also be good to be able to update your RSS file through the use of the database. It is relatively easy to achieve this, so let's create a table from which we will add our data:


CREATE TABLE `rss_tbl` (

`feed_id` int(5) NOT NULL auto_increment,

`title` varchar(200) NOT NULL default '',

`link` varchar(200) NOT NULL default '',

`description` text NOT NULL,

`the_date` date NOT NULL default '0000-00-00',

PRIMARY KEY (`feed_id`)

) TYPE=MyISAM AUTO_INCREMENT=1 ;

The table will store the individual links as they are read in by the RSS reader. Fill this table with data, using the following format:

  • Title – the title of your story.

  • Link – The link to your story.

  • Description – A short description of your story.


You can then use this data to write to your RSS file :

<?

$fp=fopen(“myrssfile”, “w+”);

if (!$fp){

echo “error opening file”;

exit;

}else{

$query1="Select *,DATE_FORMAT(the_date,'%W,%d %b %Y') as thedate
FROM rss_tbl WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) ORDER BY
the_date DESC LIMIT 10 ";


$result=mysql_query($query1);

while($row=mysql_fetch_assoc($result)){

fwrite($fp,$row[‘title’]."\r\n");

fwrite($fp,$row[‘link’]."\r\n");

fwrite($fp,$row[‘description’]."\r\n");

fwrite($fp,$row[‘thedate’]."\r\n");

fwrite($fp, ” ”);

}//endwhile

fclose($fp);

}//end else

This code does two things. First, it opens (or creates) a file called "myrssfile":


$fp=fopen(“myrssfile”, “w+”);

The "w+" instructs PHP to create the file if it does not exist and to overwrite any contents that it might have. Then it checks to see if there are any problems opening the file:

if (!$fp){

echo “error opening file”;

exit;



If there are problems, the program displays a message and stops execution. If every thing is okay, a SQL query is run that retrieves ten articles from the database that were created in the last thirty days:

$query1="Select *,DATE_FORMAT(the_date,'%W,%d %b %Y') as
thedate FROM rss_tbl WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY)
ORDER BY the_date DESC LIMIT 10 ";


The DATE_FORMAT() function enables us to format the date column in what ever fashion we like. After this the code writes the database data to the file:

fwrite($fp,$row[‘title’]."\r\n");

fwrite($fp,$row[‘link’]."\r\n");

fwrite($fp,$row[‘description’]."\r\n");

fwrite($fp,$row[‘thedate’]."\r\n");

fwrite($fp, ” ”);

That’s it. A file called "myrssfile" should now be available and contain ten articles from the database. With small changes to the table you can expand the database usage and create an RSS aggregator, which is like a online "newspaper" that is entirely made up of RSS feeds from different websites.


To actually enter the data into the database, you only need to create a form that will take the necessary input values and write them to the table. In one of the articles that I wrote about RSS, I discuss how to create and populate an RSS file through a form. Although in that particular article we transfer data from a form to a file, with some small changes you can transfer the data from a form to a database.


Conclusion

To use this code make sure to include “xmlparser.php” in whatever page you are using. Then just call the “parsefile(“yourRSSfileLocation”)” function and your file data will parsed. Also, you might have noticed that in some news sites, the news headlines are scrolling from right to left on the screen. You can achieve this by using the <marquee> HTML tag; Google it to find out how to use it.


Download the xmlparser.php here. This is the same file we link to at the beginning of this article. Next, I will be discussing how to build a RSS File. Till then have fun.




 







Intel demonstrates 80-core processor

Now that the Megahertz race has faded into the distance (we hear it was a myth), Intel is well and truly kicking off the start of a multi-core war with the demonstration of an 80-core research processor in San Francisco last week. It's not the first multi-core processor to reach double figures -- a company called ClearSpeed put 96 cores onto one of its CPUs -- but it's the first to be accompanied by the aim of making it generally available; an aim that Intel hopes to realize within a five year timeframe. The long time frame is required because current operating systems and software don't take full advantage of the benefits of multi-core processors. In order for Intel to successfully market processors with CPUs that have more than say, 4 cores, there needs to be an equal effort from software programmers, which is why producing an 80-core processor is only half the battle. On paper, 80-cores sounds impressive, but when the software isn't doing anything imaginative with them it's actually rather disappointing: during a demonstration, Intel could only manage to get 1 Teraflop out of the chip, a figure which many medium- to high-end graphics cards are easily capable of. The multi-core war may have begun, but the battle will be fought with software, although that's not to say that the hardware side has already been won: apparently the test chip is much larger than equivalent chips -- 275 mm squared, versus a typical Core 2 Duo's 143 mm squared -- and Intel currently has no way to hook up memory to the chip. Hopefully half a decade should be long enough to sort out these "issues."

[Thanks, Michael]

8 Things You Must Do If Your Identity Is Stolen

The dreaded phone call comes in: there has been some suspicious activity on your credit card and the bank would like to verify that you were the one spending thousands of dollars online. Shocked and appalled, it strikes you that your identity has been stolen and that you must act quickly to protect yourself from further damage. While the news can be overwhelming at first, and you most likely want to figure out how this even happened to you, there are a few steps you should immediately take to preserve your credit and your hard-earned money.

1) Call one of the three major credit reporting agencies (Equifax, Experian, TransUnion)* to place a fraud alert on your credit report. It is unnecessary to call all three since the one that you contact will inform the other two agencies in addition to sending you a copy of your credit report for review. A fraud alert is extremely important since it requires companies to verify your identity before issuing a line a credit, thus preventing thieves from opening new accounts under your name.

2) If the perpetrators were able to open new accounts, contact each creditor and notify them of the fraudulent activity. They will close the accounts and most likely have you fill out a fraud affidavit.

3) For those accounts that you opened and are now compromised, contact the creditor and inform them that your identity has been stolen. Not only will they close the accounts, but many will read through the most recent charges to help you determine how long the abuse has been going on and how much has been charged to your name.

4) Contact your local police and alert them to the fraud under your name. A detective will be assigned to your case and ask for details such as where the charges occurred, how much was spent, and how your identity was stolen (internet, lost wallet, etc.). When you are finished providing the detective with all of your information, be sure to write down the detective’s name and the case number since many fraud affidavits will ask for these.

5) File a complaint with the Federal Trade Commission (the FTC) by calling 1-877-IDTHEFT.

6) Change all of the passwords that you use online. Since the thieves may have acquired your information through one of your password-protected accounts, think of a completely different word and try not to use the same one for all of your accounts. Also, while it may be inconvenient to type your passwords each time you want to log-in, never save your passwords online or on your computer.

7) If you lost your entire wallet or you believe that someone is using your driver’s license, visit the DMV, Secretary of State, etc. as soon as possible to get a new driver’s license number and card. Even if you just renewed your license, you will be required to take a new picture and pay all of the regular fees.

8) KEEP RECORDS!! Throughout your dealings with creditors, companies, and detectives, always write down the name of the individual you spoke with, their employer, the date and time, and a short summary of your discussion. Keep all of this information in a centralized location and make sure that it is in a safe place since it can be used as evidence in your case. While you may be more diligent at the beginning, important information may come to light later so be sure to track everything until all of your disputes are resolved.

Identity theft doesn’t have to ruin your life or your credit. By staying calm, getting organized, and taking these crucial steps, you can bounce back from this stressful situation and stop thieves dead in their tracks.

RUN Command

NAMA UTILITY - PERINTAH/COMMAND

Accessibility Controls - access.cpl
Add Hardware Wizard - hdwwiz.cpl
Add/Remove Programs - appwiz.cpl
Administrative Tools - control admintools
Automatic Updates - wuaucpl.cpl
Bluetooth Transfer Wizard - fsquirt
Calculator - calc
Certificate Manager - certmgr.msc
Character Map - charmap
Check Disk Utility - chkdsk
Clipboard Viewer - clipbrd
Command Prompt - cmd
Component Services - dcomcnfg
Computer Management - compmgmt.msc
Date and Time Properties - timedate.cpl
DDE Shares - ddeshare
Device Manager - devmgmt.msc
Direct X Control Panel (If Installed)* - directx.cpl
Direct X Troubleshooter - dxdiag
Disk Cleanup Utility - cleanmgr
Disk Defragment - dfrg.msc
Disk Management - diskmgmt.msc
Disk Partition Manager - diskpart
Display Properties - control desktop
Display Properties - desk.cpl
Display Properties (w/Appearance Tab Preselected) - control color
Dr. Watson System Troubleshooting Utility - drwtsn32
Driver Verifier Utility - verifier
Event Viewer - eventvwr.msc
File Signature Verification Tool - sigverif
Findfast - findfast.cpl
Folders Properties - control folders
Fonts - control fonts
Fonts Folder - fonts
Free Cell Card Game - freecell
Game Controllers - joy.cpl
Group Policy Editor (XP Prof) - gpedit.msc
Hearts Card Game - mshearts
Iexpress Wizard - iexpress
Indexing Service - ciadv.msc
Internet Properties - inetcpl.cpl
IP Configuration (Display Connection Configuration) - ipconfig /all
IP Configuration (Display DNS Cache Contents) - ipconfig /displaydns
IP Configuration (Delete DNS Cache Contents) - ipconfig /flushdns
IP Configuration (Release All Connections) - ipconfig /release
IP Configuration (Renew All Connections) - ipconfig /renew
IP Configuration (Refreshes DHCP & Re - Registers DNS) - ipconfig /registerdns
IP Configuration (Display DHCP Class ID) - ipconfig /showclassid
IP Configuration (Modifies DHCP Class ID) - ipconfig /setclassid
Java Control Panel (If Installed) - jpicpl32.cpl
Java Control Panel (If Installed) - javaws
Keyboard Properties - control keyboard
Local Security Settings - secpol.msc
Local Users and Groups - lusrmgr.msc
Logs You Out Of Windows - logoff
Microsoft Chat - winchat
Minesweeper Game - winmine
Mouse Properties - control mouse
Mouse Properties - main.cpl
Network Connections - control netconnections
Network Connections - ncpa.cpl
Network Setup Wizard - netsetup.cpl
Notepad - notepad
Nview Desktop Manager (If Installed) - nvtuicpl.cpl
Object Packager - packager
ODBC Data Source Administrator - odbccp32.cpl
On Screen Keyboard - osk
Opens AC3 Filter (If Installed) - ac3filter.cpl
Password Properties - password.cpl
Performance Monitor - perfmon.msc
Performance Monitor - perfmon
Phone and Modem Options - telephon.cpl
Power Configuration - powercfg.cpl
Printers and Faxes - control printers
Printers Folder - printers
Private Character Editor - eudcedit
Quicktime (If Installed) - QuickTime.cpl
Regional Settings - intl.cpl
Registry Editor - regedit
Registry Editor - regedit32
Remote Desktop - mstsc
Removable Storage - ntmsmgr.msc
Removable Storage Operator Requests - ntmsoprq.msc
Resultant Set of Policy (XP Prof) - rsop.msc
Scanners and Cameras - sticpl.cpl
Scheduled Tasks - control schedtasks
Security Center - wscui.cpl
Services - services.msc
Shared Folders - fsmgmt.msc
Shuts Down Windows - shutdown
Sounds and Audio - mmsys.cpl
Spider Solitare Card Game - spider
SQL Client Configuration - cliconfg
System Configuration Editor - sysedit
System Configuration Utility - msconfig
System File Checker Utility (Scan Immediately) - sfc /scannow
System File Checker Utility (Scan Once At Next Boot) - sfc /scanonce
System File Checker Utility (Scan On Every Boot) - sfc /scanboot
System File Checker Utility (Return to Default Setting) - sfc /revert
System File Checker Utility (Purge File Cache) - sfc /purgecache
System File Checker Utility (Set Cache Size to size x) - sfc /cachesize=x
System Properties - sysdm.cpl
Task Manager - taskmgr
Telnet Client - telnet
User Account Management - nusrmgr.cpl
Utility Manager - utilman
Windows Firewall - firewall.cpl
Windows Magnifier - magnify
Windows Management Infrastructure - wmimgmt.msc
Windows System Security Tool - syskey
Windows Update Launches - wupdmgr
Windows XP Tour Wizard - tourstart
Wordpad - write

Article by :

mcaesartrinovaz


kaskus holic



Join Date: Sep 2005

Location: In the Chipset....

Posts: 808

UserID: 104275

mcaesartrinovaz  sedang di jalan yg benar

U.S. cyber counterattack: Bomb 'em one way or the other

National Cyber Response Coordination Group establishing proper response to cyberattacks





San Francisco — If the United States found itself under a major cyberattack aimed at undermining the nation’s critical information infrastructure, the Department of Defense is prepared, based on the authority of the president, to launch a cyber counterattack or an actual bombing of an attack source.


The primary group responsible for analyzing the need for any cyber counterstrike is the National Cyber Response Coordination Group (NCRCG). The three key members of the NCRCG, who hail from the US-CERT computer-readiness team, the Department of Justice and the Defense Department, this week described how they would seek to coordinate a national response in the event of a major cyber-event from a known attacker.

This week’s massive but unsuccessful denial-of-service (DoS) attack on the Internet’s root DNS, which targeted military and other networks, did not rise to the level of requiring response, but made the possibility of a massive Internet collapse more real than theoretical. Had the attack been successful there may have been a cyber counterstrike from the United States, said Mark Hall, director of the international information assurance program for the Defense Department and the Defense Department co-chair to the NCRCG, who spoke on the topic of cyber-response during the RSA Conference here.

“We have to be able to respond,” Hall said. “We need to be in a coordinated response.”

He noted that the Defense Department networks, subject to millions of probes each day, has “the biggest target on its back.”

But a smooth cyber-response remains a work in progress. The NCRCG’s three co-chairs acknowledge it’s not simple coordinating communications and information-gathering across government and industry even in the best of circumstances, much less if a significant portion of the Internet or traditional voice communications were suddenly struck down. But they asserted the NCRCG is “ready to stand up” to confront a catastrophic cyber-event to defend the country.

“We’re working with key vendors to bring the right talent together for a mitigation strategy,” said Jerry Dixon, deputy director for operations for the National Cyber Security Division at US-CERT. “We recognize much infrastructure is operated by the private sector.” The U.S. government has conducted cyber war games in its CyberStorm exercise last year and is planning a second one.

Computer Software and Services Trends

--Downsizing: Distributed computing with client/server solutions
is most common in corporate IT, in conjunction with keeping the
economical functions of the mainframe environment, preferably
with identical GUIs and operation procedures. Major suppliers
catering to this trend are Novell; NSC Group (Legacy Downsizing);
Downsizing Systems; Suite Software; Fenger + Graetzer.

--Client/Server Solutions: This trend combines equipment from
different manufacturers, performance classes, and applications in
a network with the server managing data transaction, and the
client handling the presentation and local application
processing. As a result of the trend toward distributed
networking, standard software products must be able to run on
various platforms and in a variety of network configurations.
Thus, suppliers of utilities/tools software can create new
features and functions to allow the end-user to utilize the
expanded application areas. Major suppliers to this segment are:
Oracle; Novell; ACI; dc soft; CAI; CA; WIN!; Wilken; Onmis
Software.

-- Outsourcing: Outsourcing of software and IT services is
becoming more and more popular in medium-sized and even smaller
firms who engage specialist teams for specialist IT tasks such as
web server operation and maintenance. This trend should allow
U.S. software suppliers to find profitable niches, although these
clients usually prefer the "outsource" to be "in-country. " Major
outsourcing software suppliers in Germany are: AC Service; IIS
Infotech; IBM; SBS; SAP; Debis, and J.D. Edwards.

--Integrated Standard Software: Competition in the standard
packaged software segment has become harder over the past two to
three years. As a result, prices have decidedly dropped and this
pressure is expected to continue. Thus, the trend is away from
standard software and toward a component software product; still,
it does remain a receptive market for standard software
products which are priced competitively, especially business
application products and enterprise resource planning (ERP)
systems. Important suppliers in this segment are: SAP; Baan;
SSA; JDE; JBA; CA; PeopleSoft; Oracle.

--Implementation of MIS (Management Information Systems): A large
number of corporations have meanwhile installed data warehouses.
In order to fully achieve a competitive advantage, experts
recommend a combination of data warehousing with "data mining,"
the latest in "intelligent" data management, which combines
statistical with artificial intelligence functions to detect
patterns and trends in an otherwise fully automated data
analysis. Data mining tools can perform classifications and
segmentation resulting in large cost-savings and are used in
determining future customer behavior or structuring a complex
target group. MIS processes encompass everything from statistical
methods to expert systems to fuzzy logic to neuro-networks. Major
suppliers to this trend are: Angoss; Datamind; IBM; ISL; Isoft;
NeoVista; Pilot; SAS; Silicon Graphics; SPSS; Syllogic; Thinking
Machines; Informix; NCR; Oracle; and Xsys. Major local suppliers
are: Bissantz; Kueppers and Co.; Business Objects; and Cognos.

--Business Reengineering: Software supporting process-oriented
taskings such as identifying core operations; intensifying
customer orientation; improving the information flow; shortening
processing time; precisely allocating processing costs; and
reducing delivery times and amount of stored goods, will continue
to meet high demand in. Suppliers of respective software
tools are: Aeneis; Aris; Bonapart; BPWin; ERWin; Logichain;
Moogo; Proplan; and Sycat.

Strange statues around the world


  1. Frogner Park, Oslo, Norway (thanks Stenar, jac). Sculpture by Gustav Vigeland.
    1 - oslo, norway.jpg

  2. Stockholm, Salzburg; Sweden (thanks Johannes, David, Mogens Beltoft, Yuriy Korzhkov)
    1 - sweden.jpg 2 - sweden.jpg3 -sweden.jpg4 - sweden.jpg

  3. Prague (thanks Michael, Matt Simpson)
    1 - czech 2 -czech

  4. Statue of german writer Kafka, Prague, Czech (thanks Jon Elbert)

  5. Brussels, Belgium (thanks jamyleloup)
    belgium 1

  6. The man who measures the clouds by Jan Fabre, Belgium (thanks David Felizarda)

  7. By Damien Hirst. 5th Ave., Manhattan, US (thanks Chris Coleman, nelis)
    90.jpg

  8. Salt Lake City, Utah, US (thanks Stenar)
    39.jpg

  9. Fremont Troll of Seattle, WA, US (thanks vanjulio)
    126.jpg

  10. Turin, Italy (thanks texilee)
    81.jpg

  11. Bratislava, Slovakia (thanks Daniele)
    3.jpg 12.jpg

  12. “The Illuminated Crowd”, in front of the Banque Nationale de Paris tower, Montreal, Canada (thanks SNF)
    26.jpg

  13. Melbourne, Australia (thanks catenoid)
    13.jpg73.jpg 77.jpg

  14. Minsk, Belarus (thanks Aleh)
    24.jpg 66.jpg

  15. In front of the Ernst & Young building, Los Angeles, US (thanks Pam)
    43.jpg

  16. Toronto, Canada (thanks Kristan)
    129.jpg

  17. Mazinger Z, Spain (thanks mpc, Ten, Mat)

  18. Atocha RailStation, Madrid, Spain (thanks guimi)
    55.jpg

  19. Optimus Prime, China (thanks Juan Incognito)

  20. Malmo, Sweden (thanks kip, dragonsden)
    9.jpg

  21. UOB Plaza, Singapore. Address: 80 Raffles Place. (thanks Juhu)
    85.jpg

  22. La Pouce, Paris, France (thanks Jeff, Marc Lacoste)
    137.jpg

  23. Depiction of a bread line, Franklin Delano Roosevelt Memorial, Washington, DC, USA (thanks JohnK3)
    34.jpg

  24. Berlin, Germany (Lou)
    64.jpg

  25. Russia (thanks littlebat)
    107.jpg 134.jpg119.jpg

  26. Cheltenham, UK (thanks Tim)
    72.jpg

  27. Millesgеrden, Stockholm, Sweden. By Carl Milles (thanks Twee)
    65.jpg

  28. Yerevan, Armenia (thanks Hayk)
    98.jpg 111.jpg118.jpg

  29. Oxford, UK (thanks CdrJameson)

  30. “Tête au carré” building by Sosno, Nice, France (thanks gimix)
    41.jpg

  31. Singapore (thanks Misayo)
    42.jpg

  32. Amsterdam, Holland (thanks Korilian)

  33. Asus headquarter, Taiwan (thanks Phil). It is made from computer chips
    48.jpg

  34. Kiev, Ukraine (thanks Eugene). It commemorates a local comedy actor truly beloved by public - he liked to sit at that very place with his old dog.
    96.jpg

  35. Nuremberg, Germany (thanks Nick, Armin)
    37.jpg

  36. Bremen, Germany (thanks morlach01)
    40.jpg

  37. Trafalgar Square, London (thanks sam_m, MJ, Simon C). A sculpture of Alison Lapper by Marc Quinn
    83.jpg

  38. Kharkov, Ukraine (thanks PHWizard)
    74.jpg

  39. Monaco (thanks NK)
    125.jpg

  40. Cologne, Germany (thanks Alexandre)

  41. In front of The Institute for Microbiology, Tuebingen University, Germany

  42. Statue of a tourist, Shanghai, China (thanks Jakob)

  43. near San Giovanni train station, Como, Italy (thanks Dario)
    80.jpg

  44. Wateringen, Holland (thanks FBS, Roadie)
    116.jpg

  45. Potsdam, Germany (thanks Ola)
    106.jpg

  46. Santa Fe, New Mexico (thanks Gatrh, Paul)
    103.jpg

  47. Springfield, Missouri, US (thanks Noella)
    35.jpg


Around the world

  1. 113.jpg

  2. 120.jpg

  3. 133.jpg

  4. 135.jpg

  5. 18.jpg

  6. 19.jpg

  7. 2.jpg

  8. 21.jpg

  9. 32.jpg

  10. 33.jpg

  11. 36.jpg

  12. 38.jpg

  13. 45.jpg

  14. 49.jpg

  15. 52.jpg

  16. 54.jpg

  17. 62.jpg

  18. 63.jpg

  19. 69.jpg

  20. 70.jpg

  21. 76.jpg

  22. 6.jpg

  23. 7.jpg

  24. 8.jpg

  25. 82.jpg

  26. 84.jpg

  27. 86.jpg

  28. 87.jpg

  29. 95.jpg

  30. 97.jpg


Also check out our selected content at haha.nu