5,229 reputation
1923
bio website
location Pretoria, South Africa
age 33
visits member for 2 years, 7 months
seen 23 hours ago

I am a software developer during the day and hobbyist developer during the night (when time permits). Interested in all aspects of software development, although experienced mainly in the MS environment and languages.

C#, SQL Server, ASP.Net / MVC3, WinForms / WPF, WCF, Object Orientation, Code Generation, CSLA and other business frameworks.


Mar
25
comment How to deal with a personal excess of meticulousness
+1 for the powerful quote - redefining "perfect" as "good" is a trick I've used in the past as well. Embracing the concept allows you to keep your perfectionism (in a way), but redirect it towards actual productivity.
Mar
20
comment Is a genetic algorithm needed when computation is infinitely fast?
I'd say there's a bit more to it than just this; firstly, while the question presupposes "unlimited computation resources", GAs are typically used where exhaustive search is completely infeasible (we're talking "wait for the universe to end" infeasible here, which you approach rapidly with any interesting problems). Secondly, GAs have a crossover operator, in addition to plain old mutation; for certain types of problems (NFL holding), this is a very good heuristic, and far better than exhaustive search. The rest, I'd largely agree with.
Mar
10
comment What sort of information can I extract out of a dll file?
Purely on the theoretical side, you might find reading about obfuscation interesting. To make a reverse engineering attempt more difficult, you can remove helpful function / variable names (these are generally not available for native DLLs in any case), make control flow difficult to follow (extract each line into different methods, etc), or inject large amounts of complicated code that ends up doing very little except confuse people analysing it.
Feb
12
comment What is the aim of software testing?
@Tarun you could definitely go that route. The word bug is very easily misunderstood though (usually along the lines of "programmer messed up"), so perhaps it's not the best terminology. Regarding the "UI too slow" issue, I was leaning towards a qualitative measure which is often not specified, yet implicit and expected by clients. In this case, it could almost be both a "usability bug" and a "requirements bug".
Dec
19
comment Why do dynamic languages make it more difficult to maintain large codebases?
Thanks, @Phoshi, that's exactly what I was after. In retrospect, it makes sense that the *lints would take on this type of responsibility.
Dec
19
comment Why do dynamic languages make it more difficult to maintain large codebases?
@Phoshi I understand; to elaborate on my question, let me rephrase it like this: if we assume that I want to neither exhaustively regression test a system by hand after every change, nor do I want to write exhaustive unit tests asserting the exact spelling of every field / property, is there any way to get a level of assurance similar to what a static compiler typically gives? Given that modern IDEs are getting pretty good at guessing what's going on in dynamic languages, shouldn't there be some automated assistance (even if it's a "looser" check than for statically typed languages)?
Dec
17
comment Why do dynamic languages make it more difficult to maintain large codebases?
@Phoshi agreed, but even that joke of a type system catches many menial issues which happen day to day (especially when working with large, boring applications). I'm genuinely curious what exactly takes the place of a type system for dynamic languages, and I'm guessing Jörg has some pointers or counter-arguments.
Dec
17
comment Why do dynamic languages make it more difficult to maintain large codebases?
Just to add to the above comment, I mean: the nature of many (medium / large) problems is such that you will need a couple of hundred entities to model it, expressive language or not. An expressive one might cut down the code by a factor of 10x or more, but it will still not be manageable without additional tooling; I'm wondering what this tooling is.
Dec
17
comment Why do dynamic languages make it more difficult to maintain large codebases?
An interesting way of looking at it. Personally, I find that for large projects, type-checkers can be a life saver. They implicitly provide an extremely basic kind of unit-testing (if we can call it that - it's simply testing whether the structures agree or not). This is the kind of testing I have no time to write manually, but needs to happen when the project grows beyond what you can easily hold in your head. I suspect this happens fairly rapidly for most systems, regardless of expressiveness; how is this problem typically solved in the dynamic world?
Dec
11
comment Is there a downside to using Access as a database?
@OSKM I believe the ldb file is used when a write is happening (to clarify - it's used all the time, but will typically only "lock users out" when a write is happening). This question on SO about MS Access (MDB) concurrency goes into a lot more detail. In general, the "file share over network" model can work, but has many issues as the number of users scale.
Dec
4
comment Is navigate between more than one class a bad practice?
@DavidJiménezMartínez posted an answer, with a bit of additional info.
Dec
4
answered Is navigate between more than one class a bad practice?
Dec
4
comment Is navigate between more than one class a bad practice?
@DavidJiménezMartínez I'm glad it helped. I'm under a bit of time pressure at the moment, but I'll check back later and add an actual answer (if nobody does it in the meantime).
Dec
4
comment Is navigate between more than one class a bad practice?
To add to the above, here's a related question on SO: Java getter chaining bad or good?. I tend to agree with the "Clean Code" / Bob Martin interpretation and allow this in most basic cases.
Dec
4
comment Is navigate between more than one class a bad practice?
In short, yes, you are creating a (very weak) type of coupling to Game and Window. There are different schools of thought on this topic, one saying that you should never navigate multiple objects like that; but this leads to an unscalable cascade of getter methods on all your classes (from almost everything to almost everything else, as required). You could also use IoC / DI to inject the relevant Window / Bounds into your TitleScreen. It might be worth the effort, or you may be overthinking it / prematurely optimising the architecture.
Dec
2
comment Internal-use websites: Is there a compelling case against SQLite?
Some anecdotes about SQLite and concurrency (mostly positive): sqlite3 concurrent access
Nov
27
comment Why appending to a list in Scala should have O(n) time complexity?
Excellent answer. I would perhaps add a TL;DR that simply says "because you should be prepending, not appending" (might help clear up the base assumptions most developers have about Lists and appending / prepending).
Nov
25
comment Is this any form of service pattern, some other pattern, SOA or just an anti-pattern?
Having had a quick look at Laravel's controller documentation, this doesn't seem to be idiomatic in their framework. It almost sounds like Model is missing almost completely (and I'm referring to the Model in terms of MVC, not just the base DTOs and services), some of the controller logic is moved into the data layer (services), and some of the Model logic is moved into the controller. I tend to agree with your concerns, and would want to move away from this architecture (unless some clear design intent is shown).
Nov
12
comment In retrospect, has it been a good idea to use three-valued logic for SQL NULL comparisons?
@Heinzi I understand, I wrote a comment instead of an answer specifically because it was slightly tangential to your question (which is a good question, BTW). Clearly, this is a slightly counter-intuitive topic for developers, but my guess is that having the logic firmly grounded in mathematics outweighs the negatives (e.g. proving the correctness of a DB implementation, or allowing the query optimiser to formally reason about execution plan equivalences, etc).
Nov
12
comment In retrospect, has it been a good idea to use three-valued logic for SQL NULL comparisons?
The point above by @Izkata is quite important; according to the mathematical definition, it's perfectly correct, and makes sense. Perhaps the naming of NULL is misleading (or rather, we have different connotations to null from programming), and it should be something like UNKNOWN. E.g. "What is two plus an unknown value?" should now start making more sense.