Language doesn’t matter

December 31, 2007 on 12:27 am | In Uncategorized | 1 Comment

Casio fx-4500P My father is a land-surveyor (geodesist if you will). Nowadays he uses a notebook for his field measurements, but there was a time when he used a scientific calculator. Recently he’s notebook went dead, so he wanted to move back to his Casio scientific calculator. But, ups! Not in use for a while the battery ran out and the geodetical programs are gone. So I have to type my old programs back to the small computer. I thought I’ll share one of them as a example that programming language does not matter. What matters is how you use it and how well others could use your work. So let my share small app that I wrote back in high school for my fathers Casio fx-4500P Scientific Calculator.

A"X":B"Y":C"X":D"Y"

G=A:H=B:I=D

P=0

Lbl 1

{E}"X":{F}"Y"

E=0=>Goto 2 ∆

P=P+C*(F-B)

A=C:B=D:C=E:D=F

Goto 1

Lbl 2

P=(P+C*(H-B)+G*(I-D))/2

P:"P"▲

Voila! You can calculate a polygon field. So quit the holly "C# vs VB" war. Both are good. Very good ;-)

It’s not magic – it’s floating point math

December 26, 2007 on 4:29 pm | In Uncategorized | No Comments

Please remember that 3 / 12 is not always 0.25! ;-)

Take this example:

int i = 3;
Console.WriteLine(i / 12);

You will get 0. I admit it could by a little confusing at first but I assure you, there is nothing wrong in the way JIT thinks. We dividing an integer over a… integer. What we are getting? Well, of course an integer! Is it not what you expected? How to fix this? Well the easiest way is to:

int i = 3;
Console.WriteLine(i / 12.0);

You will get 0.25. Why? Well 12.0 is a double so the whole equation will by a double. You can check this easily with:

object o = i / 12;
Console.WriteLine(o.GetType());
o = i / 12.0;
Console.WriteLine(o.GetType());

So we all have to pay for strong typing and it is in your best interest to remember that!

By the way

int i = 3;
int zero = 0;
Console.WriteLine(3 / 0);
Console.WriteLine(3 / zero);
Console.WriteLine(3.0 / zero);
Console.WriteLine(3.0 / 0);

3/0 won’t compile. 3/zero will throw an exception. 3.0/zero and 3.0/0 compile an run without a problem, they return +Infinity.

Oh, and one more thing (from my financial world of knowledge). 10% equals sometimes 11%!

int fullPrice = 100;
float discount = 0.1F;
Int32 finalPrice = (int)(fullPrice * (1-discount));
Console.WriteLine("The discounted price is ${0}.", finalPrice);

You will find this and other examples in good article about Floating Point in .NET.

ClickOnce i Continuous Integration

December 8, 2007 on 5:24 pm | In Continuous Integration | 1 Comment

Od wielu lat współpracowałem z wydawnictwem Software. Mój pierwszy artykuł opublikowałem gdzieś około 2003 roku. Publikowałem w Software 2.0, i w Software Developers Journal. Pisałem artykuły do PHP Solutions i dodatków Extra. Współpraca układała się całkiem dobrze i wszystko trwałoby pewnie jeszcze latami gdyby nie to jedno „ale”. Za mój pierwszy tekst otrzymałem największe honorarium w historii mojej współpracy z Software Wydawnictwo. Później z tekstu na tekst otrzymywałem coraz mniej. Najpierw „stroną maszynopisu” było 3800 znaków wraz z kodami, później, 3800 znaków bez spacji, później i bez kodów. Do tego widełki za „nakład pracy redakcyjnej” / naturalnie o ile zastosowane to tylko na minus. Nie wspominając już o tym, że ile wzniesie twoje ostateczne honorarium dowiadywałem się kilka tygodni po ukazaniu się numeru z moim tekstem z rachunku, który przygotowywała dla mnie redakcja.

Mój ostatni tekst na temat C# 3.0 był zdaniem redakcji wart około 10 piw w monachijskiej knajpie. Dobrze – pomyślałem sobie. Horrendalnie drogie pismo, niski nakład i do tego słabiutkie honoraria. Równie dobrze mogę publikować teksty za darmo, z nieograniczonym nakładem, nie mając z tego nic – prócz satysfakcji, naturalnie. Prawda?

Zapraszam do lektury.

Powered by WordPress with Pool theme design by Borja Fernandez.
Text © Marcin Kawalerowicz. Hosting CODEFUSION.