Son 5 Gönderi :

13 Ocak 2010 Çarşamba

Türkiye Muz Cumhuriyeti mi, yoksa olamadı mı?

Türkiye’ye “Ahlak dersi verecek en son ülke” diyen ve Türk Büyükelçisi’ni alçak koltukta oturtan İsrail’e hükümet ve muhalefetten tepki geldi. Dışişleri Komisyonu Başkanı Murat Mercan “Türkiye Muz Cumhuriyeti değil” dedi. *

Gündem adam, yüce kurtarıcı Polat Alemdar yine yaptı yapacağını. İsrail ile Türkiye arasında daha önceleri de yaşanan "sözüm ona dizi gerginliği" yeniden nüks etti.
Yukarıda alıntı yaptığım haber başlığının devamında geçen “kem sözün sahibine aittir", “Türkiye, Muz Cumhuriyeti değildir” şeklindeki ifadeler ister istemez insanı düşünceye sokuyor. İsrailin şöyle bir mantık bunalımına girdiğini düşünmüyorum;
Türkiye Muz Cumhuriyeti değil (ve) kem söz sahibine ait (ise) İsrail Muz Cumhuriyeti midir?
"Kendi diyen kendi oluy bikeyem", "küştüm ben davoşa da geymem aytık" şeklinde çocuksu tepkilerle, İsrail'i benzeri davranışlardan ne kadar caydırabilirler onu söyleyen siyasetçiler düşünsün.
Bu haberi okuduktan sonra kafama takılan asıl soru "Türkiye Muz Cumhuriyeti midir?" sorusu. Tabii ki bu soruya yanıt bulmak için önce soruyu anlamalı. Muz Cumhuriyeti ne demek acaba? Wikipedia ya göre;
Banana republic is a pejorative term for a country that is politically unstable, dependent on limited agriculture (e.g. bananas), and ruled by a small, self-elected, wealthy, and corrupt clique.**
Muz Cumhuriyeti: tutarsız politikalara sahip, kıt zirai kaynaklarla geçinmeye çalışan (örneğin muz) ve küçük, kendi kendini seçen(halkın seçmediği), zengin, bayağılaşmış bir grup tarafından hükmedilen ülke benzetmesi yaparak bir ülkeyi yermek için kullanılan tabir.

Yermek için kullanılan bir terim olduğundan bu terimi duyunca gözümde canlanan ülkeleri saymıyorum. Fakat sizin de aklınıza benzer bazı ülkeler geleceğini düşünüyorum. Gerçekten de bu ülkeler ticari faaliyetleri yetersiz ve demokrasiden yana fakir ülkeler gibi görünüyor. Benim aklıma gelen ülkelerin ortak özellikleri ise Amerika ile, İsrail ile aralarında göbek bağlı olmaması. Hem İsrail bağımlısı olup hem bize Muz Cumhuriyeti demeyin bozuluyoruz demek de ne oluyor. Belki de haklılar, belki kişi başı milli gelirin, bizdekinin iki katından fazla olduğu bir ülkeden bakınca Türkiye bir Muz Cumhuriyeti gibi görünüyor. Belki de kötü ama bağımsız bir ekonomisi, politikası olan bir Muz Cumhuriyeti bile değiliz, olamadık.
Sanırım ekonomik, politik, bilimsel, kültürel alanlarda hem bağımlı hem de kötüyüz. Lafa gelince, tabiri caizse "dayılandığımız" ülkelerin ekonomisiyle yatıp kalkıyoruz. Onların ilaçları ile iyileşiyor, onların içeceklerini içiyor, onların silahlarını kullanıyoruz. Onların şarkılarını dinliyor, onların kıyafetlerini giyip onların dilini , onların televizyonlarını taklit ediyoruz, ben bu yazıyı onların icat edip ürettiği bilgisayarla yazıyorum ve sonra yine onların tabiriyle "Muz Cumhuriyeti" değiliz diyoruz. Acaba biz Muz Cumhuriyeti değil miyiz? Yoksa o kadar bile olamadık mı?...

8 Ocak 2010 Cuma

FORTRAN ile birim dönüştürücü

Üniversitelerde verilen eğitimin ilginçliğini uzun zamandır garipse(ye)miyorum. Fakat burada (KKTC) İnşaat Mühendisliği öğrencilerine bilgisayar dersinde verilen ödev gerçekten ilginç. Aslında verilen ödevden çok yapılan ödev ilginç. Ödev şu; 31 adet hacim birimini birbirine çeviren bir FORTRAN programı yazınız. Bu program için öğrencilerin 170 sayfalık çıktısı olan bir kod yazdıklarını duyunca bu iş için gerçekten yarım sayfadan fazlası gereklimidir diye düşündüm, sanırım gereksiz. 170 sayfaya binlerce kod satırı sığdığına göre ne tarz bir birim dönüştürücüsünün hemen hemen MINIX 1.0 işletim sistemi kadar kod satırına sahip olabileceğini düşündüm. Belki bir İnşaat Mühendisi adayının işine yarar diye aşağıdaki kodu yazıyorum. Sanırım 1000 puntoluk bir yazı tipi kullanılırsa 170 sayfa edebilir. Acaba bazı şeyleri hiç öğretmeseler daha mı iyi?...

      PROGRAM CONVERT      
      CHARACTER DISP(32)*20
      DOUBLE PRECISION VAL, RETVAL, RATIO(31)
      INTEGER U1, U2, I
      DATA DISP/"acre foot","barrels (oil)","bushels (UK)",
     &"bushels (US)","centiliters","cubic centimeters",
     &"cubic decimeters","cubic decameters","cubic feet",
     &"cubic inches","cubic meters","cubic millimeters",
     &"cubic yards","cups","deciliters","fluid ounces (UK)",
     &"fluid ounces (US)","gallons (UK)","gallons, dry (US)",
     &"gallons, liquid (US)","liters l or L","liters (1901-1964)",
     &"milliliters","pints (UK)","pints, dry (US)",
     &"pints, liquid (US)","quarts (UK)","quarts, dry (US)",
     &"quarts, liquid (US)","table spoons","tea spoons","E X I T"/
      DATA RATIO/1233481.83754752,158.987294928,36.36872,
     &35.23907016688,0.01,1E-3,1,1E6,28.316846592,0.016387064,
     &1E3,1E-6,764.554857984,0.2365882365,0.1,0.0284130625,
     &0.0295735295625,4.54609,4.40488377086,3.785411784,1,
     &1.000028,1E-3,0.56826125,0.5506104713575,0.473176473,
     &1.1365225,1.101220942715,0.946352946,0.01478676478125,
     &0.00492892159375/

10    WRITE (*,'(/,A,/,A)') "                   UNIT TABLE",
     &"-------------------------------------------------"
      DO I = 1, 31, 2
          WRITE (*,'(A,I2,A,A,T20$)') '[', i   , '] ', DISP(I)
          WRITE (*,'(A,I2,A,A)'     ) '[', i+1 , '] ', DISP(I+1)
      ENDDO
      WRITE (*,'(/,A$)') 'Select unit to convert FROM ? '
      READ  (*,*) U1
      WRITE (*,'(/,A$)') 'Select unit to convert TO ? '
      READ  (*,*) U2
      IF ((U1 .EQ. 32) .OR. (U2 .EQ. 32)) STOP
      IF ((U1 .GT. 32) .OR. (U2 .GT. 32)) GOTO 10
      WRITE (*,'(/,A$)') 'Enter the amount ? '
      READ  (*,*) VAL
      RETVAL = (VAL * RATIO(U1)) / RATIO(U2)
      WRITE (*,'(/,F15.5,A,A,A,F15.5,A,A,/)') VAL,' ',DISP(U1),
     &' = ',RETVAL,' ',DISP(U2)
      STOP
      END

14 Kasım 2009 Cumartesi

PHP ve curl ile form gönderme örneği

  $cnt = 0;
  $path = "./list.csv";
  $handle = fopen($data_file, "r");
  $lines=file($data_file);

  $idx = 0;
  $line = $lines[$i];
  $licensePre = 0;

  while (is_null($lines[$idx]) != true)
    {
      $line = $lines[$idx];
      $raw = explode(',',$line);


      if ($licensePre == (int)$raw[0])
    {
      $idx = $idx + 1;
      continue;
    }

      $url = "http://www.*****.***/****/";
      $formUrl = '*****.php?tpl=***&main=33';

      $nameSurname = explode(' ',$raw[1]);
      $nameSize = count($nameSurname);
      $name = $nameSurname[0];
      $ns = 1;

      if ($nameSize > 2)
        {
          for ($ns=1; $ns<$nameSize-1; $ns++)
        $name = $name . " " . $nameSurname[$ns];
        }

      $surname = $nameSurname[$nameSize - 1];
      $licenseNo = $raw[0];
      $teamName = $raw[5];

      $rawLicenseDate = explode('/',$raw[4]);
      $rawBirthDate = explode('/',$raw[2]);

      $birthPlace = ($raw[3]) ? $raw[3] : '            ';

      $licenseDay = ($rawLicenseDate[1]) ? $rawLicenseDate[1] : '';
      $licenseMonth = ($rawLicenseDate[0]) ? $rawLicenseDate[0] : '';
      $licenseYear = ($rawLicenseDate[2]) ? $rawLicenseDate[2] : '';
      $birthDay = ($rawBirthDate[1]) ? $rawBirthDate[1] : '';
      $birthMonth = ($rawBirthDate[0]) ? $rawBirthDate[0] : '';
      $birthYear = ($rawBirthDate[2]) ? $rawBirthDate[2] : '';

      $filename = "./pic/{$licenseNo}.jpg";

      if (file_exists($filename))
        $img = "@{$filename}";
      else
        $img = '';

      $data = array(
          'emails' => '****',
          'password' => '***',
          'txtPlayerName' => $name,
          'txtPlayerSurname' => $surname,
          'txtLicenseNo' => $licenseNo,
          'playerPosition' => '0',
          'teamName' => (int)$teamName,
          'national_team_id' => '-1',
          'license_given_day' => $licenseDay,
          'license_given_month' => $licenseMonth,
          'license_given_year' => $licenseYear,
          'license_end_day' => '',
          'license_end_month' => '',
          'license_end_year' => '',
          'birth_day' => $birthDay,
          'birth_month' => $birthMonth,
          'birth_year' => $birthYear,
          'placeOfBirth' => $birthPlace,
          'btnSubmit' => 'Submit >>',
          'image' => $img,
      );

      $ch = curl_init();

      curl_setopt($ch, CURLOPT_URL, $url . $formUrl);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      $curlrt = curl_exec($ch);
      $licensePre = $licenseNo;

      $cnt++;

      echo $cnt . "   " . $line . "\n";
      $idx = $idx + 1;
    }
?>

7 Mayıs 2009 Perşembe

Ramsey sayıları için naçizane bir üst limit

R(k,k) <= 2R(k,k-1)

Kanıt :
2R(k,k-1) düğümlü iki renkli tamamlanmış bir çizgeyi ele alalım. Bu çizgenin herhangi bir düğümü (D düğümü diyelim) tek-renk olan en az R(k,k-1) tane kenar barındırır. (Güvercin yuvası ilkesi)

Bu tek-renk kenarlarların bir uçları aynı düğümde olduğuna göre diğer uçları tamamen farklı düğümlerde sonlanmalıdır.

R(k,k-1) düğümün oluşturduğu bu alt çizgeyi (Ç diyelim) inceleyelim.

R(k,k) nın koşuluna bakalım. Bu çizge en azından k düğümlü tek-renk tamamlanmış bir alt-çizge
barındırmalıdır.

R(k,k-1) in koşullarına bakalım. Bu çizge en azından a renkli k düğümlü yada b renkli k-1 düğümlü bir
alt-çizge barındırmalıdır.

R(k,k-1) = R(k-1,k) olduğuna göre
D düğümüne bağlı tek-renkli R(k,k-1) tane kenarın rengi

  • a ise R(k-1,k) dan dolayı :

    • Ç çizgesi b renkli k düğümlü bir alt-çizge barındırır ya da

    • Ç çizgesi a renkli k-1 düğümlü bir alt çizge barındırır ve bu alt çizgeye D düğümü ilave edilirse k düğümlü a renkli bir alt çizge elde edilir.

  • b ise R(k,k-1) den dolayı :

    • Ç çizgesi a renkli k düğümlü bir alt-çizge barındırır ya da

    • Ç çizgesi b renkli k-1 düğümlü bir alt çizge barındırır ve bu alt çizgeye D düğümü ilave edilirse k düğümlü b renkli bir alt çizge elde edilir.

Görüldüğü gibi her durumda k düğümlü tek-renk bir alt çizge kaçınılmazdır.
O halde R(k,k) <= 2R(k,k-1) 'dir.


26 Şubat 2009 Perşembe

60415263038565101838178326743348811045937215431513389 kat daha kolay.

(Eğer benden başka okuyan ve oylayan varsa) Çok ilginç bir yazı bekleyenleri hayal kırıklığına uğratıyor olabilirim ama 60415263038565101838178326743348811045937215431513389 kat daha "kolay" bir yöntemin daha kolay olup olmadığına karar vermek o kadar kolay bir iş değil gibi görünüyor. Zoru sevmediğimden ya da genel bir "matematikçicik'in" sahip olduğu tembelliğine sahip olduğumdan bu fikri çokça düşünmedim. Bir sonraki yazıda çok daha tembel bir yöntem ile fakat çok daha BOINCvari, PARALELvari bir yöntem ile probleme yaklaşmayı düşünüyorum. Fakat şimdi söz verdiğim gibi bu problemi nasıl 60415263038565101838178326743348811045937215431513389 kat daha "kolay" çözebileceğimizden söz etmeliyim. Önceki yazımda söz ettiğim şu büyük sayı, 43 kişinin iştirak ettiği olası tüm tanışıklık hallerinin incelendiği durumları ifade ediyordu. Hâlbuki bu durumların her birini incelememize hacet yoktur. Bu sayı, kişilerin kişilikleri göz önüne alınarak hesab edilmiş bir sayıdır. Kişileri kişilikleştirirsek (ki bizim problemimiz bunu mümkün kılıyor) elde edilecek sayı eş biçimli olmayan 43 noktalı olası tüm çizgelerin sayısına denk düşer ve bu sayı da sözünü ettiğimiz sayının 60415263038565101838178326743348811045937215431513389 da biridir.
Şu halde incelememiz gereken durum sayısı 60415263038565101838178326743348811045937215431513389 kat azalmıştır. Öyleyse artık problemimiz 60415263038565101838178326743348811045937215431513389 kat daha kolay bir problemdir. Fakat bu hali ile bile çok çok .... çok zor bir problemdir.

13 Şubat 2009 Cuma

Basit bir problem ne kadar zor olabilir ?

Başlık her ne kadar çelişkili görünse de aslında merak ettiğim soru tam olarak başlıktaki soru.
Eğer başlığı "kolay bir problem ne kadar zor olabilir?" şeklinde yazmış olsaydım gerçekten de çelişkili bir durumla karşı karşıya kalabilirdik. O yüzden en azından bu yazı için problemleri şu şekilde sınıflandırmayı tercih ediyorum;
  • Basit ve kolay problemler.
  • Basit ve zor problemler.
  • Karmaşık ve kolay problemler.
  • Karmaşık ve zor problemler.
Basitlik yahut karmaşıklık ile problemin anlatılabilirliğini ve anlaşılabilirliğini ifade ediyorum. Zorluk ya da kolaylık ile ise problemin çözümünün kolay yahut zor oluşundan bahsediyorum.
Problemlerin basit yada karmaşık oluşu haliyle göreceli bir kavram olmakla birlikte çoğu kişi tarafından kabul görebilecek sınıflandırmalar yapabiliriz.

Başlıktan da anlaşılacağı gibi ben bu yazıda bahsedeceğim problemin (parti problemi) basit bir problem olduğunu düşünüyorum. Kanımca, matematik ve bilgisayar konusunda bilgi sahibi olmayan birisi bile iyi anlatıldığı takdirde bu problemi çabucak kavrayabilir. Bir tek cümle ile bile yeterince açık bir biçimde örneklenip ifade edilebilinir.

Şimdi bu "basit" problemi yine basit bir yöntem kullanarak çözmenin, kolay mı yoksa zor mu olduğunu inceleyebiliriz.
En basit kabakuvvet yöntemi ile bu problemi çözmeye çalıştığımızı düşünelim. O halde tüm durumları tek tek denememiz gereklidir.
Örneğin 5 kişilik parti probleminin çözümünün bilinen aralığı [43,49]. Yani problemin çözümü 43, 44, 45, 46, 47, 48 ya da 49 sayılarından bir tanesidir. Problem en az davetli sayısını istediğine göre 43 olup olmadığına bakalım.

Basit kabakuvvet yöntemimizle probleme yaklaştığımızda 43 kişilik bir partide kişilerin tüm olası el sıkışma (tanışıklık yada benzeri) durumlarını teker teker inceleriz. Eğer olası tüm durumlarda parti probleminin bize söylediği iki koşuldan:
  • her biri diğer 4'ü ile el sıkışmış 5 kişilik bir grup,
  • her biri diğer 4'ü ile el sıkışmamış 5 kişilik bir grup.
en az biri sağlanıyorsa çözüm = 43, aksi halde çözüm > 43 sonucuna varırız.

Şimdi olası tüm el sıkışma durumlarının kaç tane olduğunu hesaplayalım. El sıkışma olayı iki kişi arasında ya gerçekleşir ya da gerçekleşmez. Ve bu iki kişi 43 kişinin 2 li kombinasyonlarının sayısı kadar farklı biçimde seçilebilinir. O halde;
2^(43*42/2) tane farklı durum söz konusudur. Basit kabakuvvet yöntemimiz 2^903 tane farklı el sıkışma kombinasyonunu incelemek durumundadır. Bu da tam olarak incelenmesi gereken;

67621699985365151533099492469314125634412457732623554832378970755414
25952726078201272540875362012005051832255913691247089694048761634374
87680689892432562658442734955518726507735976342625825844547871018122
51032115730947621472199902571314803042180668990660938354910463787008

adet durum olduğu anlamına gelir. 272 basamaklı bu sayıyı 18 defa katrilyon çarpılarak ifade edilebilecek (katrilyon kere katrilyon kere ... katrilyon) sayıdan daha büyüktür.

Dünyada katrilyon tane ev olsa, her bir evde şu anda dünyada bulunan en hızlı süper bilgisayardan katrilyon kat daha hızlı olan bilgisayarlardan katrilyon tane olsa yine de bu basit kabakuvvet yöntemiyle problemi çözmek dünyanın yaşının katrilyonlar kere katrilyonlarca katından daha uzun zaman alırdı.

Demek ki bu basit problem, basit bir kabakuvvet yöntemiyle çözmek için zor bir problem. Tabii kullandığımız kaba kuvvet yöntemini biraz karmaşıklaştırmak problemi kolaylaştırmada bize yardımcı olabilir. Bir sonraki yazıda aynı problemi 60415263038565101838178326743348811045937215431513389 kat daha "kolay" fakat yine de "zor" :) bir biçimde nasıl çözebileceğimizi anlatmayı düşünüyorum...

11 Ocak 2009 Pazar

Ramsey Sayıları ve BOINC

Merhabalar.
Son birkaç haftadır Yakın Doğu Üniversitesi Bilgisayar Mühendisliği CEN Araştırma Grubu ile birlikte Ramsey Sayıları üzerine bir BOINC projesi ile meşgulüz. Kısaca söz edecek olursam Ramsey Sayılarının bilinenler aralığını daraltmayı amaçlayan gönüllü hesaplama - daha doğrusu hesaplatma- mantığına dayanan bir proje.

Birkaç ay içerisinde hayata geçirip sonraki birkaç ay içerisinde de sonuç-lar- alabilmeyi planlıyor ya da ümit ediyoruz.

Proje faaliyete geçtiği zaman bilgisayarınıza BOINC istemcisini kurarak yardımcı olabilirsiniz. Projenin faaliyete geçmesi konusunda da aşağıda verdiğim subversion deposunu takip ederek yardımcı olabileceğinizi düşündüğünüz herhangi bir konuda bizimle iletişime geçebilirsiniz. (Şu anda depoda herhangi bir kararlı sürüm bulunmamakta. Yazdığımız kodların bilgisayarınızı yada evinizi havaya uçurma potansiyeli bulunmadığını düşünüyoruz. Fakat şimdilik kodun çalışacağını ve doğru hesap yapacağını garanti edemeyiz, hatta hiçbir zaman böyle bir garanti vermeyi düşünmüyoruz:) Kodların tamamı GNU/GPL lisansına sahiptir. Kullanabilir, kopyalayabilir, değiştirebilir, -üç beş kuruşunu bize bağışlamak koşuluyla- satabilir, atabilir, ödev olarak sunabilir ve hatta ben yazdım diyerek kız/erkek tavlamayı deneyebilirsiniz.)

Aşağıdaki kabiliyetlerden herhangi birine, çoğuna ya da hepsine sahipseniz bu bize yardımcı olabileceğiniz anlamına gelebilir.

* Matematik (Çizge Kuramı, Kombinatorik, ...)
* Programlama (C / C++ / Assembly / Python)
* BOINC API, nauty, NumPy
* İşletim Sistemleri (Linux, OSX, Windows)
* İşlemci Mimarileri (x86, x86_64--AMD64,IA64, PPC)
* İşlemci Teknolojileri (MMX, SSE, SSE2, NVIDIA-CUDA ...)
* Veritabanı (MySQL / SQLite)
* Görsel tasarım (Tercihen Inkscape ve GIMP)
* (XHTML / JavaScript (prototype.js) / PHP)
* Tercüme (Türkçe <> İngilizce, ....)

https://svn.neu.edu.tr/cen/

11 Aralık 2008 Perşembe

Ubuntu and BOINC Server

Hi! In this post we will compile latest stable BOINC server code on Ubuntu 8.10 (Intrepid Ibex) Desktop box.

Actually there is a cookbook for Boinc server installation on Debian 4.0 box so we can use directions in this cookbook, because Ubuntu is debian based. http://boinc.berkeley.edu/trac/wiki/ServerIntro

First of all we have to install following packages which are needed to compile boinc server code. You can easily install these packages by using Synaptic Package Manager.

m4
make
autoconf
automake
gcc
g++
pkg-config
libtool
subversion
vim

apache2-mpm-prefork
libapache2-mod-php5
mysql-client-5.0
mysql-server-5.0
php5-mysql
php5-cli
php5-gd
phpmyadmin
python-mysqldb
libmysql++-dev
libssl-dev

You should choose a root password for mysql and select apache2 for phpmyadmin when asked by Synaptic.

After installation of above packages you should create an user for boinc server. Open an terminal and run following commands to create boincadm user.
useradd -m -s /bin/bash boincadm
usermod -G boincadm www-data

And than we should create mysql user and grant permissions for boinc.
mysql -h localhost -u root -p
(Enter your mysql root password which you entered when using Synaptic)
GRANT ALL ON *.* TO 'boincadm'@'localhost';
SET PASSWORD FOR 'boincadm'@'localhost'='';
quit


Then switch to user boincadm by following code
su boincadm

Now, we should get boinc server source code from BOINC's svn source to boinc folder in your home directory (/home/boincadm/boinc). Run following commands to do this.
cd ~
svn co http://boinc.berkeley.edu/svn/branches/server_stable boinc

Above command may take some time depending on your internet connection speed.

Finally we are going to compile boinc server code. Run following commands respectively.

cd ~/boinc
./_autosetup
./configure --disable-client
make

(Do not make install)

If you don't encounter any error this means you are ready to have a boinc server. Simply, we can create a boinc sample project, this is what we will discuss in next post.

Ubuntu ve BOINC

Merhabalar. Türkçe kaynak olması maksadıyla ubuntu 8.10(Intrepid Ibex) Desktop üzerine BOINC server kurulumunu anlatacağım.

Aslında debian 4.0 için BOINC server kurulumu (yada derlenmesi) ile ilgili bir belge var, ubuntu da debian tabanlı olduğu için pek sıkıntı çekmeyeceğiz. Sözünü ettiğim belge http://boinc.berkeley.edu/trac/wiki/ServerIntro adresinde bulunuyor.

Öncelikle BOINC server kodunun derlenebilmesi için gereken paketleri kurmalıyız. Bu paketleri Synaptic (paket yöneticisi) ile kolayca yükleyebilirsiniz.

m4
make
autoconf
automake
gcc
g++
pkg-config
libtool
subversion
vim

apache2-mpm-prefork
libapache2-mod-php5
mysql-client-5.0
mysql-server-5.0
php5-mysql
php5-cli
php5-gd
phpmyadmin
python-mysqldb
libmysql++-dev
libssl-dev

Paketler yüklenirken mysql root şifresini belirleyeceksiniz ve phpmyadmin için apache2 yi seçmelisiniz.
Bu paketleri yükledikten sonra bir terminal açıp
useradd -m -s /bin/bash boincadm
usermod -G boincadm www-data
komutları ile boincadm kullanıcısını oluşturmalıyız.

Sonra teminale
mysql -h localhost -u root -p komutunu verin. Sizden belirlemiş olduğunuz mysql root parolanız istenecek. Parolanızı girdikten sonra
GRANT ALL ON *.* TO 'boincadm'@'localhost';
SET PASSWORD FOR 'boincadm'@'localhost'='';
quit
komutları ile boinc server için mysql kullanıcısı oluşturuyoruz.

sonra
su boincadm
komutu ile boincadm kullanıcısına geçebiliriz.

Şimdi BOINC kaynak kodunu indirmeliyiz. kaynak kodları boincadm kullanıcısıyken /home/boincadm/boinc dizinine indirmek için aşağıdaki komutu kullanıyoruz.
cd ~
svn co http://boinc.berkeley.edu/svn/branches/server_stable boinc

Bu komut internet bağlantı hızınıza göre biraz zaman alabilir.

daha sonra sırasıyla aşağıdaki komutları vererek boinc server kodunu derleyebiliriz.
cd ~/boinc
./_autosetup
./configure --disable-client
make
(Make install yapmayın)
Eğer herhangi bir sorunla karşılaşmadıysanız artık çalışan bir boinc servere sahip olabilirsiniz. Bunun en basit yolu BOINC serverinize bir deneme projesi kurmaktır. Bir sonraki yazıda bunu yapacağız. Şimdilik hoşçakalın.

16 Ağustos 2008 Cumartesi

bolumle.m

%    Yayıncı     : Şenol Korkmaz < senol.korkmaz@gmail.com >
% Dosya Adı : bolumle.m
% Gerekenler : partitions.m < http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=12009&objectType=file >
% Tanım : Sayı Bölümleme maksatlı MATLAB işlevi
% Kullanım : bolumle(n,m,k)
%
% Girdi : n --> Bölümlenecek sayı
% : m --> Bölümlemelerin kaçar sayıdan oluşacağını belirten vektör
% : k --> Bölümlemede kullanılacak sayıların seçileceği vektör
%
% Çıktı : Bu işlev bölümlemeleri döndürür
%
% Sürüm : 1.0
%
% Lisans : GNU/GPL v3 <http://www.gnu.org/licenses/>

function bolumler = bolumle(n,m,k) % İşlevi ve girdilerini tanımla

if (nargin==1) % Eğer sadece bir girdi var (n) ise
m = 1:n; % m = 1 den n'ye kadar tamsayıları içeren vektör
k = m; % k = 1 den n'ye kadar tamsayıları içeren vektör
end

if (nargin==2) % Eğer sadece iki girdi var (n & m) ise
k = 1:n; % k = 1 den n'ye kadar tamsayıları içeren vektör
end

% k vektöründeki sayıları kullanarak harici partitions fonksiyonu ile n'i bölümle
% hamBolumler, her bölümlemede hangi sayının kaçar defa kullanıldığı bilgisini içerecek
hamBolumler = partitions(n,k);

hamBolumler = hamBolumler(find(ismember(sum(hamBolumler,2),m)==1),:); % m vektöründe belirtilenler kadar sayı kullanılmış bölümlemeleri al

bolumler = zeros(size(hamBolumler,1),max(m)); % Çıktı şablonu

for i = 1:size(hamBolumler,1) % Her bir ham bölüm için döngü

buSatir = []; % O an işlenecek satır için boş vektör

for j = 1 : size(hamBolumler,2) % Her bir ham bölümü oluşturan her bir sayı için döngü

% hamBolumler vektöründe her sayının kaçar defa kullanıldığı bilgisi yer almaktadır
% bu bilgiyi kullanarak buSatır vektörüne o sayıları kullanıldıkları kadar ( repmat ile)
% ekler ve onları azalan sıra ile sıralarız
buSatir = horzcat(buSatir,repmat(k(j),1,hamBolumler(i,j)));
end

% buSatır vektörünün boyu max(m) kadar olmalıdır, bu yüzden kalan yerlere 0 doldurulur
buSatir = horzcat(buSatir,repmat(0,1,size(bolumler,2)-size(buSatir,2)));

% buSatır vektörünü çıktıya ekle
bolumler(size(hamBolumler,1)-i+1,:) = sort(buSatir,'descend') ;
end

Konular

Matematik (5) Kod (4) Gündem (2) Bilgisayar (1) İnternet (1)