"Cloud Computing" Nedir - Management Engineering Graduation Project Determination Öncei Araştırma @ 03-04-2009 12:51
Uzun süredir iş ve akademik yoğunluktan ötürü blog'a dönüp bakamadım, Management Engineering double degree eğitimimin Graduation Project'i için yaptığım araştırmalarda üzerinde durduğum bu konuda bildiklerimi payşalmak istedim,
Siz de sıklıkla rastlamaya başladınız bu kelimeye. Cloud Computing (Bir Türkçe önerisi olan?) sanırım ilk defa Google'dan duyduğumuz oldukça yeni sayılabilecek bir kavram.
Cloud Computing temel olarak bir uygulamanın, web üzerinden, kendi sisteminizde herhangi bir kurulum gerektirmeden çalışabilmesi demek. Bu uygulamalardan kasıt: Word, Excel gibi ofis uygulamaları olabileceği gibi yedekleme yazılımları da olabilir. Tanımı açıklamak adına sanırım en iyi örnek ise Google Docs uygulaması olacaktır. Bildiğiniz üzere Google Docs sayesinde sisteminize hiç bir şey kurmadan, dünyadaki istediğiniz yerden, milyonlarca insanla beraber erişebilirsiniz.
Aynı zamanda Google'ın yeni tarayıcısı Google Chrome da bir Cloud Computing örneği olarak gösteriliyor. Çünkü Chrome her ne kadar sisteminize kurulum gerektirse de web servislerinden de fazlasıyla faydalanıyor.
Kimilerine göre fikrin yaratıcısı Microsoft, kisime göre Google, bir görüşe göre; HD videoları düzenlemek, cep telefonundan 500 gb depolama alanına erişmek, yazılımlara ve verilere dünyanın heryerinden erişmek… İşte bulut’un vaad ettikleri bu ve bunun gibi şeyler. Tüm bunlar için gereken tek şey “internet erişimi” Microsoft bulut’un ardında yatan düşünce temel yazılımlardan tutun da en komplike işletim sistemlerine kadar tüm uygulamaların web üzerinden çalışması. Kullanıcının pahalı donanımlara gereksinimi kalmıyor, sistem güncellemelerini dert etmesi gerekmiyor ve hatta yazılıma para vermesi bile zorunluluk olmaktan çıkıyor. Tüm bunlar bilimkurgu gibi görünebilir ama ilk örnekleri ortada. Google bu kavramın nasıl çalıştığının bir göstergesidir. Ofis araçları, eposta hesapları rss okuyucular takvim ve daha nice program platform farkı gözetmeksizin web tarayıcıda çalışıyor. Tüm programlar ve veriler google sunucularında tutuluyor ve ihtiyaç üzerine yükleniyor. Bunu mümkün kılan Microsoft, google, amazon ve IBM gibi dev firmaların koca sunucu parkları.
Microsof dünyanın 6 yerinde bir futbol sahası genişliğine serverlar bütünü kuruyor adeta bir örümcek ağı gibi çevreleniyor. Bu sunucular ihtiyaçtan fazlasına sahip bir kapasitedeler. Artık herkes verilerini bulut’a yükleyecek ve her bilgisayardan düzeltiyorum internet bağlantısı olan her bilgisayardan aynı verilerine ulaşabilecek.
Özüne bakıldığında bir ağ diye nitelendirilebilecek olan cloud computing, bu ağ üzerinde yapılabilen işlemleri temsil ediyor. Büyük bir bulut içerisine yerleştirilen bilgilere herhangi bir bilgisayardan bağımsız olarak erişilebilecek. Ağ üzerindeki uygulamaların kullandığı teknoloji de bizim sistemimizi ilgilendirmeyecek. Böylelikle bilgisayarlarımız bu ağ üzerinde duran bilgilerimize ulaşmaya yarayan araçlar olarak kullanılacak (2009 Nisan itibariyle çıkarımın :) ).
En son karşıma çıkan ise yine bir başka dev IT ortaklığı Cloud Computing konusunda, Intel, HP ve Yahoo'nun birlikte bir proje üzerinde çalışması, zaten başlı başına bir
olayken, bu projenin farklılığı belki de ilgiyi biraz daha arttırıyor. Google'ın da üzerinde çalıştığı (sanıyorum IBM ortaklığı ile) Cloud Computing, geleceğin önemli yapıtaşlarından birisi olarak görülüyor.
Peki Cloud Computing nedir? Biraz teknik bir konu olduğu için, yaptığım araştırmalardan anladığımı sizinle paylaşacağım. Cloud Computing aslında internet bağlantısıyla bilgisayarların tek bir merkezde toplanması anlamına geliyor. Yani sizin bir bilgisayarınız var ve biraz günü geçmiş bir bilgisayar olsa da internet bağlantınızla bağlanacağınız bu merkez sayesinde, bu merkezin server ını işlemcisini, ram ini, yazılımlarını herşeyini belli bir ücret karşılığında kullanabiliyor hale geleceksiniz. Bu şekilde elinizdeki ortalama bir bilgisayarla, yüksek verimde ve kalitede hizmet alıyor olacaksınız.
Dediğim gibi bu şimdilik bir proje. Öncelikle araştırmacılara ve bilim adamlarına açık olacak. Zaten keşfedilen sıradışı hizmetlerin öncelike bilime sonra ortalama kullanıcıya ulaştığı birçok kez görüldü. Bilim adamlarının ve araştırmacıların bu sistemi kullanarak daha etkin hale getireceğini, ortalama kullanıcıya son ve en iyi haliyle Cloud Computing hizmetinin ulaşacağını düşünüyorum.
Bu sistemin hayata geçmesindeki en önemli engel, internet bağlantısı olacaktır. Kurulacak küçük ağlarda bu problem fazla yaşanmayacaktır ama ağ genişledikçe bu ihtiyaç orantılı bir şekilde artacaktır.Dünyada hizmetin yaygınlaşması uzun zaman alacaktır. Bu hizmetin Türkiye'ye gelişi ise daha sonra olacaktır. Henüz Türkiye'deki bağlantı hızlarının Amerika'nın çok altında olduğunu ve internetin bile henüz tam anlaşılamadığını düşünürsek, bu gelişim için uzun yıllara ihtiyacımız olduğunu söyleyebiliriz.
Peki Intel, HP ve Yahoo neden bu işe girme kararı aldılar ve beraber hareket ediyorlar? Aslında beraber hareket etmelerinin en temel nedeni, her birisinin bu proje içindeki rollerde en iyilerden olması. HP bilgisayar sistemlerinde, Intel bu sistemler içindeki işlemcide, Yahoo ise ağ içindeki yazılım (web sitesi ve hizmetlerinde) dünyanın en iyilerinden. Bu şekilde güçlerini birleştirip, bu sistemi en iyi şekilde tasarlamak istiyorlar. Sonuç olarak kurulacak bu sistem, bir nevi Intel-HP-Yahoo tekeli olacak ve kendi ağları içinde bir Microsoft olacaklar. Yapacakları uygulamalar ve verecekleri ekstra hizmetlerden TTNet'e ADSL için ödediğimiz hizmet bedeli gibi ücret alacaklar.
Yukarıda bahsettiğim konular bir projenin ve detaylarının sadece şu an için görünen hali. Belki buz dağının altı yoktur, belki de tahmin ettiğimizden de büyüktür.
Konuyla ilgili çıkan ve ilgimi çeken haberler;
HP, Intel and Yahoo Team Up In The Clouds
Gartner Says Cloud Computing Will Be As Influential As E-business
IBM, Google, Universities Combine 'Cloud' ForcesAlber Einstein Quotes - Not mine, I'm just one of the inspireds :) @ 16-11-2008 18:27
These are uncle Albert's quotes, not mine, stubmle is the core of this publishing, thnx Mr.Einstein you'll be always my hero and inspiration;)
Collected Quotes from Albert Einstein - "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
- "Imagination is more important than knowledge."
- "Gravitation is not responsible for people falling in love."
- "I want to know God's thoughts; the rest are details."
- "The hardest thing in the world to understand is the income tax."
- "Reality is merely an illusion, albeit a very persistent one."
- "The only real valuable thing is intuition."
- "A person starts to live when he can live outside himself."
- "I am convinced that He (God) does not play dice."
- "God is subtle but he is not malicious."
- "Weakness of attitude becomes weakness of character."
- "I never think of the future. It comes soon enough."
- "The eternal mystery of the world is its comprehensibility."
- "Sometimes one pays most for the things one gets for nothing."
- "Science without religion is lame. Religion without science is blind."
- "Anyone who has never made a mistake has never tried anything new."
- "Great spirits have often encountered violent opposition from weak minds."
- "Everything should be made as simple as possible, but not simpler."
- "Common sense is the collection of prejudices acquired by age eighteen."
- "Science is a wonderful thing if one does not have to earn one's living at it."
- "The secret to creativity is knowing how to hide your sources."
- "The only thing that interferes with my learning is my education."
- "God does not care about our mathematical difficulties. He integrates empirically."
- "The whole of science is nothing more than a refinement of everyday thinking."
- "Technological progress is like an axe in the hands of a pathological criminal."
- "Peace cannot be kept by force. It can only be achieved by understanding."
- "The most incomprehensible thing about the world is that it is comprehensible."
- "We can't solve problems by using the same kind of thinking we used when we created them."
- "Education is what remains after one has forgotten everything he learned in school."
- "The important thing is not to stop questioning. Curiosity has its own reason for existing."
- "Do not worry about your difficulties in Mathematics. I can assure you mine are still greater."
- "Equations are more important to me, because politics is for the present, but an equation is something for eternity."
- "If A is a success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut."
- "Two things are infinite: the universe and human stupidity; and I'm not sure about the the universe."
- "As far as the laws of mathematics refer to reality, they are not certain, as far as they are certain, they do not refer to reality."
- "Whoever undertakes to set himself up as a judge of Truth and Knowledge is shipwrecked by the laughter of the gods."
- "I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones."
- "In order to form an immaculate member of a flock of sheep one must, above all, be a sheep."
- "The fear of death is the most unjustified of all fears, for there's no risk of accident for someone who's dead."
- "Too many of us look upon Americans as dollar chasers. This is a cruel libel, even if it is reiterated thoughtlessly by the Americans themselves."
- "Heroism on command, senseless violence, and all the loathsome nonsense that goes by the name of patriotism -- how passionately I hate them!"
- "No, this trick won't work...How on earth are you ever going to explain in terms of chemistry and physics so important a biological phenomenon as first love?"
- "My religion consists of a humble admiration of the illimitable superior spirit who reveals himself in the slight details we are able to perceive with our frail and feeble mind."
- "Yes, we have to divide up our time like that, between our politics and our equations. But to me our equations are far more important, for politics are only a matter of present concern. A mathematical equation stands forever."
- "The release of atom power has changed everything except our way of thinking...the solution to this problem lies in the heart of mankind. If only I had known, I should have become a watchmaker."
- "Great spirits have always found violent opposition from mediocrities. The latter cannot understand it when a man does not thoughtlessly submit to hereditary prejudices but honestly and courageously uses his intelligence."
- "The most beautiful thing we can experience is the mysterious. It is the source of all true art and all science. He to whom this emotion is a stranger, who can no longer pause to wonder and stand rapt in awe, is as good as dead: his eyes are closed."
- "A man's ethical behavior should be based effectually on sympathy, education, and social ties; no religious basis is necessary. Man would indeeded be in a poor way if he had to be restrained by fear of punishment and hope of reward after death."
- "The further the spiritual evolution of mankind advances, the more certain it seems to me that the path to genuine religiosity does not lie through the fear of life, and the fear of death, and blind faith, but through striving after rational knowledge."
- "Now he has departed from this strange world a little ahead of me. That means nothing. People like us, who believe in physics, know that the distinction between past, present, and future is only a stubbornly persistent illusion."
- "You see, wire telegraph is a kind of a very, very long cat. You pull his tail in New York and his head is meowing in Los Angeles. Do you understand this? And radio operates exactly the same way: you send signals here, they receive them there. The only difference is that there is no cat."
- "One had to cram all this stuff into one's mind for the examinations, whether one liked it or not. This coercion had such a deterring effect on me that, after I had passed the final examination, I found the consideration of any scientific problems distasteful to me for an entire year."
- "...one of the strongest motives that lead men to art and science is escape from everyday life with its painful crudity and hopeless dreariness, from the fetters of one's own ever-shifting desires. A finely tempered nature longs to escape from the personal life into the world of objective perception and thought."
- "He who joyfully marches to music rank and file, has already earned my contempt. He has been given a large brain by mistake, since for him the spinal cord would surely suffice. This disgrace to civilization should be done away with at once. Heroism at command, how violently I hate all this, how despicable and ignoble war is; I would rather be torn to shreds than be a part of so base an action. It is my conviction that killing under the cloak of war is nothing but an act of murder."
- "A human being is a part of a whole, called by us _universe_, a part limited in time and space. He experiences himself, his thoughts and feelings as something separated from the rest... a kind of optical delusion of his consciousness. This delusion is a kind of prison for us, restricting us to our personal desires and to affection for a few persons nearest to us. Our task must be to free ourselves from this prison by widening our circle of compassion to embrace all living creatures and the whole of nature in its beauty."
- "Not everything that counts can be counted, and not everything that can be counted counts." (Sign hanging in Einstein's office at Princeton)
Research: What is a Virus ? What is a Trojan ? (A simple research just after my new trojans :) ) @ 18-09-2008 23:49
What is a computer virus ?
Well, the best definition we have been able to come up with is the
following:
#1 A virus is a program that is able to replicate, that is create
(possibly modified) copies of itself.
#2 The replication is intentional, not just a side-effect.
#3 At least some of replicants in turn are also viruses by the same
definition.
#4 A virus has to attach itself to a "host", in the sense that
execution of the host implies execution of the virus.
#1 distinguishes viruses from non-replicating malware, such as ANSI bombs.
#2 distinguishes between viruses and programs such as DISKCOPY.COM
that can replicate.
#3 is needed to exclude certain "intended viruses", that attempt to
replicate, but fail - they simply do not qualify as "real" viruses.
#4 is necessary to distinguish between viruses and worms, which do not
require a host.
A Trojan is a program that pretends to do something useful (or at least
interesting), but when it is run, it may have some harmful effect, like
scrambling your FAT (File Allocation Table), formatting the hard disk or
releasing a virus.
Viruses and Trojans may contain a "time-bomb", intended to destroy
programs or data on a specific date or when some condition has been
fulfilled.
A time bomb is often designed to be harmful, maybe doing something like
formatting the hard disk. Sometimes it is relatively harmless, perhaps
slowing the computer down every Friday or making a ball bounce around the
screen. However, there is really no such thing as a harmless virus. Even if
a virus has been intended to cause no damage, it may do so in certain cases,
often due to the incompetence of the virus writer or unexpected hardware
or software revisions.
A virus may be modified, either by the original author or someone else, so
that a more harmful version of it appears. It is also possible that the
modification produces a less harmful virus, but that has only rarely
happened.
The damage caused by a virus may consist of the deletion of data or
programs, maybe even reformatting of the hard disk, but more subtle damage
is also possible. Some viruses may modify data or introduce typing errors
into text. Other viruses may have no intentional effects other than just
replicating.
The major groups of viruses on PCs are boot sector viruses (BSV), program
viruses and application viruses.
A BSV infects boot sectors on diskettes and/or hard disks. On diskettes,
the boot sector normally contains code to load the operating system files.
The BSV replaces the original boot sector with itself and stores the
original boot sector somewhere else on the diskette or simply replaces it
totally. When a computer is then later booted from this diskette, the
virus takes control and hides in RAM. It will then load and execute the
original boot sector, and from then on everything will be as usual.
Except, of course, that every diskette inserted in the computer will be
infected with the virus, unless it is write-protected.
A BSV will usually hide at the top of memory, reducing the amount of
memory that the DOS sees. For example, a computer with 640K might appear
to have only 639K.
Most BSVs are also able to infect hard disks, where the process is similar
to that described above, although they usually infect the master boot
record instead of the DOS boot record.
Program viruses, the second type of computer viruses, infect executable
programs, usually .COM and .EXE files, but they sometimes also infect
overlay files, device drivers or even object files.
An infected program will contain a copy of the virus, usually at the end,
in some cases at the beginning of the original program, and in a few cases
the virus is inserted in the middle of the original program.
When an infected program is run, the virus may stay resident in memory
and infect every program run. Viruses using this method to spread the
infection are called "Resident Viruses".
Other viruses may search for a new file to infect, when an infected
program is executed. The virus then transfers control to the original
program. Viruses using this method to spread the infection are
called "Direct Action Viruses". It is possible for a virus to use both
methods of infection.
Most viruses try to recognize existing infections, so they do not infect
what has already been infected. This makes it possible to inoculate
against specific viruses, by making the "victim" appear to be infected.
However, this method is useless as a general defense, as it is not
possible to inoculate the same program against multiple viruses.
The third type of viruses are application viruses, which do not infect
normal programs, but instead spread as "macros" in various types of files,
typically word-processor documents or spreadsheets. This type of viruses
can easily spread through E-mail, when users unknowingly exchange infected
documents.
In general, viruses are just program - rather unusual programs perhaps,
but written just like any other program. It does not take a genius to
write one - many ten year old kids can easily create viruses.
Now - to correct some common misconceptions, here are a few bits of
information about what viruses cannot do.
A virus cannot appear all by itself, it has to be written, just
like any other program.
Not all viruses are intentionally harmful - some may only cause
minor damage as a side effect - however, there is no such thing
as a "harmless" virus.
Reading plain data from an infected diskette cannot cause an
infection. (However, it is not trivial to determine what
"plain data" is)
A write-protected diskette cannot become infected, if the
hardware is working properly.
It used to be the case that a virus could not infect a computer unless it
was booted from an infected diskette or an infected program was run on it,
but alas, this is no longer true. It is possible for a virus infection to
spread, just by the act of reading an infected Microsoft Word document,
for example, or through use of Lotus Notes, to name two well-known
applications.
It also used to be the case that a virus could not infect data files or
spread from one type of computer to another - a virus designed to infect
Macintosh computers could not infect PCs or vice versa, but with the
appearance of application viruses this has changed as well - there are now
a few viruses that can infect WinWord as well as MacWord.
Apart from using anti-virus programs, there are several ways to protect
your computer from viruses:
Rule #1 is: MAKE BACKUPS!!! Keep good backups (more than one) of
everything you do not want to lose. This will not only protect you
from serious damage caused by viruses, but is also necessary in the
case of a serious hardware failure.
Never boot a computer with a hard disk from a diskette because that
is the only way the hard disk could become infected with a boot
sector virus. (Well, strictly speaking, it can happen if you run
a "dropper" program too, but that happens extremely rarely).
If your BIOS allows you to change the boot sequence to "C: A:",
do it. This will give you very good protection against boot
sector virus infections.
Should you, by accident, have left a non-bootable diskette in
drive A: when you turn the computer on, the message
Not a system disk.
may appear. If the diskette was infected with a virus, it will now
be active, but may not have infected the hard disk yet (Most
boot sector viruses will do it right away, however). If this
happens, remove the diskette from the A: drive and turn the computer
off (or press the reset button). It is important to note that
pressing Ctrl-Alt-Del is not sufficient, as a few viruses can
survive that.
Keep all diskettes write-protected unless you need to write to them.
When you obtain new software on a diskette, write-protect the
diskette before you make a backup copy of it. If it is not possible
to make a backup of the diskette, because of some idiotic
copy-protection, I do not recommend using the software.
Be really careful regarding your sources of software. In general,
shrink-wrapped commercial software should be "clean", but there
have been a few documented cases of infected commercial software
and even Microsoft has occasionally distributed infected files.
Public-Domain, Freeware and Shareware packages do not have to be
any more dangerous than "regular" commercial programs - it all
depends on the source. If you obtain software from a BBS, check
what precautions the SysOp takes against viruses. If he does not
screen the software made available for downloading, you should find
another source.
Check all new software for infection before you run it for the
first time. It may even be advisable to use a couple of scanners
from different manufacturers, as no single scanner is able to
detect all viruses.
Obtain Shareware, Freeware and Public-Domain software from the
original author or reliable distribution sites, if at all possible.
Look out for any "unusual" behavior on your computer, like:
Does it take longer than usually to load programs ?
Do unusual error messages appear ?
Does the memory size seem to have decreased ?
Do the disk lights stay on longer than they used to ?
Do files just disappear ?
Anything like this might indicate a virus infection (or just that Windows
is misbehaving).
If your computer is infected with a virus - DON'T PANIC! Sometimes a
badly thought out attempt to remove a virus will do much more damage
than the virus could have done. If you are not sure what to do, leave
your computer turned off until you find someone to remove the virus for
you.
Finally, remember that some viruses may interfere with the disinfection
operation if they are active in memory at that time, so before attempting
to disinfect you MUST boot the computer from a CLEAN system diskette -
preferaply one that has been kept write-protected since it was originally
created.
It is also a good idea to boot from a clean system diskette before
scanning for viruses, as several "stealth" viruses are very difficult do
detect if they are active in memory during virus scanning.
My Top 50 Tools and Their Better Open Source Alternatives for 2008 @ 18-09-2008 23:49
First of all, thank to my ex co friends (colleques) on supporting to report my Open Source tools i have been using today.
Not every proprietary program can drive a person crazy, right?
As you can follow up my writing about Adobe some other softwares like Norton Ghost, are superb tools for anyone to use.
But, the fact that these tools are proprietary can drive open source fanatics up a wall. It’s not the price of the software that makes the real difference (although it’s a reason to migrate from one software to another for many people); it’s the idea that proprietary software comes with boundaries that keeps the user experience confined to…well, being the user. That’s enough to drive any developer crazy. The following fifty proprietary programs are listed in no particular order within broad categories along with their open source alternatives. In some cases you could probably write your own book on frustrations with the proprietary programs shown here. In other cases, you’ll discover that the open source alternative isn’t quite up to snuff yet. And, in other cases still, you’ll learn that some proprietary programs are real gems, but that the open source advocate can replace those gems with equally shiny objects from the open source repertoire.
Basics
- Windows Vista OS to Ubuntu OS: This is Microsoft’s operating system (OS), and even Microsoft fans have become disillusioned with this product. Open source OS alternatives have expanded; but these OS often are difficult for the average user to install, learn, and operate. Why deal with it when Ubuntu has become so easy to use that even the most computer illiterate can jump into this operating system with very little time spent on a learning curve? In fact, users can purchase a Dell computer with Ubuntu already installed. Remember, however, that when it comes to using open source software that the open source community often focuses on applications that can be used through Windows, Mac, Linux, or Unix with the majority seemingly devoted to Windows.
- Internet Explorer Browser to Firefox Browser: Sure, Internet Explorer (IE) is free; but, that’s because it comes packaged with Windows’ operating systems. Free is far different from open source software, where users have more control over how that software works. While you might feel more comfortable with a proprietary operating system, you can still use an open source browser like Mozilla’s Firefox, an exceptional product that expands its use with ‘add-ons‘ created by avid users.
Office Suites
- Microsoft Office to OpenOffice: If the price makes you feel that Microsoft has worked you over, then switch! If you compare Microsoft’s Office with other products, then you’re looking for something that includes an email client, a word processor, a spreadsheet tool, and a multimedia presentation application. The only product that provides a competitive edge against Microsoft is Google (that includes Gmail, Google Docs, Google Presentation and more). But, some would argue that Google isn’t truly open source. So, the next best bet alternative would be OpenOffice, an open source project that includes everything you’d find in Microsoft Office except the email client.
- Mactopia to NeoOffice: Another Microsoft office suite, but this time meant for MacIntosh computers. Try NeoOffice instead. NeoOffice® is a full-featured set of office applications, including word processing, spreadsheet, presentation, drawing, and database programs for Mac OS X. This suite is based on the OpenOffice.org office suite, but it has integrated dozens of native Mac features and can import, edit, and exchange files with other popular office programs such as Microsoft Office.
Office Tools
- MathWorks MATLAB to Scilab: MATLAB is a highly used application for numerical computing. It provides a programming language that allows users to work with numbers in any possible way imaginable through visualization. Scilab is the open source alternative to MATLAB, and it provides visualization of numerical data just as MATLAB does. Scilab is partly compatible with MATLAB, and both tools are suited for Windows, Linux, and UNIX.
- Microsoft Access to Kexi: Microsoft Access is a versatile tool for creating database-driven applications and to maintain office or personal data. Access contains an embedded database engine, but it also connects to other databases through ODBC. On the other hand, Kexi allows users to design forms to gain access to and to create data, just like Access. Kexi also contains an embedded database engine and it can import data to Microsoft Access databases. Plus - Kexi is open source, whereas Access belongs to Microsoft.
- Microsoft Word to OpenOffice Writer: If you want to break that office suite down and begin to replace the suite item by item, then you can start with this product first. Writer is the word processor component of the OpenOffice.org software package that is similar to Microsoft Word, and with a roughly equivalent range of features. Writer can be used across a variety of platforms, including Mac OS X, Microsoft Windows, Linux, FreeBSD and Solaris. Writer also includes the ability to export Portable Document Format (PDF) files with no additional software, and can also function as a WYSIWYG editor for creating and editing web pages. One plus over Word is that Writer carries functions and number formats in its tables from Calc, OpenOffice’s spreadsheet application.
- Microsoft Excel to OpenOffice Calc: Another Microsoft product, Excel still carries its productivity pluses as a spreadsheet, but it no longer carries an air of absolute necessity. Google’s Docs can bring an online, sharing atmosphere to your spreadsheets now. As for a truly open source product that can replace Excel, try OpenOffice.org Calc. This tool provides full spreadsheet functionality incl. a huge number of statistical and scientific functions, pivot tables and charts.
- Microsoft Visio to Dia: Visio actually is a great application that allows users to go from complicated text and tables that are hard to understand to diagrams that communicate information at a glance. The only thing that spoils the context is the fact that this software is that it’s not open source. Instead, use Dia, a GTK+ based diagram creation program for Linux, Unix and Windows released under the GPL license. Dia was ‘roughly’ inspired by Visio, which should make this tool easy for transition.
Productivity
- Blackboard to Moodle: Blackboard has been the CMS (Course Management System) ‘industry standard’ for educational purposes for many years. This program allows instructors to build courses, manage student workloads, and more. But Moodle has gained significant ground as an open source alternative to Blackboard, as it helps educators to create effective online learning communities in a scalable package that costs nothing to use.
- Box to Cabos: If you’re into file sharing, you’ve probably heard of Box.net, if not used them. Not only can you share files, Box allows you to store your files securely online, allowing you to access them from any computer, phone or mobile device for a fee. Cabos, another file sharing program that’s open source, provides simple sidebar user interface, firewall to firewall transfers, proxy transfers, Universal Plug and Play, iTunes + iPod integration, “What’s New?” searches, international searches, and more. All you need is Windows 2000 or later. Mac OS X 10.2.8 or later. Mac OS 8.6 or later. Granted, you don’t have the file storage capacity, but at least you can share files with Cabos without that extra storage capacity.
- Microsoft Project to Open Workbench: Microsoft allows users to control project work, schedule, and finances, and effectively communicate project data to other users. But, it costs to do that with Microsoft. Instead, use open source Open Workbench to accomplish exactly the same project details for free. When users need to move beyond desktop scheduling to a workgroup, division or enterprise-wide solution, they can upgrade to CA’s Clarity™ system, a project and portfolio management system that offers bidirectional integration with Open Workbench.
- Mindjet to FreeMind: Mindmapping is a way to share ideas among individuals and groups for productivity. This type of activity takes time, but it saves time. So why should you pay for a product when you can save money by using FreeMind? This latter product will accomplish all the Mindjet does and more. That “more” is the fact that FreeMind is open source.
Graphic Programs
- Adobe Illustrator to Inkscape: Adobe’s vector drawing system is one of the best in the industry. However, like Photoshop, the price can be prohibitive for some designers and artists. Try Inkscape instead, an open source vector graphics editor similar to Illustrator, CorelDraw, or Xara X. Inkscape uses the W3C standard Scalable Vector Graphics (SVG) file format and it supports many advanced SVG features (markers, clones, alpha blending, etc.). Finally, the streamlined interface is easy to use to edit nodes, perform complex path operations, trace bitmaps and much more.
- Adobe PhotoShop to GIMP: Even if you’re paying for upgrades instead of the original package, the price for Adobe’s Photoshop can be prohibitive for some photographers and graphic designers. Try GIMP to see if this open source tool can’t provide you with all the power you need for your photography and graphic design needs. GIMP stands for Gnu Image Manipulation Program, and it’s the solution that comes closest to emulating the Photoshop environment.
- Adobe Premiere to Avidemux: Premier is state of the art real-time non-linear video editing for any format including High Definition (HD). Supports 16-bit color resolution, GPU accelerated rendering for faster effects and even advanced DVD authoring. On the other hand, Avidemux provides Windows, Mac, and Linux users with an easy-to-use open source tool for DVD/DivX converting and editing. Avidemux also has scripting support for automation and even offers DVD authoring with the addition of the open source software, dvdauthor.
- AutoCAD to Archimedes: AutoCAD is an AutoDesk tool used by any designer who creates design drafts - mostly architects. Archimedes is an open source computer aided design (CAD) alternative that focuses primarily on architectural design. AutoCAD definitely has the winning score thus far, but Archimedes shows promise. The latter program contains all the drawing features a designer would need, but its interoperability is weak. Designers still can export scalable vector graphics, so there’s a real market for this open source tool (this opinion isn’t based upon Archimedes’ newest release).
- Microsoft PowerPoint to OpenOffice Impress: You can make a move away from this Microsoft tool with the use of Google’s Presentation or with OpenOffice’s Impress. Both tools represent full-featured presentation applications that allow users to create and modify diagrams and pictures right within the application.
- Microsoft Paint to Tux Paint: While not a serious graphics program, it is widely used by many computer users, mostly children Try Tux Paint instead of Paint, as this open source product stands apart from typical graphics people edit software (such as GIMP or Photoshop) in that it was designed to be usable by children as young as 16 months of age. The user interface is meant to be intuitive, and utilizes icons, audible feedback and textual hints to help explain how the software works.
- TruSpace to Blender: Caligari offers a range of products that enable designers and artists to produce 3D images - at a hefty price. Blender, on the other hand, provides one tool that provides full multiresolution sculpting capabilities with 2D bitmap/3D procedural brushes (Paint, Smooth, Pinch, Inflate, Grab) supporting symmetry. And, that’s just the beginning of Blender’s capabilities. This open source software is free to download and use.
Web Editors
- Adobe GoLive CS2 to Mozilla SeaMonkey: GoLive is an integral part of the Adobe Creative Suites products, so it works with your InDesign documents and allows those documents to be converted to Web pages. But, you might want to try Mozilla’s SeaMonkeyScribefire, the blog blog editor that integrates with your browser and lets you easily post to your blog. before you commit to the total Adobe suite option. The Mozilla SeaMonkey project includes a Web-browser, email and newsgroup client, HTML authoring program and IRC chat client. The Composer is simple but it handles tables, CSS, positioned layers and more without sweat. Add-ons currently include
- Adobe Dreamweaver to NVU: While this tool is a powerful WYSIWYG (What You See Is What You Get) HTML editor, other options exist that can save money. NVU (pronounced N-view, for a “new view”) is a complete Web Authoring System for Linux Desktop users as well as Microsoft Windows users to rival programs like FrontPage and Dreamweaver. Use NVU to create Web pages and manage a Website with no technical expertise or knowledge of HTML.
- Macromedia Flash Professional to OpenLaszlo: Developers use Flash to create multimedia events on the Web. Since the program utilizes vector-based graphics, it provides a venue that goes beyond the Web. As an open source product, OpenLaszlo provides developers with a platform to create zero-install Web applications with user interface capabilities of desktop client software. In other words, OpenLaszlo applications developed on one machine will run on all leading Web browsers on all leading desktop OS. These applications, like Flash, provide animation, layout, data binding, server communication and more.
- Microsoft FrontPage to Bluefish: While not as powerful as Dreamweaver, FrontPage is a widely used proprietary application used to create Web pages. Take a gander at this list to understand your many open source options for HTML editors. Try Bluefish as one option that can save you money and, possibly, time.
- Windows Notepad to ConTEXT: Yes, you can get the world’s most versatile HTML editing tool absolutely FREE when you purchase Windows version 2.0 and above. But, why would you want to do that when you can work with open source ConTEXT? This application is a small, fast and powerful freeware programmers text editor, developed to serve as a secondary tool for software developers.
- Altova XMLSpy to XML Copy Editor: XMLSpy is one of the most popular XML editors on the market today. Its editing features and support for both schema and DTD development along with XSLT, XQuery and XPath development make it an ultimate XML tool. As an open source alternative, XML Copy Editor is a versatile XML editor primarily focused on text editing with XML files. However, XML Copy Editor provides many other features including validation of DTD and XML schemas - as well as XSLT and XPath with tag-free editing. Both tools are Windows applications.
Publishing
- Adobe Acrobat to PDFCreator: Yes, you have a free trial to create a PDF through Adobe. However, this PDFCreator easily creates PDFs from any Windows program. Use it like a printer in Word, StarCalc or any other Windows application.
- Adobe Framemaker to DocBook: Adobe Framemaker software represents a powerful authoring and publishing solution for technical communicators who want to author and publish technical documentation in multiple languages. While this software is reliable, so is DocBook, an open source publishing tool. Additionally, you have access to all the free wikis and documentation that shows how to install, use, and customize the tools and stylesheets.
- Microsoft Publisher to Scribus: When it comes to Desktop Publishing (DTP) Microsoft’s Publisher provides more control over document elements than Microsoft Word through a DTP-oriented approach. However, professional users still consider this program an entry-level application. Since it’s part of the Microsoft Office Package, many users will find its costs negligible as well. With that said, Scribus offers an open source DTP alternative. Scribus brings award-winning professional page layout to Linux/Unix, MacOS X, OS/2 and Windows desktops with a combination of “press-ready” output and new approaches to page layout. Scribus supports professional publishing features, such as CMYK color, separations, ICC color management and versatile PDF creation.
Communications
- AIM to Pidgin: Give it up. AIM, AOL’s Instant Messenger, no longer rules. The open source alternative is Pidgin, a multi-protocol Instant Messaging client that allows you to use all of your IM accounts at once. Let’s break that down: No matter if you use Windows, Linux, BSD, and other Unixes. You can talk to your friends using AIM, ICQ, Jabber/XMPP, MSN Messenger, Yahoo!, Bonjour, Gadu-Gadu, IRC, Novell GroupWise Messenger, QQ, Lotus Sametime, SILC, SIMPLE, MySpaceIM, and Zephyr. Can AIM do that? No? Well, then.
- FeedDemon to RSS Bandit: FeedDemon for Windows constantly searches through feed search engines with keyword-generated searches as well as generalized searches. It also allows offline reading as it ‘prefetches’ your subscribed feeds. NewsGator also synchronizes with FeedDemon so you can gain access to news without your computer. Except for the fact that FeedDemon isn’t open source, it’s an ideal, robust reader. But, for open source fanatics, RSS Bandit provides an equally robust alternative RSS and Atom reader that allows you to keep track of all of the news feeds you follow. Its newspaper view can be customized and the templates are compatible with those used in FeedDemon. Plus, RSS Bandit allows you to synchronize everything with NewsGator online. Finally, RSS Bandit also provides access to news on news servers (similar to Google Groups) - it uses NNTP to read and post to newsgroups anywhere on the net. It integrates to Google Groups by linking to posts on their website.
- Microsoft MSN Messenger to aMSN: Microsoft offers MSN Messenger to the masses as freeware on Windows, and it’s grown from a simple IM application into a trendsetter in a competitive market. Features include voice and video chatting, gaming, remote support - on top of that it allows connection through mobile devices when you are not near a computer. aMSN, the open source Windows alternative to MSN, aims to mimic its proprietary competitor as much as possible. Most of its extra features are added through plug-ins. You can add, at your leisure, POP3 email support and translation, voice clips, Webcam support, Chat logs, Conferencing support and more.
- Microsoft Outlook to Thunderbird: Say that you decided to switch to OpenOffice, but you need an email client to replace Microsoft’s Outlook. Try Mozilla’s Thunderbird, an application that carries a similar interface and that is easy to use. Additionally, you can use Lightning to integrate Mozilla’s Sunbird calendar application with Thunderbird.
- Skype to Wengophone: Skype is a very strong freeware internet VoIP (Voice over IP) product in the telecommunications industry. It started with a simple and free PC-to-PC telephony, but today offers full integration with existing telephone systems. Skype today also offers voicemail, video conversations and sending SMSs. Its open source alternative, WengoPhone, also provides free PC-to-PC calls as well as chat and video conferencing. Created by Wengo, this phone also can provide SMS and call-out features that allow users to communicate with any phone at reasonable prices.
Media
- iTunes to Songbird: If you’re accustomed to the equation where “Apple + iPod + iTunes” equals a ton of money, then you might consider a switch to Songbird. Songbird is an open source player and a platform committed to “playing the music you want + from the sites you want + on the devices you want.” Songbird thereby challenges the conventions of discovery, purchase, consumption and organization of music on the Internet.
- Nero Burning Rom to K3b: Nero Burning Rom is a popular tool to burn CDs, DVDs and Blu-ray discs. This software includes backup, cd copying, audio features and more, and it’s easy to use. But, it’s not open source like K3b (Windows). This latter program creates and burns CDs and DVDs, including ripping with DivX/XviD encoding, DVD copy, ISO burning, Video CD (VCD) creation, Audio CD creation for almost any audio file, CD-TEXT support for audio CDs, support for DVD-RW and DVD+RW and much more. Oh, and did we add that it was easy to use?
- Quicktime to Darwin Streaming Server: Apple’s QuickTime 7 Pro is good for everything from creating podcasts to transcoding media in more than a dozen formats. And, the software isn’t that expensive when compared to other products. But, why not use an open source application that shares the same code base as Quicktime Streaming Server? Darwin Streaming Server is an open source project that’s perfect for developers who need to stream QuickTime and MPEG-4 media on platforms such as Windows, Linux, and Solaris.
- TiVo Desktop to Galleon.tv: Tivo-to-Go users were disappointed to discover that their Tivo software wouldn’t work with Windows Vista. Some answers to this problem included spending more time and money on various solutions that might work to restore that software’s functionality. One solution included using the open source software, Galleon, instead of trying to “fix” Tivo or Windows Vista. Galleon is a free open source media server for the TiVo® DVR which allows you to enjoy many kinds of content and interactive applications right on your TV. The server runs on your home computer and organizes your media collection so that they can be viewed on your home network. Galleon also brings Internet content and applications to your TV.
- Windows Media Player to Miro: This application seems ubiquitous…no matter what you try to open, Windows Media Player is in your face, right? Well, replace that in-your-face attitude with Miro, an open source program that turns your computer into an internet TV. Miro has 2,500 unrestricted channels with a huge selection of HD content. Plus, you have access to any publisher with video RSS feeds, including anyone on YouTube, Revver, Blip, and many, many more.
Utilities
- CuteFTP to Filezilla: Sure, CuteFTO is cute, but it’s not free. Sure, it’s reliable, but so are many other File Transfer Protocol applications. Try Filezilla, a fast FTP and SFTP client for Windows with tons of features - easy to install, easy to use, very reliable, secure, and open source.
- iBackup to ZManda: Who can you trust with your backup files? It’s difficult to decide, as price alone means nothing. You want safe, reliable servers or tools that can keep your backups available and intact. iBackup has proven to be worthy of that task, but you might want to look at ZManda as well. This open source solution protects more than half a million of servers and desktops running various versions of Linux, UNIX, BSD, Mac OS-X and Microsoft Windows operating systems worldwide. Not only do they backup information, they’re into recovery as well.
- Norton Ghost to Partition Image: Norton Ghost isn’t a shabby backup system, as it’s a complete tool that backs up everything but the kitchen sink. If you have a complete disk failure, Norton Ghost can bring it back to life on a new hard disk (although you don’t need to make a complete backup every time). You can take this backup to external drives, CDs or DVDs. If you’re an open source advocate, however, Norton Ghost doesn’t cut the cake. You’ll want something like Partition Image (for Linux) or Ghost for Unix (G4U) for Windows or Unix users. Both tools are disk cloners that act differently, but they’re as robust as Norton Ghost. Read more at their respective Web sites before you make the jump. (For a complete rescue disk including Partition Image see SystemRescueCd).
- Rational Purify to Valgrind: IBM’s Purify is a well respected and much used debugging tool. It uses topnotch memory corruption and memory leak detection to keep hard-to-find bugs from any application. As an open source alternative, Valgrind also detects leaks and other memory related programming errors. But, it also detects threading bugs and includes a call-graph profiler that detects bottlenecks in code. as well as threading bugs. A user might say that Valgrind is better than Purify, even if it is open source.
- WinZip to 7-Zip: Some of us grew up with WinZip, so it’s sad to say goodbye. But, we all gotta leave home at some point, and when the open source 7-Zip beckons, maybe you should heed the call…
Security
- Kaspersky Anti-Virus Personal to Winpooch: Kaspersky Anti-Virus probably is among the top products on the market for Windows-based anti-virus tools, mainly because it’s well known for its outstanding detection rates. It commits to multiple tasks as it protects against viruses, script viruses, checks file archives (such as zip files) and removes viruses from mail. It also provides protection against spyware as well as adware. As an open source alternative, however, Winpooch also scans files on your computer, detects malware, and prevents all the viruses, trojan horses and other problems that Kaspersky hunts down as well. Winpooch, by the way, adds a real-time scanning capability that ClamWin (noted below) lacks.
- McAfee VirusScan to ClamWin: McAfee is well known as one of the oldest companies in the anti-virus market. Many individuals need to deal with this software company, as its tools come packaged with many new Windows OS computer systems. The plus side to McAfee is that it is reliable and that it offers 24/7 support. The downside is that it’s not open source. ClamWin, on the other hand, is a free Antivirus for Microsoft Windows 98/Me/2000/XP/2003. It features high detection rates, scheduler, automatic download of virus database updates and a plug-in for Microsoft Outlook. As noted above, ClamWin doesn’t provide on access realtime scanning, but when combined with WinPooch, this capability is added.
- Norton Personal Firewall to WIPFW: Many people could work with Norton in their sleep, as this company has been around that long. The Norton Personal Firewall for Windows will monitor and check all Internet traffic and it will reject any attack or intrusion attempt. Ubiquitous popups and permissions are part of the game, as it seems that each new Website carries its own set of Norton no-nos. As an alternative, WIPFW is a firewall for Windows based on IPFW for FreeBSD UNIX. It provides virtually the same features, functionality, and user interface as Norton Personal Firewall. The big difference? WIPFW is open source.
Financial
- Authorize.net to OpenSSL: Granted, Authorize.Net’s preferred payment gateway connection, Advanced Integration Menthod (AIM), provides the highest level of customization and security to merchants for submitting transactions online. But, why pay for a secure SSL when you can get an open source product for free? The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. A worldwide community of volunteers uses the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation manages the project.
- Microsoft Money (Plus) to TurboCash: While Microsfot Money Plus is much more than a personal accounting software, Turbocash can boast that claim plus more. Turbocash is open source and free to use. In fact, you might compare TurboCash more to Quickbooks than to Microsoft Money. However, as a personal finance tool, TurboCash is much more user-friendly to the average home budgeter than Compiere.
- Quickbooks to Compiere: Few people are unfamiliar with Quickbooks, as this software has made its way into many a small business computer. If you feel that few opportunities exist to switch, think again. Compiere, produced by Global Era, provides one solution to open source ERP (Enterprise Resource Planning) and CRM (Customer Relationship Management) solutions for any small to large business. Compiere 3.0 marks the introduction of Compiere Professional Edition, a new premium offering targeted at larger organizations that require more advanced services and commercial licensing from Compiere.
Which "programming language" I have been dealing with for these days ? (Winter of 2008) @ 07-06-2008 10:34
If you're interested in learning new technologies on programming languages and the global development environment you have to be fresh and robust.
Nowadays, i have fully concentrated my leisure time on learning new programming languages that run the web. I was always asked "Which programming language is the best to learn?" by my friends and co-workers, i generally answer this kind of question like that: " If you only know one, then your in serious trouble" :)
This got me thinking on what programming languages should a programmer know to maximize his talent and marketability. Below is the top five languages that every programmer should know:
Ruby on Rails
Why you should learn it: Cause it is the future. If you want to build a website writing only 8 lines of code Ruby on Rails(RoR) is the language for you. There has always been talk of Object Oriented Programming(OOP) and Ruby on Rails is OOP in its purest form.
Why it is not my first choice: Cause it is still in infancy and it does not have a debugger or a true IDE. Also its has a STEEP learning curve and its hard to understand how each component is put together, but all in all, it is the newest, most innovative one and very interesting with pure futures.
Resources: Top 12 Ruby on Rails Tutorials
My Tips to Become a Better Softare Developer just after the "Newbie" State @ 07-06-2008 10:24
Today, at the line of retiring programming, i have tips to store for myself and should be helpful for new programmers and open minded (developers with the high improvement ability on work), these are formed in five steps;
Tip 1. Methodize... don't memorize
A programmer friend of mine use to always tell me how his memorization of over 200 function in C++ helped him greatly. "I never have too look up function definitions , therefore I can code 50% faster then the average coder!" he would brag. So what happened? Intellisense for one, two when C# came out all his diligence in memorizing functions went to waste. Of course in coding some memorization is a necessity but you should spend more time learning the method of doing things, i.e. creating a db connection, consuming a RSS feed, etc. then memorizing the code on how to do them. Learn the correct methods of doing thing, don't memorize.
Tip 2. Create your own Resource library
We all have a block of code that for some reason or another we have to look up. I can never remember the exact sequence of code to connect to a database. So every time I had to do this I would spend 10 minutes finding the book, looking up the link, etc. To combat this I created a word document that has snippets of code that I have trouble remembering for some reason or another. One of my colleagues creates a bookmarks of links, another stores all his in a email. What ever your method is its a good habit to keep that file close by . The point is that you should be building you knowledge base and you will find that it will greatly help you in coding better and faster.
Tip 3. Learn WHAT not HOW
A lot of junior programmers ask me "How do I do this, or How do I do that?" and I always ask them "What do you want to do?" and they stare at me like I am dating their mothers or somethings. This brings me to my next point, never learn How always know What you want to do. Example, lets say a programmer wanted to search a text file to see if it contains a certain word. This is HOW you would do it in C#:
string fileContent;
System.IO.FileStream myStream = new FileStream("c:\\aa.txt", FileMode.Open);
System.IO.StreamReader myStreamReader = new StreamReader(myStream);
fileContent = myStreamReader.ReadToEnd();
myStreamReader.Close();
int idx = fileContent.IndexOf("string");
if (idx)
{
return true
}
Now sure I could give him the code to do this but its more important to understand WHAT you are trying to do. In this example WHAT you want to do is:
1) Open a file
2) Read the file contents
3) Close the file
4) Search for string
5) If found output success message.
Breaking down the task in the manner does two things
1) it makes it language independent
2) it gives you a focus on WHAT needs to be done.
3) It makes your code more readable and usefull
Know WHAT you are trying to do makes the language you are trying to code it in inconsequential. Now it should be easy to create this code in C++, PHP, VB.NET, Ruby on Rails because you understand WHAT you need to do instead of HOW to do it.
Tip 4. Comment to match your style
Everybody coder hates commenting but in order to write quality/readable code every coder must comment. The problem most coders have is that they are always TOLD how to comment. Some companies want a comment on every line, others want a block of comment before every functions, others wants comments on difficult code blocks. I disagree with the policy and say that as long as the comments are usable, readable and useful then a coder should be able to comment in a format that works for him/her.For me commenting on every line breaks up my coding rhythm. I prefer to comment at the beginning of a functions listing step by step what I am going to do, then I referencing the steps as comment inside the functions. This works for me because it helps me organize my plan before I starting coding, its keeps me in rhythm as I don't have to stop coding to comment, and its help other readers read my code. Heres a example of how I comment:
/* 1. Open File
* 2. Read file into string
* 3. Close file
* 4. Search for key word
* 5. If fond return true;
*/
string fileContent;
//1.
System.IO.FileStream myStream = new FileStream("c:\\aa.txt", FileMode.Open);
System.IO.StreamReader myStreamReader = new StreamReader(myStream);
//2.
fileContent = myStreamReader.ReadToEnd();
//3.
myStreamReader.Close(); //4.
int idx = fileContent.IndexOf("string");
if (idx)
{
//5.
return true;
}
My point here is that this commenting style works for me and most programmers can read it with ease. Find a commenting style that works for you.
Tip 5. Master one...Learn another... but keep your eye on the next thing
Programmers sometimes email me and ask me what language should I learn, what is the best programming language to learn, etc. I you should at least master one programming language, be able to program fairly well in another and always, ALWAYS be on the look out for the next thing. Myself for example, I am great in C#, good in PHP and have been playing around with Ruby on Rails for the last month or two. Why do this? Well for one being a programmers is always about evolving. Evolving to write better code, evolving to find better ways of doing a task, always evolving ;)
How to enable Multiple start pages on Firefox @ 07-04-2008 01:51
If you need to have multiple tabs as your start page like me, as a server address and google for instance, click on Tools and then in the Home Page field, use a pipe () between your http:// addresses.
Install Firefox Plugin View Source Chart to View Formatted Source @ 07-04-2008 01:49
Instead of picking through html tags on long lines in source view, use the plugin with the name "View Source"to see how sites are structured at a glance.
My Top 5 Freeware for Windows @ 23-03-2008 16:37
We the Computer Engineer's all know that Firefox (Ahmet Salih's favorite for ITU's registirations) is pretty much the greatest free web browser known to man and that OpenOffice (Dogukan's favorite word processor for reporting) is a pretty decent open source alternative to the Microsoft Office suite … but those are obvious, right? What about all those sweet, free (as in food) software programs out there that no one’s really ever heard off? Don’t they deserve some love, too? Don't you want to get familiar with the tools that i have been using so much ?
Granted, a lot of the programs that get me excited are perhaps a bit obtuse, but let’s go with it. Without further adieu, here’s my short list for friends and beginners for programming containing 5 of the coolest unknown freeware for Windows (in no particular order for me :) )
1. PuTTY Connection Manager - DOWNLOAD
What?! You haven’t heard of PuTTY? It’s only the fastest, greatest, FREE terminal emulation client for Windows (for those of you who are freaked out by Unix terminals alone, much less ones ported to Windows, don’t worry - there are plenty of guides for why you’d use it and how to use it best).
(I’m sure there are plenty of people out there who prefer VanDyke’s SecureCRT, but it costs money, and being as I’m cheap, I don’t want to plunk down $99 for a program whose functionality PuTTY pretty much encapsulates)
However, there’s ONE thing that SecureCRT has that PuTTY doesn’t: tabs! Once you start administering several systems at once, you begin to get angry at how quickly those multiple terminal windows clog up your screen. For the longest time, I harbored envy of SecureCRT’s tabbed window that contained all terminal sessions in one screen … until I stumbled upon PuTTY Connection Manager.
This gem of a program “swallows” instances of PuTTY into one tabbed screen, complete with direct access to PuTTY’s native connection management screen and a tree-style list of all servers you currently have setup. Couple the bookmarks features and the Quick Connect options, and this program (which is still in beta) is looking pretty sweet next to commercial variants.
2. SyncBack - DOWNLOAD
Like most people, I never really thought about backing up anything on my hard drive. Then it happened - I remember I had to Photoshop some large project for a class and with the deadline looming, the power went out at my house. And I hadn’t saved a thing. And don’t even talk to me about about having a reliable UPS (see above mention of my “cheapness”). It was in those frustration-induced moments that I decided I needed to do a little backup.
Being a fan of freeware, I immediately Google’d for freeware backup utilities, and after trying a few (rather inadequate) ones, I found the free Community edition of SyncBack. This app still blows me away - the myriad of features it contains - synchronization/backup, FTP, ZIPing, and profiling, to name a few - is just unbelievable and should satisfy any personal backup you might need. Be sure to check out the sweet guide on SyncBack by Gina over at Lifehacker.
P.S: there’s a Enterprise version of SyncBack, but I can’t really see what I would need it for - check it out, though, because it might fit a need of yours that the Community edition doesn’t)
3. Belvedere - DOWNLOAD
So, being a computer scientist, I’ve taken it upon myself to be familiar with all types of computers - which is a snazzy way for me to justify being both a Mac user and a PC user. Some time ago, I ran across an awesome program for the Mac called Hazel, a rule-based program designed to keep files on your computer in order. Want your downloads folder - where you dump everything you download in Firefox - cleaned every week? Hazel can do it. Want any screenshots you take to automatically be placed in your Pictures folder? Hazel can do that, too.
Needless to say, this awesome experience immediately had me searching for a Windows equivalent. And what did I find? Nothing! I resigned myself to existing in an unorganized PC landscape for the rest of my days.
This last January, Adam at Lifehacker rode to the rescue with Belvedere, his attempt to create a direct clone of Hazel for Windows. While it doesn’t contain exactly the same functionality as Hazel (yet!), it has rules for modifying, deleting, moving, and otherwise heckling files that fit certain criteria. Given that I have folders all over my PC accumulating with junk, Belvedere is a set-it-and-leave-it app that ensures crud gets moved where it needs to go on a regular basis.
4. VirtuaWin - DOWNLOAD
Oh boy, I am a sucker for screen real estate. I just recently got myself a second monitor, and frankly, I don’t know how I ever lived without one. But it gets better - the other day, I saw a system administrator friend of mine using Linux’s virtual desktops with a dual monitor (in case you don’t know what virtual desktops are, check out this Wikipedia page on the subject). With 4 virtual desktops, his computer basically had 8 screens worth of information. 8!
Now, I would love to switch to Linux full time, but there are a lot of things on Windows that I need … but Windows doesn’t come with virtual desktops out of the box (the Microsoft PowerToys group has a virtual desktop implementation, but it’s nasty-slow). Once again, Google to the rescue: Sourceforge-hosted VirtuaWin was the answer.
This guy is lightning fast, and the FAQ on the site has tips for speeding it up under Windows. Add that to the fact that you can instantly switch to different virtual desktops (via mouse click, mouse movement, or hotkey), move windows between desktops, and create default application sets, and this is one sweet application for people starved for desktop space.
5. Komodo Edit - DOWNLOAD
This is one of those programs where you go, “How in the world is this free??”
Web development was one of my favorite areas for CE - I’m always on the lookout for tools that will help me get the job done better and faster (and are for free!).
Now, for a long time, I’ve been envious of Komodo IDE, what with its debugging qualities, DOM viewer, and code browsing. Unfortunately, it costs $$$, so it’s out the window.
But behold! ActiveState has a smaller, parred-down version of Komodo IDE for free! Komodo Edit only has three of Komodo IDE’s main features - editing multiple languages, project managers, and general toolbox - but I find that those are plenty. My favorite feature? Code completion for functions I’ve written
What about you guys? Any freeware for Windows we should know about? Hit us up below.
What are the things we can do using Linux that we can't do with MS Windows? @ 08-02-2008 18:54
I have thought about this subject this recently.I don't have just one answer. I compiled a list of things I thought of and emailed it to myself...Then I thought I would post it to the blog for future reference.Feel free to add to the list or post any commands!There is also a forums thread on the same topic, that I remembered as I complied my thoughts, so I stole some of the ideas posted there so this one is not a very creative post in my own ;)1. Upgrade to the newest version legally and without paying money2. Have the latest version of the operating system run faster than the previous version on the same hardware3. Easily install and run different graphical interfaces if I don't like the default setup4. Install twenty programs with one command5. Have the system automatically update all my installed programs for me.6. Install the same copy of my OS (Pardus) on multiple computers without worrying about license restrictions or activation keys7. Give away copies of the operating system and other programs that run on it without breaking any laws, governmental or ethical or moral, because it was all intended to be used this way8. Have full control over my computer hardware and know that there are no secret back doors in my software, put there by malicious software companies or governments9. Run without using a virus scanner, adware/spyware protection, and not reboot my computer for months, even when I do keep up with all of the latest security updates10. Run my computer without needing to defragment my hard drive, ever11. Try out software, decide I don't like it, uninstall it, and know that it didn't leave little bits of stuff in a registry that can build up and slow down my machine12. Make a major mistake that requires a complete reinstallation and be able to do it in less than an hour, because I put all of my data on a separate partition from the operating system and program files13. Boot into a desktop with flash and effects as cool as Windows Vista on a three year old computer...in less than 40 seconds, including the time it takes me to type my username and password to login14. Customize anything I want, legally, including my favorite programs. I can even track down the software developers to ask them questions, contribute ideas, and get involved in the actual design/software writing process if I want to15. Have 4+ word processor windows open working on papers, listen to music, play with flashy desktop effects, have contact with a largely happy community and have firefox, instant messaging, and email clients all open at the same time, without ever having had to beg someone for a code to make my os work, and without the system running so slow it is useless16. Use the command "dpkg --get-selections > pkg.list" to make a full, detailed list of all software I have installed, backup my /etc and /home directories on a separate partition, and you are able to recover your system any time, easily17. Run multiple desktops simultaneously, or even allow multiple users to log in and use the computer simultaneously18. Resize a hard disk partition without having to delete it and without losing the data on it19. Use the same hardware for more than 5 years before it really needs to be replaced...I have some hardware that is nearly 10 years old, running Linux, and still useful20. Browse the web while the OS is being installed!21. Use almost any hardware and have a driver for it included with the operating system...eliminating the need to scour the internet to find the hardware manufacturer's website to locate one22. Get the source code for almost anything, including the OS kernel and most of my applicationsI could go on, but that's long enough, you may let the steps ascend :)How to Recognise a Good Software Developer @ 08-02-2008 16:39
How do you recognise good programmers if you’re a business guy in IT sector?
It’s not as easy as it sounds. CV experience is only of limited use here, because great programmers don’t always have the “official” experience to demonstrate that they’re great. In fact, a lot of that CV experience can be misleading. Yet there are a number of subtle cues that you can get, even from the CV, to figure out whether someone’s a great programmer.
I consider myself to be a pretty good programmer. At the same time, I’ve spent a fair amount of time on the business side of the fence, filtering technical CVs for projects, interviewing people, etc. Thanks to this, I think I have a bit of experience in recognising good programmers, and I want to share it in this article, in the hope that it may help other “business guys” to recognise good programmers. And, who knows, perhaps some programmers who have the potential to be good but haven’t really exploited this can also read this and realise what they need to do to become good (although, as I’ll argue, that’s definitely not accessible to all programmers!).
In his article The 18 mistakes that kill startups, Paul Graham makes the following point, i'd like to give some interesting parts of my research:
“… what killed most of the startups in the e-commerce business back in the 90s, it was bad programmers. A lot of those companies were started by business guys who thought the way startups worked was that you had some clever idea and then hired programmers to implement it. That’s actually much harder than it sounds—almost impossibly hard in fact—because business guys can’t tell which are the good programmers. They don’t even get a shot at the best ones, because no one really good wants a job implementing the vision of a business guy.
In practice what happens is that the business guys choose people they think are good programmers (it says here on his resume that he’s a Microsoft Certified Developer) but who aren’t. Then they’re mystified to find that their startup lumbers along like a World War II bomber while their competitors scream past like jet fighters. This kind of startup is in the same position as a big company, but without the advantages.
So how do you pick good programmers if you’re not a programmer? I don’t think there’s an answer. I was about to say you’d have to find a good programmer to help you hire people. But if you can’t recognize good programmers, how would you even do that?”
I disagree with Mr Graham on this one. I think there are a number of very strong indicators of a “good programmer” (and, conversely, strong indicators of a “not-so-good programmer”) that even a business guy can recognise. I’ll summarise some key indicators and counter-indicators in a list at the end of the article.
#1 : Passion
In my corporate experience, I met a kind of technical guy I’d never met before: the career programmer. This is a person who’s doing IT because they think it’s a good career. They don’t do any programming in their spare time. They’re shocked when they find out I have a LAN and 3 computers at home. They just do it at work. They don’t learn new stuff unless sent on a training program (or motivated by the need to get a job that requires that technology). They do “programming” as a day job. They don’t really want to talk about it outside of work. When they do, they talk with a distinctive lack of enthusiasm. Basically, they lack passion.
I believe that good developers are always passionate about programming. Good developers would do some programming even if they weren’t being paid for it. Good programmers will have a tendency to talk your ear off about some technical detail of what they’re working on (but while clearly believing, sincerely, that what they’re talking about is really worth talking about). Some people might see that as maladapted social skills (which it is), but if you want to recognise a good developer, this passion for what they’re doing at the expense of social smoothness is a very strong indicator. Can you get this guy to excitedly chat up a technology that he’s using, for a whole half hour, without losing steam? Then you might be onto a winner.
#2 : Self-teaching and love of learning
Programming is the ultimate moving target. Not a year goes by without some new technology robbing an old, established standard blind and changing half the development universe. This is not to say that all good programmers pick up these changes and ride the bleeding edge. However, there’s a class of programmers that will never, ever pick up a new technology unless forced to, because they don’t like learning new stuff. These programmers will typically have learnt programming at university, and expect to get by on whatever skills they picked up there, plus whatever courses their company is willing to send them on.
If you’re thinking of hiring someone as a programmer, and he ever utters the words “I can work with that, just send me on a training course for a week and I’ll be good at it”, don’t hire that guy. A good programmer doesn’t need a training course to learn a new technology. In fact, the great programmer will be the one talking your ear off about a new technology that you haven’t even heard of, explaining to you why you must use it in your business, even if none of your staff knows how to use it. Even if it’s a technology he doesn’t know how to use yet.
#3 : Intelligence
Some business people assume that lack of social tact and lack of intelligence are the same. Actually, intelligence has several facets, and emotional/social intelligence is only one of them. Good programmers aren’t dumb. Ever. In fact, good programmers are usually amongst the smartest people you know. Many of them will actually have pretty good social skills too. The cliché of the programmer who’s incapable of having a conversation is just that - a cliché. I’ve been to a few meetings of the London Ruby User Group and I can say that with only a very few exceptions, most people there are smart, talkative, sociable, have varied interests, etc. You wouldn’t look at them chattering away in the pub and think “what a bunch of geeks!” - at least until you approach a group and realise they’re talking about the best way to design a RESTful application with a heavy UI frontend.
This doesn’t mean that they’ll all feel comfortable in every social context. But it does mean that if the context is comfortable and non-threatening enough, you’ll be able to have as great a conversation with them as you would with the most “socially enabled” people (perhaps better, since most good programmers I know like their conversation to revolve around actually useful topics, rather than just inane banter).
Don’t ever hire a dumb person thinking they’re a good developer. They’re not. If you can’t have a great conversation with them in a relaxed social context, they’re very likely not a good programmer. On the other hand, anyone who’s clearly very smart at the very least has a strong potential to be a good or great programmer.
#4 : Hidden experience
This is correlated with the “Passion” point, but it is such a strong indicator that I’d like to emphasise it with its own point.
I started programming when I was about 9, on a Commodore 64. I then migrated onto the PC, did some Pascal. When I was 14 I wrote a raycasting engine in C and Assembler, spent a large amount of time playing with cool graphic effects that you could get your computer to do by messing directly with the video card. This was what I call my “coccoon stage”. When I entered that stage, I was a mediocre programmer, and lacked the confidence to do anything really complicated. When I finished it, I had gained that confidence. I knew that I could code pretty much anything so long as I put my mind to it.
Has that ever appeared on my CV? Nope.
I strongly believe that most good programmers will have a hidden iceberg or two like this that doesn’t appear on their CV or profile. Something they think isn’t really relevant, because it’s not “proper experience”, but which actually represents an awesome accomplishment. A good question to ask a potential “good programmer” in an interview would be “can you tell me about a personal project - even or especially one that’s completely irrelevant - that you did in your spare time, and that’s not on your CV?” If they can’t (unless their CV is 20 pages long), they’re probably not a good programmer. Even a programmer with an exhaustive CV will have some significant projects that are missing from there.
#5 : Variety of technologies
This one’s pretty simple. Because of the love of learning and toying with new technologies that comes with the package of being a “good programmer”, it’s inevitable that any “good programmer” over the age of 22 will be fluent in a dozen different technologies. They can’t help it. Learning a new technology is one of the most fun things a programmer with any passion can do. So they’ll do it all the time, and accumulate a portfolio of things they’ve “played around with”. They may not be experts at all of them, but all decent programmers will be fluent in a large inventory of unrelated technologies.
That “unrelated” bit is the subtle twist. Every half-decent java programmer will be able to list a set of technologies like “Java, J2EE, Ant, XML, SQL, Hibernate, Spring, Struts, EJB, Shell scripting”, etc.. But those are all part of the same technology stack, all directly related to each other. This is possibly hard to recognise for non-programmers, but it is possible to tell whether their technology stack is varied by talking to them about it, and asking them how the different technologies they know relate to each other. Over-specialisation in a single technology stack is an indicator of a not-so-good programmer.
Finally, if some of those technologies are at the bleeding edge, that’s a good positive indicator. For instance, today (November 2007), knowledge of Merb, Flex, RSpec, HAML, UJS, and many others… Please note that these are fairly closely related technologies, so in a couple of years, someone who knows all these will be equivalent to someone familiar with the Java stack listed in the previous paragraph.
Update: As a clarification to this point, there’s in fact two indicators here: variety and bleeding edge. Those are separate indicators. A good variety of technologies across a period of time is a positive indicator, whether or not the technologies are bleeding edge. And bleeding edge technologies are a positive indicator, whether or not there’s a variety of them.
#6 : Formal qualifications
This is more a of non-indicator than a counter-indicator. The key point to outline here is that formal qualifications don’t mean squat when you’re trying to recognise a good programmer. Many good programmers will have a degree in Computer Science. Many won’t. Certifications, like MCSE or SCJP or the like, don’t mean anything either. These are designed to be accessible and desirable to all. The only thing they indicate is a certain level of knowledge of a technology. They’re safeguards that allow technology recruitment people in large corporations to know “ok, this guy knows java, he’s got a certification to prove it” without having to interview them.
If you’re hiring for a small business, or you need really smart developers for a crack team that will implement agile development in your enterprise, you should disregard most formal qualifications as noise. They really don’t tell you very much about whether the programmer is good. Similarly, disregard age. Some programmers are awesome at 18. Others are awesome at 40. You can’t base your decisions about programmer quality on age (though you might decide to hire people around a certain age to have a better fit in the company; please do note that age discrimination is illegal in most countries!).
As a final note to this, in my experience most average or poor programmers start programming at university, for their Computer Science course. Most good programmers started programming long before, and the degree was just a natural continuation of their hobby. If your potential programmer didn’t do any programming before university, and all his experience starts when she got her first job, she’s probably not a good programmer.
Disclaimer
None of the indicators above or below are sure-fire indicators. You will find great programmers who break some of those moulds. However, my view is, you’ll rarely find a great programmer that breaks all of them. Similarly, you may find poor programmers that meet (or appear to meet) some of these criteria. But I do strongly believe that the more of these criteria a programmer meets, the more likely they are to be one of those elusive “good programmers” that, as a business guy, you need to partner with.
The criteria in bullets
So, in summary, here are some indicators and counter-indicators that should help you recognise a good programmer.
Positive indicators:
- Passionate about technology
- Programs as a hobby
- Will talk your ear off on a technical subject if encouraged
- Significant (and often numerous) personal side-projects over the years
- Learns new technologies on his/her own
- Opinionated about which technologies are better for various usages
- Very uncomfortable about the idea of working with a technology he doesn’t believe to be “right”
- Clearly smart, can have great conversations on a variety of topics
- Started programming long before university/work
- Has some hidden “icebergs”, large personal projects under the CV radar
- Knowledge of a large variety of unrelated technologies (may not be on CV)
Negative indicators:
- Programming is a day job
- Don’t really want to “talk shop”, even when encouraged to
- Learns new technologies in company-sponsored courses
- Happy to work with whatever technology you’ve picked, “all technologies are good”
- Doesn’t seem too smart
- Started programming at university
- All programming experience is on the CV
- Focused mainly on one or two technology stacks (e.g. everything to do with developing a java application), with no experience outside of it
I hope these help. Let me know below if you have any comments, or anything to add to them!
A Summary of an Experience From a developer expert in 10 different programming languages! = Mhtare @ 05-02-2008 13:29
This post is the short guide of the Prashant N Mhatre who supports teams about stock markets and in some bugs about database management systems as an advisor. I hope it would be very helpfull for new programming language learners..
"Since I’ve working knowledge of a bunch of programming languages but job demands to learn a new language frequently in a short time. Instead of reading hundreds manual/book pages, I quickly read 10-15 pages of tutorial or primer. (As you know google is the best search engine to look for such stuff). I keep printed copy of the language syntax reference card handy. (There are many reference cards available over internet. Type in ’language to learn’ + ’reference card’ in google.)
First of all, get familiar with Compiler, compiler option, editor shortcuts or integrated development environment (IDE). Start with a simple ’Hello World’ program. Compile it. Use basic functionalities of debugger like setting break points, printing variable values, moving to the next or specific position, stopping debugger etc.
To grasp basics of a new language quickly, here are the exercises I use. Remember some programs may not good for beginners.
(1) Display series of numbers (1,2,3,4, 5....etc) in an infinite loop. The program should quit if someone hits a specific key (Say ESCAPE key).
(2) Fibonacci series, swapping two variables, finding maximum/minimum among a list of numbers.
(3) Accepting series of numbers, strings from keyboard and sorting them ascending, descending order.
(4) Reynolds number is calculated using formula (D*v*rho)/mu Where D = Diameter, V= velocity, rho = density mu = viscosity Write a program that will accept all values in appropriate units (Don’t worry about unit conversion) If number is <>
(5) Modify the above program such that it will ask for ’Do you want to calculate again (y/n), if you say ’y’, it’ll again ask the parameters. If ’n’, it’ll exit. (Do while loop)
While running the program give value mu = 0. See what happens. Does it give ’DIVIDE BY ZERO’ error? Does it give ’Segmentation fault..core dump?’. How to handle this situation. Is there something built in the language itself? (Exception Handling)
(6) Scientific calculator supporting addition, subtraction, multiplication, division, square-root, square, cube, sin, cos, tan, Factorial, inverse, modulus
(7) Printing output in different formats (say rounding up to 5 decimal places, truncating after 4 decimal places, padding zeros to the right and left, right and left justification)(Input output operations)
(8) Open a text file and convert it into HTML file. (File operations/Strings)
(9) Time and Date : Get system time and convert it in different formats ’DD-MON-YYYY’, ’mm-dd-yyyy’, ’dd/mm/yy’ etc.
(10) Create files with date and time stamp appended to the name
(11) Input is HTML table, Remove all tags and put data in a comma/tab separated file.
(12) Extract uppercase words from a file, extract unique words
(13) Implement word wrapping feature (Observe how word wrap works in windows ’notepad’)
(14) Adding/removing items in the beginning, middle and end of the array.
(15) Are these features supported by your language: Operator overloading, virtual functions, references, pointers etc.
Is there something called ’namespace / package / module’ supported by your language? (Name mangling)"
Goodluck everybody, email me for any problems rarely..
Development Cycle in an IT Company: Internet Management Software - Important Section under Business Alignment @ 24-01-2008 14:39
Development process that the guys in this team followed in the last project was completely a focusable one, our new software doesn't just appear on the shelves by magic. That program shrink-wrapped inside the box along with the indecipherable manual and 12-paragraph disclaimer notice actually came to you by way of an elaborate path, through the most rigid quality control on the planet. Here, shared for the first time with the general public, are the inside details of the program development cycle. - Programmers in the team produces code he believes is bug-free.
- Product is tested. 20 bugs are found.
- Programmer fixes 10 of the bugs and explains to the testing department that the other 10 aren't really bugs.
- Testing department finds that five of the fixes didn't work and discovers 15 new bugs.
- See 3.
- See 4.
- See 5.
- See 6.
- See 7.
- See 8.
- Due to marketing pressure and an extremely pre-mature product announcement based on overly-optimistic programming schedule, the product is released.
- Users find 137 new bugs.
- Original programmer, having cashed his royalty check, is nowhere to be found.
- Newly-assembled programming team fixes almost all of the 137 bugs, but introduce 456 new ones.
- Original programmer sends underpaid testing department a postcard from Fiji. Entire testing department quits.
- Company is bought in a hostile takeover by competitor using profits from their latest release, which had 783 bugs.
- New CEO is brought in by board of directors. He hires programmer to redo program from scratch.
- Programmer produces code he believes is bug-free....
Note: Rather than thinking the good jobs are made by Europeans or Americans, we should just belive that a better can easliy be reached..UML ile Yazılım Modelleme - Software Modeling with Unified Modeling Language @ 08-12-2007 17:09
Daha onceki projelerde kullandığım ve Imagine Cup 2008 - HCA Software Design Projesi kapsamında yapmayı planladığımız "UML ile Yazılım Modellenmesi" hakkında genel bilgilendirme amacı güden bir yazıdır..
Modelleme kanıtlanmış ve kabul edilmiş bir mühendislik tekniğidir. Model sayesinde karmaşık bir gerçeği daha basit bir dille ifade etme şansımız olur; böylece modellediğimiz gerçeği daha iyi anlayabilir, hataları yolun başında görebiliriz. Aynı gerçekler yazılım için de geçeridir, özellikle büyük ve karmaşık yazılımlar için modelleme, büyük bir bina için mimari planın (blueprint) gerekliliği kadar vazgeçilmez bir olgudur. Yazılım modellenmesi sayesinde sistem gereksinimlerini ve sistem davranışlarını daha iyi anlarız ve hata riskimiz azalır. Yazılım yaşam döngüsü içinde hatalar ne kadar erken saptanırsa düzeltme maliyeti de o kadar az olur. Çok karmaşık sistemler için bitmiş bir kodda 1 satırlık bir değişiklik yapmanın maliyeti zaman ve risk açısından çok yüksektir. Bu sebeple sistemi doğru anladığımızdan emin olmamız gerekir, bunu da ancak modelleme sayesinde yapabiliriz.
Büyük yazılım projelerinde proje yöneticileri, müşteriler, çözümleyiciler, tasarımcılar, programcılar, testçiler ve teknik yazarlardan herbirinin eğitim düzeylerinin ve alt yapılarının farklı olması kaçınılmazdır, biz burada yazılım kısmı olarak 2 yada 3 kişi olarak çalışacağız ki yukarıdaki bu birçok alanı içine alıcak işler yapıcak bu kısım. Roller farklı olunca bir ekibin elemanlarının birbirleri ile iletişiminin önemi de ortaya çıkar. Çözümleyicilerin aylar süren görüşmeler sonunda elde ettikleri bütün bilgileri yazılı olarak tasarımcıya veya teyid alabilmek için müşteriye verdiğini düşününebiliyor musunuz? Oysaki sistem, çözümleyici tarafından müşteriye, tasarımcıya veya testçiye hepsinin anladıkları ortak bir dille modellenirse, çok karmaşık anlatımlar basitleşebilir ve iletişim metin ile desteklenen çeşitli diyagramlar ile maksimum düzeyde tutulabilir. Böylece müşteri sistem gereksinimleri raporunu okurken veya teknik yazarlar kullanıcı kılavuzu yazarken veya test senaryoları hazırlanırken bu ortak dilden faydalanılmış olur.
Tasarımcı, çözümleyicinin hazırladığı bazı diyagramları detaylandırıp teknik açıdan kodlamanın yolunu açabilir. Bütün bunlar projelerde yazılım kalitesini artırmanın yanı sıra, proje ekibindeki eleman değişikliğinde yeni elemanların sistemi kolayca kavrayamamasından kaynaklanacak zaman kaybını, yani maliyeti de düşürecektir.
Her yazılımın modellenmesi için mükemmel olan tek bir yöntem yoktur. Bir şirket için mükemmel olan bir modelleme yöntemi diğeri için berbat olabilir. Yapılan işin niteliğine göre farklı diyagramlara ihtiyaç duyulacaktır. Modellemede önemli olan yazılım sektöründeki herkesin ortak bir dili kullanmasıdır olmalıdır. Doğal olarak da her tür ihtiyaca cevap verebilir nitelikte bir modelleme diline ihtiyaç vardır. Müziği düşünecek olalım, 8 notayı bir araya getirerek muhteşem bir eser yaratabiliriz. Yarattığımız eseri ister flüt ile çalarız ister piyanoyla, çaldığı müzik aleti ne olursa olsun orkestranın her elemanı aynı dili anlamaktadır. Sonuçta müzik, nota dediğimiz sembollerin çeşitli şekillerde bir araya gelerek bir bütünü oluşturması ve dünyanın her köşesinde anlaşılabilir bir dilde ifade edilmesidir. Müziğin güzelliği ise besteyi yapanın yeteneğiyle sınırlıdır. Yazılım sektörü için de yazılımın parçalarını ifade edecek modelleme dili müziğin notaları gibidir. Sistemin mükemmelliği, sistemi tasarlayanların yetenekleriyle, bilgi ve tecrubeleriyle ilgilidir.
UML'ye gelince, Unified Modelling Language yazılım mühendisliğinde nesne tabanlı sistemleri modellemede kullanılan açık standart olmuş bir görsel modelleme dilidir. Büyük ve karmaşık sistemleri modellemede başarısı kanıtlanmış mühendislik tecrübeleriyle oluşmuştur. UML'nin yazılım mühendisliğindeki yerini anlayabilmek için tarihçesine söyle bir bakalım:
1989-1994 yılları yazılım mühendisliğinde Metod savaşları olarak bilinen dönemdir. Bu dönemde 50'den fazla modelleme dili paralel bir şekilde aynı şeyleri farklı yöntemlerle ifade ediyorlardı. Herbiri bazı sistemler için mükemmelken, bazıları için işe yaramaz durumdaydı ve hemen hemen hepsi yazılım yaşam döngüsünün bazı adımlarını tanımlamakta yetersiz kalıyordu. 90'lı yılların ortalarına doğru en çok tercih edilen 3 yöntem ön plana çıktı: Booch, OMT (Object Modelling Technology) ve OOSE (Object Oriented Software Engineering). Bunlardan Booch, tasarım ve gerçekleştirim konusunda mükemmeldi. OMT analiz ve veri yoğunluğu çok yüksek olan sistemlere uyuyordu. OOSE ise Use-Case adı verilen bir modelleme yöntemi ile tüm sistemin davranışını kolayca anlamayı sağlayan güçlü bir teknik içeriyordu.
1994 yılında OMT'nin yaratıcısı Jim Rumbaugh, Rational firmasının çatısı altında Booch metodunun yaratıcısı Grady Booch ile birlikte çalışmaya başladı. Daha sonra 1995'de onlara OOSE'nin yaratıcısı Ivar Jacobson da katıldı. 3 Amigolar olarak bilinen bu grup kendi yöntemlerinin olumlu taraflarını birleştirerek, komple bir yazılım projesinde sistemi modellemede kullanılabilecek eksiksiz bir modelleme dili geliştirmeye başladılar. Microsoft, Oracle, HP gibi büyük firmaların da katıldığı bir UML konsorsiyumu kuruldu ve bu şirketler UML'yi modellemelerinde kullanmaya başladılar. Nihayet 1997'de OMG (Object Management Group, kar gütmeyen, bilgisayar endüstrisi standartlarını oluşturan bir organizasyon ) UML'yi sahiplendi ve açık standart olarak geliştirmeye başladı. Doğal olarak UML herhangi bir şirkete veya kişiye ait bir modelleme dili değildir. UML şu an Rational, MS Visio, Together Soft,.. vb birçok modelleme aracı tarafından sunulmaktadır., bizde bu ortamlardan biri ile tasarım aşamasındaki en büyük adımımızı atacağız.
Yazılımın yaşam döngüsü içinde farklı görev gruplarının projeye ve sisteme farklı bakışları vardır. Müşteriyi hangi işin hangi sırayla yapılacağı, sisteme neler verip sistemden neler alacağı veya işler arası ilişkiler ilgilendirirken bir fonksiyonun detayları ilgilendirmemektedir, Çözümleyici açısından bir nesnenin özellikleri, fonksiyonları ve alacağı parametreler yeterli iken tasarımcı açısından parametrelerin veri tipleri veya fonksiyonun ne kadar bir sürede cevap üretmesi gerektiği, bir nesnenin ne zaman etkin olacagi, yaşam süresi gibi bilgiler de önemli olmaktadır. Teknik yazar ise sistemin nasıl davranacağı ve ürünün işleyişi ile ilgilenmektedir. Bu sebeplerle UML çeşitli bakış açılarını ifade eden diyagramlar içermektedir. Projeye dahil olan herkesin faydalanacağı bir veya daha fazla diyagram vardır. Yazılım geliştirme işinde rol alan kişileri özetleyecek olursak: Çözümleyiciler, tasarımcılar, programcılar, testçiler, kalite sorumluları, müşteriler / kullanıcılar, teknik yazarlar. Bunlardan her biri sistemin değişik yönleriyle farklı bakış açılarıyla ve farklı detayda ilgilenirlerken farklı UML diyagramlarından faydalanırlar.
Sistem gereksinimlerinin anlatılmasında Use-Case diyagramlar kullanılır. Bu diyagram sistemin çok basit bir şekilde modellenmesini ve işlerin detayının (senaryonun) metin olarak anlatılmasını içerir, sistemin işleyişini anlattığı için de yukarda listelenen rollerden hepsinin sıklıkla başvuracağı bir diyagramdır.
Kavramsal (conceptual) model dediğimiz Class diyagramları, gereksinimlerin müşteriye özetlenmesinde kullanılabildiği gibi, asıl olarak tasarımda kullanılmaktadır. Class diyagramları, bazı detayları saklanmış şekilde müşteri-çözümleyici iletişimini desteklerken, detaylı haliyle de tasarımcıya ve programcıya hitap etmektedir. Class diyagramların tasarımı ilgilendiren kısmı oldukça kapsamlıdır, nesne tabanlı sistemlerin doğru tasarlanması tamamen tasarımcının tecrübe ve bilgisi ile ilgilidir, bu sebeple tasarlanacak class diyagramlarında, inheritance (türetme), abstract class'lar, class hiyerarşileri, kullanılacak design pattern'lar gibi detayların düşünülmesi gerekmektedir. Bu noktada UML'nin "doğru tasarım nasıl yapılır?" sorusuna cevap vermediğini sadece bir modelleme dili olduğunu tekrar belirtmek gerekir. Sistemin performansı veya gelecekte yüzleşeceğimiz güncelleme ve bakım sorunları, yazılan kodun başka projelerde veya ek modüllerde yeniden kullanılabilir olması (code reuse) gibi detaylar tasarımcı açısından çok önemli olmalıdır. Nesne tabanlı sistemlerde doğru tasarım yöntemleri başlı başına incelenmesi gereken bir konudur.
Colloboration Diyagram dediğimiz nesneler arası etkileşim ve işbirliği diyagramları, nesneler arası akan verileri ve bunların zamana bağlı numaralanmış akış sırasını ifade eden diyagramlardır. Sequence Diyagram ise işbirliği diyagramının ifade ettiği şeyin aynısını bir zaman çizgisi üzerinde farklı bir gösterimle ifade etmektedir. Bu iki diyagram (colloboration ve sequence diyagramlar) biri hazırlanınca diğeri otomatik üretilebilen diyagramlardır.
State Diyagramları (Durum Diyagramları) ise nesnelerin durum değişikliklerini ifade etmekte kullanılırlar, trafik ışıklarının renkler arası geçişi gibi, bir nesneye ilişkin durum değişiklikleri bu diyagramlar ile ifade edilir.
Package Diyagramları (Paket Diyagramları) büyük yazılımlarda sistemi oluşturan alt yazılımlar veya etkileşimde bulunulan yan sistemler olduğu durumda bu paketler arası etkileşimi gösteren kısaca sistem mimarisinin paket yönünü özetleyen kavramsal bir diyagramdır.
Component Diyagramları (Bileşen Diyagramları) ise Paket diyagramlarının fiziksel anlatımıdır. Basitçe paketler yerine, paket içinde yer alan .dll, exe gibi dosyaları ve bunlar arası etkileşimin gösterildiği bir diyagramdır. Paket diyagramlar sistemin analizi ve tasarımı aşamasında kullanılabilirken Bileşen diyagramları programlama bittikten sonra sistemi tarif eder niteliktedir.
Deployment Diyagramları (Dağıtım Diyagramları) yazılımın nasıl dağıtılacağının planlandığı aşamada yardımcı olurlar. Yazılımın kurulacağı bilgisayarların konfigürasyonu, ağ ve yazıcı bağlantıları gibi detayları kapsamaktadır.
Yukarda kısaca anlatılan diyagramlar sayesinde büyük bir yazılımın yaşam döngüsü içinde her adımı kapsayan, ve sisteme çeşitli gözlerden bakış açısı sunan bir modelleme tekniği olarak UML günümüzün nesne tabanlı bir yazılım projesinin paydaşlarını konuşturan en kapsamlı ve en basit ortak dildir düşüncesini taşıyorum.
BFS - Sevilmesi Kaçınılmaz Search (Arama) Algoritması @ 29-10-2007 14:02
Recursion doğru kullanıldığı zaman çok işimize yarayabilir, kullanılmadığında ise öldürebilir, çocukların(işe yeni başlayanların) ulaşamıyacağı yerlerde saklayınız. Özellikle ağaç tipi veri yapılarının tüm düğümlerini dolaşmak istediğimizde recursiondan faydalanabiliriz. Fakat bu ağaç yapısının ne kadar derinliğe sahip olduğunu kestiremediğimiz durumlarda bu yönteme çok da bel bağlamamak lazım zira işlem aslında yığın yapısı ile gerçeklendiğinden (tüm derleyici yapımı işlemlerinde dahil), yığın taşabilir yani overflow hatasıyla karşılaşabiliriz.
Alternatif bir yöntem ise kendi yığınımızı kullanarak bu işi yapmaktır. Zaten olay bu değilmidir ? Kendin pişir kendin ye..
Genel adı ile "Breadth First Search" ("Yayılma Öncelikli Arama" diye çeviriyorum akademisyenlerin affına sığınarak):
- Bir yığın yapısı oluşturulur ve root node bu yığına eklenir. (Queue ile de yapılabilir sadece işleme sıranız değişir, pek alışılagelmemiştir ayrıca)
- Herhangi bir node'un alt node'ları varsa bunlar da yığına eklenir
- Bulunduğumuz node işlenir ve yığından bir sonraki node çekilir.
- Yığın boşalana kadar bu işlem tekrarlanır
Pseudo oluştu sanırım, bundan sonrası standart işler artık, kim olsa yapar :)Cocuklar&Ebeveynler&Buyukler Icin Ucretsiz Java Kitabi @ 24-09-2007 01:41
Bu kitap ilk bakışta he ne kadar sadece çocuklara hitap ediyormuş gibi gözükse de aslında Java'ya yeni başlayan herkesin çok faydalanacağı bir başlangıç kitabı. Ayrıca Bilgisayar Eğitmenleri ve Öğretmenleri için de harika bir kaynak.
Kitap 3 sene evvel yazılmaya başlandığı için içerik biraz eski gibi gözükse de Java'nın temel ve pek değişmeyen kavramlarını anlattığı için gayet öğretici. Ayrıca tüm örnekler JDK 1.5 ve Eclipse baz alınarak anlatılmış.
Konu açılmışken Java'ya yeni başlayanların ve ilerletmek isteyenlerin çok faydalanacağını düşündüğüm bir kaynak daha mevcut. http://www.javapassion.com/ adresinde Sang Shin tarafından sunum şeklinde hazırlanmış, pdf formatında harika Java eğitimleri mevcut. Acemisinde, ustasına kadar her kesime hitap eden harika Java eğitimler hazırlamış Sang amcamız.
Özellikle Java Programming with Passion! ismindeki, Basic ve Advanced olmak üzere iki kısımdaki toplam 20 başlık altında topladığı eğitimler harika. Yeni başlayanların mutlaka bu linkteki eğitimlere bir göz atmasında fayda var.
Ustalar için ise aşağıdaki eğitimler gayet faydalı olacaktır,birçoğu benim zamanımda faydalandığım ve development konusunda katettiğim yollardan geçmemde faydası olan yaklaşımları hoş kaynaklar:
AJAX Programming with Passion!
Java EE Programming with Passion!
Java Programming with Passion!
Web Services Programming with Passion!
Distributed Programming using Jini and JavaSpaces Technology
XML
Basic Servlet and JSP programming
Advanced J2EE programming
J2EE programming(5-day)
Servlet programming
Struts programming
Web services programming
Web services programming
JavaServer Faces (JSF) programming
NetBeans IDE 5.0 1-day Workshop
J2SE 5.0 (Tiger) programmingAçık Kaynak Konusuna Bakışım @ 24-09-2007 00:02
Açık Kaynak mı? Ücretsizdir kullanalım!?
Başlamadan önce Açık Kaynağın ne olduğunu anlamam ve anlatmam gerekiyor. Birincisi açık kaynak ücretsiz olmaktan öte özgürlük kavramı ile daha çok bağdaşır.Yani kod geliştirirken, dağıtırken veya kullanırken özgür olabilmek açık kaynağın getirdiği fırsatlardır. Bunun getirdiği bir sürü avantaj vardır ki, bunlar için ayrı ayrı bir sürü yazı yazılmıştır. Yani bu yazıyı okumaya devam etmeden önce kafanızdaki açık kaynak=bedava eşitliğini bir süreliğine bırakmanız veya kafanızda biraz gerilere itelemeniz gerekiyor.
Asla!! Açık Kaynak bu şirketin kapısından içeri adım atmayacak dedim sana!! :)
Biz MS destekli firmayız, en iyisini onlar bilirrrr ona göre!!
Zaman zaman etrafımızda, çalıştığımız yerde görürüz, Açık kaynak öcüymüş gibi bir tavır sergilenir.Bu tavır genellikle büyük ölçekli, kurumsal şirketlerde gösterilir. Ve en temelde iki sebebi (ya da öyle olduğu söylenir) vardır. İlki, güvenlik açıklarından dem vurulur.. İkincisi, destek ve dokümantasyon olmadığından yakınılır.
Öncelikle güvenlikten bahsedelim. Güvenlik açığı heryerde olabilir. Sisteminin mükemmel işlediğini düşünen bankalarda dahi güvenlik açıkları vardır. Her programda olduğu gibi açık kaynak uygulamalarda da güvenlik açıkları vardır. Ama uygulamada geliştirme/kullanma olarak katılımcı sayısı (ki bu açık kaynak topluluğu denen grupta gerçekten çok sayıda da insan var) fazla ise güvenlik açıkları zaman içerisinde bulunmuş ve düzeltilmiş/düzeltiliyordur. Eğer bundan yana çok şüphe duyuluyorsa kodlar nasıl olsa elimizde bakabiliriz değil mi? Bu noktada sanki kapalı kaynak kodlar biraz daha güvensiz gibi duruyor farkındayım.
Destek ve dokümantasyona gelirsek, açık kaynak uygulamalar ölçeklerine bağlı olarak ücret karşılığında destek ve dokümantasyon sağlarlar. Tabi açık kaynağı bedava olarak niteleyip, ardından "nereden çıktı bu masraf" denmemeli. Az önce de belirttiğim gibi açık kaynak her zaman bedava anlamına gelmez. JBoss lisans ücreti ödemezsiniz, ama JBoss ON için CPU başına bir lisans ücreti ödemek zorundasınızdır, dünyanın en büyük güvelik ve network firmaları bu yazılımı kullanıyor gözümle gördüm :)
Açık kaynak geliştiricileri kazanmıyor mu?
Açık kaynak uygulamalar Microsoft'un aksine lisans ücreti talep etmezler, bunun yerine dokümantasyon ve destek, zaman zaman da yardımcı entegre modüller asıl para getiren kısımlardır. Bununla ilgili Matt Asay'in Open Road'daki "Why Microsoft fears open source more than other proprietary vendors do" yazısı lisanslama ve dokümantasyon/destek arasındaki farkı ve bununla ilgili Microsoft ve Açık Kaynak arasındaki görüş farklılıklarını çok güzel anlatmış. Bir göz atmakta fayda var.
Açık kaynak kodu çok mu iyidir ? O halde neden herşey açık değil ?
Açık kaynak trendi özellikle Sun CEO'su Jonathan Schwartz'ın katkıları ve vizyonu ile önce OpenOffice, sonra OpenSolaris ve ardından OpenJDK ile ivme kazandı. Sun'ın bu çabasına yakın zamanda IBM de OpenOffice.org topluluğuna katıldığını açıklayarak bir anlamda destek oldu. Sonra sırası ile birçok geniş ölçekli program trend değiştirip kodlarını açma kararı aldılar. Bunun en son örneği ise VMWare oldu. RedHat Fransız Eğitim Bakanlığı ve İsveç'te büyük ölçekte bir ilaç portali olan Fass.se'nin tüm server'larını (IBM ve Solaris'ten) RedHat Linux'e geçirdi.
Yapılması Gerkenler:
Bu kadar yazıdan sonra etrafımdakilerden haraketle olaya nasıl baktığımın özeti:
1.Hala açık kaynak bir uygulama gördüğümüzde kalitesiz ve ucube muamelesi yapıyoruz (Ve hatta lisanslı ürünlerin web sayfalarını inceleyip, aynı ürünün açık kaynak bir şekilde yapılamayacağına kendimizi inandırıyoruz)
2.Açık kaynağın bedava olmaktan öte paylaşımcı, sürekli geliştiren ve öğretici bir topluluk olduğunu anlamakta zorlanıyoruz.
3.Biz geliştirdiğimiz uygulamaları sanki dünyada kimse yazamazmış gibi, kodları kapalı ve lisanslı satmaya çalışıyoruz. (Tamam bu biraz fazla oldu, ama öyle)
Yukarıda yazdığım sonuçlar ile kimseyi suçlamıyorum..Sadece dünyanın yöneldiği trendi hala görmemekte ısrar ediyoruz. Benim vurgulamak istediğim nokta bu, Turgut Uyar gibi insanlar olmadığı sürece açık kaynak kodunun amacı ve gerekliliği de ülkemizde yayılamıyacak gibi.
Hmm tabi bunları söyledikten sonra şunları da ekleyeyim, OpenOffice kullanıyorum, Sun Server'lar üzerine Solaris 9 yerine OpenSolaris veya RedHat kuralım diye her fırsatta iddalı insanlar görüyorum. Firefox favorim. NetBeans ve Eclipse'ten daha iyi IDE'ler tanımıyorum. Projelerine baktığım Kaynak Kodların çoğu Subversion'da (Starteam'den geçtik) tutuluyor. Server ve scripting işlemleri Hudson/CruiseControl ve Ant kullanılarak yapılıyor, yazlım konusundaki tecrübelerini yakından takip ettiğim Sun'da ANT Scriptleri kullanan büyük firmalardan :) ve daha birçoğu....
Son olarak Linux Torvalds (bkz: http://en.wikipedia.org/wiki/Linus_Torvalds) tam bir efsane insandır, dikkatle tüm hayatı ve yaptıkları en otobiyografik detayında incelenmelidir, ilgisi olanlara..
Algorithms Book (Memory remains from Course: Analysis of Algorithms) @ 23-09-2007 22:54
I just finished a fantastic book called "Algorithms", by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani. Even better: this book is free and can be downloaded in PDF form. At 300+ pages, it's not lightweight either, but the authors have done a fantastic job at explaining the main foundations of essential algorithms in simple terms that even developer who don't have a CS degree will find easy to read and to absorb. You will see a few mathematics formulas and proofs here and there, but you can safely skip them if you are not comfortable with them and just take away the very natural and friendly wordings that the authors never omit to make when they are trying to get you to understand the overall idea behind an algorithm.
The book is very extensive and covers the most important algorithms you will ever come across in your life as a developer, starting with the introduction of the "big O" notation, and then progressively moving to more complex topics such as graphs, dynamic programming (nothing to do with dynamic languages), linear programming and culminating this area with the Simplex algorithm (I loved this section).
I would consider the chapters that follow as a "second part" of the book (even though it's not structured as such) since they cover more advanced (and sometimes, still not completely understood yet) problems such as NP completeness and quantum programming.
A must-read for any developer who never got a chance to understand how all these algorithms work or who simply want to get a refresher...
And hats off to Sanjoy, Christos and Umesh for making such a great contribution to the computing world!
XML: Performans Katili - Another Performance Killer @ 23-09-2007 17:54
XML teknolojisi yazılım dünyasının işlerini bir çok noktada kolaylaştıran ama bir o kadar da zorlaştıran bir teknoloji. Özellikle Java ile uygulama geliştiriyorsanız XML'den olabildiğince uzak durmak gerekiyor. XML parsing & generating operasyonları sırasında çok fazla String işlemi olduğu için JVM memory ve CPU kullanımı korkunç artıyor. XML'e performans diye boşu boşuna dememişler.
Bu yazımın esas amacı aslında Java uygulamarında XML kullanmanın getirdiği maliyetleri ve Dennis Sosnoski amcamızın meşhur XML Model Benchmark Test'lerini tanıtmak.
XML'in performance killer 'dan nasıl proje katiline dönüşebileceğine bakmadan evvel öncelikle neden uygulamalarımızda XML kullanmak zorunda kaldığımıza bir bakalım.
XML kullanımı, özellikle Java dünyasında Web Service'lerin yaygınlaşması ile artmaya başladı. Web Service kullanımını arttıran da hepimizin yakından bildiği SOA (Service Oriented Architecture) oldu. 2000'li yılların başında SOA'nın moda olmaya başlamasıyla, dünyaca ünlü vendor'larımız her zaman yaptıkları gibi bu kavramı da hemen suistimal etmeye başladılar. Bir metodoloji çok tuttuğunda vendor'larımızın ilk yaptığı şey, satabilmek için ortaya zorlama bir ürün çıkarmaktır. SOA'nın bu ürünü de Web Servis implemantasyonları oldu. Web Service ailesi (XML-RPC , REST, SOAP) içinde de en fazla öne çıkarılan SOAP mesajları oldu.
Halbuki SOA'nın felsefisinde tüm servis hizmetlerinin web servisler aracılığı ile verilmesi diye bir zorunluluk yoktur. SOA'da bir servise dış veya iç sistemden erişim ihtiyacı varsa öncelikle servis hizmetini veren (server) ile alanın (client) ortamlarına bakmak gerekir.
1. Durum Servis hizmetini veren ve alanın aynı java container'ında olması.
2. Durum Servis hizmetini verenin ve alanın farklı java container'larında olması
3. Durum Servis hizmetini verenin java fakat alanın farklı bir dile (ASP,C#,vs.) ait container'da olması.
1. Durumda istemci ve sunucu aynı JVM'de olduğu için zaten web servis kullanmaya gerek yoktur. Fakat dikkat edilmesi gereken konu, SOA'nın şartlarından biri olan servisler arası bağımsızlığın (loose coupling) korunmasıdır. Spring Framework 'unun da kullandığı Inversion of Control diye adlandırılan patterni bu duruma güzel bir örnektir.
2. Durumda istemci ve sunucu farklı container'da olmasına rağmen iki taraf da java olduğu için yine web servis kullanmaya gerek yoktur. İlk bakışta servis çağırmak için RMI kullanmak en mantıklı çözüm gibi gözüksede, RMI teknolojisinin http protokolü kullanmaması nedeniyle firewall ve proxy'lerde problem yaşaması, farklı java versiyonları kullanan istemci/sunucu mimarilerinde sorun yaşanması gibi sebeplerden pek tercih edilmemektedir.
Bunun yerine en mantıklı çözüm serialized java objects kullanmaktır. Serializable java nesnelerini aynı web servis mantığı ile örnekteki gibi byte array'e çevirip container'lar arasında http üzerinden transfer edebilirsiniz. Objelerin serialVersionUID 'lerini değiştirmediğiniz sürece JDK 1.3 - 1.5 arasındaki container'lar arasında bile servis çağırabilirsiniz. Serialization&DeSerialization, XML parsing'e göre çok daha hızlı, daha az memory kullanan, binary olduğu için daha az data büyüklüğü oluşturan bir işlemdir. Vakti zamanında yaptığımız testlerde özellikle büyük datalarda 30 kata yakın performans elde etmiştik. Eğer bu konuda daha yetenekli, productionda kullanmaya hazır bir API'ye ihtiyaç duyarsanız JBoss Remoting 'e bir göz atabilirsiniz.
3. Durumda istemci java'dan başka bir container olduğunda web servis kullanmaktan başka bir çare yok. Fakat bu konuda da alınabilecek önlemler var. Eğer standart web servis implementasyonlarından herhangi birini seçme imkanınız var ise SOAP'dan kesinlike uzak durun derim. SOAP çok genel amaçlar için tasarlanmış ve sistem performansını en çok düşüren bir XML protokolüdür.
XML'in sisteminizin performansına olan etkisini belirleyen 3 önemli unsur vardır:
1. XML'in yapısı
Varsayalım elimizde 100KB. büyüklüğünde 2 farklı yapıda XML dosyası olsun. Birincisinin ağaç yapısında varsayalım:
XML teknolojisi yazılım dünyasının işlerini bir çok noktada kolaylaştıran ama bir o kadar da zorlaştıran bir teknoloji. Özellikle Java ile uygulama geliştiriyorsanız XML'den olabildiğince uzak durmak gerekiyor. XML parsing & generating operasyonları sırasında çok fazla String işlemi olduğu için JVM memory ve CPU kullanımı korkunç artıyor. XML'e performans diye boşu boşuna dememişler.
Bu yazımın esas amacı aslında Java uygulamarında XML kullanmanın getirdiği maliyetleri ve Dennis Sosnoski amcamızın meşhur XML Model Benchmark Test'lerini tanıtmak.
XML'in performance killer 'dan nasıl proje katiline dönüşebileceğine bakmadan evvel öncelikle neden uygulamalarımızda XML kullanmak zorunda kaldığımıza bir bakalım.
XML kullanımı, özellikle Java dünyasında Web Service'lerin yaygınlaşması ile artmaya başladı. Web Service kullanımını arttıran da hepimizin yakından bildiği SOA (Service Oriented Architecture) oldu. 2000'li yılların başında SOA'nın moda olmaya başlamasıyla, dünyaca ünlü vendor'larımız her zaman yaptıkları gibi bu kavramı da hemen suistimal etmeye başladılar. Bir metodoloji çok tuttuğunda vendor'larımızın ilk yaptığı şey, satabilmek için ortaya zorlama bir ürün çıkarmaktır. SOA'nın bu ürünü de Web Servis implemantasyonları oldu. Web Service ailesi (XML-RPC , REST, SOAP) içinde de en fazla öne çıkarılan SOAP mesajları oldu.
Halbuki SOA'nın felsefisinde tüm servis hizmetlerinin web servisler aracılığı ile verilmesi diye bir zorunluluk yoktur. SOA'da bir servise dış veya iç sistemden erişim ihtiyacı varsa öncelikle servis hizmetini veren (server) ile alanın (client) ortamlarına bakmak gerekir.
1. Durum Servis hizmetini veren ve alanın aynı java container'ında olması.
2. Durum Servis hizmetini verenin ve alanın farklı java container'larında olması
3. Durum Servis hizmetini verenin java fakat alanın farklı bir dile (ASP,C#,vs.) ait container'da olması.
1. Durumda istemci ve sunucu aynı JVM'de olduğu için zaten web servis kullanmaya gerek yoktur. Fakat dikkat edilmesi gereken konu, SOA'nın şartlarından biri olan servisler arası bağımsızlığın (loose coupling) korunmasıdır. Spring Framework 'unun da kullandığı Inversion of Control diye adlandırılan patterni bu duruma güzel bir örnektir.
2. Durumda istemci ve sunucu farklı container'da olmasına rağmen iki taraf da java olduğu için yine web servis kullanmaya gerek yoktur. İlk bakışta servis çağırmak için RMI kullanmak en mantıklı çözüm gibi gözüksede, RMI teknolojisinin http protokolü kullanmaması nedeniyle firewall ve proxy'lerde problem yaşaması, farklı java versiyonları kullanan istemci/sunucu mimarilerinde sorun yaşanması gibi sebeplerden pek tercih edilmemektedir.
Bunun yerine en mantıklı çözüm serialized java objects kullanmaktır. Serializable java nesnelerini aynı web servis mantığı ile örnekteki gibi byte array'e çevirip container'lar arasında http üzerinden transfer edebilirsiniz. Objelerin serialVersionUID 'lerini değiştirmediğiniz sürece JDK 1.3 - 1.5 arasındaki container'lar arasında bile servis çağırabilirsiniz. Serialization&DeSerialization, XML parsing'e göre çok daha hızlı, daha az memory kullanan, binary olduğu için daha az data büyüklüğü oluşturan bir işlemdir. Vakti zamanında yaptığımız testlerde özellikle büyük datalarda 30 kata yakın performans elde etmiştik. Eğer bu konuda daha yetenekli, productionda kullanmaya hazır bir API'ye ihtiyaç duyarsanız JBoss Remoting 'e bir göz atabilirsiniz.
3. Durumda istemci java'dan başka bir container olduğunda web servis kullanmaktan başka bir çare yok. Fakat bu konuda da alınabilecek önlemler var. Eğer standart web servis implementasyonlarından herhangi birini seçme imkanınız var ise SOAP'dan kesinlike uzak durun derim. SOAP çok genel amaçlar için tasarlanmış ve sistem performansını en çok düşüren bir XML protokolüdür.
XML'in sisteminizin performansına olan etkisini belirleyen 3 önemli unsur vardır:
1. XML'in yapısı
Varsayalım elimizde 100KB. büyüklüğünde 2 farklı yapıda XML dosyası olsun. Birincisinin ağaç yapısında olduğunu,ikincinin ise tek nod'dan oluştuğunu varsayalım:
Herhangi bir XML parser ile (DOM, SAX, PULL farketmez) yukarıdaki aynı büyüklükteki 2 farklı yapıdaki dosyayı parse ettiğinizde çok farklı sonuçlar (hız, cpu ve memory kullanımı) elde ettiğinizi göreceksiniz. Birazdan bahsedeceğimiz XML Parser'in seçimi ile XML'in yapısı arasında çok yakından bir ilişki vardır.
2. XML'in büyüklüğü
XML data'sı büyüdükçe sistem performansı doğal olarak düşer. Fakat XML verisinin büyüklüğü ile sistem performansı arasındaki oran logaritmiktir. Bunun sebebi ise XML'in daha evvel bahsettiğimiz gibi çok fazla memory ve cpu kullanmasıdır. Bir JVM'de aynı anda çok fazla XML parsing işlemi olduğunda CPU bu işlemleri sıraya koymaya başlıyacak, sırada bekleyen XML nesneleri çok fazla memory kullandığından heap'i doldurmaya başlıyacak, JVM heap'in dolduğunu görünce sık sık GC (Garbage Collector) çalıştırmaya başlıyacak, GC çalışırken çok fazla CPU kullandığı ve tüm sistemi çalıştığı sürece suspend ettiği için tüm sistem tabir yerinde ise ağır çekimde ilerleyecektir. Tabii bu durum son kullanıcıya program çöktü olarak yansıyacaktır.
3. XML Model
Buraya kadar anlattıklarımıza rağmen data alışverişlerinde hala XML kullanmaya kararlı iseniz o zaman yapmanız gereken doğru XML parseri seçmek. Aynı zamanda bir SOA danışmanı olan Dennis Sosnoski 'nin eski ama hala meşhur XML Model Benchmark sonuçlarını incelerseniz, farklı test tipleri için meşhur XML API'lerin nasıl değişik test sonuçları verdiğini görebilirsiniz.
Ben genelde parser olarak çok daha hızlı olan ve az memory kullanan PULL parser'ları tercih ediyorum. Bu konuda size de XPP3 'i önerebilirim. Fakat son yıllarda VTD-XML isminde XML datasını String olarak değilde byte olarak işleyen çok hızlı bir XML parser ön plana çıktı. (world's fastest XML processor benchmark results).
Sonuç
Buraya kadar anlattıklarımızı özetlersek çok çok mecbur kalmadıkça konfigürasyon dosyası dışında XML kullanmayın derim. (Bu konfigürasyon dosyalarını okumak için de lütfen kendiniz bir API yazmaya kalkmayın, Apache Commons Configuration'ı kullanın.) Diyelimki çok mecbur kaldınız o zaman aşağıdaki önerilere kulak asmanızda fayda var:
1) SOAP'tan uzak durun ve XML'in yapısını oldukça basit tutun. XML'in yapısı ne kadar basit ise o kadar hızlı işlenir.
2) Farklı yapılarda XML veriniz var ise hepsi için aynı XML Model'ini kullanmayan. Hatta process etmeden evvel, XML'in büyüklüğüne ve yapısına bakıp en uygun XML Model'ini seçen generic bir API bile yazabilirsiniz.
3) Veri büyüklüğünün üst sınırını bilemediğiniz servislerinizi XML ile sunmayın ya da limit koyun. Test ortamlarında ortalama 100Kb.'lık datalar ile çalışırken, production'da bir servis sonucu 10MB.'lık bir XML oluşursa çok ciddi üzülürsünüz :)
4) XML operasyonlarını servisi hazırladığınız veya karşıladığınız katmanda yapın ve XML objelerini hemen basit java objelerine çevirin. Business metodları içine XML objelerini geçirmeyin.
5) Vendorların her söylediğine hemen kanmayın (hatta şüphe ile yaklaşın). Unutmayın onların hedefi daha fazla ürün satmak, sizin hedefiniz ise projenin başarılı olması.
Bu aralar AJAX'ın çok moda olması nedeniyle XML konusunda bir hatırlatma daha yapmak istiyorum. Bildiğiniz gibi AJAX 'da client/server arasındaki data alışverişini mecburen XML ile yapıyor. Developer'lar AJAX kullanırken XML yüzünden sisteme binen yükün farkında değiller. Konu açılmışken AJAX'a henüz giriş yapmayanlar Sezer Yeşiltaş'ın AJAX konusundaki blog'una bir göz atabilirler
Performans katili, projelerimizin katili olmamalı! Önümüzdeki projelerde de buna dikkat etmeliyiz!
Konuyla ilgilenmek isteyen hem .NET'ciler hem de JAVA'cılar için birkaç link vermek istiyorum:
Comparing Web service perfomances(1):
http://msdn2.microsoft.com/en-us/vstudio/aa700840.aspx
Comparing Web Service performances (2):
http://www.sosnoski.com/presents/cleansoap/comparing.html
Checklist Web Service performances:
http://msdn2.microsoft.com/en-us/library/ms979173.aspx
Ve Sun 'ın olaya yanıtı:
http://java.sun.com/performance/reference/whitepapers/WS_Test-1_0.pdf
Adobe Acrobat: Please Die!! (Expirence during old AMVG Internship days) @ 23-09-2007 17:43
Don’t get me wrong, Adobe makes some fine products. But for the life of me, I think their programmers are insane.
Up until six months or so ago, I used Adobe Acrobat to view, edit, create, etc. PDF files. And what happens every time you open Adobe Acrobat? It takes 5 minutes to load all of it’s fancy schmancy dlls and plugins just so that I can view a friggin PDF!
“No more!” said I six months ago, “this shall not continue!”
So I downloaded Foxit Reader to view my PDFs in. All well and good. You may ask why I’m posting this now, six months after the fact. because even though I can view PDFs in Foxit (without the 5 minute wait for Adobe), I can’t create or edit them. So, I have to keep Adobe installed for that purpose. Luckily, though, the need to create a customized PDF happens somewhat rarely, and most of the time I can just use the Bullzip PDF Printer from MS Word or Publisher or whatever. Sometimes though, I need the more advanced features of Adobe. Such an event occurred this very eve. I needed to make a PDF form…
So, I launch Adobe Acrobat, go make myself a cup of coffee while I wait, and proceed to create said PDF. Easy peasy, no fuss, etc. All done. Close Adobe and get a terse message that Adobe needs to download critical updates.
Now, having experienced the Adobe update routine before, I wasn’t too keen about it. I declined the request to update.
But Adobe wasn’t done yet.
Not by a long shot.
An hour goes by, the customer is happy with their PDF, and I decide to relax with a short game of Hacker Evolution. Midway through level 3, the game minimizes to the task bar (it runs full screen) and Adobe asks again to be updated.
“No!” I shout, worried about the progress of my game which was interrupted. Accordingly, I click the button to dismiss the dialog and go back to my game (which paused automatically, thank goodness). I successfully finish level 3 in record time!
Okay, back to work. Now I’m writing a letter to a past due customer, asking them if they would be so kind as to pay their friggin bill. But wait! Adobe needs to install it’s updates right now!!
Now I’m irritated. I fumble through the dialog looking for the “Don’t ever ask me again, you stupid cow!” button. I know there is one; not visible, perhaps. In frustration, I click the “Download and Install Now” button. Big mistake.
So here I am 6,348 reboots later with a fully updated Adobe. Big whoop.
I summary, here are some questions for the Adobe Acrobat team:
- Why the heck do you need to load every single possible DLL and plugin that you can think of just to view a friggin PDF?! Why!?
- Why is Acrobat the only program in existence that requires the entire computer be restarted after every single update?! Even Windows Updates don’t need that, and they’re patching the ***-da**ed operating system. Do they need to reboot after ever update? NO! They need only one, big reboot after installing as many updates as were needed. Come on! If you can’t figure out a way to patch an application without restarting the OS each time, then you need to change careers; there is no place for you in the programmers’ kingdom.
- Why, oh why, do you feel it necessary to insert your bloatware into every possible orifice of an OS? I don’t want nor need your program to load with Windows, consuming resources and calling home every day in case their are any updates.
Useful Links:
Foxit Reader For Windows, an excellent free PDF viewer.
And i do not expect to get a reply message from Adobe Team encouraging me for development to do a better product, My answer is ready: G me the source, i'll give you the best :)
There, I feel better now.
Computer Sayings (My Favorites) @ 28-08-2007 00:31
There are two ways to write error-free programs; only the third one works. - A printer consists of three main parts: the case, the jammed paper tray and the blinking red light.
- The programmer's national anthem is 'AAAAAAAARRRRGHHHHH!!'.
- At the source of every error which is blamed on the computer, you will find at least two human errors, including the error of blaming it on the computer.
- Beta. Software undergoes beta testing shortly before it's released. Beta is Latin for "still doesn't work."
- Computer analyst to programmer: "You start coding. I'll go find out what they want."
- Computer Science: solving today's problems tomorrow.
- Hidden DOS secret: add BUGS=OFF to your CONFIG.SYS
- Hit any user to continue.
- I wish life had an UNDO function.
- If your computer says, "Printer out of Paper," this problem cannot be resolved by continuously clicking the "OK" button.
- It said "Insert disk 3..." but only 2 fit in the drive.
- Microsoft Windows: computing While U Wait
- 665.9238429876 - Number of the Pentium Beast
- I have yet to meet a C compiler that is more friendly and easier to use than eating soup with a knife.
- My software never has bugs. It just develops random features.
- Programming graphics in X is like finding sqrt(pi) using Roman numerals.
- "To know recursion, you must first know recursion"
- Life's unfair - but root password helps!
- Mountain Dew and doughnuts... because breakfast is the most important meal of the day.
- Hey! It compiles! Ship it!
- "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
- Intel: We put the "um..." in Pentium.
- Helpdesk tip #2: When the support analyst says "Click...", wait for the rest of the sentence.
- BREAKFAST.COM Halted...Cereal Port Not Responding
- BUFFERS=20 FILES=15 2nd down, 4th quarter, 5 yards to go!
- As a computer, I find your faith in technology amusing.
- Disinformation is not as good as datinformation.
- Smash forehead on keyboard to continue.....
- Enter any 11-digit prime number to continue...
- All wiyht. Rho sritched mg kegtops awound?
- A good programmer makes all the right mistakes.
- Managing programmers is like herding cats.
- "There is an old saying that if a million monkeys typed on a million keyboards for a million years, eventually all the works of Shakespeare would be produced. Now, thanks to Usenet, we know this is not true."
- "A good programmer is someone who looks both ways before crossing a one-way street."
- C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, it blows away your whole leg.
- A computer scientist is someone who, when told to "Go to Hell," sees the "go to," rather than the destination, as harmful.
- 1010011010 - The binary number of the Beast
- APATHY ERROR: Don't bother striking any key. Application has reported a "Not My Fault" in module KRNL.EXE in line 0200:103F
- "The three most dangerous things in the world are a programmer with a soldering iron, a hardware type with a software patch and a user with an idea."
Veritabanı Nedir? @ 27-08-2007 23:21
GİRİŞ
• Bu dökümanda aşağıdaki konular ele alınacaktır
- Veritabanı tanımı
- SQL nedir?
- Veritabanlarının kullanım alanları
- Relational veritabanlarının açıklanması
- Veritabanı çeşitleri ve açıklamaları
- Hangi veritabanı nerede kullanılmalıdır?
- e-posta listeleri
Veritabanı nedir?
http://www.m-w.com/ adresindeki Merriam-Webster sözlüğünde bir veritabanı :
“a usually large collection of data organized especially for rapid search and retrieval (as by a computer)” olarak tanımlanır. Şuanda çalışmakta olduğum ortramdan çıkardığım tanımıysa “You know DB is most complicated arena , just behind Operating system” olarak değerlendirilmesi gerken en karmaşık ve önemli yapılardandır.
• Kitaplıklar, uygulamalar ve yardımcı programların birleşmesinden oluşur.
• Verilerin saklanması ve yönetilmesi ile ilgili konulardaki ayrıntılardan veritabanı yöneticilerini kurtarır.
• Kayıtların güncellenmesi ve kayıtlar üzerinde araştırma yapılması da mümkündür.
• SQL (Structured Query Language)
• Veritabanı dilidir. Program geliştiriciler, bir veritabanına veri eklerken, silerken, güncellerken veya sorgularken bu dili kullanırlar.
• ANSI ve ISO standardıdır.
• Select, Delete, Update, Where
SQL Nedir?
• SQL (Structured Query Language)
• Veritabanı dilidir. Program geliştiriciler, bir veritabanına veri eklerken, silerken, güncellerken veya sorgularken bu dili kullanırlar.
• ANSI ve ISO standardıdır.
• Select, Delete, Update, Where
Neden Veritabanı?
• Gerçekten veritabanına gereksinmeniz var mı?
• Veritabanları, verilerin saklanması ve yönetilmesi için kullanılmalıdır.
• Küçük bilgiler için metin dosyaları yeterli olabilir.
• Amacınızın iyi belirlenmesi gerekir.
• Veri sadece bir konuyu içeren bir listenin içinde mi?
• Sorun karmaşık mı?
• İstatiksel bir analiz mi yapmak istiyorsunuz?
• Bir yönetim mi yapacaksınız?
• Metinsel veritabanları
• Kullanım kolaylığı
• Bilimsel formüllere gereksinmeniz olacak mı?
• Veriyi paylaşma gereksinmeniz olacak mı?
• Veriyi webde sunacak mısınız?
Relational Database Modeli (RDBMS)
• Tablolardaki kayıtlar matematiksel açıdan tuple olarak tanımlanırlar.
• Bir tuple tanımlanmış bir veri tipi olan bileşenlerden oluşan sıralı grup olarak tanımlanır.
• Tüm tuplelar aynı sayıda ve tipte bileşenlerden oluşur.
• {“ab01”, “Aydın”, “2001”}.
• {“ab02”, “İstanbul”, “2002”}
• Örnekteki her bir tuple da 3 bileşen bulunmaktadır:
• Kaçıncı akademik bilişim olduğu (string)
• Hangi ilde yapıldığı (string)
• Yıl (numeric)
• Relational veritabanlarında bu “kümeye” ya da tabloya eklenen tüm kayıtlar aynı biçemde olmalıdırlar
• {“ab02”, “Aydın”}
• – eksik bileşen
• {“ab02”, “Aydın”, “2002”, “Şubat” }
• – fazla bileşen
• {2002, “ab02”, “Aydın”}
• – yanlış bileşen tipleri (yanlış sırada)
• Ayrıca tuple lardan oluşan bir tabloda aynı veriler bulunmaz.(No duplicate record). Dolayısıyla relational veritabanlarındaki herhangi bir tabloda birbiriyle tamamen aynı iki kayıt (row or record) bulunamaz.
• Bu, çok gereksiz bir sınırlama olarak görünebilir. Örnek vermek gerekirse, aynı kullanıcının aynı malı iki kez sipariş etmesi görünürde engellenmiştir. Bunu da tabloya bir bileşen ekleyerek çözebilirsiniz.
• Bir kayıttaki her bir bileşen “atomik”, yani bir veri olmalıdır; başka bir kayıt ya da diğer bileşenlerin listesi olamaz.
• Tablodaki bileşenlerin veri tipleri de üsttekilerle ve dolayısıyla tablo tanımlarındakilerle aynı olmalıdır. (Veritabanı tarafından desteklenen veri tiplerinden biri olmalıdır.).
• Birbiriyle eş kayıtları ayırmak için kullanılan bileşenlere key denir.
• referential integrity.
• Tablodaki bir kaydı diğer tüm kayıtlardan ayırmak için kullandımız bileşene, primary key adı verilir. Primary key, o kaydı “unique” yapar. Tüm relational veritabanlarında her bir tablo ya da relationda mutlaka primary key olmalıdır.
Veritabanı çeşitleri
• Öncelikle ne yapılacağına karar verilmelidir:
- Bu veritabanı ile neler yapacaksınız? Küçük bir şirket çalışanlarının özel bilgileri mi tutulacak, yoksa büyük bir şirketin binlerce müşterilerinin bilğileri mi?
- Sitenizi günde kaç kişi ziyaret edecek?
- Aynı anda kaç işlem yapılacak?
- Güvenlik ne ölçüde olacak?
Verilerinizin güvenliği ne ölçüde olacak?
Yanlış bir kanı : “Paralı ürünler iyidir, ücretsiz ürünler iyi değildir!”
Linux, bu tezi çürüten, bilgisayar sektöründeki son yıllardaki en iyi konudur.
Bir veritabanının ücretsiz olup olmamasından çok işinizi görüp görmeyeceği önemlidir.
- Microsoft Access (Hala bankalarda kullanılan m.ö’den kalan db)
- MySQL (tam anlamıyla sp yazamadığın nasa’nın nasıl kullandığına hayret ettiğim db)
- IBM DB2 (Yetenekleri hiçbirzaman Oracle kadar olamayacak pahalı db)
- Informix
- Microsoft SQL Server (Her ms ürünü gibi kullanmaya mecbur kalacağım db)
- PostgreSQL (Favorim – Open Source’un en kral db’si)
- Oracle (Hala var olan en yetenekli ve gelişmis db)
- Interbase
MS Access
• Microsoft Office ürünüdür.
• Küçük ölçekli uygulamalar içindir.
• Tablo başına 2 GB a kadar veri depolayabilir.
• Aynı anda 255 bağlantıya izin verebilir.
• Linux/MAC sistemlerinde kullanılamaz.
• “Transaction locking” özelliğine sahiptir, ancak “trigger” ve “stored procedure” özelliklerine sahip değildir.
MySQL
• MySQL Inc.
• Windows, Linux, OS/2,Solaris, AIX vb.
• “trigger” ve “stored procedure” özelliklerine sahiptir, ancak “Transaction locking” özelliği bulunmamaktadır.
• Tablo başına 2 GB veri depolayabilir.
IBM DB2
• IBM
• Access ve MySQL e göre daha performanslı, ancak küçük işletmelere göre daha yüksek maliyete sahiptir.
• *nix ve Windows üzerinde çalışabilir.
• Transaction locking”, “trigger” ve “stored procedure” özelliklerine sahiptir.
Informix
• Illustra
• Ücretli ve güçlü bir veritabanıdır.
• Orta ölçekli işletmelerin yükünü kaldırabilecek kapasitededir.
• 1994’deki Postgres kodundan geliştirilmeye başlanmıştır.
MS SQL Server
• Microsoft
• Dezavantajı: Sadece Windows üzerinde çalışabilir. Yüksek maliyet
• Kullanım kolaylığı, güvenilirliği,işlem gücü
• Maliyeti diğer veritabanlarına göre yüksektir.
• Tablo başına 4 TB veri depolayabilmektedir.
• “Transaction locking”, “trigger” ve “stored procedure” özelliklerine sahiptir.
PostgreSQL
• PostgreSQL Global Development Group
• Linux, Unix, BSD, Windows, AIX vb.
• Ücretsiz, akademik bir veritabanı
• Çok güçlü işlem yapısı
• Veri güvenliği ön planda
• Tablo başına 64 TB veri tutabilme özelliği
• “Transaction locking”, “trigger” ve “stored procedure” özelliklerine sahiptir.
• Anlıyacağınız Oracle’ın ücretsiz haline yakındır, 14tb veri tuttuğunu gözlerimle gördüm :)
Oracle
• Oracle, Inc.
• Dünyanın en güçlü ve güvenilir veritabanı olarak gösterilmektedir.
• Support konusunda sorunu olmayacak, yüzlerce tool’u olan bir efsanedir.
• Çok yüksek maliyetlidir
• Windows, Unix, Linux
• Oracle, sınırsız sayıda tabloları desteklemektedir.
Hangi Veritabanını Seçmeli?
Çok derin ve stratejik bir karar olmakla birlikte çok çok sığ bakarsak olaya;
• Küçük yoğunlukta trafik: MySQL ya da Access
• Daha büyük ve orta ölçekli uygulamalar içinse, MS SQL ya da Linux makineler ve Server'lar üzerinde PostgreSQL kullanılabilir.
• Oracle ise çok yüksek güvenilirlik ve işlem gücü gerektiğinde tercih edilen bir veritabanı sunucusudur.
Port Forwarding Nedir? @ 27-08-2007 16:21
Port yönlendirmeyi anlayabilmek için IP ve Port hakkında biraz ön bilgiye sahip olmak gerekiyor, buradan gün itibariyle hakim olduğum akademik bilgi ölçüsünde olay şöyle:
Her internete girdiğimizde bir adet global IP adresi alırız, bu IP adresi tüm dünyada tekil olduğu için aslında bizim bilgisayarımızın Internet üzerindeki adresine denk gelir. Gerçekte Internete bağlantı kuran cihaz modem olduğu için aslında internete giren modemdir, modem internet bağlantısını sağlayıp sonra kendisine bağlı bilgisayar(lar)la bunu paylaşır, tüm dünyada tekil olan IP adresini de modem almış olur. Modemle bilgisayarımız arasında da küçük bir lokal network oluşur, lokal networkteki her cihazın yine birer IP adresi olması gerekeceği için, sonuç olarak bilgisayarımızın bir adet, modemin ise iki adet IP adresi olur.Modemin sahip olduğu IP'lerden biri tüm dünyada tek olan global IP adresidir, diğeri de kendi lokal networkumuzde geçerli olan lokal IP adresidir. Bilgisayarımız ile internet arasında kurulan iletişim, gerçekte bilgisayar ile modem arasında lokal ip'ler üzerinden kurulur, modem port yönlendirme yaparak bizim isteklerimizi internette ilgili bilgisayarlara yönlendirir ve bu işlem otomatik olarak gerçekleştiği için biz bunun farkına varmayız ama bazı durumlar vardır ki bu port yönlendirme işlemi otomatik yapılamaz bu durumda bizim bir takım tanımlamalar yapmamız gerekir.
Hangi durumlarda port yönlendirmeyi bizim yapmamız gerekir?
Buradaki en önemli konu, iletişimi kimin başlattığını bilmektir. Çünkü bu bizi port yönlendirmeye ihtiyacımız var mı yok mu noktasına getirecektir. Eğer iletişimi başlatan taraf biz isek herhangi bir port yönlendirme işlemi yapmaya gerek yoktur, çünkü iletişime başlarken karşı tarafa nerde olduğumuzu iletiriz. Eğer bilgisayarımıza uzaktan erişilmesini istiyorsak bu durumda iletişimi uzaktaki bilgisayar başlatacaktır ve uzaktaki bilgisayar sizin IP adresinizi ve hangi port'u kullanarak iletişim kuracağını bilmesi gerekir. Internetteki IP adresinizi en pratik olarak http://www.checkip.net adresine girerek öğrenebilirsiniz. Bunu öğrenmek yeterli olmamaktadır çünkü bu IP ile bilgisayarımıza değil ancak modemimize erişilebilir, bu durumda modem'e demelisiniz ki "dışarıdan sana gelen bu istekleri benim bilgisayarıma yönlendir". Aslında dışarıdan gelen isteklerin içinde bir de port bilgisi olacağı için modeme tam olarak şunu demelisiniz "Dışarıdan senin X portuna gelen istekleri, benim bilgisayarımın X portuna yönlendir." bunun adı port yönlendirmedir. Eğer modeme birden fazla bilgisayar bağlı ise X portundan gelenleri A bilgisayarına, Y portundan gelenleri B bilgisayarına yönlendir diyebilirsiniz. Örneğin bu bilgisayarlardan biri WEB sunucu diğeri Email sunucu olabilir. Sahip olduğunuz bir IP adresi ile modeminize bağlı birden fazla bilgisayara erişim yapılması sağlanabilir, bu nedenledir ki Port Yönlendirme işlemine bir çok yerde Virtual Server (sanal sunucu) oluşturma adı da verilir.
Dia ile çizdiğim yukarıda şekil, Windows'un Remote Desktop uygulaması ile bilgisayarınızı uzaktan kullanırken oluşan akışı gösteriyor. Uzaktaki bilgisayar 'dan Remote Desktop programını başlattığınızda size bir IP soracaktır bu IP evdeki modeminizin internete bağlanırken aldığı IP'dir e.g. 160.75.114.119'dur.
3389 portunu siz vermiyorsunuz, Remote Desktop bu portu kendisi kullanarak bağlantı sağlıyor. Sonuçta IP ve Port bilgisi ile modeminize erişim sağlanıyor, modem ayarlarında yer alan port forwarding ya da virtual server bilgisi sayesinde bağlantı isteği, evdeki lokal networkte yer alan bilgisayarınıza yani örnekteki 192.168.1.2 numaralı IP'nin 3389 portuna yönlendiriliyor. Bundan sonra artık iki program arasında sağlanan iletişim ile evdeki bilgisayarınızı uzaktaki bilgisayar ile kullanmaya başlıyorsunuz.
Port Yönlendirme veya Virtual Server tanımlama işlemi modem yönetim programı ile yapılmaktadır, görüntüsü modem üreticisine göre farklılık gösteren ama genelde web tabanlı çalışan bu arayüzlerden gerekli örnekleri web'ten de bulabilrsiniz.
Tercih edilen üreticiler, arayüzlerinin gelişmişliği sırasıyla dlink, linksys, zoomve us robotics olarak verilebilir.The Simpsons Great Mix @ 24-08-2007 16:36
The Simpsons'tan farklı bölümlerden 9 dakikalık süper bir karma video :)
Social Bookmarking @ 22-08-2007 19:26