02.02.07
Try to breath as the world desintegrates
Just like autumn leaves we're in for change
Holding tenderly to what remains
And all your memories are as precious as gold
And all the honey and the fire which you stole
Have you running through all your red cheek days
Shaking loose these songs from their sacred hiding space
Hold your heart courageously as we walk into this dark place
Stand, stare fast, erect and see that love is the province of the brave
Push under the ?(whizing lights) of buzzing stars
Let this burning brightly illumintate where we are
Build this hallow that lovers voices occupy
Let it follow
That we let it free, let it fly
Breaking open the walls of this cage
Intoxicated, oh so amazed
Much like falcons tumbling from our hearts that blaze
Oh come join, ?(arms engaged)
Hold these hearts courageously as we walk into this dark place
Stand, stare fast beside me and see that love is the province of the brave
"Province" by TV on the Radio
23.01.07
One of the unfortunate side effects is that your mind gets into a bad habit of overestimating how clearly it understands things. It always thinks it has The Big Picture even when it doesn’t.
This is a particularly dangerous trap when it comes to software development. You get some big picture idea in your head for what you want to do, and it all seems so crystal clear that it doesn’t even seem like you need to design anything. You can just dive in and start implementing your vision.
Now there is more you need to read before the above paragraphs to get a fuller understanding.
That stated, this kind of thing bit me in the arse this weekend. In the job I have now, I am learning a long list of new things (some of which are very easy) as I go. That long list includes Ruby, Ruby on Rails, Test Driven Development, and Agile development. It also means that some things that shouldn't take very long at all for programmers with lots of experience in a given environment are killin' me!
Friday when I left work with a Monday deadline for some new functionality I knew two things.
- I figured out the cryptic interface for the module with no documentation.
- The formatting of the generated information would be no big deal as it's using the same partial anyways right?
So confident was I that this stuff really wasn't a big deal, I didn't start Sunday morning like I had originally planned. Instead, I stayed Saturday night at a friends house after a show, had lunch, then didn't start working on it until 3 in the after noon. So sure was I that everything was under control, I even allowed time to chat with a particularly nice young lady sitting next to me with jet black hair and eyes like blue ice that bored right into you.
I'm drifting.....
Well, as I got down to business, the difficulties soon made themselves known and things became darker and darker. And what was the jist of the problems? Ultimately it's the fact that I'm still too new to Ruby to just be quick about it. A couple of things would've helped big time. As a matter of fact, my biggest gripe after this experience is with Pretty Print. Now I guess you can customize it's output, but I'm a noobler in Ruby so that's not going to happen while I'm under the gun!
The problem for someone that is accustomed to using PHP and it's various ways to dump raw data to the screen is that Pretty Print doesn't format the data in some nice way and it doesn't state if you are looking at a hash or an array. This alone caused me no end of heart ache. About 4 hours worth as a matter of fact. Once I figured out that the data set I was getting back was a hash as opposed to an array, a quick "to_a" sorted out all the drama and things started to look real sunny.
Now before you get started, I know what a hash is and how it's different then an array, but trust me when I say that the output from Pretty Print doesn't make that plain.
Anyway, the last two days of my life has been garbage! Tired as hell from 12+ hours of bumbling around in the dark writing code, the resulting lack of sleep, the 8 gallons of caffeine needed to stay awake through the day, my turbo car suffering a bearing failure, and my ex telling me that she might be pregnant. There's too much stuff going on and I've never been good at juggling.
And so far, I don't like Ruby!
15.01.07
Joel Spolsky recently posted a piece called "Language Wars" and really managed to step on some toes from those that drink the koolaid: the Ruby Devout. Of the things that he said, there are certainly a couple of points that I agree with in particular.
- ...it's known to be slow, so if you become The Next MySpace, you'll be buying 5 times as many boxes as the .NET guy down the hall.
- I'm really not sure that you won't hit scaling problems, or problems interfacing with some old legacy thingamabob, or problems finding programmers who can understand the code, or whatnot. So while Ruby on Rails is the fun answer and yes I've heard of 37 Signals and they're making lovely Ruby on Rails apps, and making lots of money, but that's not a safe choice for at least another year or six.
- ...I'm sure you'll have a lot of fun, but for Serious Business Stuff you really must recognize that there just isn't a lot of experience in the world building big mission critical web systems in Ruby on Rails.
So while the above statements made the hordes unhappy and the pitchforks came out, there really is some truth in the things he had to say there. But instead of challenging him on those truths, they chose to call it FUD and be done with it. The really interesting thing is that he never said he didn't like the language. What he said amounts to "it's bleeding edge right now and it's prolly not to smart to use in in an enterprise setting", to which, I have to agree (but I also think it's cool if are choosing to be on the bleeding edge!).
Once again, there was no answer for this, but instead, "It's FUD and he's a jerk".
But the truth is that there are scaling issues to be sorted. And there are performance issues. On the topic of performance issues, it's not with Ruby itself in my opinion, as it's most likely "fast enough", but with Rails and it's use of ActiveRecord. ActiveRecord is an Object-Relational Mapper layer with the aim to abstract typical DB usage away as much as possible from the OO developer. Models obviously become very important keeping this in mind.
Anyway, all an object relational mapper is going to do is suffer the drawbacks of what OODBMS'ers call "an impedance mismatch". In other words, the overhead of developers trying to extend their object like hierchal view of data onto the database itself. In this case, retrieve the data then manipulate into something the developer wants to see. Now I wont argue the merits of wishing to view and deal with data in this manner, but the performance hit can't be overlooked.
That said, Rails has a big issue and it's very core: the performance of it's ORM.
The bigger problem for Ruby and all other languages with people developing Rails like frameworks with ORM's at their cores is actually bigger then the use of an ORM in the first place. It's the idea from zealous adherents that this is OK and that no real thought needs to be given to it. They've chosen to abstract the DB away so much behind various layers of OO fer-dizzle that most don't even know the term "impedance mismatch" or have never even heared of an OODBMS. So busy bowing before an alter and burning heretics, they seem incapable of realizing that using an OODBMS could solve the performance issues in one fell swoop.
But what do I know eh?
11.01.07
Man, I'm tired!
07.01.07
The objective of the car is simply to be a killer street car with a broad power band of useable power. Even as it it now, I've accomplished that objective. The car has mad grunt on the bottom end and absolutely steller roll on performance. The only downside is that I've not met my power goal which at first was 250hp, but has been moved to 300hp. 285 at the very least.
Anyway, with the turbo I have now (TD04H-15G), it's not likely I'll make that point with the next iteration of the engine. Well, it's possible but I doubt it will happen.
The next iteration includes a ported, polished, and grooved 530 head with a B cam. The B cam has a good deal more lift and moves the power spread a little further upwards in the rev range bu not too much that it will jepordize the our objective of streetability. Additionally, others have reached more then 300hp with that cam, though admittedly using larger turbos then I.
Now there is also a worst case scenario to the next iteration of the motor/turbo setup. As it is now, my car is smoking and I'm pretty positive that's from the turbo. However, there is an outside chance that it's actually the block and oil getting past the rings at idle. While I certainly hope that's not the case, it slows things down by at least a month. The good side of such an outcome is that it'll force me into a 90+ block, thereby removing any lingering reservations about the K block.
So back to the turbo stuff: The most likely choices, instead of those crazy expensive GT2871R's I was pondering before, are the Mitsu 18G-5H, Evo III Big 16g, or a T3/T4 with a .48 hotside and a 60-1 cold side. All of these turbos are very will priced and small enough on the hot side to make very little in the way of lag from my 2.3. The only drawback of the Mitus listed above is the need of a $40 dollar T3/DSM adapter. It's actually more of a risk in terms of the potential fitment issues caused. I guess that's the kind of thing we won't know for sure until we "go there".
There is of course one more option that also has had some discussion. That is using an 18g or 19t wheel in the 15g compressor housing. However, when you consider that I have to pay for the work AND the turbo CHRA still needs to be rebuilt, it may end up being more expensive then just buying a new turbo.
Anyway, all of these are very well priced options compared to the ball bearing GT family.
22.12.06
The problem relates back to my hybrid 15g install. It's a 13c hotside/15g coldside. When putting it together I definitely noticed some in/out play at the back (exhaust) of the CHRA. As a result, it's letting oil past. While idling it will let lightly mist the area with blue smoke. That's not good! If I let shut the car off then restart it a couple of moments later, it will smoke fer shizzle and leave a thicker cloud behind.
So while it is fun, I really need to get it up in the air to deal with a host of things as well as change out the turbo. I really want a GT2871R or 3071RWG. Those are mad turbos and would go nicely with this motor. Especially the 2871 for low end and mid range responsiveness.
Oh well..... A guy can dream right?
12.12.06
Anyway, and for those that don't know, the language is a lot like Python. The differences?
* The interpreter doesn't squawk about indentation
* ABSOLUTELY EVERYTHING IS AN OBJECT
* Has some funky iteration stuff that is very concise and perl'esque as a result
* A lot of funky operators in the place of words. ('<' for 'extends' as an example)
I'm also not happy with what I had to jump through to generate a multi-dim hash. I may yet find a
better way to create dim hashes, but it certainly wasn't as easy as it was in PHP.
But otherwise, it's a rockin' language and I think I'm going to like using it.
23.11.06
OTOH, I think I'll hook up that RCA cable for my sub and make a rock sheild for my oil cooler. Those are things that can't possibly leave me without a car between here and Tuesday when I go out of town for an interview in Boca Raton. I think I'll change the water pump too since there is some racket that seems to be coming from that area.
b2 is the worst code in the world.
19.01.05
Now this doesn't stop the comments from coming in. But once spammers realize there is no gain, they will most likely loose interest in placing the comment in the first place. Which is the goal of this move by Google in the first place. So in the short term, it's still sheilds up for those who haven't updated their blog package (or home grown package) to add the nofollow attribute.
16.01.05
il mio cibo, cioche osservo
magico sei tu! e sento che
Sono inamorata di emozioni
smisurate e infinite ormai!
vivi, nei miei pensieri.
a velveteen equation
magico, questo eun grande amore
magico, questo eun grande amore
15.01.05
What is a lot more interesting than the actual topic, is that this is a superb example of tribalism. (Going meta is always fun!) You identify "your own group" with the positive figures, those that know how to do it right and conveniently blend out all the "failures", since those don't belong to the group yet - they're doing wrong. (Also see "no true scotsman fallacy") Whereas the opposite group is always identified by their worst members - low-lifes, thugs, rapists, spaghetti-coders. Please forgive my trolling. Have a read at this timeless article: http://www.perl.com/pub/a/2000/12/advocacy.html It's only superficially about programming languages, it applies in much the same way to programming methodologies. Posted by: Tribalist Jan 14th, 2005 @ 8:56 AM MSTThe story he is talking about is here, just in case you can't get to it from the blockquote above. It really is a war that doesn't need to be fought. Anyway, many know my feelings on the whole OOP vs Procedural thing and I hope it can be seen that I feel that both have their place. The only thing that is unfortunate to me is the idea that "Procedural must be bad". Unfortunately, we see a lot of this. Additionally, there is the extension of the an 00 centric view onto data management. If you want more info on this topic, look into the writings of Fabian Pascal and C.J.Date. A bit of a tough chew, but worth it!
Click here is another good link concerning advocacy and how not to go too far, shall we say?
01.01.05
Anyway, I've also written a script that will parse the attempts list and run whois requests for the URL's in the posts. I just don't know what I would do with this information. Any ideas?
Cheers
21.12.04
Cheers...
http://weblogtoolscollection.com/archives/2004/12/04/dynamic-blacklist-ready-to-be-used/
18.12.04
Anyway, I now have a cron job that will clean the database nightly. It works against a list of search terms and urls that I have saved in .txt files. I would love to get this kind of information from a universal source. That way, as opposed to updating it myself to try to keep pace with the spammers, I could automatically update the files on a periodic basis. While there may be issues with such a system (read comments here), I feel they can be worked out.
Now I don't think this is a final solution in any way shape or form. But I think it can help. There are a number of other things that can be done and some of those I have plans to do in the next couple of days. This same list of authors and urls can be checked up front. If any of the terms are found to exist in a comment submission, fail the procedure! Plain and simple as that.
In closing, before I started looking at the stuff the day before yesterday, I had over 3500 comments (the vast majority of it junk) in the comments table. I'm now down to a 10th of that number. There are still a number of terms that I need to add to the terms files yet, but what is there plus what I did by hand before writing the script has done well.
Lastly, b2 has some serious performance issues that got progressively worse as the dataset increases. As can be guessed, this is a databse issue and the fact that there are not enough indices. Since so much of what's going on here revolves around the b2posts and b2comments tables that it's a must to index more than just the primary keys here. Creating and index for the date operation for both tables is very good idea. It also seems that the b2comments tabls was ignored even more than b2posts. Creating indices for comment_post_ID has a huge effect on performance.
If anyone is interested, the file is in the tools directory. The terms files are there as well.
Cheers,
BDKR
16.12.04
Interestingly enough, there is a very recent blog entry on this topic by Harry Fuecks talking about a couple of things along the same lines. A number of solutions are talked about and there is a large number of links off to various places with some good examples.
As for solutions, some of you are prolly aware that I implemented a turing test on the comments section, but as it turns out, the spam is still coming. So that means ...
For the longest time I thought it was the last option above, but what I found last night suggests that there is instead an army of desperate skank gnomes keying these things in by hand. Now the approach taken by MT-Blacklist is a bit more involved than just a simple turing test, but to the best of my knowledge (correct me if I'm wrong) stops short of requiring a log in. Unfortunately, it requires the use of MT. I'm using the orginal b2, which is the largest collection of worst practices on the net. I have yet to look at it in any detail, but there is still an issue as pointed out in the blog.
Distributing blacklists still has the problem that is is subject to junk being added to it, but this time from an infinite number of locations rather than at a single source.
Ideally, borrowing some concepts from BIND, you could setup a distributed black network for any arbitrary list (eg. email spam, blog spam, bad servers, bad ip's, bad words, etc) that works between trusted servers. If there were enough trusted servers, people download a copy of the list from a local server. Then it would just be a matter of resyncing the lists between the servers at some defined interval.
The only other solution that has been mentioned here that has any real benefit is pre registration of users. If you guys really want annonymous posts, then no matter what you do, your asking for trouble. That's why mail relays and annoymous ftp servers are bad now, because the whole point of them is you have no idea who is giving you the data, good or bad.
Pre-registration and authentication seems to me that it would cut out something like 90% of any spam you are likely to get providing you make the registration process difficult enough that scripts like snoopy cant just create users on the fly to circumvent it.
Posted by: mrsmiley from realityedge.com.au Dec 15th, 2004 @ 2:47 PM MST
So what then? What about this idea?
Since everyone's main concern is 'popular' software, (including the spammer-script author who wouldn't want to write a script for single-use) why not just setup a internet-wide registration, kind of like 'yahoo groups' or that one message board (cant remember it's name) did. You register ONCE for the 'blogging system', then, when you come across a blog that utilizes this system, you're cookied in, or you have to login/pass with your system-wide login/pass. This could be done on 3rd party (vendor) SSL popup w/ api's back&forth if password security is a concern. Basically, then, if someone is reported enough times for spamming, they get added to the blacklist (any form of blacklist will do, to be debated later) and then their posts can be 'hidden', and they can be prevented from posting AT THE DISCRETION of the blog maintainer. how's that for power to the people? You could even setup thresholds (# or reports from ACTUAL blog maintainers), and rate the blog maintainers by some other metric so as to prevent a malicious user from signing up for a blog & trying to blacklists everyone who posts on their blog.
anyway... a game of monopoly anyone?
~synace~ http://www.synace.com
Posted by: synace Dec 15th, 2004 @ 12:10 PM MST
He even went so far as to suggest a method for dealing with spammers that register with the system. I like this idea best.
Anyway, in the short term, I still have the turing working on part of the site (as it turns out, there are multiple ave's for entering comments) and I may still try a bit of inline filtering using the code (or my version of it) provided by one of the commenters. Kind of a 'bad word' list approach.
| <? if ( 'sunny@moonlightshadow.us' == $email || preg_match('/poker|casino|loans|gambling/i', $url) || preg_match('/phentermine|consolidation|play-texas/i', $url) || preg_match('/debt consolidation/i', $author) || preg_match('/viagra/i', $comment) || preg_match('/ownthis\.com/i', $url) || preg_match('/texas-hold/i', $url)   { die( __('I do not accept comments from you. Buzz off.') ); } ?> |
My "die" comment will most likely be a little more diplomatic than this.
Anyway, a single blog comment registration system would be awesome in my opinion. I think it's worth a try. But oh well. I may end up just taking the site off the air for a bit while I clean all these foul birds from out of the trees.
15.12.04
I think the reason I haven't done it sooner is because the b2 code is so bloody messy. It's the most convoluted broken bowl of logic I've ever seen. There is logic in it and it does work, but understanding it is allways a bit tough.
OTOH, one of the major sites I'm responsible for at work has some of the same issues. I've been able to clean it up and even create a template for the administration portion of the site. I've come a long ways towards understanding what's going on with it. Now if I could do it with that site, why would I not be able to do the same with b2?
Oh well, time to get to the spaghetti bowl...
14.11.04
Well, there are a number of interesting things here.
- NASIOC got /.'ed with out ever having a post on /.!
- This episode has shown that the fabric of cultures on the internet are more tightly woven then we may have been used to thinking.
- There are so many links in and out that a search for 'panache' and 'wrx' at Google lands this thread at the top of the list.
This is the effect and power of Social Software. Anyway, even after 13 days, the site still seems to be getting pounded. Either that or it was allways slow. But one way or another, I'm now very curious as to how well their systems as a whole scaled.
