Coding Challenge

The IEEE branch in the Istanbul Technical Unitversity (ITU) is organizing an event called ProjeKent which aims to connect the students with the R&D companies around the country. To help them achieve their goal, we are sponsoring a coding challenge in the event.

If you are interested feel free to participate. I don't think the participation is limited to any group or anything. Their web site is in Turkish but if you are interested just contact me from Twitter @yalimgerger and I will do my best to make sure you are in.

The challenge is to write an XML Editor in JavaScript. Below is a half baked specification of what we need. The Turkish text is right below the English one.

So the story is that we wrote an XML editor in Java and then, big surprise , we needed to run it over the Web. We didn't really want to throw all that work in Java away and at one of the brilliant(!) moments in my career I said "Why don't we do it with JavaFX?".  We got to reuse a lot of the code and I am still trying to convince Yucel to write a blog post about his experience, but overall when all is said and done I think we kind of wish that we did it all in JavaScript and be done with it.

While we were brainstorming about what we could give ProjeKent as a coding challenge, I think it was Ugur who connected the dots and said, "How about an XML Editor?"

Bottom line, we really want this to happen. But in order for this XML Editor to be somewhat useful to us, there are a few features it must have which I will list shortly. There are also a few optional features that we'd like to see. You don't have to implement them, but if you have the time to add new stuff, we'd prefer you start with these features.

Must Haves

Basically, the editor must be a one page web app i.e. 100% AJAX. No page reloads or anything. You may go back to the server only using AJAX.

The Editor must be able to work with any XSD and help the user to write XML with Intellisense based on this XSD. You may parse the XSD using a Servlet.

The Editor must use Intellisense to help users write tags and attributes. I mean, if it doesn't even do that, what is the point?

Since we have naive hopes for actually using the code you will write, the code must be written&designed nicely, with comments and everything.

If you think using a Javascript library will help you, then you may use one that has a free license. The only paid library you may use is ExtJS (and no we are not going to reimburse you if you buy a license from them).

You also must contact us during the development of the XML Editor, should you choose to participate. Unless you get periodic feedback from us, you are coding in a vacuum and you will definitely fail. Let me put this another way. If I don't already know who you are before the day we choose the winners, you have already lost. You may contact me from Twitter @yalimgerger.

Nice to Haves

Performance really matters. If I need to go to lunch everytime Intellisense is working you have a problem.

It would be cool if the closing tag shows up automatically if the user closes the opening tag.

The more cross-browser support, the better. I'd start with Chrome, FF 2.0 and IE7+.

Along with a nicely commented and designed code, wouldn't it be nice if you'd provided a document which outlines the design, the features you implemented and at what degree etc... etc...

Auto indent would also be very nice. Hard to read all these tags written inside each other otherwise.

That's all for now. Please feel free to contact me @yalimgerger if you have any questions, comments. Follow this blog or @yalimgerger for updates on the subject. Best of luck to all the participants.


Oh one last thing. I almost forgot...As with all the challenges, there is a small reward for the winners. We are going to distribute up to 6000 Turkish Liras (about $4000) among the winners. Let me be precise what I mean by this: If all we receive is useless crap, no one is going to get a dime. But if you rock and everyone else sucks, you will get all the money.


Merhaba,

Yarışma sayfamıza hoşgeldiniz. Bu sayfada İTÜ IEEE Projekent için hazırladığımız yarışmanın detaylarını anlatacağız. Sayfayı okuduktan sonra sormak istediğiniz birşeyler varsa Twitter’da @yalimgerger adresinden bana ulaşabilirisiniz. Hepinize başarılar.

Konu:

Yarışmanın konusu JavaScript ile yazılacak bir XML Editörü. Yazdığı programı beğendiğimiz katılımcılar arasında toplam altı bin liraya kadar ödül dağıtacağız.  Bu şu demek; eğer doğru düzgün çalışmayan programlardan başka bişi katılmazsa kimseye kuruş yok. :-) Yok eğer müthiş bir editör yazıp bize küçük dilimizi yutturursanız bütün ödül sizin.

Ayrıca şunu da belirteyim. Bu yarışmayı laf ola beri gele açmadık. JavaScript ile yazılmış bir XML editörüne gerçekten ihtiyacımız var. Şu anda bir projemizde JavaFX ile yazılmış bir editör kullanıyoruz ve bunu JavaScript ile yazılmış bir editör ile değiştirmek istiyoruz.

Bu yüzden XML Editörde bazı özelliklere ihtiyacımız var. Bunların hepsini yapmanızı beklemiyoruz ama editörünüze yeni özellikler eklerken bu listeden seçmenizi istiyoruz. Birkaç tane de olmazsa olmaz özellik var tabii. Onları da aşağıda belirttim. Zaten bazı temel özellikler de bulunmazsa yapacağınız XML editörünün herhangi bir text editöründen farkı kalmaz.

XML Editör’ün olmazsa olmaz özellikleri

Editör one page bir web application olmalı. Diğer bir deyişle 100% AJAX ile çalışmalı. Kullanımı sırasında web sayfası yeniden yüklenmemeli. Sunucuya sadece AJAX ile erişebilirsiniz.  

Editör kendisine verilen herhangi bir XSD ile çalışabilmeli. Herhangi bir XSD’yi parse edip intelliSense için kullanabilmeli. XSD’yi isterseniz Java servleti ile parse edebilirsiniz.

Intellisense demişken; editör, kullanıcı tag ve attribute yazmaya başladığında intellisense ile ona şekil 1-A daki gibi yardım etmeli. Olayın bütün esprisi bu zaten.

Eğer programınız ödüllendirilirse, yazdığınız kod bizim tarafımızdan kullanılacak, bakımı yapılacak, geliştirilmeye devam edilecek, debug edilecek demektir. O yüzden kodunuzun düzenli yazılmış olması, içinde bol bol açıklama olması (ortalama olarak on satır kod yazıp hiçbir açıklama yazmadıysanız bir sorun var diye düşünün) çok önemli.

Yukarda da belirttiğim gibi editörü Javascript ile yazmanız gerek. İşinizi kolaylaştıracağını düşünüyorsanız lisans ücreti olmayan Javascript kütüphanelerini kullanabilirsiniz. Lisans ücreti olan kütüphanelerden sadece ExtJS’i kullanabilirsiniz. Diğer ücretli JavaScript kütüphanelerini kullanmayın lütfen.

Diğer bir olmazsa olmaz ise kodlama sırasında bizimle temasa geçmeniz. Belirli aralıklarla kodunuzu bize göndermeniz ve bizden geri besleme almanız programınızın başarısı için çok önemli.  Eğer bunu yapmazsanız ve sizinle ilk defa final günü karşılaşırsak emeklerinizin boşa gitme olasılığı çok yüksek. Bizimle lütfen Twitter’da @yalimgerger adresinden temasa geçin.

XML Editörde olsa çok iyi olacak özellikler

Editörün performansı çok önemli. Intellisense çalışırken uygulama çok duraklıyorsa, olur olmaz takılıyorsa, 10 satırdan büyük XML yazarken hantallaşıyorsa kafadan eksi puanı alırsınız, benden söylemesi.

Editör, kullanıcı açılış tagini kapattığında kapanış tagini de otomatik olarak eklerse ne de güzel olur.

Editörünüz ne kadar çok browserda çalışırsa o kadar makbul. Sırf IE8 de çalışıp, Chrome ve Firefox da patlayan editörler bize çok iş çıkaracak demektir. Önceliği IE7+, Chrome ve Firefox 2.0+ ya vermenizi tavsiye ederim.

Kodunuzun içindeki açıklamaların yanında bir de projenizi özetleyen bir döküman verirseniz (hangi kütüphaneler kullanıldı, kod ve akış hakkında genel bilgi ve önemli ayrıntılar, neleri yapabiliyor neleri yapamıyor vs...) yeme de yanında yat.

İç içe yazılan tagleri auto indent yapan bir editör de hem kullanıcıların hem de bizlerin çok hoşuna gider.

Şimdilik bu kadar. Eğer yeterince açıklayamadığım bir yer varsa veya kafanızda bir soru işareti kalmışsa  lütfen Twitter’da @yalimgerger adresinden bana ulaşın.

Herkese başarılar.

Yalım K. Gerger

Comments

Anonymous said…
Merhaba,
Sorular icin twitter a yonlendirmissiniz fakat twitter'dan mesaj atamiyoruz, takip edilmedigimiz icin. Onun icin buradan soruyorum. Editoru GWT ile gelistirmemize engel olacak herhangi birsey var mi? Sonucta GWT client-side icin tamamen JavaScript kodu uretiyor, bu da projede istenen birsey. GWT kullanmamiz uygun mudur?

Popular posts from this blog

Powerful Free Webinar Network for Oracle Developers

PL/SQL Developers! Formspider 1.9 is Out