The ATM Simulator (People Hate Pearl!)

So, this is a proof-of-concept of ISO 8583 messaging in PHP. Everything you want to know about ISO 8583 (a complete) theory you can read at wikipedia page: http://en.wikipedia.org/wiki/ISO_8583. Anyway, article below will describe you a practical thing and technical work on how to understanding PHP socket programming - which is the core of ISO 8583. In short words: creating the ATM simulator with PHP!

Basically, ATM a.k.a ISO 8583 messaging using network socket to communicate between server and client. Take a look at general system activity defined below:


At first, server listening at specified address and port number, then client (for example: ATM) providing a block of ISO 8583 code to server (let say, client sending an account number). Server accepting command and parsing the code, continued to querying to backend. The result will returned back to client. Client accepting and parsing it again, and finally delivering a human-readable characters to the ATM screen.

To understand on how to developing the application, make sure that you:
  1. Familiar with PHP language.
  2. Able to use your favorite database client to create a single table.
  3.  Know the ISO 8583 philosophy.
  4. Having a PC with Apache & PHP enabled, also telnet client ready will help you much further. Windows (WAMP) and Mac OS (MAMP) is a great idea!

To start to build the application, keep in mind that there's 2 sequence things to create: SOCKET COMMUNICATION and ISO 8583 INTEGRATION.

SOCKET COMMUNICATION
This is a framework, since we need to create both different server and client applications that can interact using network socket. A server is listening and responding while client is sending and accepting. This is server code, save it with svr.php and store somewhere in your web server:

<?
error_reporting(E_ALL);
ob_implicit_flush();
$address = '10.2.2.212';
$port = 1234;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
if (socket_bind($sock, $address, $port) === false)
{
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1))
{
echo socket_strerror(socket_last_error($sock));
exit;
}
}
if (socket_listen($sock, 5) === false)
{
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
do
{
if (($msgsock = socket_accept($sock)) === false)
{
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
$msg = "\nPOC-ISO Telnet Test. \n" .
"ketik 'quit' buat keluar, cuy...\n";
        socket_write($msgsock, $msg, strlen($msg));
        do
        {
        if (false === ($buf = socket_read($msgsock, 2048)))
        {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}
if (!$buf = trim($buf))
{
continue;
}
if ($buf == 'quit')
{
break;
}
$talkback = 'Response Server: ' . $buf;
$talkback = $talkback . "\n";br /> socket_write($msgsock, $talkback, strlen($talkback));
//===========================================
echo "$talkback\n";
}
while (true);
socket_close($msgsock);
}
while (true);
socket_close($sock);
?>

Run svr.php code with -q parameter and try to connect to server from telnet command. What? Telnet? Yup, that's why telnet client needed in our existing article - to test the svr.php code. Look at picture below:


Send a free-string and look what the server response from telnet window or simply type 'quit' to quit. If svr.php looks fine, now you can continue to client code. Below is the client code socket core, save it with cli.php and store it to a path in your pub html web server.

<?
$host="10.2.2.212";
$port = 1234;
$message = 'HELLO 1234, apa bisa di copy ganti?';
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Error: SOCKET\n");
$result = socket_connect($socket, $host, $port) or die("Error: JARINGAN\n");
socket_read ($socket, 2048) or die("Error: RESP\n");

$message = $message . "\n";socket_write($socket, $message, strlen($message)) or die("Error: DATA\n");
$result = socket_read($socket, 2048) or die("Error: RESP\n");
socket_write($socket, "quit", 4) or die("Error: QUIT\n");

echo $result;?>

Also, run client code cli.php with -q parameter from second terminal while svr.php still remains active in first terminal window. If the code is right, both will response the same message sent from cli.php. And finally the first thing of socket communication is done!

ISO 8583 INTEGRATION
Before we implement ISO 8583 method in both codes above, we need to define a table test which simulate the back-end storage. In my experiment, it's only a single table. Look ak the picture below:


After creating table, continue to download a PHP class named by JAK8583 from PHPClasses.org. Download it from http://www.phpclasses.org/package/5398-PHP-Generate-and-parse-ISO-8583-transaction-messages.html. This class mainly purposed for ISO 8583 builder and parser, so you need to attach both svr.php and cli.php to this class.

Meanwhile, prepare client code (cli.php) into an ATM look-a-like interface. Contains several pages start from initiation until finish transaction (index, input, resp, output and error landing page). Let say, this below is a welcome interface (index):


The rule of this simulator is simple. User typing in 10 digit account number from input page, server will validating it from database and returning back the result to the simulator screen. So, here below is the input page.


Now, let's modify cli.php with sending and catching capabilities. Note that it also containing ISO 8583 builder and parser (and client side validation) :


<?php
if ($_POST['submit'])
{
$host="10.2.2.212";
$port = 1234;
$no_rek = $_POST['no_rek'];
//===========================================
// =========== ISO-8583 BUILDER =============
//===========================================
include_once('JAK8583.class.php');
$jak = new JAK8583();
$jak->addMTI('1800');
$jak->addData(2, $no_rek);
$jak->addData(54, '000000');
$jak->addData(43, 'XXXXXXXXX');
$jak->addData(7, '000000');
$message = $jak->getISO();
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Error: SOCKET\n");
$result = socket_connect($socket, $host, $port) or die("Error: JARINGAN\n");
socket_read ($socket, 2048) or die("Error: RESP\n");
$message = $message . "\n";
socket_write($socket, $message, strlen($message)) or die("Error: DATA\n");
$result = socket_read($socket, 2048) or die("Error: RESP\n");
socket_write($socket, "quit", 4) or die("Error: QUIT\n");
//===========================================
// =========== ISO-8583 PARSER ==============
//===========================================
//echo $result;
$jak = new JAK8583();
$jak->addISO($result);
if ($jak->getMTI()=='1810')
{
$data_element=$jak->getData();
$no_id=$data_element[2];
$nama=$data_element[43];
$nominal=$data_element[54];
$bln=$data_element[7];

if ($nama=='XXXXXXXXX')
{
header('Location: err.php');
exit;
}
}
else
{
header('Location: err.php');
exit;
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>POC-ISO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>


<body bgcolor="#0066CC">
<p align="center"><font color="#FFFFFF"><strong><font size="3">KONFIRMASI PEMBAYARAN
  <br>
  ========================= </font></strong></font></p>
<p align="center">&nbsp;</p>
<form name="fInput" method="post" action="output.php">
  <div align="center">
    <table width="75%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="90%" rowspan="3"><div align="center">
            <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td width="53%"><font color="#FFFFFF" size="3"><strong>ID PELANGGAN</strong></font></td>
                <td width="2%"><font color="#FFFFFF" size="3"><strong>:</strong></font></td>
                <td width="45%"><font color="#FFFFFF" size="3"><strong><?=$no_id?></strong></font></td>
              </tr>
              <tr>
                <td><font color="#FFFFFF" size="3"><strong>NAMA</strong></font></td>
                <td><font color="#FFFFFF" size="3"><strong>:</strong></font></td>
                <td><font color="#FFFFFF" size="3"><strong><?=$nama?></strong></font></td>
              </tr>
              <tr>
                <td><font color="#FFFFFF" size="3"><strong>BULAN TAGIHAN</strong></font></td>
                <td><font color="#FFFFFF" size="3"><strong>:</strong></font></td>
                <td><font color="#FFFFFF" size="3"><strong><?=$bln?></strong></font></td>
              </tr>
              <tr>
                <td><font color="#FFFFFF" size="3"><strong>JUMLAH TAGIHAN</strong></font></td>
                <td><font color="#FFFFFF" size="3"><strong>:</strong></font></td>
                <td><font color="#FFFFFF" size="3"><strong><?=$nominal?></strong></font></td>
              </tr>
            </table>
          </div></td>
        <td width="10%"><div align="right">
            <input type="submit" name="submit" value="--&gt; BAYAR">
          </div></td>
      </tr>
      <tr>
        <td><div align="right"> </div></td>
      </tr>
      <tr>
        <td><div align="right">
            <input type="button" name="Button3" value="--&gt; BATAL" onClick="document.location.href='input.php'">
          </div></td>
      </tr>
    </table>
  </div>
</form>


<table width="75%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><font color="#FFFFFF" size="3"><strong>RESP :</strong></font><font color="#FFFFFF" size="3"><strong>
      <br>
      <?=$message?>
      </strong></font></td>
  </tr>
  <tr>
    <td><font color="#FFFFFF" size="3"><strong>RECP :</strong></font><font color="#FFFFFF" size="3"><strong>
      <br><?=$result?>
      </strong></font></td>
  </tr>
</table>
</body>
</html>


Saved it as resp.php (means response). If validation returned false - for example entering only 3 digit from input box, the screen will automatically redirecting to error page, just like picture below:


Picture above displayed after we input a wrong account number. There's no such "123" account number on database. Try to typing a correct account number and re-submit again. The response page will displayed like picture below:


Take a note at both ISO 8583 code in a red box above (RESP and RECP). RESP (response) code is ISO 8583 builder code sent from client to server. While RECP (receipt) code is parser code sent from server to client. Anyway, here's below svr.php code improvement containing connection to the database (MySQL) :

<?
error_reporting(E_ALL);
ob_implicit_flush();
$address = '10.2.2.212';
$port = 1234;

//===========================================
// DB
//===========================================
include_once('JAK8583.class.php');
ini_set('display_error',1);
define("DB_HOST", "your.db.svr.host");
define("DB_USER", "db_user_name");
define("DB_PASS", "db_passwd");define("DB_NAME", "db_name");
$link=mysql_connect(DB_HOST,DB_USER,DB_PASS);
mysql_select_db(DB_NAME);
mysql_query("SET time_zone='Asia/Jakarta'");
//===========================================

$sock = socket_create(AF_INET, SOCK_STREAM, 0);
if (socket_bind($sock, $address, $port) === false)
{
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1))
{
echo socket_strerror(socket_last_error($sock));
exit;
}
}
if (socket_listen($sock, 5) === false)
{
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}


do
{
if (($msgsock = socket_accept($sock)) === false)
{
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
$msg = "\nPOC-ISO Telnet Test. \n" .
"ketik 'quit' buat keluar, cuy...\n";
        socket_write($msgsock, $msg, strlen($msg));
        do
        {
        if (false === ($buf = socket_read($msgsock, 2048)))
        {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}
if (!$buf = trim($buf))
{
continue;
}
if ($buf == 'quit')
{
break;
}
$jak = new JAK8583();
$jak->addISO($buf);

if ($jak->getMTI()=='1800') // Dari Client
{
$data_element=$jak->getData();
$no_id=$data_element[2];

$perintah="select * from trx where no_id='$no_id'";

$hasil=mysql_query($perintah);
$n_data=mysql_num_rows($hasil);
$jak = new JAK8583();
$jak->addMTI('1810');
if ($n_data==1)
 {  while ($row=mysql_fetch_array($hasil))
{
$no_id=$row["no_id"];
$nama=$row["nama"];
$bln=$row["bln"];
$nominal=$row["nominal"];
}
>
$jak->addData(2, $no_id);

$jak->addData(43, $nama);
$jak->addData(54, $nominal);
$jak->addData(7, $bln);
}
else
{
$no_id = 'ERR000';$jak->addData(2, $no_id);
$jak->addData(43, 'XXXXXXXXX');
$jak->addData(54, '000000');
$jak->addData(7, '000000');
}
}
$talkback = $jak->getISO(); $talkback = $talkback . "\n"; socket_write($msgsock, $talkback, strlen($talkback)); //===========================================
echo "$n_data|$buf|$perintah|$buf|$talkback|$no_id|$nama|$bln|$nominal\n";
}
while (true);
socket_close($msgsock);
}
while (true);
socket_close($sock);
?>

Ok, so far you can learn on how to validate input from database and returning back the result to client screen. Now you can also try to extend the functionality to create a valid payable transaction if user submit from the simulator that will simulated balance subtraction. For example, after submitted, the screen will change to greeting screen or notification which say that the transaction is over and also displaying the last balance, just like picture below :


That's it for the client simulator. Meanwhile from svr.php code above, we can monitoring the throughput of the transaction in server terminal window. The red box sign tell that validation returning false result, while green color is a valid transaction.


CONCLUSION:
Since ISO 8583 messaging interoperability involving 2 or more companies (in fact the bank and merchant eventually) in a real world, each from both programmer must deal with such formats; ISO 8583 year version, header, MTI, Data Element format, server address and port. The rest, it's a character manipulation module anyway! Have a great ISO 8583 coding and share your experience below. Thank's for ever coming here.

Labels: , , , ,

  Post a Comment

Updating JRE on Mac OSX

For those who desired to updating Java plugin (the runtime environment) to their Mac OS, here's a short how-to's guide. Java on OSX is available only from Apple it self by self-patch-package & not provided by Sun like others supported OS.

First, make sure that your OSX is virgin from JRE. Check it out from your favorite browser (Safari or Firefox) by loading an applet sample page (eg: from this link). If your browser displaying an unsupported plugin just like picture below, then it's the sign that your OSX still not Java ready yet.



If you guess that it may resolve from auto-search plugin window (for example from Firefox browser), then certainly that Firefox couldn't find it best suitable.



If you guess that it may resolve from Sun website, then you may find an answer that the JRE's only available from Software Update feature.



If you guess that Software Update feature will find you this lost JRE, then you probably find nothing up there.

So, where the hell is this JRE package? In a middle of annoyed situation, a knowledge base website from Apple has an important update information regarding to this case (http://support.apple.com/kb/DL848).



Finally, the patch package has founded. Download it & make an install like usual package. Note that you need to close your active browser before running the patch!



After the installation completed, try to open browser & execute your applet sample.



Like image above, so the case is closed now :)

Labels: , ,

  Post a Comment

So, Here's What I Like from Mac

I've currently using Mac OSX for couple months & -- hard-to-say -- so unwilling to returning back to my previous OS :) Now, I found a pretty beauty UI with complete light-weight professional tools even by (some) native packages OSX installation. On this chance, I'd like to share a continuously article revealing any great things inside OSX. It could be an interesting article purposed to anyone who planned to learn OSX from others OS.

There were 3 previous articles completely describing about step-by-step of preparing & installing Mac OSX on an X86 machine (Acer Aspire One - 8.9" screen). It also a good start for you:


#1. So, How to Show Disk Space?

It's a different treatment to find out how to show disk space on Mac. Choose Get Info menu from a partition (right-click) in Finder & it'll show the information.

Or, it just the same way in Linux via "df" command in Terminal :)


#2. Hey, My Keyboard Shortcut is Changed!
Don't panic - at least I also experience this too on my first attempt :). Take a look at keyboard comparison picture below. This is common keyboard layout (Acer Aspire One):

While this below is Apple standard keyboard:

Focus on red-box & compare with this below explanation picture:

Voila, you're on your way now! So, If you want to copying file (for example), press Alt+C instead of common Ctrl+C, and so on. A very complete keyboard shortcut description you may found at http://support.apple.com/kb/ht1343

#3. How to PrintScreen?

If your PrtSc button on keyboard is not working to take a copy of screen (or need to change other keyboard shortcut), visit Keyboard & Mouse in Preference window. Make an appropriate key for this function & your button will work now. As you may seen on image above, the F13 button is known as PrtSc button in Mac. If you pressed it, then it'll grab the screen and store it to a file on your desktop. Happy a little practise :)

#4. Another Way to Grab the Screen

If trick #3 doesn't satisfied you, then grab the Grab. There's 4 capture modes available depends on your need.

#5. An Apple () logo. How?
Simply press Shift+Windows+K. But it doesn't recognized in Facebook :(

#6. Built-in Stickies

Do you know that OSX provides (even) tiny sticky note tools? Go get it from Application in Finder.

#7. Automatic Wallpaper Changer

OSX also equipped with this fun too. Open the Preferences window, then point it to Desktop & Screen Saver icon. Set your photo folder, then change the period to activate this feature.

#8. Need Virtual Desktop? There's Spaces

Press F8 to activate this feature. Anyway, you can also move existing application from one screen to another

#9. Spotlight, a Smart Search Engine!

A smart search engine always available on your right-top-corner screen. I was testing it to find a Metallica song with title of The Call of Ktulu. Tested with typing the spotligiht with "Call" word & it resulting out-of expectation! Look at the red circle: 1st circle show the definition taken from Dictionary application. 2nd circle show the image file. 3rd circle display the content of PDF document & last, here's what I've looking for. Pretty informative!

#10. Spotlight as Calculator

Need a calculator? Use Spotlight. But, hey... what's the different with this below picture?


#11. Save As PDF?

Sure! If you're on hurry to make a PDF from a web page (or any applications which have print function), fortunately this OS has a built-in PDF driver on Printer settings.

#12. More Than a Just Preview

Known as multi-preview application such as image & PDF document. But it's more than that, since it fully equipped with basic image tools from resizing image, cropping, displaying multi files on a same window, slideshow function, rotate image & annotation editor! It seems I don't need Adobe Photoshop anymore :)

#13. QuickLook from Finder

Another built-in multi type preview available from Finder. Check it out from thumbnail mode (left red circle) or simply press QuickLook icon (right red circle)!

#14. Text Editor? Use TextEdit

Here's a marriage between Notepad & Wordpad, not suitable for programmer though :)

#15. Vote for Web Designer

Is there any OS support for defining web color natively other than Mac OSX? Again -- all I can say -- it's more than just a preview function in Preview application. Do you think it's not quite enough? There's also DigitalColor Meter you can found on Application :: Utilities too :)


#16. A Real Web Developer OS!

No doubt, with the existence of Mac version of Macromedia Dreamweaver, this OS helping me a lot as a web developer. With XAMPP availability for free, I've successfully made an online application project (http://www.arisanperhiasan.com) in a week built from scratch with Mac OSX.

Labels: , ,

  Post a Comment

Dual Boot Windows XP & Leopard in AOA150 (Part 3: Post-Installation)

Hello, meet me again in the last part of trilogy-articles: iAtkos dual boot with Windows XP on Acer Aspire 150ZG a.k.a AOA 150. The first article reviewing about The Pre-Installation (preparing partition, etc), while second article describes about The Installation it-self (selecting packages, etc). And now, the post-installation will tell you about configuring hardware (VGA), some miscellaneous things & also third party applications which can make your Mac much useful than your previous desktop :)

Post-Installation

Let Mac running on its first boot. Just to make sure that there's no something wrong with the boot loader (known as Chameleon boot loader). On mine, it'll display 5 partitions while loading boot screen (with Mac as the default boot).



Try to boot without parameter, it'll show a loading screen.



Be patient until it changes to a Welcome screen. Note that until this point, you should hear audio with music.



Go ahead & follow the wizards. On a create account wizard, Mac also try to detecting the webcam. In AOA 150, it detected successfully.



Continue the wizards until it show the first desktop screen with 800x600 resolution.



This is where you will do The setup for video drivers. Reboot in single user, -s option at the loader (while on Chameleon boot loader, press any key to enter setup). Now type -s you should see boot: -s on the bottom left hand side of the screen, now press enter and it should boot you into single user mode. The command prompt will look like this:

:/ root#


now type:

/sbin/fsck -fy
/sbin/mount -uw /


Don't forget that / after -uw or you will not have write access. Next, type exactly as I describe below or you will hate your life =)

cd System/Library
rm -r Extensions.mkext
cd Extensions
rm -r AppleIntelGMA*.*
rm -r AppleIntelIntergrated[TAB]
shutdown -r now


Don't type exactly the [TAB], just hit the TAB key and it will fill in the rest for you and press enter. Above commands will remove the kext cache and all of the Intel Graphic drivers because they do not work correctly (stuck at 800x600). The system should now reboot. If all went well you should be at the desktop again.

Ok, the first thing to do after it completed to show desktop is continuing to configure the VGA (Remember when there's no VGA driver packages selected during installation?). So, prepare your internet connection & download this VGA driver package (intel_iatkos7.zip) (2.4MB). Once you extract this file to desktop, you should have these folders:

OSXTools1.0.150
First
Second


Now Start OSXTools and click Install Kexts. Browse to the dir First and select all (3) kexts, click Install button. After it installed, just DON'T REBOOT (even pop-up show asking to reboot). If you reboot, you will have to go into single user mode again and remove all the files again.

Now open the folder Second and click on GMA950.pkg and a setup window will pop up. Click continue, click install -- put in your password if you have one and proceed. After install, you can now reboot.

Once you reboot you should be back at the OS X desktop but now with working 1024x600 resolution! Also, you can now enable Quartz. To enable Quartz, open OSX86 Tools and click the Enable/Disable Quartz GL button. It will tell you the current status. If its disabled, feel free to enable it by clicking the button that says "Enable Quartz GL". After Quartz is enables, the system will need to rebooted.

You should now be fully working on OS X 10.5.7. The first software I've install was USB modem manager (T-Mobile web'n'walk Manager Installer included on stick), even the system recognized the stick as a modem.



Start internet connection configuration from System Preferences (the shortcut laid on the dock) & configure it as usual (tested with IM2 & Telkomsel Flash provider). If your configuration is correct, now you don't have a problem to connect to internet.



Open Safari browser & try to open a web page. Meanwhile, you can also try to chat with iChat (compatible with GMail account). If you need more to personalize your OSX application, get a "basic" home-office-application from the internet (or torrent). As I only need for web programming, here's below the list of application I'd installed on my OS X.

* Macromedia Dreamweaver 8
* Adobe Photopshop CS2
* XAMPP (Web & MySQL server)
* Firefox
* Sequel Pro (a great MySQLFront or HeidiSQL replacement for Mac)
* Cyberduck (a great WinSCP replacement for Mac)
* UltraEdit for Mac
* Microsoft Office for Mac
* Microsoft Messenger (chat with Yahoo friends)
* unRAR
* uTorrent for Mac

And this is my dock view now...



For anyone who confusing about shortcut keyboard on OS X, there's a bit different between Windows/Linux. If you familiar with CTRL key (eg: CTRL+C to copy, and so on), use ALT instead of CTRL (So, it change to ALT+C to copy). I've been using this OS X for full since a month ago for work & I feel so endure with it. Maybe I'll thinking about to buy a real Mac soon :) For anyone of you who dare to install OS X, have a try & good luck. Please share your experience on below comments...

Labels: , ,

  Post a Comment

Dual Boot Windows XP & Leopard in AOA150 (Part 2: Installation)

Welcome back! If you googling over the internet, actually there's tons of OSX86 step-by-step installation guides you can follow. This wiki page also good for you to start & note that whether your machine listed on it's HCL (Hardware Compatibility List) or not. If you certainly sure about to installing it, please take a time to follow my previous part (The Pre-Installation) & continued to read through this current article.

Installation

After preparing the partition (16GB on my experiment), plugged-in the DVD master (I'm using iAtkos 10.5.7) & make your machine boot to CD. In my Acer Aspire One ZG5, there's no additional boot parameter needed. If you experience a problem (such as failed on loading), you should need to by-pass parameter "cpus=1" in boot prompt (or -v to show debug verbose mode).



First screen passed. Next to show is the first window wizard. Click Next, then.



A welcome window may appear. Let's continue until it show menubar on top of the screen.



The first thing you should check is your target hfs partition you've made. There's a tool called Disk Utility available from Utility menu. If your target partition is not visible than you might need to re-erase & re-format it (don't changed the volume type combo box).



After - optionally - erasing process completed, close the Disk Utility & you'll see your target partition on Select a Destination window (mine, 16GB size, partition #7 - primary, known as disk0s4; means located on disk 0, primary no#4).



The critical part of Mac OS installation on x86 machine is selecting the right packages for your machine. Here's a full list that 100% working installation of iAtkos 10.5.7 on my Acer Aspire One (including sound & wired networking).



Note that there's no VGA driver selected. Don't worry, it's not applicable to Acer Aspire One. We'll skip this package & take care of it later. If you'd like to force it, than you'll stuck with 800x600 resolution or your screen may garbled or your system may hang on boot!



Installing process will take approximately 30 minutes. Make a hot of coffee & light-up your cigarettes, this installation will done & everything is gonna be alright :). See you in 3rd part of this articles!

Labels: ,

  Post a Comment