Management and economics issues of hosting virtual private email servers
May 29, 2010
Guyub adalah perusahaan TI berpusat di Palembang dengan fokus pada F/OSS Produk-produk >> Layanan-layanan >>
May 28, 2010
May 28, 2010
May 24, 2010
My old post on I’ve been meaning to post instructions on how to compile PHP for Snow This time, I took notes on how to reliably compile PHP and Apache from
compiling PHP for Mac OS 10.5 (Leopard) continues to top my most-viewed page
statistics. Sadly, that article is old and doesn’t apply very well to Snow
Leopard (10.6).
Leopard since last summer when I picked up the DVD, but hadn’t found the
time or opportunity to build PHP from a completely fresh start, until a few
weeks ago.
scratch on this system.
You’re on your own for the details of this one, but frankly, if you can’t
figure it out, you’ll find the next steps too difficult. Think of it as
a prerequisite.
Create a working directory. I use ~/src,
but you can use whatever you like.
$ mkdir ~/src
$ cd ~/src
Install
href="http://github.com/mxcl/homebrew">Homebrew. Homebrew is
a truly great software packager for OS X. Think Macports, but not as ugly;
Fink, but not as broken (and not as binary). Designed for Mac. It’s Ruby,
but we don’t have to hold that against them. (-:
$ curl http://gist.github.com/raw/323731/572b315c4f7ee78244de70e7ad703c8ae324da7a/install_homebrew.rb > install_homebrew.rb
$ ruby install_homebrew.rb
Install your own iconv. I don’t know what Apple did to
theirs, but it’s a huge headache. You’re best installing your own, in my
experience.
$ curl http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz | tar -zx -
$ cd libiconv-1.13.1
$ ./configure --prefix=/opt && make && make install
$ cd ..
Install Apache-HTTPD from source. This isn’t
absolutely necessary, but Apple seems to have done some weird stuff with
their Apache, and in my experience, it’s best to build your own. If you
skip over this step, you’ll need to change the apxs in the
PHP configure command, below.
First, find your
closest mirror.
$ curl http://apache.mirror.iweb.ca/httpd/httpd-2.2.15.tar.bz2 | tar -jxf -
$ cd httpd-2.2.15/
$ ./configure --enable-rewrite --enable-ssl && make && make install
$ cd ..
Install PHP dependencies using Homebrew. Easy, huh?
$ echo "gd jpeg libpng libxml2 libzzip mcrypt mysql" | xargs brew install
$ echo "libpng libxml2 readline" | xargs brew link
Install PHP from source by first selecting a href="http://php.net/get/php-5.3.2.tar.bz2/from/a/mirror">mirror.
Note: you will need to use a really nasty patch to get this to
build properly. See the note on iconv above. Even Apple’s own
href="http://opensource.apple.com/source/apache_mod_php/apache_mod_php-53/patches/iconv.patch">iconv patch for PHP
doesn’t work (at least not for me).
$ curl -L http://ca2.php.net/get/php-5.3.2.tar.bz2/from/this/mirror | tar -jxf -
$ cd php-5.3.2
$ curl http://www.php.net/~scoates/patches/php-5.3.1-Makefile.global-iconv.patch | patch -p0
$ ./configure --prefix=/usr/local --with-xsl --with-gd --with-zlib-dir \
--enable-sockets --enable-exif --with-mcrypt --enable-soap \
--enable-embedded-mysqli --with-mysql --with-pdo-mysql --with-curl \
--with-libedit --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring \
--with-openssl --with-iconv=/opt && make && make install
$ cd ..
Configure Apache. If you’ve done this on other
platforms, this step should look familiar.
/usr/local/apache2/conf/httpd.conf, in the<IfModule mime_module> block, add the following:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex by changing
DirectoryIndex index.html
to
DirectoryIndex index.php index.html
You can now test Apache + PHP by creating a phpinfo() page,
and restarting Apache:
$ echo "<?php phpinfo(); ?>" > /usr/local/apache/htdocs/info.php
$ ln -s /usr/local/apache2/bin/apachectl /usr/local/bin/apachectl
$ sudo /usr/local/bin/apachectl restart
Now, visit localhost/info.php,
and you should have an independent, custom-compiled Apache-PHP
stack.
I hope this has been helpful. If I’ve given bad instructions, or if
something doesn’t work for some reason, please let me know in the
comments.
May 24, 2010
I haven?t stopped believing in the [...]
May 24, 2010
The database needed to deliver the high levels of write throughput, low latency responsiveness and continuous availability demanded by the service
A sharded, multi-master MySQL solution with memcached was rejected due to the complexity of integration and management
MySQL Cluster was selected as it met all of the requirements of the service with one, integrated solution out of the box
MySQL Cluster is handling on average 1 million queries per day across both in-memory and disk-based tables, with the database growing at up to 2% daily
MySQL Cluster handles document metadata and text, PHP session state, ACLs, job queues and tracking of document actions for billing
May 24, 2010
Each column is stored in a type-specific way.
Each Table (an instance of an open table which a Cursor is used to iterate over parts of) has two row buffers in it: record[0] and record[1]. For the most part, the Cursor implementation for your Storage Engine only ever has to deal with record[0]. However, sometimes you may be asked to read a row into record[1], so your engine must deal with that too.
A Row (no, there#8217;s no object for that#8230; you just get a pointer to somewhere in memory) is made up of Fields (as in Field objects). It#8217;s really made up of lots of things, but if you#8217;re dealing with the row format, a row is made up of fields. The Field objects let you get the value out of a row in a number of ways. For an integer column, you can call Field::val_int() to get the value as an integer, or you can call val_str() to get it as a string (this is what the CSV engine does, just calls val_str() on each Field).
The Field objects are not part of a row in any way. They instead have a pointer to record[0] stored in them. This doesn#8217;t help you if you need to access record[1] (because that can be passed into your Cursor methods). Although the buffer passed into various Cursor methods is usually record[0] it is not always record[0]. How do you use the Field objects to access fields in the row buffer then? The answer is the Field::move_field_offset(ptrdiff_t) method. Here is how you can use it in your code:
ptrdiff_t row_offset= buf – table-gt;record[0];
(**field).move_field_offset(row_offset);
(do things with field)
(**field).move_field_offset(-row_offset);
Yes, this API completely sucks and is very easy to misuse and abuse #8211; especially in error handling cases. We#8217;re currently discussing some alternatives for Drizzle.
This blog post (but not the whole blog) is published under the?Creative Commons Attribution-Share Alike License. Attribution is by linking back to this post and mentioning my name (Stewart Smith).
May 18, 2010
Hari ini (Selasa, 18 Mei 2010) Muhammad Subair dan Satrio datang di SMA 9 Palembang, untuk memenuhi permintaan pihak sekolah kepada Guyub untuk membantu mengisi materi sosialisasi Free/Open Source Software (khususnya GNU/Linux) kepada seluruh guru dan pegawai sekolah.
Secara umum acara berlangsung lancar dan ada interaksi berupa pertanyaan dan permintaan demo dari guru-guru. Dari yang kami dapat dari interaksi tadi, di SMA 9 Palembang ini sama dengan tempat-tempat sebelumnya yang kami datangi, dimana kendala utama belum menggunakan F/OSS khususnya GNU/Linux karena memang belum tahu dan masih kurangnya dukungan dari pengambil kebijakan. Hal ini bisa dilihat dengan masih banyaknya kesalahpahaman dasar tentang F/OSS, Linux, HAKI, dll.
Mudah-mudahan kedepannya bisa ada kelanjutan dari acara ini, dimana Guyub dan juga komunitas F/OSS di Palembang dan sekolah bisa mengadakan acara teratur, semisal dimulai dengan pembentukan kelompok study Linux untuk siswa, dll. Setidaknya dengan apa yang ada hari ini kita bisa lihat sudah ada kemauan untuk mengenal lebih jauh tentang Free/Open Source Software.
Akhir kata kami mengucapkan terima kasih banyak atas penerimaan dari SMA 9.
—
Tim Guyub
May 17, 2010