23 Eylül 2012 Pazar

beep.bat

Sometimes you need to wait a certain amount of time before doing something. But you don't want to check the time constantly. It will be nice if the computer alerts you when the time is up. So, I created a simple BATCH script to achieve this task. All you need if to fire this command:
beep 1:30
And your computer will beep after 1 minute and 30 seconds.

Batch file is below (or here as gist):
:: usage:
::   beep           -- beeps immediately
::   beep 1         -- beeps after 1 sec
::   beep 1:2       -- beeps after 1 min,  2 sec
::   beep 1:2:3     -- beeps after 1 hour, 2 min,   3 sec
::   beep 1:2:3:4   -- beeps after 1 day,  2 hours, 3 min, 4 sec
::
:: invalid usages:
::    beep 1::2
::    beep :1
::    beep 1:
::    beep :1:

@echo off

set part1=
set part2=
set part3=
set part4=

for /f "tokens=1-4 delims=:" %%a in ("%1") do ^
set part1="%%a"& ^
set part2="%%b"& ^
set part3="%%c"& ^
set part4="%%d"

if not x%part4%==x"" (
 sleep %part1%d %part2%h %part3%m %part4%s
) else (
 if not x%part3%==x"" (
  sleep %part1%h %part2%m %part3%s
 ) else (
   if not x%part2%==x"" (
   sleep %part1%m %part2%s
  ) else (
   if not x%part1%==x"" sleep %part1%s
  )
 )
)

echo  ^G

Important note: '^G' represents bell ring character, not two characters '^' and 'G'. You need to replace this two characters with actual bell ring character: [Ctrl+G] (ASCII Code=7). You can generate this character using Notepad++, TextFX > TextFX Tools > Insert ASCII Chart or Character menu option and deleting rest of the table. A bit redundant work :)

Note 2: This implementation relies on sleep command from GNU Win32. This can be implemented also using timout instead of sleep, but you need to convert time to seconds before passing to timeout command.

Make it system command

You need to cd into the directory which beep.bat located in to execute it. If you want to execute it from anywhere, copy the bat file into Windows folder simply.

14 Eylül 2012 Cuma

Downloading MIT OCW (Open Course Ware) Course Materials

I want to download some course materials from MIT OCW, but I need to make much of single clicks to download large number of materials. Instead, I followed the procedure below:

1. Open the course pages which are subject of interest in the Chrome (in separete tabs).

2. Save the session using FreshStart Chrome extension.



3. Export the session just saved.


4. FreshStart will give you a JSON like below:


5. Now, we will generate actual download links from home page URL's. Paste the JSON string to your favorite regex editor. I am using RegexBuddy, and strongly recommend it.

6. Search for this regex (newlines added to adjust layout, delete them when using):
"title":"(?:MIT OpenCourseWare \| ([^\|]+) \| (\d+)\.\S+ ([^,]+),[^"]+|[^"]+\bResource\b
[^"]+)","url":"http://ocw\.mit\.edu/(?:courses/([^/]+)/|resources/res-)(\d+-\w+)-([^/]+)
-(spring|fall|\w+-iap)-(\d+)/

7.  Use following replacement regex to generate links for courses:
http://ocw.mit.edu/ans15436/ZipForEndUsers/\2/\5-\7-\8/\5-\7-\8.zip

8. Use following replacement regex to generate links for resources:
http://ocw.mit.edu/ans15436/ZipForEndUsers/RES/res-\5-\7-\8/res-\5-\7-\8.zip

9. Simply copy both course and resource links and JDownloader automatically grab them from your clipboard. Then click "Continue with all" to start downloads.

10. After dowloads completed, you will obtain files that whose names consists of course code, semester and year:
6-046j-fall-2005.zip

You probably want to know human readable couse name, right? This was the main reason to use FreashStart. In this way, we obtained actual course names from page titles and will rename files with them:
6-046j-fall-2005 - Introduction to Algorithms (SMA 5503).zip

Use following replacement regex to generate proper renaming commands for courses:
ren \5-\7-\8.zip "\5-\7-\8 - \3.zip"

11. Unfortunately, we can not obtaine course name from the resource page titles like we do with courses:
Free Online Course Materials | Resource Home | MIT OpenCourseWare

But we can still obtain them from links, but in lowercase and dashes instead of spaces.
res-6-004-spring-2009 - principles-of-computer-system-design-an-introduction.zip

Use following replacement regex to generate proper renaming commands for resources:
ren res-\5-\7-\8.zip "res-\5-\7-\8 - \6.zip"

12. Copy all the generated rename commands and save as filename.bat. Attention! Replace illegal characters (like colon ':') in file names, otherwise they will be skipped.

13. After downloads completed, put all downloaded files and the filename.bat into the same folder and then double-click to  filename.bat.

HTH someone else..

8 Eylül 2012 Cumartesi

vi Commands: Basic and Useful

Basic Commands

To open a file in vi fire following command from terminal:
vi myFile.txt

Be patient! Don't start to write immediately, because you are not in so called "Insert" mode. Use one of the followings to enable editing:
i
a
Using i causes to insert all what you type before the cursor position. Using a causes to insert after the cursor position.

Edit file as you wish, then just press to ESC to leave the insert mode and you are in command mode again.

Saving and Closing

To write changes to disk:
:w

To write changes to disk and close the file:
:x

To close the file if no change made:
:q

To close the file without writing changes to disk:
:q!

To write changes to disk, when root permission required but vi not opened with this permission:
:w !sudo tee %

Navigating

When editing a file, you need to navigate inside the file frequently. For example, you need to going to end of the file:
:$
Or, you need to going to a specific line number, say 123:
:123
Of course you want to display line numbers in this case (use one of the followings):
:set nu
:set number

Displaying

If you don't like 8 as tab size like me, you can change it to 4 with this command:
:set ts=4
If you want to apply last two commands to all files which will be opened in future without retyping for each file, write this command in shell prompt (not in vi):
EXINIT="set nu|set ts=4"; export EXINIT
You can add other commands separating with the pipe: |

Editing

To cut a line:
dd
To copy a line:
yy
To paste a line after current line/cursor position:
p
To paste a line before current line/cursor position:
P
To undo last change:
u

Selecting

To start visual selection:
v
To start visual line selection:
V
To start visual block selection:
Shift+V
To select three lines, current and next two:
Vjj
To select three lines, current and previous two:
Vkk
To select up to end of line:
v$

Useful Commands

Swap current line with next line:
ddp
Swap current line with previous line:
ddkP

5 Eylül 2012 Çarşamba

Mesleğimi Seviyorum

Hayat boyu kahredeceğin bir mesleği seçme! Maddi tatmini bir şekilde sağlarsın. Ancak sevmediğin ya da sevmeye kendini alıştıramayacağın bir işi hiç yapma daha iyi..

Türkiye'de bilgisayar mühendisleri için çalışma şartları çok değişken. Bunu gösteren kendi yaşadığım iki örneği paylaşabilirim.

İlk Örnek: Süreçsizlik

İlk çalıştığım yerde patronlarımız güler yüzlü idi, çalışanlarla ilişkileri adeta abi-kardeş gibiydi. İş arkadaşlarımdan da oldukça memnundum. Zaten 3-5 kişi idik, bir aile gibiydik. Ancak biraz patronların bilgisayar mühendisliğinden gelmemelerinin etkisiyle 'buna ne gerek var' diye yaklaşmalarından, biraz da ticari kaygılar sebebiyle işi hemen bitirmek istemelerinden ötürü şirkette yazılım süreçleri diye bir kavram yoktu. Yani tamamen sistemsiz, düzensiz, garantisiz bir çalışma yapılırdı. Yapılan şeyin çalışacağı meçhuldü, tekrar yapılmaması ise düşük bir ihtimaldi. Günü kurtarırdık. Bir hastane için yapılan yazılım diğer hastane için değiştirildiğinde hiçbir versiyonlama sistemi kullanılmaz, sonuçta ilk hastaneye yeni bir sürüm konulacağı vakit oradaki ihtiyaçlar ve tercihler unutulmuş olurdu. Kullanıcılar da haklı olarak 'önceki daha iyiydi, bari X özelliği çalışıyordu' derdi.

Çok mesai yapar, çok yorulur, çok yıpranır, mesailerde pizza yer, ama nisbeten az kazanırdık. Yazılımcılığın entropi prensibini yaşardık: "Minimum paraya maksimum çalışma". Sektörde yeniydim, mesleğime dair herşeyi öğrenmeye azimliydim ve karşılığında para aldığım bir işin hakkını vermek istiyordum. Arkadaşlarım kolaylıkla daha iyi bir iş bulabileceğim konusunda tahşidat yapadursun, halimden memnun, mutlu-mesut yaşıyordum.

Zamanla yapılan işin çok allengirli olmadığını anlamaya, dahası kendimi geliştirememeye başladım. Evet evet, asıl noktay buydu! Kendime değer katamıyordum. Sonuçta çalıştığım işe karşı hevesim azalmaya başladı, ama mesleğime karşı değil. Hem az para alıp hem aynı yerde sayıyor olmanın üstüne, insan olarak sosyal varlığımı yok sayarcasına başka şehirlerde günlerce iş kovalamak da eklenince, işte çok çalışıp az kazanmak o zaman koymaya başladı.

Tüm bunlara rağmen ilk çalıştığım şirkette birçok şey öğrendim. Bu arada bahsettiğim şirket hayalinizde canlandığı gibi başarısız bir şirket değildi. Hatta sıfırdan geldiği noktayı düşündüğümüzde gayet başarılı idi. Evet, patronlarımın süreçle ilgisi pek yoktu belki, ama iş yapmayı bilmiyor da değillerdi. Onlardan öğrendiğim, kulağıma küpe olarak kalacak basit görünen ama önemli olduğuna inandığım iki şey: "Biz ödev yapmıyoruz, iş yapıyoruz", "Birşey çalışıyorsa dokunma!".

İkinci Örnek: Köyden Şehire

İkinci şirketim apayrı bir dünyaydı. Çalışanlar yan yana sıkıştırılıp ekranları gözlenmiyor, sürekli başlarının etleri yenmiyor, sabahın seherinden gecenin sessizliğine kadar mesai yapmaları beklenmiyor ve ilk şirkette  kalsam kısa bir süre içinde ulaşmayı düşünemeyeceğim maaşlar veriliyordu. Yol yardımı, yemek yardımı adı altında şirketin paraları çalışanlara peşkeş çekiliyordu!

Şaka. Sadece çalışanların insan oldukları ve memnuniyetle çalışırlarsa daha iyi iş çıkaracakları fark edilmişti. Durun, benim için can alıcı olan kısma henüz gelmedim. Burada Android, Güvenlik, Veri Madenciliği, Görüntü İşleme gibi popüler ve heyecan verici çeşitli konularda çalışmalar  yapılıyor ve çalışanlar eğitiliyordu. Yetmez gibi işe girdikten 6 ay kadar sonra şirket kendini revize etme ihtiyacı hissetti, çalışan memnuniyetini artırma yollarını aradı. İlk olarak maaşlara zam yaparak başladı. Tam bir yıl önce neredeyse iki katı çalışmayla, iki katı stresle aldığım paranın yaklaşık iki katını memnuniyetle almaya başlamıştım.

Hülasa

Maddi tatmini herkes ister, ben de... Ancak birşeyler  üretmiyorsanız, birilerinin kullandığı birşeylerde tuzunuz olmuyorsa ya da birileri tarafından bir takdir emaresi görmüyorsanız maddiyat tatmin etmemeye başlayacaktır. Öğrenerek, kendimizi geliştirerek bir süre oyalanabiliriz, ama sanatımızı icra etme imkanı bulamadıkça huzurumuz yine kaçacaktır parça parça...

Daha iyi imkanlar sunan olabilir. Ancak daha iyisinin olması, insanı iş değiştirmeye iten bir saik değildir, başka sebeplerle beslenmediği müddetçe...

İş değiştirmek ayıp değildir, eski iş sahibine ihanet değildir (çok kritik bir noktada yüz üstü bırakmadığınız müddetçe), eşinden boşanmakla ya da sevgilisinden ayrılmakla eş değer bir olgu değildir. İş değiştirmek, hayatın akışı içerisinde yaşanabilen normal bir olaydır.

Her iş bir tecrübedir, belli bir vakte kadar yaşanması gereken bir tecrübe.. İleriye dair hayallerim var, ancak geriye baktığımda pişmanlıklar değil tecrübeler görüyorum. Şükür.


WSO2 ESB + ClientAccesPolicy.xml + CrossDomain.xml

ClientAccesPolicy.xml and CrossDomain.xml files have to be found at root of your services Silverlight and Flex clients to be able to acce...