|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
On April 04 2014 14:26 phar wrote:Show nested quote +On April 04 2014 13:17 CatNzHat wrote:On April 04 2014 09:53 darkness wrote:I've been reading a bit of that "Clean Code" book. One of the suggestions is not to return null but to throw an exception or return a special case object. Is that how you guys do it as well? I've recently got annoyed at some bits of my code that are if (object == null).  But then, do you have to catch those exceptions? Can't they go silently like "return" in a void method? What about int/boolean methods though? "return" is insufficient there, but if you write "return -1", then whether you check for (object == null) or (object != -1) kind of has the same purpose. recent example I ran into was an accessor method for a signed cookie. If it successfully unsigns the cookie then it will return the value, otherwise it will return nil (which could be caused by bad cookie value or no cookie at all). This creates a clean encapsulation for accessing the signed cookie values that is easy to test. In cases like these you can consider using Optional<T> instead of @Nullable T. I forgot to say these examples were in the context of ruby so there is no optional or nullable unless you're talking about an activerecord model with constraints, in which case you could implement something of the sort and I would encourage it. validates_presence_of vs an attribute_reader that implements a coalesce or whatever the desired behavior for the null (not present) case.
The implementation is contextual (as it always will be) but the principal is the same: make your code clearly represent itself, don't hide logic.
It's better to have less DRY code that is easy to read than very DRY code that is difficult to maintain. If your code is readable but wet, then your abstraction is poor and that can be fixed. Whiteboarding is your friend.
|
In regard to some air flight news lately, I'm wondering what languages and techniques companies use to build the embedded systems on board. C? C++? Are Formal Methods still a thing for this kind of business?
|
On April 06 2014 06:03 darkness wrote: In regard to some air flight news lately, I'm wondering what languages and techniques companies use to build the embedded systems on board. C? C++? Are Formal Methods still a thing for this kind of business? Given the nature of the software it has to run in realtime, meaning no language with automatic GC is going to be used, so C/C++ are prevalent.
|
What does automatic GC have to do with whether a language can be used for 'real time' software? And 'real time' is just relative anyway ('real time' for a ship different from 'real time' for a plane)
|
On April 06 2014 17:24 supereddie wrote: What does automatic GC have to do with whether a language can be used for 'real time' software? And 'real time' is just relative anyway ('real time' for a ship different from 'real time' for a plane)
real time means the same for a ship and for a plane:
any information processing activity or system which has to respond to externally generated input stimuli within a finite and specified delay - Burns / Wellings the 'real time' is the same too, but the systems are different. automatic/manual memory management is less complex, but if auto gc is optional and easily disabled in the language it's not an issue.
ada f.ex, from its wiki
Though the semantics of the language allow automatic garbage collection of inaccessible objects, most implementations do not support it by default, as it would cause unpredictable behaviour in real-time systems. wiki
|
The simple reason you don't use a GC in real time systems is that you can no longer prove that a piece of code will execute in at most N <timeunit>.
An example, that is a bit exaggerated
Lets say it takes 10 ms to run a garbage collection. The requirement for a rudder to move on a plane is 25 ms after a movement has been detected. It will at most take 15 ms to move the rudder to the wanted place. The calculation that is needed to figure out how much to move the rudder takes 5 ms.
Going from one extreme position to the other -> 5 ms (calc) + (15 ms movement). Got 5 ms spare. Going from one extreme position to the other - GC decides to start cleaning while in the calculation -> 2 ms (calc) -> 10 ms (GC) -> 3 ms(calc) -> 15 ms movement = 30 ms, and you may end up with a crashed plane in the most extremely unthinkable situation.
It's basically this way that all safety systems are made. You have strict requirements made from a combination of physical properties, electronic properties and how it's coded.
|
On April 06 2014 17:24 supereddie wrote: What does automatic GC have to do with whether a language can be used for 'real time' software? And 'real time' is just relative anyway ('real time' for a ship different from 'real time' for a plane) Yea some background here may be necessary. When people say real time systems, it has a very, very specific meaning:
http://en.wikipedia.org/wiki/Real-time_computing
I.e. "The main event loop absolutely cannot take longer than 10ms, under any circumstances whatsoever."
In a situation like this, you cannot use GC, because GC does not have a hard latency guarantee - you can't know how long it will take. (This is a bit of a simplification, but that's sort of how it is).
|
you dont even need a plane as an example.
Even simple things from normal companies cant have this. For example last month i had to work on a simple embedded microprozessor that tests wether or not a light switched properly from normal elictricity to emergency battery by measuring an electrical impulse the light sends when it does that.
This requires millisecond accuracy, but is not some extreme plane scenario. It is later used in a test system for quality assurance, operated by minimum wage people. Its also used in big builings as an intermediate between a row of lights and the controlling main system.
|
On April 07 2014 08:36 LaNague wrote: Even simple things from normal companies cant have this. For example last month i had to work on a simple embedded microprozessor that tests wether or not a light switched properly from normal elictricity to emergency battery by measuring an electrical impulse the light sends when it does that.
I'm curious, how does this light impulse work? You have a sensor in the system that detects electrical signals and when the backup generator comes online it sends a distinct signal for x seconds?
|
What is a "client class"?
I see them on comp sci multiple choice, and got a little confused... how is it different from a normal class?
|
http://bettertwitchvods.s3-website-us-west-1.amazonaws.com/
Made a quick Javascript API call project to browse twitch VODs in a less annoying way, it's not really an improvement for tournaments but it works pretty well for going through old recordings of personal streamers.
Code is really ugly btw.
|
On April 07 2014 10:19 TimKim0713 wrote: What is a "client class"?
I see them on comp sci multiple choice, and got a little confused... how is it different from a normal class?
Maybe this question is about the client-server architecture. You have a server class (e.g. Java RMI, IRCd, Skype, etc), and a client class to connect to the server (e.g. Java RMI, XChat/mIRC, Skype client, etc). This is a bit simplified because their clients may not use only one class, but in the case of RMI it's posible to have only one client class. Actually, it may not be required to have only one client class. I suppose it's acceptable to call many classes "client" per application.
Example (Java RMI): http://web.cs.wpi.edu/~rek/DCS/D04/JavaRMI.html
|
On April 07 2014 09:56 obesechicken13 wrote:Show nested quote +On April 07 2014 08:36 LaNague wrote: Even simple things from normal companies cant have this. For example last month i had to work on a simple embedded microprozessor that tests wether or not a light switched properly from normal elictricity to emergency battery by measuring an electrical impulse the light sends when it does that.
I'm curious, how does this light impulse work? You have a sensor in the system that detects electrical signals and when the backup generator comes online it sends a distinct signal for x seconds?
When you switch AC/DC, the monitor card registers that, so do the lights, which have their own microprozessors (but cheap small ones). Then the monitor switches into a mode where it collects informations about how the lights it is responsible for reacted to the situation. The lights (up to 50 connected to 1 monitor) will send an impulse of 40ms length and 100mA height on a seperate cable. then the monitor sends the collected data to its controlling unit.
Especially in the test-system you have to measure the impulse accurately, plus 50 come in rapid succession when deployed by customers and you cant miss one because your program was dicking around.
Its a very nice example of how much we use computers these days. The lights have a processor, they send to a controlling device that controls 50 lights, which again sends to a central light system, which then probably is connected to a main security/control system.
It was interesting to program, as i usually program mathy things that are much more about algorithms and dont have to so much attention to hardware capabilities. Catching the start of the signal with milliseconds accuracy and then doing as many hight measurements as possible without missing the stop of the signal was kind of interesting to do.
|
|
|
I'm pleasantly surprised with Java's JTable and TableModel. They remind me of Objective-C's table view.  However, Java's Date class seems to have too many deprecated methods which isn't nice. I've found some library that more or less enhances it.
|
Never use Java's Date class. Use joda time instead and save yourself a lot of trouble
|
I have a problem where my words[] array of strings fails to be accessed by another class that needs to use it. Switching which class has extends(to experiment if that was the problem) failed. Anyone have any ideas for how to fix this? Some code is below:+ Show Spoiler +package sorter;
public class Sorter extends Word {
public static void main(String[] args) { //declare variables String words[] = {"hi", "pie", "schoolmaster", "theclassroom", "meteor", "remote", "racecar", "racecar", "nap", "pan", "God", "dog"};}} package sorter;
public class Word{ private String word;
public void setWord(String w) { word = w; } public String getWord(int i) { return words[i]; //asks for me to create the local variable words. }
|
Your variable names and types seem off. You declare a string "word" and try to reference "words[]" and "words". You want it to be a String[] instead of a string, decide if you want your variable name to be singular or plural and don't use [] on variable names unless you want to reference a specific element in the array.
|
Does anyone have experience with JTable? I'm trying to display a unique ComboBox for each row, but what is displayed is ComboBox.toString() instead. I've found some examples but 1) they use the same ComboBox for every row or 2) code doesn't work for me. I understand I need to set Cell editor and renderer, but I'm not doing it right I guess.
Overall, the ComboBox is supposed to be a drop-down list that is read-only. I only want the user to view items per list with no modification.
Edit: ComboBox isn't required exactly. I just want to display an array of items.
|
Not exactly programming but think it's the best place to post this:
I was testing teamliquid.net against the Heartbleed bug when I noticed that TL doesn't use HTTPS at all. Could you please make atleast www.teamliquid.net/mytlnet/login.php forceably run over https so I don't have my password (atleast it's a generic one that i use for minor stuff) flying around in plain text?
Onto the Heartbleed discussion: This is a pretty major exploit, that allows you to read some (maybe all of it?) ram from the host running openSSL, 64kB at a time. This exploit can very easily retrieve a host's private key to be used in impersonation attacks, read a lot of confidential content and even hijack web server user sessions. The bug was made public yesterday yet it took some companies like yahoo almost 24hours to fix it (was simply updating/downgrading openSSL on their servers or manually disabling the module causing the bug) and others still haven't reacted. Seeing so much info out on what can be done with this exploit just studied in 24hours makes me wonder how much of it was already thought out before public awareness and how much entities (hello NSA) have exploited this for the last 2 years (bug was deployed in 2012)
|
|
|
|
|
|