MySQL: Building User Interfaces 266
MySQL: Building User Interfaces | |
author | Matthew Stucky |
pages | 632 |
publisher | New Riders |
rating | 4/10 |
reviewer | Craig Maloney |
ISBN | 073571049X |
summary | MySQL and GTK+ are used to create cross-platform applications, with copious code listings. |
What's in the book?
The first chapter guides the reader through the basics of MySQL and how it compares to Access 2000 and SQL Server 97. Next, a code listing demonstrates the basics of connecting to MySQL via C using the MySQL C API. the book gives an all-too-brief whirlwind tour to the basics of MySQL. The next four chapters are a tutorial on how to use GTK+ and GLADE, focusing on how these toolkits are similar and different from their Visual Basic counterparts. GTK+ was chosen in this book because of its cross-platform compatibility with both Windows and Linux / UNIX operating environments. The second part of the book takes what was learned about MySQL and GTK+ with GLADE and uses it to create a stand-alone application (a real-world order-entry application).What's Good?
Throughout MySQL: Building User Interfaces, Stuckey describes exactly what he is doing and why he is doing it that way. The introduction to GTK+ in the first part of the book describes just about every GTK+ widget available (menus, buttons, sliders, status bars, etc.), and creates a monster busy-box application (not to be confused with the busy-box application by Bruce Perens) demonstrating those widgets by themselves. Later in the book Stuckey uses Glade to put applications together, but not using Glade early on gives the reader a chance to see what is happening under Glade's abstraction. During the building of the order-entry application, Stuckey explains the design decisions behind the widgets. Each window of the application is introduced first with a diagram describing where the widgets will be followed by the code for each widget. The design looks like a Visual Basic application designed by a a programmer, with an eye toward the functional rather than the aesthetics of user interface design, but as an introduction to GTK+ programming it works well.What's Bad?
If there was ever a book that required a CD-ROM to accompany it, this book gets my nomination. Authors have to walk a fine line between presenting code snippets that don't make sense by themselves, or risk boring readers with page after page of code that might confuse readers who aren't yet ready to view full code listings. MySQL: Building User Interfaces chose to include the full code listing for everything. This is both a blessing and a curse: readers have the code right in front of them and don't have to worry about being in front of a computer while reading the book, but the flow of the book is interrupted every time something is introduced.The descriptions also suffer, because those code listings are expected to explain in more detail what is going on. In the GTK+ introduction, widgets are introduced with short paragraph introductions. The real-world application, which should be the focus of the book, reads like an assembly line: A screen is introduced, the widgets are placed, and the code is listed. Worse, files which make little sense without a computer (such as files generated by glade) are presented along with the code listings. This makes reading this book a chore. Thankfully, there is an FTP site with the code ready to use, but future versions of this book would be best served to include it on disc.
Perhaps a balance can be struck in a future edition where important code concepts are highlighted without sacrificing seeing the code in a meaningful context.
So, what's in it for me?
Windows programmers who need a hand in getting their applications to Linux or UNIX may find this book helpful (but overwhelming) as they learn. This book stands out as a bridge for Windows programmers to make their transition to Linux and UNIX smoother, but the emphasis and amount of code listings in this book may make Windows programmers choose a different route.
You can purchase MySQL: Building User Interfaces from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Try SQLite (Score:5, Informative)
MS Access has the advantage (on Windows machines anyway) of being a stand-alone database without needing a service to be installed. For a app where you don't want to have to install MySQL server and have it waste resources, you might consider SQLite [sqlite.org]. Unlike MySQL embedded, it's release under the public domain. MySQL Embedded is licensed under the GPL and has the following requirement [mysql.com]:
Although, depending on what you want to do with the software, this may not be a problem. I'm all for free and open source software, but a brother's gotta eat too.
Re:Try SQLite (Score:2, Interesting)
Re:Try SQLite (Score:4, Informative)
MySQL is a service that runs seperately from the application and must be started and stopped seperately. In most cases, the service is started at boot time and runs all the time, wasting resources unless you manually stop it.
Re:Try SQLite (Score:5, Funny)
right. think "daemon".
microsoft just uses the word "service" because sco owns the word "daemon".
Re:Try SQLite (Score:2, Informative)
Re:Try SQLite (Score:3, Informative)
Re:Try SQLite (Score:2)
Good point. I'll elaborate in case someone doesn't get the point -- under UNIX (or Linux) there's essentially zero system cost to having a server running if it's not active -- it just gets swapped to disk by the OS' virtual memory system, and doesn't take
Re:Try SQLite (Score:3, Informative)
You're incorrect that this memory will get swapped to disk, since that will only happen if memory becomes low.
The problem with this is that Linux (as do many OS's) has a system of buffers and caches which use unallocated memory to speed up the OS. Having a bunch of memory allocated (but not enough to swap them out to disk) lowers the number of buffers and caches available to the OS, th
Not quite (Score:2)
But if you're still worried about it, an extra 256MB is hovering around $30 on Pricewatch.com. Hmmm... $30 and never having to worry about it or any other inactive daemons on my system again or...
I don't know about you, but my time is worth more than that.
Re:Try SQLite (Score:2)
Now, all of those things take only a fraction of a microsecond to accomplish, but it's still "wasted" if you're not using it.
Re:Try SQLite (Score:3, Insightful)
Re:Try SQLite (Score:3, Insightful)
MySQL on the other hand (which may consist of multiple binary files) has to run a daemon (i.e., server) to be accessed. Your application uses the MySQL driver to talk to the MySQL daemon, either through TCP/IP or a local socket.
This is why MySQL will *never* be a replacement for Access, despite what I often see on slashdot. You can fit a small Access database on a floppy. C
Re:Try SQLite (Score:2, Insightful)
That's true -- it would be more accurate to describe DBM as a replacment for Access, and MySQL or PostgreSQL as a replacement for SQL Server.
Re:Try SQLite (Score:2)
Often I've seen Linux users suggest using PHP + MySQL as a drop-in replacment to Access. That is really way off base.
Does DBM have a GTK/Qt interface, or is it only through a Perl CGI?
Access' main advantage is that the interface can run as a standalone app.
Both are replacements for MS SQL Server (Score:4, Insightful)
Also, if you need advanced XML querying tools for your database, none of the open source RDBMSs can currently act as a reasonable drop-in replacement for MS SQL Server.
If you don't need any of those features (and especially haven't actually used any of them in existing code), then MySQL could be added to the list of open source RDBMSs that fit the requirements for your project.
Re:Both are replacements for MS SQL Server (Score:3, Insightful)
I have to agree here. I was using MSSQL the other day and was able to open an XML document inside a stored proc and query it like it was a table. All I could say was "Damn, that's pretty cool!"
I had been using the FOR XML EXPLICIT quite a bit for output, but didn't (until recently) need to read XML back into the database.
Re:Both are replacements for MS SQL Server (Score:5, Interesting)
Re:Both are replacements for MS SQL Server (Score:4, Interesting)
Which doesn't even cover the fact that if you are being hosted by an ISP, using their copy of MySQL, and you type in:
CREATE TABLE foo (
) type=innodb;
and they are either (a) running an older version of MySQL or (b) disabling support for InnoDB tables because of their noticeably higher overhead than MyISAM (yes, both cases happen quite regularly), you will be none the wiser.
MySQL will not issue a warning, error, or valentine's day card for your troubles. So here you are, happily SQLing away without a care because you have InnoDB tables until you notice some strange data...because...you aren't running InnoDB tables after all.
Be honest, how often do you run the following?
SHOW CREATE TABLE foo;
Everytime you create a table? No?
How about the next statement? Here we attempt to give some users on Slashdot 10% more of a clue.
UPDATE slashdot_users SET (clue = (clue * 1.1)) WHERE preferred_db = 'MySQL';
and (oops!) something went wrong halfway through for some reason. Maybe someone killed the process. Maybe someone kicked a cord. Maybe you ran out of memory on the box and the process crashed. The world is an imperfect place. Back to work though: how many Slashdot users had their clues upped? If they were updating a MyISAM table that "didn't need transactions," we have no idea.
Transactions aren't just BEGIN and END statements. They aren't just commit() and rollback() functions. They are intrinsic to a valid datastore. They are the Atomicity in ACID. That UPDATE statement was a transaction in all contexts used to describe databases.
MySQL and transactions are like assembly language and for-loops. They can be made to go together, but they were not originally designed for such a task. In assembly, it's a set of well-placed jump (goto) statements. In MySQL, it's a set of table=innodb flags. Some people do it the hard way for no good reason even when easier, less error prone methods exist. For the rest of us, we use a higher-level language or -- in this case -- a higher-level database. If and only if we see a need to optimize do we drop down to assembly (MySQL). You don't start with assembly and then try to find rationales for a higher-level language.
Re:Both are replacements for MS SQL Server (Score:4, Funny)
That browser can do everything!
Re:Both are replacements for MS SQL Server (Score:2, Interesting)
MySQL doesn't have sequences (Score:2)
Sending a NULL to an AUTO_INCREMENT field is not the same as an SQL sequence.
Can you skip numbers easily in MySQL (eg. tell the DB to continue from some arbitrary number next)? Can you put explicit values into the column without the AUTO_INCREMENT overriding you silently? (My favorite part: MySQL changing the values you enter without even telling you.) Can you tell a MySQL sequence to have a maximum value lower than the maximum valu
Re:Try SQLite (Score:2, Interesting)
I like MySQL because it _is_ a server -- You can create any application in (almost) any language on any platform (think php) to interface with a MySQL database. Try telling me that you can do that with access.
And you _can_ also fit a SQL db on a floppy.
To sum:
-You cant fit M$ Access on a floppy, but you can a db.
-You cant fit MySQL on a floppy, but you can a db
Re:Try SQLite (Score:2)
In a word, yes.
Re:Try SQLite (Score:2)
Your app only remains proprietary until you decide to distribute it. If you distribute an app that uses MySQL APIs, either (1) you have to GPL your app or (2) you have to pay MySQL if you don't want to GPL your app. It doesn't matter if your app is to be BSD-licensed, closed-source, or whatever...if it's not GPL'd, you have to pay MySQL if you distribute yo
Re:Try SQLite (Score:4, Informative)
So long as you link it correctly, you do not need to release the source code to your application: no matter how confusing the licencing on the MySQL website is...
Re:Try SQLite (Score:2, Informative)
I am in complete agreement.
I write small DB apps for small businesses. My clients all have MS Access installed. I would love to be able to use all open-source tools to develop these apps, but so far nobody can show me something that's as simple for my computer-illiterate clients to install as "Here, copy this .mdb file to your hard drive and double-click on it". Installing one more piece of software wouldn't be hard either, but if I have to say "Here, install
Re: (Score:2)
Re:Try SQLite (Score:2)
Although, a better way to deploy an application in Access is two mdb's. One containing the backend table structure & data, and one containing the front end GUI. That way, when you want to implement new features in the GUI, you don't have to screw with the data. Simply delete the prev version front end, ad drop in the new one. Via code, this can be automatic & seamless t
Re:Try SQLite (Score:2)
On the other hand, my current fieldwork database (at the point we were switching from access to mysql) was a 50mb Access file, but a 200kb mysql dumpfile.
I could refresh remote copies of the mysql version over a 56k dialup (or by floppy) no problem, but duplicating the access db (don't even talk to me about 'sync' - I lost count of how many rollbacks to backup I had to do after using sync. one of t
Re:Try SQLite (Score:2)
You are talking about two different things. How large would the Access mdb be if it were only the table structure and data? Your 50mb Access file presumably contained all the front end junk as well. Which can be quite large. Especially if you don't Compact once in a while.
Re:Try SQLite (Score:3, Interesting)
Re:Try SQLite (Score:2)
It's all a matter of perspective. To a programmer, Access is the means of a cheap no-frills datasource that can be served as a service on the internet or an intranet. So in that sense, MS Access is already being replaced in that area. And to some extent, even SQL Server 2000 is starting to be replaced by MySql in some instances. And no, I'm not just trolling. And yes, I do realize that SQL Server is still much
Re:Try SQLite (Score:4, Insightful)
Well obviously, I too can do a text export of Access and gzip it as well! But that doesn't, uh, help the situation.
And an Access database in an MDB file is hardly standalone, you still need a machine running Access to get much use out of it.
Wrong. You don't need Access to create/update/use an Access database. The functionality it built into Windows (actually part of a bigger module called Jet).
Re:Try SQLite (Score:2)
Actually let me expound on this a bit further... you can write a VBScript in your favorite text editor to do SQL operations on an Access database... just use an ADO object...
Re:Try SQLite (Score:4, Informative)
Wikipedia has a more thorough discussion here (for SQL) [wikipedia.org] and here (databases in general but quite a read) [wikipedia.org]
Re:Try SQLite (Score:4, Informative)
Re:Try SQLite (Score:2, Interesting)
Re:Try SQLite (Score:2, Insightful)
> I suppose the app could easily be written to start the server when it starts and shut the server down when it ends
True, but besides being sort of hokey, the requirement of having MySQL installed might not be ideal if your target audience isn't savvy enough to install it, or perhaps don't want extra, normally unnecessary, stuff on their computer. I guess it all depends on your needs and target audience.
Re:Try SQLite (Score:2)
I've been thinking of trying that with FireBird [firebirdsql.org].
= 9J =
Locking Problem (Score:4, Interesting)
Too bad- because MySQL really does not replace Access but neither does this- unless it will only run internally to one user.
Re:Locking Problem (Score:3, Insightful)
I don't see this as a problem, because at least I see SQLite as more of a portable pre-packaged data structure, rather than a traditional multi-user database. I haven't had a chance to use it yet myself, but I look forward to using it in stand-along applications where I need good data structure and the ability to filter and search for specific data. I'm a fair hand with MySQL, so
Re:Locking Problem (Score:2)
So I'm not really responding so much to the book review as to the parent post. that's all.
Re:Locking Problem (Score:3, Interesting)
Now the one thing that is bad with access is that if a user drops their connection in the middle of something it has a tendency to blow up. If you have a lot of people using an Access file over a network- you are going to need to compact & repair every so often. But I've seen stuff go strong for a while with 30-70 users hitting the same
Re:Try SQLite (Score:5, Funny)
Hope you like Indian food!
Coleman
Re:Try SQLite (Score:2, Informative)
Along those lines, you shouldn't be coding directly to MS Access anyway. Writing your stuff to an ODBC datasource is a much better
Re:Try SQLite (Score:2)
And as a side note, if you're doing any sort of development in Access, your database shouldn't even be in the Access file. You're much better off using a real database, like MS SQL or MySQL/etc. to handle the data storage, and link to that through ODBC or ADO (I prefer ADO, but whatever.) Also, your program's logic (especially when it's complex)
Re:Try SQLite (Score:2)
As MySQL doesn't support stored procedures, these statements are incompatible. But then you knew that didn't you, you cheeky bastard.
more sellers (Score:4, Informative)
amazon link [amazon.com]
isbn.nu link [isbn.nu]
half.com link [ebay.com]
No affiliate tags are used above. But here's the amazon link [amazon.com] with my tag, if you feel generous.
My opinion (Score:2, Informative)
MySQL Feature Set (Score:4, Insightful)
Re:MySQL Feature Set (Score:3, Informative)
Um... there are 2 gotchas there... (Score:2, Funny)
It's not about being a postgres fanboy/troll.. reality is that MySQL DOES NOT have features comparable to Oracle/PostgreSQL/SQL Server. When are you going to understand this??
As a DBD (db developer) I CAN'T use MySQL - it's feature set is too WEAK. MySQL is starting to get some of these features now and good for them but the argument was always about the feature set.. fuck some of you are dimwits...
And yes I've just fed a troll but fuck it, now im all pissed off and want
I'd like to run postgres on windows... (Score:2)
postgresql syntax conventions? LOL (Score:3, Informative)
And that's comparable?
If you want to read something amazing, go ahead and read the MySQL manuals, look for design deficiencies: http://www.mysql.com/documentation/mysql/bychapte
You'll see more than just minor syntax issues - you'll see that mysql spends most of its time in silent error mode.
Make sure you use MySQL version = 4.0 (Score:5, Informative)
Still, I love MySQL. Postgres is more full featured, but for the smallish web-based applications I write, it's overkill.
Re:Make sure you use MySQL version = 4.0 (Score:3, Insightful)
Almost right (Score:2, Informative)
So there still isn't a production-quality MySQL server.
A lesson to an errant moderator (Score:2)
An example of MySQL suckage [slashdot.org]
Production quality doesn't just mean "doesn't crash." Production quality for a DB means "keeps my data safe."
Once again, there still isn't a production-quality MySQL server.
Re:Make sure you use MySQL version = 4.0 (Score:5, Insightful)
Example? Okay, whip out your MySQL client and type with me...
CREATE TABLE test (
id INT NOT NULL AUTO_INCREMENT PRIMARY_KEY,
num1 INT,
num2 INT NOT NULL,
num3 INT
price NUMERIC(4,2),
code VARCHAR(8),
);
INSERT INTO test VALUES (
0,
99999999999999,
NULL,
'A quick brown dolphin...',
21474.83,
'ABCDEFGHIJK'
);
"Query OK, 1 row affected"
Seems to me that the data was a collection of square pegs to round holes, but MySQL never even dropped a warning.
So let's check out that table again:
SELECT * FROM test;
1 row with the following is returned.
id: 1
num1: 2147483647
num2: 0
num3: 0
price: 999.99
code: ABCDEFGH
Now stop. Take another look at the table definition. Take another look at the inserted data. Take another look at the output. Take another look at what has been stored in your database. Let's sum up: your primary key (your lookup key!) is not what you expected, the numbers are all different from what you entered, the price does not conform to your data schema (should be a maximum of 99.99), and your character string has been truncated...ALL WITHOUT AN ERROR OR WARNING.
More examples at MySQL Gotchas [sql-info.de]. All of this in MySQL v4.0 and above. None of this crap happens in Firebird 1.5, PostgreSQL 7.x, or any popular closed source relational database.
And yes, there's a PostgreSQL Gotchas page [sql-info.de]. Tables are lowercase by default, and it requires the "AS" keyword for column aliases. Look at that list for PostgreSQL. Look at that above example. Can someone say with a straight face that these lists are comparable? Can someone say with a straight face that they want to explain to the computer-phobe why they got 2147483647 in their data? Can someone say with a straight face to their boss that these errors are acceptable in a production environment?
I am in awe (Score:3, Insightful)
INSERT INTO test
(id, num1, num2, num3, price, code)
VALUES (
0,
99999999999999,
NULL,
'A quick brown dolphin...',
21474.83,
'ABCDEFGHIJK'
);
Now the syntax should be kosher.
And I applaud you for
I'd give it at least an 8 (Score:2, Interesting)
Interesting Book (Score:5, Insightful)
I know, it's not an original idea, but it's interesting because the book was a nice, step by step guide to doing just this. For what it's worth, I enjoyed it.
On the other hand, I ended up spending time with XUL instead.
Re:Interesting Book (Score:2, Insightful)
Re:Interesting Book (Score:2)
If your app has a ton of content that is read-only(ie. a reporting app of some sort) and only a few people doing the updating then it makes sense to have a fat client for data entry and a web interface for everyone else.
Re:Interesting Book (Score:2)
Re:Interesting Book (Score:2)
Kexi is also worth checking out. (Score:4, Informative)
Re:Kexi is also worth checking out. (Score:2)
Thats a little harsh of course... I am sure it will be available eventually (the screenshots look very promising) but at this stage it is only an interesting sidenote.
Rekall (Score:3, Interesting)
They got shafted by TheKompany and need some help so download it a send a few bucks their way if you like it. Runs on Linux and Windows.
Silly comment (Score:3, Insightful)
Since when do people read computer books on the throne? I would think anybody who's interested in this book (yes, you two hiding at the back!) would be reading it in front of a computer, trying out the sample code to learn what's going on.
Re:Silly comment (Score:2)
Since the last time I went to the throne? I also read them in the park, while in waiting rooms of various kinds and in bed.
Sometimes it's ok just to think about the content.
KFG
Re:Silly comment (Score:2)
Who doesnt?
I read this book (Score:3, Informative)
never worked with mySQL before. I got this book and was
able to complete a full fledged demo in a matter of three
days, working part time. The book is very well organized,
easy to read and understand and best of all the examples
work without modifications. I highly recommend this book
for beginners. I would have done so for all levels but
I'm not an advanced user of mySQL.
If you're thinking of getting started on mySQL this is the
book.
Good book (Score:3, Funny)
Maybe someone should send Mike Rowe a copy after he gets out of Redmond-Training.
Yes but... (Score:2, Insightful)
Java + JDBC + GUI builder? (Score:2)
There are also quite a few over the over-the-shelf Java JDBC components and tools that you can buy as well in case you're building a commercial application.
To each his own I guess.
A bit easier than programming GTK directly... (Score:4, Interesting)
Prototyping an app will probably take less time if you don't have the compile/link cycle... worth a try, anyhow.
Access 2k? SQL Server 97? (Score:3, Insightful)
Re:Access 2k? SQL Server 97? (Score:3, Insightful)
Why does OSS love MySQL? (Score:4, Insightful)
Re:Why does OSS love MySQL? (Score:2)
Sometimes technically better does not win out over market hold and saturation. One could (I am sure) publish a whole book on how MySQL got entrenched over a more feature laden database.
Re:Why does OSS love MySQL? (Score:5, Insightful)
Postgres is pretty good, but still (IMHO) not yet up to the level of a commercial RDBMS. If you want a full-featured free-as-in-beer datacenter grade database, use Sybase 11.0.3.3 [sybase.com]. It doesn't come with source, but come on now, how many MySQL zealots have ever even compiled from source, let alone modified something?
Re:Why does OSS love MySQL? (Score:2)
At least for my company, the primary reason for using MySQL is the native support for Windows. These other solutions are only currently supported in Linux (Postgres supports Windows only through Cwgwin).
Re:Why does OSS love MySQL? (Score:2, Insightful)
For me, MySQL is not a deficient implementation of the Likes of Oracle, but a full-featured, modern w
One minor correction (Score:2, Informative)
Not that I'd be interested in a comparison between MySQL and SQL Server (midrange C/S replacement for Access/FoxPro - OK. Enterprise RDBMS? No)... but still.
Move? (Score:4, Insightful)
Very few Windows applications are written in 'C' these days so converting an existing application to use MySQL would be pretty painful. You should have a better reason to port your code then simply avoiding MS tools.
Perhaps the book is better suited for developers who wish to switch to Linux for future development.
I suppose this is flamebait or a troll but... (Score:3, Interesting)
MySQL seems to occupy a rather subtle and narrow niche, perhaps the 'single smallish website' niche. I can't really imagine wanting to use it when most applications are liable to grow beyond that niche.
PostgresSQL looks a lot more encouraging, feature-wise, although it doesn't seem to offer many concrete benefits over SQL Server. Still, to me, a book on migrating to PostgresSQL or another full-featured RDB would be more useful.
Re:I suppose this is flamebait or a troll but... (Score:2)
Re:I suppose this is flamebait or a troll but... (Score:2)
MySQL and Postgres are both very good database technologies (and I'm an Oracle DBA, managing 3 high-availability Oracle installations).
"MySQL seems to occupy a rather subtle and narrow niche"
The website that you posted this comment to, that offered the review of this book, runs MySQL. You know - the website with it's own effect named after it, the one that handles the load of tens of thousands of geeks while the site they reference in a front-page-story crashes and burns when
Use Access as a GUI for mySQL! (Score:5, Informative)
Thank you (Score:2)
I've used Access and/or VB to talk to a backend Oracle or SQLServer DB. Different office has needs for different views/functionality? Deploy them a different MDB, talking to the same tableset.
Open-Source Solution for Java/MySQL (Score:2)
Ease of Use (Score:2)
MS SQL vs MySQL? (Score:2)
Re:Suprised that the Review didn't mention this (Score:3, Funny)
Depends on perspective (Score:3, Insightful)
Re:windows developers (Score:4, Insightful)
I know many retarded people that would be offended by that statement.
Seriously though, making sweeping statements like that just makes it obvious that you were never good enough for the high school debating team...
Re:windows developers (Score:3, Insightful)
Re:A possible alternative - Delphi? (Score:2)
Actually calling Borland's implementation of Pascal in Delphi Pascal is a bit of a streatch IMHO. The language is now so far removed from classic pascal that apart from the bare bones there's not a lot in common.
Re:Access can be a front end to MySQL (Score:2)
So, deploy multiple front ends, all talking to the central back end DB.