 |

|
Another two (three?) hours spent on this kind of typo:
public int LoadedSampleCount
{
get { return (int)GetValue(LoadedSampleCountProperty); }
set { SetValue(LoadedSampleCountProperty, value); }
}
public static readonly DependencyProperty LoadedSampleCountProperty =
DependencyProperty.Register("LoadedSampleCount", typeof(int), typeof(TreeWindowVM SampleSetLoaderVM), new PropertyMetadata(0));
This is a result of a "GUI refactoring" -- moving parts of code to an user control. And forgetting to set an owner of a dependency property to a new model view again. Awww...
Greetings - Jacek
|
|
|
|

|
Just came across the following in some code I maintain:
foreach (Object item in group)
{
int i = 1;
string key = "SomeString_" + i.ToString();
}
I suspect the idea was to use i to help make the dictionary keys unique.
|
|
|
|

|
try
{
account.Save();
}
catch { ; }
|
|
|
|

|
I notice that a fair few of the recent posts here seem out of place.
Can't people read?
ps. I guess that by posting this, I now have to include myself in that category, but I'm hoping to be indulged.
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|

|
Apologies if this subject has already been discussed before.
After stumbling upon last September's Best C# Article NET-CLR-Injection-Modify-IL-Code-during-Run-time and learning about endless security issues with the Java Runtime.
Are these platforms actually safer than conventional compiled executables?
Isn't the whole point of Data Execution Prevention (DEP) meant to stop run-time modification of running code? The CLR/JAVA Runtime engines have the only *native* code that DEP has any direct control of, but they are allowed to run without question, because of some dubious assumption that code for a virtual cpu/machine can do no real damage.
Maybe I'm wrong, but I can't help thinking that code under direct control of the 'real' cpu is safer than these virtualized runtime environments.
I'm not fully versed in .NET or Java coding. Anyone care to shed more light on the subject.
modified 9 May '13 - 20:02.
|
|
|
|

|
I think the life of software developer is a nothing but "The journey between LOGIN & LOGOUT"
What is your opinion??
eNJOY c0ding....
|
|
|
|

|
I am sure this was one of the hello-world codes for many of us ... But I wonder why the letter "i" .. I mean why on earth? With "a" the leading character why "i" ...
After sometime I found out that Fortran language (which was/is historically used for scientific calculations) use "i" as a starting character for all integer type variables, and the quickest varible to write would be "i"
Most authors and coders continued to use "i" even in C and then to C++ and then to C#, Java etc ...
Is this an interpretation?
|
|
|
|

|
I was looking at one old SQL stored proc and found this strange behaviour.
DECLARE @Scrap_Qty int
DECLARE @FilledQty int
SET @Scrap_Qty=10 SET @FilledQty = 2
BEGIN
IF @Scrap_Qty > @FilledQty
declare @currDate varchar(10)
Set @currDate= Convert(VARCHAR(10),GetDate(),103)
PRINT @currDate
END
Look at the if condition .. it does not have BEGIN..END... To make thing interesting weather if condition is true or false you will get the output for parameter @currDate
If I add PRINT @Scrap_Qty right after IF and run it again it will only print value for @Scrap_Qty if condition is true. Which leads to question why sql is not complaining about undeclared variable if @Scrap_Qty is less than @FilledQty ?
I would have assumed if condition without BEGIN .. END block will behave like a normal one line to execute if condition is true which in above block is declaration of @currDate variable.
DECLARE @Scrap_Qty int
DECLARE @FilledQty int
SET @Scrap_Qty=10 SET @FilledQty = 2
BEGIN
IF @Scrap_Qty > @FilledQty
PRINT @Scrap_Qty
declare @currDate varchar(10)
Set @currDate= Convert(VARCHAR(10),GetDate(),103)
PRINT @currDate
END
Zen and the art of software maintenance : rm -rf *
Math is like love : a simple idea but it can get complicated.
|
|
|
|

|
I'm trying out various command line option parser libraries, and those with verb or command options are few and far between. CLAP[^] is one that handles verbs, e.g. I don't need a separate Console application for each task, where the CLI library just parses the options for that command. I want a library where I can have one Console app, which accepts a command/verb and the options for that verb get parsed. So far I've found only CLAP and ManyConsole[^].
E.g. I don't want to have to have import.exe filename [-repeat] but I want console.exe import filename [-repeat].
So I built a console application called Clap, with this code:
using System;
using CLAP;
namespace Clap
{
class Program
{
static void Main(string[] args)
{
Parser.Run<Program>(args);
}
[Verb(Description = "Imports an Impro CSV report file.", Aliases = "import,imp")]
static void ImportCsv(
[Required]
[Description("Full path to the file to import.")] string filePath)
{
Console.WriteLine("Will import " + filePath);
}
}
}
When I run the application with clap /? or clap import xxx, I get the error message
Unhandled Exception: System.TypeLoadException: Could not load type 'CLAP.Parser' from assembly 'Clap, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
at Clap.Program.Main(String[] args)
Google provided zero leads, so the problem was not well known. Well, how well known is CLAP itself? The Version-=1.0.0.0 gave me the key clue. It looked like the app was trying to load CLAP.Parser from my Clap assembly, not the CLAP library assembly, which is version 4.3.
All it took was to change my assembly name and default namespace to ClapCli and the problem vanished, but just BTW, CLAP is very, very thin. It throws exceptions when verbs arguments are omitted, and expects you to decorate a method to do something with the exception. It also has no built in help provider, and requires you to decorate a method that is called when the user requests help. You must compose and format your own help text for every verb and option.
modified 25 Apr '13 - 5:32.
|
|
|
|

|
No idea why he was "spying" on a client.
We only found this out after he left and we took over the account.
private MailMessage BuildMailMessage(...)
{
...
mailMessage.BCC.Add("guys@address.com");
..
}
.
|
|
|
|
|

|
Link to the article
For More detail explanation(PDF)
Counting arrays from 0 simplifies the computation of the memory address of each element.
If an array is stored at a given position in memory (it’s called the address) the position of each element can be computed as
element(n) = address + n * size_of_the_element
element(n) = address + (n-1) * size_of_the_element
modified 22 Apr '13 - 13:45.
|
|
|
|
 |
Message Automatically Removed
|
|
|
|
 |
Message Automatically Removed
|
|
|
|

|
I don't trust it.
Two of us have been working on the same file today, so we agreed he would check his changes in first and I would update mine, merge and commit the merge. I get the go ahead to update, update tells me correctly that the exact same file we've worked on is conflicted. I look at the file. no "mine" or "r.6271" markers anywhere to be seen, but a load of interface implementations are missing. I update again, to no avail. I stubbed out the interface implementations, compiled, ran all my tests and tried to commit only to be told that my file is out of date and needs updating before I can commit so I update again, and hey presto, a handful of marked conflicts in the same file. Nobody else has committed anything in that time. WTF?
Last week our build server failed to get the externals we'd set up on a repository, even though a local update got them all. Cue hours of digging around instead of actually being productive.
I really hate SVN.
|
|
|
|

|
I'm implementing USB firmware in a device we are making.
I asked in THIS PLACE[^] (Design And Architecture) based on guessing what the desired topics are for a given forum.
I'm putting USB capability into the firmware of a device we are making.
|
|
|
|

|
It is a well known good practice to use StringBuilders instead of doing many string concatenations. Yet, I got really impressed when I saw a document telling to replace things like this:
private const string SQL =
"SELECT " +
" ID, " +
" NAME, " +
" BIRTHDAY " +
"FROM " +
" TABLE " +
"WHERE " +
" NAME LIKE @PARAM";
By creating the StringBuilder everytime in the method where the SQL was being used. Maybe I am wrong , but I really believe consts aren't doing bad string concatenations all the time.
|
|
|
|

|
Here is a simple stored procedure in company database that does a search and returns results in less than a second:
CREATE PROCEDURE [dbo].[WorkOrder_Search](@Description varchar(250))
AS
Begin
SELECT Order_id,Dept_Code,Graphic_Number,[Description],Quantity,Date_Received as [Recv. Date],Date_Due as [Due Date],
Date_Delivered as [Delivered Date],proof_sent_date as [Proof Date],print_date as [To Print],
dbo.func_grOrder_GetAssigned(Order_id) as [Assign To],Status,Note, Master_Cal_ID
From grGraphic_Order
where [Description] like '%' + @Description + '%'
end
But it used to be a really "BIG" stored procedure as shown below that did the same search and took about 5 minutes to return results. It did return the same results as the above does.
CREATE PROCEDURE [dbo].[WorkOrder_search](@Description varchar(250))
AS
begin
SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS OFF
SET NoCount ON
Declare @sql varchar(8000)
Declare @Orig_1 varchar(1000)
Declare @Declare varchar(200),
@From varchar(100),@Into varchar(50),@Groupby varchar(300),
@Orderby varchar(400),@Select varchar(400),@Select1 varchar(400),@Select2 varchar(300),
@cursor1 varchar (500),@cursor2 varchar(4000),@create varchar(4000)
set @Orig_1 = ''
Create table #Assignto_temp(Order_id int, Assignto_names varchar(500))
Insert into #Assignto_temp(Order_id )
Select gro.order_id
From grassignto gro
Inner join wfpmauser wf
On gro.user_id = wf.user_id
group by gro.order_id
declare @order_number int, @Assignto varchar(255), @List_names varchar(255),@order_number_prev int
declare assignto Cursor
Local
Forward_only
for
Select gro.order_id,Wf.First_name+' '+Wf.Last_name as Assignto
From grassignto gro
Inner join wfpmauser wf
On gro.user_id = wf.user_id
order by order_id
open assignto
Fetch Next from assignto into @order_number, @Assignto
While @@Fetch_Status=0
begin
select @List_names=Assignto_names from #Assignto_temp where order_id=@order_number
if @List_names is null
begin
update #Assignto_temp
set Assignto_names=@Assignto
where order_id=@order_number
end
else
begin
update #Assignto_temp
set Assignto_names=@list_names + ',' + @Assignto
where order_id=@order_number
end
Fetch Next from assignto into @order_number, @Assignto
end
close assignto
deallocate assignto
Set @Declare ="Declare @Orig_1 varchar(1000),@Originator varchar(100),@order_id int,@Orig varchar(300) set @Orig_1 = '' "
Set @Select = " SELECT distinct gro.* "
Set @Into = "Into #tmp1 "
Set @From = "FROM grGraphic_Order Gro left join grOriginator gr on gro.order_id = gr.order_id "
Set @Orderby = "ORDER BY Gro.Graphic_number,Gro.dept_code Desc "
Set @Select2 = " SELECT Order_id,Dept_Code ,Graphic_Number,Description,Quantity,Date_Received as [Recv. Date],
Date_Due as [Due Date],Date_Delivered as [Delivered Date],proof_sent_date as [Proof Date],print_date as [To Print],
Status,Note, master_cal_id [Master Calendar ID] From #tmp1 ORDER BY dept_code,Graphic_number "
Set @Create = "Create table #Assignto_temp(Order_id int, Assignto_names varchar(500))
Insert into #Assignto_temp(Order_id )
Select gro.order_id
From grassignto gro
Inner join wfpmauser wf
On gro.user_id = wf.user_id
group by gro.order_id
declare @order_number int, @Assignto varchar(255), @List_names varchar(255),@order_number_prev int
declare assignto Cursor
Local
Forward_only
for
Select gro.order_id,Wf.First_name+' '+Wf.Last_name as Assignto
From grassignto gro
Inner join wfpmauser wf
On gro.user_id = wf.user_id
order by order_id
open assignto
Fetch Next from assignto into @order_number, @Assignto
While @@Fetch_Status=0
begin
select @List_names=Assignto_names from #Assignto_temp where order_id=@order_number
if @List_names is null
begin
update #Assignto_temp
set Assignto_names=@Assignto
where order_id=@order_number
end
else
begin
update #Assignto_temp
set Assignto_names=@list_names + ',' + @Assignto
where order_id=@order_number
end
Fetch Next from assignto into @order_number, @Assignto
end
close assignto
deallocate assignto
SELECT #tmp1.Order_id,Dept_Code ,Graphic_Number,Description,Quantity,Date_Received as [Recv. Date],
Date_Due as [Due Date],Date_Delivered as [Delivered Date],proof_sent_date as [Proof Date],print_date as [To Print],
isnull(tmp.assignto_names,'Not Assigned') as [Assign To],Status,Note, #tmp1.Master_Cal_ID
From #tmp1 LEFT Join #Assignto_temp tmp ON #tmp1.order_id = tmp.order_id ORDER BY Dept_Code,Date_Received Desc"
Select @sql=@Declare + @Select + @Into + @From + ' where Description like '
+ char(39) + '%' + @Description + '%' + char(39)+ @Orderby + @create
Exec(@sql)
end
TOMZ_KV
modified 13 Apr '13 - 8:57.
|
|
|
|

|
Just came across that code comment above a function. Not sure what it means. Maybe they got fed up and decided that they were finished working (though the task itself was incomplete)? Or maybe the code is complete, but never got put to use?
|
|
|
|

|
C++ code.
This is either brilliant, or just bloody awful. I'm coming down on the side of "bloody awful":
recv in the curr structure below is declared as:
BYTE recv[64];
DWORD verb;
...
verb = (upper[curr->recv[0]] << 24) + (upper[curr->recv[1]] << 16) + (upper[curr->recv[2]] << 8) + 0x20;
switch (verb)
{
case 'CMD ':
...
break;
case 'MON ':
...
break;
case 'END ':
...
break;
case 'EXT ':
...
break;
default:
...
break;
}
WE ARE DYSLEXIC OF BORG. Refutance is systile. Your a$$ will be laminated.
There are 10 kinds of people in the world: People who know binary and people who don't.
|
|
|
|

|
if (result != Common.ErrorMsg.ErrorNone)
{
this.Dispatcher.BeginInvoke((ThreadStart)delegate()
{
});
return;
}I found this in code that is guaranteed to be called on the dispatcher's thread. Sigh2.
Software Zen: delete this;
|
|
|
|

|
I created a Windows Forms Control Library in one of my projects, and VS2012 displayed the 'Designer Error' page with the message that no classes in the user control could be designed.
Strangely, VS showed all references as missing. Changing the target framework to 4.0 then back to 4.5 fixed the issue.
I don't know what happened, but it startled me.
Gryphons Are Awesome! Gryphons Are Awesome!
|
|
|
|

|
We have multiple data stores at my company. In one of the databases, there is a view of a table of a view of a table that was copied from another data store. So, the chain is something like this:
Primary Data Store (PDS)...
Dump Table Of PDS (DTP)...
Complex View of DTP (CVD)...
Dump Table of CVD (DTC)...
Complex View of DTC
The actual names of each of those are even more esoteric. And I'm pretty sure there are further derived tables of the final view shown above.
|
|
|
|

|
Found this in a sp, not sure why it was done this way, @fileLength and @userId are passed in, and i've changed the names of the tables so i could post this, so i realize the tables may not make sense(they do in the real code).
DECLARE file_Cursor CURSOR FOR SELECT Length
FROM Files f
INNER JOIN User p
ON p.UserId = f.UserId
INNER JOIN Playlist pm
ON pm.ListId = p.DefaultListId
WHERE p.UserId = @userId
AND pm.FileNumber <> -1
OPEN file_Cursor
FETCH NEXT FROM file_Cursor INTO @length
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileLength = @fileLength + @length
FETCH NEXT FROM file_Cursor INTO @length
END
CLOSE file_Cursor
DEALLOCATE file_Cursor
Please remember to rate helpful or unhelpful answers, it lets us and people reading the forums know if our answers are any good.
|
|
|
|

|
@echo off
for /L %%I in (1,1,100) do call :FizzBuzz %%I
goto :EOF
:FizzBuzz
set I=%1
set /a T3=I %% 3
set /a T5=I %% 5
set /a T35=T3 + T5
if not %T35%==0 goto FizzBuzz5
echo FizzBuzz
goto :EOF
:FizzBuzz5
if not %T5%==0 goto FizzBuzz3
echo Buzz
goto :EOF
:FizzBuzz3
if not %T3%==0 goto FizzBuzzEcho
echo Fizz
goto :EOF
:FizzBuzzEcho
echo %I%
goto :EOF Apparently I wrote this back in 2007. I have no memory of doing so, or why I did it .
Software Zen: delete this;
|
|
|
|

|
Hi,
Came across an article about ShivaLinga. Is it just a symbol or more. Could it be a power source or compact but highly efficient weapon, which needs to be kept cool. Nuclear decay seems to generate lot of heat and for this reason depleted rods needs to be kept submerged in water for a very long period.
Any thoughts.
Prasad P. Khandekar
Knowledge exists, man only discovers it.
|
|
|
|

|
Hi, I am coding since 20 years now. I started in Pascal, Assembler. And yes, I am getting tired and sick of this job. I couldn't be even working in coding anymore if it wouldn't because I am freelancing since 2004. Even freelancing and doing things your own way you GET SICK of coding as well. Sorry
I will point out my reasons:
1. "Having to change things that always worked", just because third-parties, technological changes, or simply 'the world outside' your program force you to change what was always working. i.e. you develop a scraper/crawler and the target site changes their html/css, thus, your scraper doesn't work anymore. i.e. - You develop financing software that work against SQL Server, then customer/boss decides to migrate database server to Linux, then you have to change most of your SQL code on 10k lines program to 'just adapt' to mySQL syntax. It's not the same syntax in some cases. Or you develop that program in .net and your customer/boss decides to go Linux, then you have to re-write it in C. These kind of things to "re-do" what was working 100% perfect and took you years doing it, well, it's far to be fun, no matter the money involved. What it tires is simply that "you HAVE to" modify what was working perfectly, for reasons besides you
2. "Time spent on analysis, diagramming, structuring". Coding is not like other jobs, you have to THINK how to code it before you code it, in the majority of cases. When the reality you are modelling is complex, well, you have an extra load to "think" first, then "act". And this can be specially tiresome, when you have to work on 10 different projects over a month just to get the bills paid. Specially when you have a customer/boss who's asking you useless things to do that really doesn't contribute to the quality of the software but to ruin your day adding extra, unnecessary complexities
3. "Money". I will be short on this, we all know that this job should be paid X 3 what's being paid considering the effort required. Specially freelancing online. Considering the complexity of this work, we are paid less than secretary work, most of the times. I have not anything against secretaries, but come on, you can't compare writing letters in Word and using Excel compared to what it takes to code even the smallest thing
4. "Inherent difficulty about this profession". In fact, what tires you the most relies on the difficult, unpractical thinking process required to come up with something that may run. When you reach a certain age, and when you have a certain amount of years doing what you do, you follow your own standards, and your standards are high. This means: spend more time doing what you did when you was a kid, when you worked more in a "bohemian" way, just for the fun of it. You stick to your own standards, clarity in code, naming conventions, in a way: you become professional, compared to how you did it when you were 16yr old teenager. i.e. you can easily assign var1, var2, and a, b, c as variable names when you are a kid, without caring if you ever have to modify the program after 1 year. Now, there are times when you have to even spend time thinking how to name a variable, properly declare types, how to name files as a whole, folder/subfolder structures, and so on and on and on. And these are just the basics, the same go to the way you name your functions, the perfect nesting of code. Things that themselves go besides if the program works or not, it's all about standards. You become a professional at what you become after doing it for 20 years. Thus, you can't name a variable as a, b or c anymore.
5. "Perfection", you get obsessed when you are a programmer. 20 years doing it, you have nearly a compulsive obsession disorder of 20 years. Seriously, it's just not "doing it", it's just not enough. It's all about "doing it perfectly, consistent to the way you did it for the last project, respecting a way of doing things, your own way". It's simply impossible when you reach a certain level on this career doing the same thing differently between two programs. As long as it's the same thing you will tend to use one or the other as a code template, and just expand it the minimum possible to avoid breaking away from that code template, a code template you had to think in the first place. And there's the problem that "that code template" just doesn't adjust exactly to what you have to do on the 2nd. project, so you get like a feeling of coldness running through your spine. True story. After 20 years, you need to be consistent, it's more important being consistent and perfect on what you do than the program itself. Talk about "code re-usability obsession" disorder, if it exists
6. "Tired of being the genius kid". Well, this is nice when you are 16 and everybody looks at you like the genius you are. When you are nearly 40 you want to do your thing, get the paypal payment and watch a movie with your kids or wife, have sex, drink whisky or simply listen Megadeth at 9/10 volume. You get tired of carrying the heavy burden of being "the genius kid" that everybody throws the worst sh*t possible on earth because you will be able to deal with it. You simply want to get a cool life as everybody else, because before being a programmer you a are a human being and you don't want to be constantly thinking, worrying and thinking and worrying and thinking and worrying, when you eat, when you get your bath, when you put the dog to pee, when you are in the bus, when you are in the bed. I lost count how many times I wake up on the morning and stay 1 hour without being able to step up, simply because I am worried thinking on al algorithm or whatever other coding-related sh*t that kept unresolved from the previous day
7. Finally, the always "need to adapt to a technology that you don't want to adapt". I mean, think of DOS days. Think of Cobol, Fortran; old dudes that spent learning that, plus Pascal, C, Clipper, from 1980 to 1995 to one day JUST throw it all in the WC because Microsoft came out saying that DOS was dead and Windows was there to stay, which meant: "Hey dude, you better start learning VB, Foxpro, VC++, Event-driven programming, Access and SQL Server databases and so on or you are out of the game ". That was a big change. And it happened to me, I was a Pascal, C, 8088 Assembler expert. Now where would I be nowadays coding in all that? The same happened in 2000 with .net. Then Javascript came out, then AJAX.. Now there's all about tablets and "responsive" designs for web. Now we also have the touchscreen madness and all events related to that. It's enough for me. World needs to understand that we don't have to re-learn our career every year just because the childish market "changes" to what the childish market thinks it's better for the market. This is, I think, mainly the main reason of all 7 reasons. You get sick of this profession if you have to re-learn everything one year after another, it's like you always feel a hole, a hole that never gets filled. The only solution to this is working for your own, and EVEN doing so, you are forced to re-learn some things. i.e. think of Table-based web design compared to CSS-table-less design. That was another big change that nobody asked us if we wanted to move through, in the first place. Think of CMS-website design world too, WP, Joomla. Now, some of these called standards are terrible to learn, buggy, wrong, and simply unpractical for the everyday use. Think of Javascript, I am sure you had a hard time more than a single time, trying to get some things to work, looked at the code and looked correct. But, wait, "you forgot that you typed a capital L instead of lowercase l" in your document.Location.href= line, thus, it wasn't working. How can you forget THAT dude!? Now, think if you have 3 pages of complex, event-driven Javascript code written running on your old Windows 98, IE 6 back in 2002 days, without Firefox, Firebug, Chrome and all what we have now to inspect and debug. Good luck trying to see where the error was
As a conclusion, these are the reasons why coding sucks, it's simply too much time-consuming. It has nothing to do with coding for yourself on big/interesting/rehearsal projects. It's all the same after all, then you get tied to keep making enhancements to that "program of yours" and new versions, and it becomes an endless loop. And nothing keeps you free you that one given day you will have to re-write your 5-years development project from scratch just because nobody will use Windows/Linux anymore, simply because a new SO came out, and the market forces you to move along
Cheers
Diego
Diego Sendra
CEO
Diego Sendra
software development
Montevideo, Uruguay
e-mail: contact@diegosendra.com
http://www.diegosendra.com
Yahoo: diegosendra1976
Skype: dsendra1976
|
|
|
|

|
cmd.Parameters.Add("@SomeID", SqlDbType.Int)
cmd.Parameters("@SomeID").Value = Session("SomeID").ToString()
It appears this developer didn't have a strong conception of data types, knowledge of AddWithValue, or knowledge that the "@" is optional when specifying parameters.
|
|
|
|

|
The best thing I ever saw while debugging code was comments in Polish. The variables were also given Polish names so discerning the possible usage was more difficult. I asked a Polish programmer to please translate the comments and he told me there was not an English translation possible. I've always thought that was funny. To this day, in the code, when someone wants to use the buffer class they construct a CBoffo, usually called Boffo. It always reminds me of Hans and Franz doing a SNL skit.
|
|
|
|

|
While I was in a telephonic conference at work, I heard someone speak "Can we get someone to enhance the bugs in the application?". I'm still wondering how on Earth someone can enhance a bug.
|
|
|
|

|
Of course, variables changed, methods renamed, and parameters omitted to protect the (not so) innocent.
if (condition_a)
{
if (condition_b)
{
if (AlertBox("Something wrong here. You wanna continue?"))
{
CheckAvailability();
}
}
else if (condition_c)
{
if (AlertBox("Some other thing wrong here. You wanna continue?"))
{
CheckAvailability();
}
}
else
{
CheckAvailability();
}
CheckAvailability();
}
else
{
CheckAvailability();
}
modified 3 Mar '13 - 11:32.
|
|
|
|
 |
|