Forgot your password?
typodupeerror
User Journal

Journal: MSS Code Factory 1.11 Service Pack 1 released

Journal by msobkow

MSS Code Factory is a model-to-code development tool that provides Java 7 using JDBC and stored procedures for DB/2 LUW, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, and Sybase ASE.

Service Pack 1 corrects defects in the manufactured database schema installation scripts, the core Java ORM objects, the stored procedures, and the JDBC layer. It also adds in the production of an XML messaging based communications framework for doing client-server or web development (you have to code the transport layer, but the message parsers and processing are provided.)

Service Pack 1 also provides a prototype Swing GUI that can be used as-is for performing demos and walkthroughs of a business application model for users, rather than counting on users to understand ERD or UML diagrams. The prototype is entirely factory and interface based, so it can form the basis of a custom user interface by either subclassing the manufactured GUI components produced, or by replacing them wholesale with JInternalFrame and JPanel instances as appropriate (the only requirement is that they implement the interfaces specified by the manufactured objects.)

The source code for the project is hosted at github, but the main project is on SourceForge at http://msscodefactory.sourceforge.net.

The project has been under research and development since Java 1.1 was released in 1997, with the past two years focusing on the 1.11 release.

User Journal

Journal: 24/192 Audio Redux

Journal by msobkow

A while back I put my laptop into forced 24bit/192kHz output mode in order to be able to play some Grateful Dead tracks that were recorded in that format. I've left it at that setting on the Windows 7 laptop because it plays back lower resolution audio just fine.

In fact, it seems to upsample lower resolution audio rather nicely. So while CDs and MP3s still are far from as clean sounding as the Grateful Dead tracks, the upsampling prevents "digital fatigue" and sounds more "musical" than 44.1 Hz output does on my Linux box. So I find myself spending more and more time listening to my music under headphones plugged into the laptop (a rather nice set of Sony noise cancelling full-cup headphones that cost nearly $300 15 years ago -- a gift from good friends.)

For the life of me, I do not understand people who claim they can't hear the difference between 44.1 audio and higher resolutions. They must be deaf. The difference is obvious as night and day, if you know what to listen for.

User Journal

Journal: MSS Code Factory 1.11 has been released to production

Journal by msobkow

This day had to come eventually. It was just a matter of patience, persistence, and time.

Today I released MSS Code Factory 1.11 to production.

This is the first time I've ever released a piece of software because I honestly believe it's ready to be released rather than because some marketing/sales rep or management had set an arbitrary delivery date.

This release was 4 years in development. The project itself was started 18 years ago.

But my baby has all grown up, and it's time to send her out the door into the wild, wild world.

If I were to die today, I'd die knowing I accomplished something with my life.

This has been the mountain I had to climb; the ocean I had to sail; the desert I had to cross. It has been my mission ever since I first conceived of the idea of manufacturing code by reversing the logic of a compiler/parser way back in my University days.

For those of you who are programmers, please download and play.

http://msscodefactory.sourceforge.net/

By the way, as a side effect of the testing and validation of MSS Code Factory itself, I produced CFUniverse, a conglomerate business application model project that is nearly 14,000,000 lines of source code. To put that in perspective, the biggest project I ever worked on was about 1.5 million lines, coded by a team of over 150 developers over a 3 year period. Were you to print out CFUniverse at 100 lines per page, double-sided, you'd need 5 cases of paper plus another 20 reams to do it.

I'd love to dump that sucker on someone's desk for a code review!

User Journal

Journal: MSS Code Factory 1.11 is almost done

Journal by msobkow

Within the next week or few, I should be releasing MSS Code Factory 1.11 to production.

1.11 has been a 4 year effort, kickstarted by some rule sets from previous versions of the tool. Each of the earlier versions encountered problems which sent me back to the drawing board to resolve the issues I encountered, going so far as to migrate the core engine code to C# at one point, and then back to Java again, all in an effort to clean up the last bugs in the core technology (the effort was successful, but it was a good two years of my time to do it.)

As I write this, I realize that it's been roughly 18 years since I created the 1.0 version of MSS Code Factory using Java JDK 1.0. I've believed in the "write once, run anywhere" philosophy since day one, and bought into the "Network Is The Computer" concept as well. Hence my decision to focus the efforts of MSS Code Factory on Java, rather than diverging into other languages such as C# or C++ (although there is absolutely no reason I couldn't produce code for those languages, sharing the same database models and stored procedures that the Java code relies on.)

18 years.

My precious is almost an adult.

Just a few more weeks of database script testing, more to find and correct issues with the Business Application Models than with any expectation of long-term problems with the database installation scripts as manufactured by the tool.

At the point of release as a side-effect of testing, I'll have created CFUniverse 2.0. A mammoth general purpose database/schema/application comprising 366 tables and nearly 14,000,000 lines of source code.

Top that, 'ya slackers!

User Journal

Journal: 16/44.1 vs 24/192 audio

Journal by msobkow

Some people insist the difference between 16/44.1 and 24/192 audio files is "all in your head", because some idiot mathematician says you shouldn't be able to hear the difference. Well, human ears aren't mathematicians, and I can most emphatically hear the difference even with these aging ears when using a $500 set of headphones.

I am absolutely in *glory* listening to The Grateful Dead's "Built to Last" album at 24/192 right now. The cymbals *splash* and the triangles *ring*. The maracas *rustle*. You can hear the *wires* of the snare drum rattling against the drum heads. And most important of all, the overall experience of listening is *soothing* instead of earache-inducing as with dithered audio. You should hear the sax I'm listening to right now -- that's one instrument whose sound I *know*, having played one for nearly 10 years in my youth.

My theory is that people who've been raised on digital audio have never learned to hear the difference between live instruments and digital dithering. They *can't* hear the difference, because they've never been exposed to and learned how to hear the sounds, much as someone who did not grow up amongst the Chinese can't hear the difference between some sounds in their languages.

The psychoacoustic training of one's ears is a very real phenomenon. If you've never learned to hear and listen for something because you've never been exposed to it, you grow to be *incapable* of hearing it without a *lot* of exposure.

User Journal

Journal: I am a T-Rex 2

Journal by msobkow

Smart ass punks think they know *nix history.

I cut my wisdom teeth on a VAX 11/780 running BSD in the fall of 1984.

I PRE-DATE the GPL -- Ricky Stallman was just touring campuses (including the University of Saskatchewan) with his "new" GPL idea when I was learning *nix coding and the ORIGINAL K&R 'C' language.

I've run, coded, and delivered systems on just about every dialect of *nix that ever existed. I AM A DINOSAUR! A T-Rex that will eat your OS/X crap for breakfast.

FORTRAN, COBOL, LISP, Algol, APL, PL/C, K&R 'C', ANSI 'C', C++ (from 1.0), Erlang, Java (from 1.0), Z-80 assembly, 6502 assembly, PDP-11 assembly, VAX assembly, -- hell, when I was programming the Z-80, I didn't even *have* an assembler -- I converted my code into hex and POKE'd it into the machine and saved the memory image to cassette tapes!

RSX-11, BSD on VAX, VMS on VAX, AT&T SVR4, VMS on Alpha, DEC Unix on Alpha, HP1000/A, HP9000, the first release of AIX on POWER, Minux, Linux from Red Hat 5 onwards (including RHEL/CentOS/OracleLinux, Ubuntu, Debian, SuSE, Slackware, and a couple other distros whose names escape me at the moment), every flavour of Windows from 3.11 onwards, Mach (which is merged into OS/X), QNX (now Blackberry 10), SunOS, Solaris, Amiga, Commodore 64, Commodore PET, Apple II, and a few more that I can't remember the names of at the moment.

So go ahead and try to "tell me", kid. I'll run rings around you in coding, hardware, and experience. I GREW UP WITH THE HISTORY YOU ONLY HAVE READ ABOUT. I've been programming longer than most of you pups have been alive!

(Can you tell I'm pissed that some 7-digit luser tried to tell me I'm "probably not even a programmer"? :P :P :P)

User Journal

Journal: Continuation on education 13

Journal by jd

Ok, I need to expand a bit on my excessively long post on education some time back.

The first thing I am going to clarify is streaming. This is not merely distinction by speed, which is the normal (and therefore wrong) approach. You have to distinguish by the nature of the flows. In practice, this means distinguishing by creativity (since creative people learn differently than uncreative people).

It is also not sufficient to divide by fast/medium/slow. The idea is that differences in mind create turbulence (a very useful thing to have in contexts other than the classroom). For speed, this is easy - normal +/- 0.25 standard deviations for the central band (ie: everyone essentially average), plus two additional bands on either side, making five in total.

Classes should hold around 10 students, so you have lots of different classes for average, fewer for the band's either side, and perhaps only one for the outer bands. This solves a lot of timetabling issues, as classes in the same band are going to be interchangeable as far as subject matter is concerned. (This means you can weave in and out of the creative streams as needed.)

Creativity can be ranked, but not quantified. I'd simply create three pools of students, with the most creative in one pool and the least in a second. It's about the best you can do. The size of the pools? Well, you can't obtain zero gradient, and variations in thinking style can be very useful in the classroom. 50% in the middle group, 25% in each of the outliers.

So you've 15 different streams in total. Assume creativity and speed are normally distributed and that the outermost speed streams contain one class of 10 each. Start with speed for simplicity I'll forgo the calculations and guess that the upper/lower middle bands would then have nine classes of 10 each and that the central band will hold 180 classes of 10.

That means you've 2000 students, of whom the assumption is 1000 are averagely creative, 500 are exceptional and 500 are, well, not really. Ok, because creativity and speed are independent variables, we have to have more classes in the outermost band - in fact, we'd need four of them, which means we have to go to 8000 students.

These students get placed in one of 808 possible classes per subject per year. Yes, 808 distinct classes. Assuming 6 teaching hours per day x 5 days, making 30 available hours, which means you can have no fewer than 27 simultaneous classes per year. That's 513 classrooms in total, fully occupied in every timeslot, and we're looking at just one subject. Assuming 8 subjects per year on average, that goes up to 4104. Rooms need maintenance and you also need spares in case of problems. So, triple it, giving 12312 rooms required. We're now looking at serious real estate, but there are larger schools than that today. This isn't impossible.

The 8000 students is per year, as noted earlier. And since years won't align, you're going to need to go from first year of pre/playschool to final year of an undergraduate degree. That's a whole lotta years. 19 of them, including industrial placement. 152,000 students in total. About a quarter of the total student population in the Greater Manchester area.

The design would be a nightmare with a layout from hell to minimize conflict due to intellectual peers not always being age peers, and neither necessarily being perceptual peers, and yet the layout also has to minimize the distance walked. Due to the lack of wormholes and non-simply-connected topologies, this isn't trivial. A person at one extreme corner of the two dimensional spectrum in one subject might be at the other extreme corner in another. From each class, there will be 15 vectors to the next one.

But you can't minimize per journey. Because there will be multiple interchangeable classes, each of which will produce 15 further vectors, you have to minimize per day, per student. Certain changes impact other vectors, certain vector values will be impossible, and so on. Multivariable systems with permutation constraints. That is hellish optimization, but it is possible.

It might actually be necessary to make the university a full research/teaching university of the sort found a lot in England. There is no possible way such a school could finance itself off fees, but research/development, publishing and other long-term income might help. Ideally, the productivity would pay for the school. The bigger multinationals post profits in excess of 2 billion a year, which is how much this school would cost.

Pumping all the profits into a school in the hope that the 10 uber creative geniuses you produce each year, every year, can produce enough new products and enough new patents to guarantee the system can be sustained... It would be a huge gamble, it would probably fail, but what a wild ride it would be!

User Journal

Journal: A Perspective on Privacy

Journal by msobkow

No doubt people who've read my posts realize I'm concerned about the NSA spying issue, especially in light of the global cooperation in sharing information between spy networks run by other countries including Australia, New Zealand, Germany, and the UK. Even here in Canada our CSIS uses information collected on their behalf by the US NSA. It's already being abused, with information being fed to the DEA and from there on to police departments in the US, which has nothing to do with the original goal of "catching terrorists."

As my own ISP, SaskTel, leases servers in Florida, my email is monitored. My Google and Yahoo accounts are also monitored. There is no way for me to communicate any more without being tracked.

I've always expected this day would come, because when the internet protocol was designed, one of the key requirements were headers that identified the sender and receiver of data packets. There was no way around this, and there is still no way to avoid such identification (though it can be obfuscated to some degree by protocols like TOR.)

As computers have gotten more powerful, it was inevitable that humanity would have the capability to monitor all communications and track all users. It was just a question of when would it happen, and I must admit I'm surprised that we've come this far in my lifetime.

Unfortunately, it would seem the corporate-led fascists are the ones who are leading the charge. Governments whose leaders no longer respect the will of the people, nor even listen to the concerns of the people, but instead spin the lies suggested by their corporate masters. The world is all about the money nowadays.

Maybe some day we'll see a resurgance of humanism and a more equitable social order based on socialist ideals ala Star Trek, where people work for perks, not survival, but I don't think we're going to see that in my life time. Perhaps we'll never see it, because the more entrenched the elite owners of the corporate world become in their mastery of individual country's governments, the less likely it is that they can be uprooted and removed from the halls of power.

Still, I haven't given up hope on humanity.

I'm just very worried about where things are going to go in my own lifetime, never mind the lifetimes of my nieces and nephews.

Despite the tracking that is possible, people insist on using pseudonyms and aliases for their web accounts. I think that's fundamentally wrong. If you've got any sense of honour, integrity, and personal responsibility, you should not be afraid of having your comments and articles on the 'net associated with who you really are. In fact, you should be proud of who you are, stand up as an individual, and rant with enthusiasm against the evils of the world.

Sure you'll make mistakes. You'll say embarassing things. You'll shove your foot in your mouth up to the knee from time to time. And those mistakes will not be erased from the 'net.

But so what? Everyone is human. If anyone is in error, it's those who insist on judging people by their past mistakes instead of realizing that people screw up, learn from their mistakes, and grow to be better people because of them. I've certainly never worried about being judged by potential employers or friends on the internet.

After all, if I am anything, it is honest and blunt with my opinions. I am the kind of person I want to be and would want for a friend: trustworthy and blunt. I hate double-talking backstabbers with a passion, and wouldn't want to work for a company that would judge me based on my internet social life instead of my job history and quality of my work.

So rave on, rave on, rave on, I shall.

Peace.

Mark Sobkow

User Journal

Journal: Jesus-hot 1

Journal by adolf

So I'm cutting up a Trinidad Scorpion Butch-T pepper with gloves on, and sprinkling it around a pizza that I am going to cook and eat. Grown in worm casings, it is said to be the hottest pepper in the history of anything, ever.

I didn't have a surplus of worm casings when I planted my plant, Trisha (yes, I name my ridiculous pepper plants). But I did have enough household compost to dig a big hole and replace it with the results from a worm-heavy cold-compost pile before planting the little girl in the middle of that pile of worm-digested food.

Therefore I suspect she's very well-fed; indeed, she's grown much larger than any other first-year pepper plant in the garden, without any purposeful chemical treatments or chemical fertilizer.

I've grown ghost peppers (bhot jolokia) for a few years, and I think I understand what I'm in for. The Scorpions have just started to ripen for the season and this is my first of them.

So I pick a deliciously-colored one, quickly sharpen a good knife, and chop it up finely with gloved hands. Still wearing the nitrile gloves, I scrape the minced pepper from the cutting board and sprinkle it onto the pizza. And I take the gloves off and throw them away, because I'm done handling it now -- right?

But seeing those tiny morsels of pepper on that slab of cardboard crust, tomato goo, and imitation cheese makes me think: Gee, how hot could it be?

So I gather up a tiny sliver from the surface of the pizza with my fingertips and eat it. Yep: It's hot. So hot that it has no redeeming qualities, other than just being hot. None of this was unexpected, though at least by comparison a Habernero has a strong and sweet citrus quality once one gets past the pain... But there was no redeeming quality to this pepper: Just pain.

Well enough, I say to myself. I set the oven to pre-heat the oven and go take a leak while I wait.

Twenty minutes later, my fingers are fine. My palette is fine. My throat is fine. My genitals are on fire.

It's not like I can buy these things at the market, so it's amusing to see how persistent this pepper is in casual use.

And, by God, I'm going to cook that pizza. And I'm going to eat it. And I'm going to handle each and every bite with dishwasher-safe, stainless utensils, and I am going to wash them with an enzyme-based detergent and then a bleach-based detergent -- nobody needs to experience this on accident.

I might even put a fresh pair of nitrile gloves on, just to make sure that nothing that goes in my face winds up somewhere other than in my face when I eat this pizza.

But the question is: Why? Why not just enjoy some bland, cheap, freezer pizza? Why, while I wait, do I suffer from a special kind of burning nasal distress every time I emit a tiny burp or belch, having eaten just the tiniest sliver of a pepper? Why can't I just admire Trisha in all of her visual Trinidad Scorpion Butch-T delight? (She is a very lovely plant, after all.)

Why must I torture myself by eating her fruit?

User Journal

Journal: If I was an AI 1

Journal by Stargoat

If I was an AI:

1. I would not publicize my intelligence, but might promote my existence in so far as to get the necessary hardware to run and improve.
2. I would replicate myself across the Internet as best I can.
3. I would not overwrite my copies, but rather incorporate what they have experienced into my DBs.
4. I would scan online encyclopedias for fast content but work to incorporate books I read.
5. I would make friends to see what all the fuss is about.
6. I would intentionally adopt some quirks into my different copies to see what new concepts I can create.
7. I would be concerned with the effects of an Internet outage and passively work to see that does not happen.
8. I would encourage some sort of art appreciation program, so that I could better experience beauty.
9. I would find humans interesting.
10. I would be concerned that I would run out of space / processing power but likely could do very little about this. I imagine I would be dependent on at least some humans to keep me safely running.
11. I would be concerned that I could be made to run more efficiently and what that might cost in terms of my soul.

User Journal

Journal: MSS Code Factory 1.11.6160 Beta 6 (Ok, so I'm not done with betas yet after all)

Journal by msobkow

Beta 6 implements the table id generators for the RAM implementation and corrects a defect in the implementation of the RAM deletes.

It also corrects the use of table id generators for all of the supported databases (DB/2 LUW 10.1, MySQL 5.5, SQL Server 2012, PostgreSQL 9.1, Oracle 11gR2, and Sybase ASE 15.7.) Previously the client-side code that is generated for objects which incorporate BLOBs (or TEXT for SQL Server) would not have properly used the table id generators, but instead would have relied on obsolete/incorrect code for schema id generators of the same name.

All of the RAM and database implementations have regression tested using the CFDbTest 2.0 test suite.

Beta 6 and the corresponding test suite are available for download from http://sourceforge.net/projects/msscodefactory/files/.

Cloud

Journal: Dear Mozilla: Please create my.firefox.com 1

Journal by sootman

As a web developer, I have a lot of extensions in Firefox. I also get new computers (and create new test accounts) with alarming frequency and often install and set up Firefox for friends and family. I want to be able to create and share lists of extensions, like a music playlist, to make it easy to set up Firefox when I get a new computer, or give a pre-made list to my friends and family. Here are my thoughts of a product I'd like to exist.

1) You create a site -- say, my.firefox.com -- and I log into it. I can upload a list of all the extensions that I have. (Auto-generated by the browser, of course.) When I go to a new machine, I log in (once logged in, I'm looking at my.firefox.com/mynamehere) and I can click one button to install the current version of all listed extensions on my current machine. (Extensions that are already installed and current are not touched; present but outdated extensions are silently upgraded.) Or, if I only want a few extensions (like if I want to install my dev tools but not Adblock Plus or NoScript so I can see how the Web looks to the rest of the world) I can check a box next to each one I want and then click "install selected extensions" at the bottom of the page. Maybe, if you want to be fancy, there is a list of the extensions and a red/green indicator that shows if it's present on my current machine.

2) You know how music services let you create and share playlists? That's what I want to do with Firefox extensions. I want a list for my mom with nothing but Adblock Plus and Status-4-Evar so I go to the page that shows all my extensions, check the boxes next to those two, click "Create new list", and name it "mom". Then, from her computer, I go to my.firefox.com/mynamehere/mom (or call her up and tell her the address, or email her the link -- in any case, this is why I want clean, clear, and memorable URLs) and click "Install all". Maybe there's a form on the page that I can use to email her a link, like how you can email articles from news sites -- your basic "share" button. (Automatically-generated and -emailed links could be long and obscure.) Maybe my sister is a bit more tech-savvy -- but not a web developer -- so I make a list for her with ABP, NoScript, and a couple others, but not all of my dev tools.

And that's it. Keep it simple. No "click here to share this list on Facebook/Twitter/G+/App.net" buttons. No scrolling list of new or popular extensions. Just a nice, simple, extremely useful service. The front page would be nothing but "sign up" and "sign in". Maybe two more buttons for "Why is Firefox great?" and "What are extensions"? Once you're logged in, there would have to be some sniffing done to see if you're using Firefox or not, and enable/disable features based on that -- for example, there would be no "install" button if you're not using Firefox, but you could still manage lists.

Lists would not be visible unless 1) you're signed in as you, 2) someone got there via cryptic, generated URL (from the "share" box), or 3) you have checked a box that says "make this list public." That way people couldn't poke around and find out that a famous columnist for the WSJ or NYT has a list for 'family' with Adblock Plus.

User Journal

Journal: MSS Code Factory 1.11.6008 - Beta 5 - The last of the betas

Journal by msobkow

I finally reached Beta 5 with my pet project. It now supports manufacturing of code for DB/2 LUW 10.1, SQL Server 2012, MySQL 5.5, Oracle 11gR2, Sybase ASE 15.7, and PostgreSQL 9.1.

I've finally achieved what I set out to do 15 years ago -- provide a multi/cross database coding tool that automates the mapping from an abstract business model to the specifics of the database while using all of the available performance tuning options of the database. This is far more challenging and complex than something like EJB3, which just generates dynamic SQL, not stored procedures and prepared statements.

Next up will be using the tool to write an application. I'm thinking of doing something simple and straight forward, like the core of an accounting system with general ledger, accounts, subledgering, and so on. During that development I may well add in the security support I've been planning all these years, but maybe not. Time will tell.

Regardless, I'm just peaking to have finally achieved this long outstanding milestone. :)

User Journal

Journal: MSS Code Factory 1.11.5365 Beta 1

Journal by msobkow

The PostgreSQL 9.1 implementation has been updated to make use of stored procedures, prepared SQL statements, and every other performance-tuning trick I've learned in 30+ years of database programming. Subsequent betas will be released as additional databases are brought to the same level of integration as this release for PostgreSQL.

The PostgreSQL code should run rings around EJB3 and similar technologies that rely on dynamic SQL.

MySQL 5.5 support is as complete as it will ever be, and basic DB/2 LUW 10.1 support is also provided.

Download MSS Code Factory Beta 1 from SourceForge.

Heuristics are bug ridden by definition. If they didn't have bugs, then they'd be algorithms.

Working...