Showing posts from February, 2011

Demos and Videos

We are happy to announce that we added a new demo page to our web site where we show off mini applications built with Formspider. Each application highlights something cool about the framework. There are six mini apps already and we will add more every day. You can run the apps and look at the PL/SQL code behind them too. Go to our demo page and see how we build amazing Web 2.0 apps with just PL/SQL.

We also revamped our Learning Center. It now includes short videos that will guide you through your first applications with Formspider. Watch and see how incredibly fun and easy it is to build web apps with just PL/SQL.

Our Story

When I founded Gerger, I had enough of management that intervenes instead of making it possible for me to work, company procedures that are written by drones with no heart or even a liver, policies that are specifically designed to kill the buzz around anything that may be remotely enjoyable to work on, office hours that start at dawn and end only when the boss leaves the building at midnight because this is the way he likes it, vacation days as if I am in prison and endless meetings that make me wish to have a seizure so that I can get out.
I decided to throw away everything I’ve been thought about how a company is supposed to be and start building my own the way I dreamed it.
At Gerger, there is no management. We are 17 colleagues who work together. We respect each others knowledge and intelligence and are willing to be subordinates when one of us has merits to lead. I cannot think of an instance where I said “Sorry, company policy.” We have no office hours. Anyone can enter the offic…

Aman Hiçbir Şeyden Geri Kalmayayım

Bir Tumblr'ım eksikti. Ona da başladık. E hadi bakalım hayırlısı.

İlk Yarışmacılarımızı Ağırladık

Birkaç ay önce Projekent bünyesinde bir yazılım yarışmasına sponsor olmuştuk. Yarışmanın konusu JavaScript ile yazılacak bir XML Editörü idi. Katılacak arkadaşlardan da en önemli isteğimiz, mutlaka arada bir ofisimize uğramaları ve bizden geri besleme almalarıydı. Bunun nedenlerini de açıklamıştık.

Geçen günlerde çiçeği burnunda ilk yarışmacılarımız teşrif ettiler: Mert ile Mustafa. İkisi de cin gibi maaşallah. Henüz kodu yazmaya başlamamışlar ama kafalarında bayağı iyi bir plan yapmışlar. Önce Serdar’ın masasında başladık sohpete, baktık hararetleniyor, içeri geçtik. Mert aldı eline kalemi, geçti tahtanın başına...Allaaaaah...yazıyor çiziyor. Kırk yıllık yazılımcı gibi toplantıyı sürüklüyor. Annesi görse gurur duyardı. Harikaydı.

Mustafa da az değil. Arka planda kalıyor, düşünüyor, bütün seçenekleri değerlendiriyor, bize alternatifler sunuyor. Şu olur, bu olmaz diyor. Mert’in bir gözü hep onda. Oluru alınca Mustafa’dan devam ediyor. Şimdiden çok iyi bir takım olmuşlar.

Fikirler uçuşu…

Google Maps Api v3 Location Search with jQuery Autocomplete Plugin

When I needed Google Maps style auto complete in my application, I looked into a lot of JavaScript libraries but I couldn’t find a useful solution. Since I’m new to JQuery, at first I couldn’t realize how it simple all this was.
With JQuery auto complete plug-in we can pull data from local or remote sources. In this example , I used google.maps.Geocoder as the remote data source.

For those who are not familiar with the term, geocoding is the process of converting addresses like ("1600 Amphitheatre Parkway, Mountain View, CA”) into geographic coordinates (latitude and longitude values).

There are two different geocode requests in this example:

1. I used first geocoding request to convert user address into latitude and longitude values,
2. The second request is the Reverse Geocoding, to convert search results into human readable format. Reverse Geocoding often returns more than one result. I think it is best to fetch all these results and serve all of them to the user instead of sh…

What Problem Domain Does Formspider Address?

Formspider addresses the same problem that Oracle Forms was built for, some twenty years ago: Enabling PL/SQL Developers build great enterprise applications with just PL/SQL.

At its height, Forms was great for that. Its only programming language was PL/SQL. The applications built with it ran on any platform. For example, I built applications that run on Windows. To this date, I still don’t know a single Windows API. I wrote in PL/SQL, using Forms PL/SQL API’s and Forms took care of the rest.

Since PL/SQL cannot really run anywhere but in the database, some brilliant engineers at Oracle had to convert all the PL/SQL code I wrote as a teenager,  to C, C++ or whatever so that my applications can run in Windows. I still don’t know what they have done. I never needed to know. I never cared. My focus was on implementing business requirements in PL/SQL and deliver results to my clients. Forms took care of the rest. That was the beauty of Oracle Forms.  Applications built in Oracle Forms are p…

Formspider Available for Local Installation

We just made Formspider available for downloading and installing locally. This was important as there was quite a bit of interest in the local installation. The team tested the hell out of the installer but please, please, pretty please let us know if you run into any issues. Giving feedback is incredibly easy. If the installer fails, it will ask your permission to send us the installation log. It collects no personal information and asks for an optional email address to get back to you when the problem is fixed.

The Installer currently supports Windows only. We are going to support other platforms but in the meantime, if you need Formspider installed to a different OS, contact us at We’d be happy to guide you through it.

Wrapping PL/SQL Source Code and a Strange Bug (PLS-00753)

Wrapping process makes PL/SQL source code unreadable. Developers can wrap package specifications, package bodies, functions, procedures, type specifications and type bodies. Unfortunately triggers cannot be wrapped. To wrap the trigger code you need to place your source code to a package or procedure and call it from the trigger.

There are two ways to wrap PL/SQL source code.

1. Wrapping PL/SQL source code with wrap utility

Wrap utility takes two parameters. First one (iname) is the PL/SQL source code file and the second one (oname) is the output file that will hold the wrapped code.

wrap iname=example_input_file.sql oname=example_output_file.plb
This is an easy way to wrap source code because you do not need to handle DDLs bigger than 32767 bytes. But this way, you need to save DDLs into different files and execute the wrap command frmo the command prompt for each file.

2. Wrapping PL/SQL source code with DBMSL_DDL package

The DBMS_DDL package contains an overloaded wrap API to wrap PL…

Using Where Clause with Hierarchical Queries

Using where clause in hierarchical queries may be confusing. Oracle first evaluates the joins in the query if there are any. Then, next step, selects rows in hierarchical order. Finally, applies remaining where clause conditions. In other words, rows are filtered by where clause after evaluating the hierarchy. Lets show this with an example on HR schema:

SQL> select level, e.employee_id, e.manager_id, e.department_id, e.first_name, e.last_name
 2  from employees e, departments d, jobs j
 3  where e.department_id = d.department_id
 4  and e.job_id = j.job_id
 5  and d.department_id = 100
 6  start with e.manager_id is null
 7  connect by prior e.employee_id = e.manager_id;

---------- ----------- ---------- ------------- -------------------- -------------------------
        3         108        101           100 Nancy                Greenberg
        4         109        108           100 Daniel             …

Running ant javac inside Eclipse

You may often want to use javac task in your ant build files. In order to execute javac tasks inside Eclipse, you need to do a little bit of work. Below are the steps I follow to get javac executed succesfully. I hope it helps.

1. Define build.compiler property in your ant build file.
<project basedir="." default="compile" name="Test Builder"> <property name="build" location="C:\Users\Administrator\Desktop\build"/> <property  value="org.eclipse.jdt.core.JDTCompilerAdapter" name="build.compiler"/> <target name="compile" > <javac srcdir="." destdir="${build}" target="1.5" source="1.5" debug="true"> </target> </project>
2. You should have a file named org.eclipse.jdt.core_{version}.jar located at plugins directory under your
Eclipse distribution. Extract this file into a desired location. You should …


Tonight I received an email from Mike Riley, president of ODTUG, asking me several questions regarding the ODTUG Kaleidoscope Conference between June 26-30. I have the honor of being one of the presenters in the conference. Below are my answers to his questions.

What’s the best thing about Kscope conferences?

Kscope has a very special place in my heart even though this is going to be the first time I will be presenting or even attending. In early 00’s I was just a young developer at Dulcian. Every year around spring time, a breeze of excitement surrounded the company. Paul would gather us in the conference room and we’d start planning his presentation for ODTUG. (We always referred to the conference as ODTUG. Still today, I have no idea when people started calling it Kscope.) It was, (and still is) the conference where Dulcian made its big announcements. The entire company would come together to complete “an important milestone in the company vision” just in time for ODTUG.
“Do you th…

Query optimization in MySQL with Subqueries

Recently I had to fetch data from several tables using ORDER BY and LIMIT statements in MySQL. The problem with LIMIT statement is that it's applied in the last step after all the rows are fetched. I needed to fetch rows that fit in boundaries specified by x1,y1,x2,y2 as well as information about the writer of these entries. Tables used in the process were:

CREATE TABLE `location` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `lat` double NOT NULL, `lng` double NOT NULL, PRIMARY KEY (`id`), KEY `idx_latLng` (`lat`,`lng`), KEY `idx_lat` (`lat`), KEY `idx_lng` (`lng`) ) ENGINE=InnoDB CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `fullName` varchar(255) DEFAULT NULL, `gender` varchar(1) DEFAULT NULL, `birthdate` date DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `language` varchar(3) DEFAULT 'en', `createdate` datetime NOT …

Formspider vs. APEX

Every product is built so solve a problem. Before its implementation, its creators ask a question and come up with an answer which is the product. How should we stick nails to a wall was the question the creator of the hammer asked.

This question can be asked pragmatically by looking back in time. For example, for centuries humans asked how can we travel faster and decided to breed faster horses. Then Harrison Ford came along. He asked the same question, looking into the future and came up with the automobile.

Back to our case, Apex is first built in early 00’s looking back in time and asking the question: “How do people write web pages?”.

Formspider is first built in 2008, looking into the future and asking the question: ”How should we build applications?”.

These two are fundamentally different questions and as a result you get fundamentally different products.

The question it answers is engraved in the essence of the product. No matter what you do, you cannot escape it. You can change …

Projekent Yarışması Katılımcılarından Bir Soru

Öncelikle iyi günler. Projekentte açtığınız programlama projesi hakkında biraz daha bilgi alabilmek için bu maili yazıyorum.

Takım arkadaşım ile birlikte istediğiniz xml editörü hakkında düşünceler geliştirmekteyiz şu an. Açıkçası bu yarışma öncesinde ikimiz de XML schema standartı konusunda bilgi sahibi değildik. Daha da kötüsü bu standartın derinliğini yeni fark ediyoruz. Burada size şunu danışma gereği duyduk: Editörün tam bir xsd doğrulama desteği sunması şart mı? Yoksa xsd dosyası sadece auto-complete amaçlı mı kullanılacak?

Eğer doğrulama editör içinde yapılacaksa, bu doğrulama full-xsd mi olmalı, yoksa bazı eksiklere izin verir miydiniz? Mesela ve ile gerçekten karışık doğrulamalar yaptırılabiliyor. Bizim için daha da kötü olansa, bu doğrulamaların xpath kullanıyor olması. Düzenlemenin sürdüğü bir dosyada xpath kullanamıyoruz.


Çok iyi bir soru gerçekten. Şimdi bakıyorum da yarışma sayfasındaki yazıda bu konunun altını daha iyi çizebilirmişim. Sadece şunu diyerek geçişt…

Open Letter to PL/SQL Developers

I am happy to announce that we officially launched the public beta program for Formspider, our rich Internet application development framework for PL/SQL Developers. If you are a PL/SQL Developer who is interested in new ideas and technologies, make sure you check out our web site

Formspider aims to fill the gap left by the demise of Oracle Forms. Coding in Formspider is 100% PL/SQL. There is no need to know Java or JavaScript. Every application is 100% AJAX by default. Applications built with Formspider run as DHTML/JavaScript applications in the browser. All Formspider applications run in IE, Firefox and Chrome smoothly without any extra effort. It has a cool IDE, charting, component based development... etc...etc...

I could go on and on. However, none of this matters if our users don’t like what we have built. We will end up with a nice idea that turned out to be a failure. So above all features and functionalities, what matters most today is what you …