Oct 11, 2009
I will be covering three topics very poorly tonight. Don't worry, I'll lay it out step by step as well as I can.
The Rule of Law and The Patriot Act
First off, this philisophical topic is incredibly rich and complex. I could write a dozen good essays about it and I can't even start to write a good one tonight but I'd like to discuss it. You see in order to discuss what I want to discuss, I have to explain to the casual reader why it's important and what is going on, which makes a pretty decent introduction. On Thursday I went to a talk by ACLU-WA about the Patriot Act and current surveillience tactics by the federal and local governments. The ACLU and EFF both oppose the provisions of the Patriot Act as unconstitutional. I've talked about the problem of the Patriot Act a few times before. The Supreme Court is allowing the constitution to be raided by corrupt and ignorant politicians and law enforcement is abusing the laws they are sworn to uphold. In the name of anti-terrorism, they are arresting anti-war activists for attempted disorderly conduct. That's right here in Washington State. These peaceful activists will be suing the government before long for infringement of their civil rights. But as I have said before the judiciary doesn't seem to care about the constitution anymore. It's practically done for. In the EFF's lawsuit against the NSA, Obama and the Attorney General have claimed National Security yet again. Without reasonable proof there is no reason why a military agency (the NSA is part of DoD even if it's budget is secret) should be allowed to operate against US citizens, let alone be allowed to wiretap all citizens without any suspicion.
At what point does the rule of law break down? The moment of a government becoming a tyranny is blurry, but I suggest that people consider the last possible moment that their actions can fix the government as that point. Long before that point we will need to discuss the why and the what of the breakdown. You see when people disagree there is a conflict and the rule of law is designed to allow persons who dissent to be given valid reason that is convincing to their peers why the law has forsaken them. In the case of the Patriot Act, we are given no valid reason why our government has raided our freedoms and invaded our privacy. In this case the rule of law has broken down. At what point we can hope to fix this problem, I cannot say.
There are two important ideas on the other side of this argument and I want to address them before anyone has a chance to utter them. First up is the social contract. In the social contract, we have decided to give up some of our freedom to obtain some benefit from society. Without our consent we can be governed until such a time as we break ties with society. My rebuttal to this argument is that the social contract in the United States is governed by the Constitution, so unconstitutional behavior by the government must be dealt with because the social contract is broken without it. The second item is utilitarianism. I would hope that no American would say that the utilitarianism comes before the Bill of Rights, but at this point I have seen worse. Utilitarianism is bankrupt in this case. I am having a hard time putting into words how much I detest this argument.
And so... civil disobedience seems to be the right choice in this case. The government is violating the constitution, the judicial system isn't doing it's job, and the public understand the issue just enough to care about it.
Blender and Linux 3D
Today I spent several hours watching and reproducing the video here. I bought the DVD for Yo Frankie! and attempted download (it cut out half way and the other two mirrors were not working). Interestingly, Blender is working well and the downloads were fine for that. I noticed an interesting issue with Blender and will work on reporting it properly. I also spent a reasonable amount of time looking at the RadeonHD driver. I just noticed that 3D acceleration is done entirely in software currently, so I switched back to fglrx drivers for a while. I think that reversing the fglrx drivers makes some sense if I can find a significant chunk of code that does the first level of 3d rendering. The RadeonHD team is doing a good job writing the 3D drivers but I would certainly like to give them a nice function that they've been needing. I have a bunch of research to do before I start reversing, so I'll be putting it off a while.
I noticed that since my last crack at Hack Mars drivers have started to support OpenGL 2.0 and above, which means that GLSL works. I compiled a simple example and tested Blender with simple GLSL shaders. I am looking forward to using it. I added Cg (nVidia's shader language) support to Hack Mars around 2007-03-22 but never ran any shader programs for some reason. I think I will have to make a choice between the two now that OpenGL has driver support. If you're in the same position, it's not an easy choice. PlayStation 3 has standardized around Cg while OpenGL 2.0 has a few open source implementations. I think that GLSL has more likelihood of surviving 5 years, but that's only because it's an industry standard. If the companies that do GL change in the next 5 years, nVidia's Cg could become more stable than the GL standard making it a defacto standard. If you haven't heard of CUDA and OpenCL, you will.
If you're wondering why I'm working on 3D stuff when my projects have nothing to do with 3D, you might be surprised when I say that tonight's main discovery was not 3D related. While thinking about something exciting and completely unrelated I stumbled upon a new way of thinking about my problem and thus have saved hours of awful coding. All it took was an energy drink, a saturday night, and a few hours to think it over.
Languages and Code Design
I've been thinking a lot about languages and code design. I've written a parser for the C language and just tonight have made a rather interesting improvement of my code. It'll need a lot of work and a lot of late nights between now and the 25th of this month. But I'm convinced that I've found something profound in code design. If you look very closely at the nature of programs, you see that there are a small number of patterns that people use often. The structure of data is always different, which means that each function has to be written from the ground up, but each section of code has some similarity to the base set of use cases. If you don't understand programming very well, think about human language. It has a specific set of use cases and from those, we are able to make up very complex statements and very long documents. But if you look at the statistical use of words the common structures can be pulled out. It doesn't let you understand the paragraph to know the structure, but if you're looking for something specific, the structure may be all you need to know.
In the case of programming, the structure is designed to tell a person what is going on even if what is going on is not correctly designed. There are special operators in C that tell you when you are doing something interesting. If you misdirect your actions by calling functions, the job becomes more difficult because you no longer know what's happening in a function just by looking at it. A single function call could change the entire meaning of a function. In the case of strcpy, it could mean the difference between executing your code and executing someone else's code. I'm looking forward to using my knowledge to clear some of this up for myself and for as many people as I can.