You're invited to play: Guitar Designer Tool

trilby said:
Awesome website, Suzanne; definitely kicks the pants of Kisaeke.

Wow high praise :hello2: and thanks!

Now I will definitely look into this. Scalability is going to be really important if we want to add lots of body shapes. I am not a super nerd and some of that image stuff may get beyond me, but I would definitely hit you up for some help if it means we get a better solution, indeed.

I'm launching my big client thru the night tonight so might have time Friday to take a look. Thanks for the FYI on this.
 
Cagey said:
So... what do you store your database(s) in? Plastic bags? Attic space? Or, would they be files?
An RDBMS like MySql etc. And of course I know that behind that is files, but not files I need to worry about padding out for future expansion (or in fact files I should ever touch at all).
 
Ok. We're probably coming from different angles. I'm used to assembly and C, and you're talking about higher-level languages where a great deal of detail is taken care of for you. But, the same principles apply. You have to plan for the future or you risk some serious re-factoring down the road. So, when you create a structure or record or whatever your system calls it, you add in variables you aren't going to use so you can simply rename them later if you need to store some data you didn't think of during the design phase.

For instance, something as simple as mailing addresses can require additional fields because of variations in how countries handle things, but you may not know what those fields are. So, you create a street number, street name, [name2], [name3], city [city2], State [county], etc. where the names I've bracketed are simply fields you don't plan on using, but the structure is there in case you do. That way, file space is allocated and if you do end up using those fields, you don't have to rebuild your database to start using them.

If you do start using them, you'll have some records with those spaces blank. But, you can always fill them in later. But, if the space isn't there to start with, you're screwed. You have to rewrite the code and rebuild the database, which can be a nightmare in some applications.
 
I like this program!

Here's my NEXT Warmoth build...just a "Star" design!  :D  :party07:

http://guitarsparks.com/minnocky-body-in-dragon-burst-finish/?bodytype=minnocky&hdstkorientation=left&finish=dragon-burst&hand=right&binding=none&overlaytype=burst&overlayclr=&contour=TRUE&fholeposflag=105px,665px&fhole2posflag=250px,665px&hdstk=jackson&hdstkrev=TRUE&neck=match&tnrclr=black&frbd=ebony-black&inlay=stars&inlayclr=pearl&fretbind=white&frets=silver&nut=white&pgstyle=none&pggroup=&cplateposflag=,&cplate=none&pupclrflag=same&apupclrflag=black&npupclrflag=black&mpupclrflag=black&bpupclrflag=black&npup=humbucker&npupring=black&mpup=single-coil&bpup=humbucker&bpupring=black&pupclrctrl=same&apupclr=black&brgflag=tremolo&brgtype=tremolo&brg=floyd-rose&brgclr=black&knobtype=flat-top&knobclr=black&vol1posflag=270px,712px&vol2posflag=277px,702px&vol3posflag=255px,590px&tone1posflag=288px,741px&tone2posflag=286px,745px&tone3posflag=260px,765px&vol1=TRUE&tone1=TRUE&tog1posflag=268px,692px&tog2posflag=,&tog3posflag=,&togtrimposflag=283px,545px&fivewayposflag=,&tog1=TRUE&fivewayangle=35&switchclr=black&togtrim=none&switchtipclr=black&bit=TRUE&yourname=Dan+Oldham&configname=Dragon+Slime
 
Cagey said:
Ok. We're probably coming from different angles. I'm used to assembly and C, and you're talking about higher-level languages where a great deal of detail is taken care of for you. But, the same principles apply. You have to plan for the future or you risk some serious re-factoring down the road. So, when you create a structure or record or whatever your system calls it, you add in variables you aren't going to use so you can simply rename them later if you need to store some data you didn't think of during the design phase.

For instance, something as simple as mailing addresses can require additional fields because of variations in how countries handle things, but you may not know what those fields are. So, you create a street number, street name, [name2], [name3], city [city2], State [county], etc. where the names I've bracketed are simply fields you don't plan on using, but the structure is there in case you do. That way, file space is allocated and if you do end up using those fields, you don't have to rebuild your database to start using them.

If you do start using them, you'll have some records with those spaces blank. But, you can always fill them in later. But, if the space isn't there to start with, you're screwed. You have to rewrite the code and rebuild the database, which can be a nightmare in some applications.

I see what you mean. I actually started in assembler and C when I first started coding properly about 20 years ago. But by the time I left school, it was already incredibly rare to see assembly being written, and C was on its way out too.

Now that our machines are so insanely powerful compared to those we had back then, we never, ever need to worry about these problems. Or we sometimes do, but only when we're doing something incredibly specialised. For instance at my last job the platform I was working on was written in C#, but I spent a few weeks making a new memory manager for a particularly performance-intensive area of the code because the built-in .NET one was causing delays. These were sub-millisecond delays but the performance impact was unacceptable in that context.

However, on a guitar design web site, forget it. Need to add a column months into the project when it's already gone live? Just add it. The RDBMS will take care of everything. If I was creating a structure in the code to represent a piece of data in the database, I wouldn't add spare fields to save that space, because when I was committing the structure to the database I wouldn't be doing it as a single binary chunk of data. I'd be taking the fields of that structure and storing them in separate columns in the db table. So, when I need a new field, I'd add it to the structure, add the column to the database table, and then add the handling to the saving and loading code. And in fact, increasingly, I wouldn't even have to do that, because I'd be using an ORM framework that took care of it for me. I tell it there's a new field, and both the application code and the database are magically updated. And I just start using the new field.

Of course, you might think this make things too easy. But it doesn't, it just means that boring stuff doesn't take up our time, and now we spend that time doing much harder stuff. Well, not objectively harder to code, but harder to get your head round. International database replication, horizontal scaleability and mult thread/process/centre architecture. To be quite honest, these types of problems massively less interesting. I would much rather be adding reserved columns in a struct and passing it around in pure binary format. That's real coding. What I do these days is gluing together code that vendors already wrote. Boring, but you don't half get shite done.

ANYWAY...

I like geetars.
 
Assembly and C aren't nearly as deprecated as the tool vendors would have you believe. Every time one of the trade rags does a survey, it's always surprising how many people still use those languages. But, the vendors are far more interested in selling you today's (by their metrics) solution, so it's in their best interest to convince you that what you're used to using is ancient crap that only a bag lady would use.

But, it is true that they're time-consuming, so they're only used when performance is paramount. In most cases, it's not, such as the guitar design site we're talking about. However, if you're doing real-time systems, then things change. You don't have time for latency - you don't even want to have to measure it. When things have to happen RFN, they have to happen RFN. Control systems are a prime example. Also, if you can write some hyper-efficient code, you can use less processor/memory to get acceptable performance, which reduces unit cost. When you're building automotive control systems or game machines, you have a huge market and a 10 cent cost savings makes a difference because a million of anything is a lot.

But, it's also true that today's computers are "insanely powerful", as you say. So, you can get away with a lot of things you never could have before.
 
The other thing is, of course, you go where the money is, to some extent. I did Visual Basic for a few years because there were just so many high-paying jobs using it.

If I wanted to go do assembler now, I'd probably have to take about a 60% pay cut.
 
Really? I've been out of the market for a while, but while I was in, the guys who could do assembly or C could almost name their price. Hell, I was making over six figures, and that's wasn't in California, it was the business vacuum that is Metro Detroit. Just about anybody with two neurons to rub together can write in VB, so I can't imagine anyone paying that much for the skill. I knew a guy a few years ago who was a VB "expert" and he couldn't find a job to save his ass, or at least not one that paid much more than $30K or so. But, demand is what it is, and between that and supply we get the price.

You know what's really bizarre is what COBOL and RPG writers can get now. I know a guy out in the New England area who's in such high demand it's ridiculous. He could work 100 hours a day if it were possible, and he'd still need help. But, while those are essentially dead languages, there's still an incredibly huge installed base of the stuff out there that has to be maintained. Guys that can do that are making money hand over fist.
 
COBOL was my original language but you won't find me going back to that! Blah. Ok the weekend is here. Where to focus???
 
I work in London and I have no trouble charging around $900/day (depending on the exchange rate - there was a time when I guess it would have equated to over $1200) for C#/SQL coding. And I did that with VB too. I am working for investment banks usually (boo hiss). There is a lot of VB code out there running trading systems and stuff.

Back in those days I had to interview VB "experts" quite a lot, and it turned out none of them really were. They knew how to do the stuff VB was originally designed for - getting a simple app up and running. The things they all fell down on were, how do you frig VB in such a way as to make it do the lower-level stuff it hides so well from the average developer. There was a question we used to ask and people used to talk around the answer for ages, whereas someone who really knew what we were getting at could have simply said "minus four" and we'd know they were a "proper" VB expert. We were pushing the boundaries of VB quite a bit, and really, to understand what we were doing with it, you needed to be quite a good C developer too.

There's been talk of VB becoming the "new COBOL" in terms of it being a disappearing skill, with millions of lines of code still out there in need of maintenance. In fact I had to do a little of it at my last job and it was just so depressing. You'd need to be upping my rate by about 50%, I think, to get me to do a 100% VB job now.

Assembly is something I literally never hear about. C is very rare. There's a lot of C++ work around though, as it has the reputation of being the go-to language when you need to be in total command for performance reasons. But unless you're talking about games, or specialised hardware like phones etc, that's not how performance is achieved any more. The relative prices of hardware and brainpower mean that paying someone to write, test and maintain that level of code is much more expensive than writing high-level code in such a way that you can just run it on 10 CPUs simultaneously and get 10x the performance out of it.
 
Suzanne said:
COBOL was my original language but you won't find me going back to that! Blah. Ok the weekend is here. Where to focus???
Original shape Strat pickguard please!

And... maybe do some research, see if there's an image library you can use on the server side, to allow you to build an image from metadata, by, say, taking your raw swamp ash body image and a mask, and then applying a red colour in multiply mode over that. And then maybe a black burst over that again. It would need tuning for each colour - like the user selects "swamp ash" and "trans red", and your config data says that when the wood is swamp ash, trans red is achieved by applying RGB(200,0,0) in Multiply mode at 0.6 opacity (or whatever). So then you use that data to dynamically create the image on the server side and return it down the stream with the right MIME type.

Instead of lots of images, you'd have lots of config data. But it would make adding a new colour really much easier. (Not sure if you'd actually need separate data for each wood type and finish - maybe just for the finish would be OK and applying it to each wood type would be OK).

Does that eveb make sense? I'm in a rush and not sure if I've explained what I mean very well.
 
Yes I know exactly what you're talking about and the reason I never looked into this in the first place is because I didn't think there were engines like this that could actually apply the color in "modes" as you say, like "Multiply". To achieve some of these finishes, and to make the wood grain "pop" as it should, through a dye or other stain, you have to use those sophisticated blending modes. You can't just use opacity. So yes, I'll look into that right after I make your strat pickguard and maybe the Jazzmaster Preston wanted :)

I agree, what you're suggesting IS the way to go - it's just new territory for me, the graphics engines and I kinda hate new territory when you're looking to build something that a lot of people wanna use ;) Nevertheless, there may be a lot of wisdom sitting out here to help so I'm game.
 
Okay awesome! The HTML 5 canvas API looks like the way to go because who isn't going to want to save the resulting image after they create their dream guitar???

The only downside, if you can really call it that, is that it will require a good browser and by that I mean NOT anything made by Microsoft ;)
 
QUESTION About Pickguards...

In addition do the standard pickguards available for each body style, do you like to see/ have available these other styles, even if they aren't mass produced?

QUESTION About Display

Currently the guitar is displayed vertically. Do you like that or would you prefer a horizontal display? Consider that bass guitars will required a taller area which, on small screens may not fit your viewing area. Scrolling sucks, but you may have to scroll either way.
 
And how bout that... a guitar body completely generated with javascript on an HTML 5 canvas  :cool01:
 

Attachments

  • canvasgen.jpg
    24 KB · Views: 256
Okay holy amazing batman... you can actually do Photoshop-style blending with JavaScript. But this requires more feedback from you guys. Blending tools like this essentially allow you to choose any color you want and blend it any way you want over the wood you choose. AWESOME! You say... but obviously the reality here is that you're going to create something that cannot be reproduced with real wood and real paint.

QUESTION: Do you want a tool that lets you create insane color combinations that may not be possible in real life?

You can play around with it here: http://guitarsparks.com/blend/
 

Attachments

  • blend.jpg
    33 KB · Views: 254
Back
Top