Category Archives: General

Do I Code or Read?

I was contemplating this for a while. I guess the problem with why I don’t have motivation for programming is that I lack confidence that I’ll go down the so called correct path with writing code that would be reusable with multiple iterations of a project. I tend to have a higher personal standard than programming at work, since there isn’t a predefined standard for quality of code. It does tend to free up a lot of time pondering the right way to do something when the expectation is to just do it and doesn’t matter what the quality of the product. I don’t know, I’ve gotten better at writing modular reusable code at work, but some tasks require highly specialized code that once written can not be applied to other code bases without rewriting or heavy refactoring.

I have a high sense of pride with personal projects, because I want to scream to the world, “Hey, check this code out! I did this…” and I don’t want the first thing someone commenting on the code to say, “This sucks major balls!” That and my ego isn’t completely solid as to not fall over with major criticism. Well, I still have this problem with code and apt to defend any code I write with a passion. I realize this is the wrong way to approach opposition to my code, but well, I’m often not confident that the code is the correct way. It is both impressive and depressing to see someone write really beautiful code, but not understand the difference between the shit I wrote and crowning jewel the other person wrote.

I have a choice, I could either spend the next year or two writing shitty code until at some point I realize why my code sucks or someone comes along and shows me the error of my ways or I could just read a whole bunch of books from those that were in the trenches bleeding, sweating, failing and winning long before I even decided to enter this profession.

I guess I should have chosen the latter option sooner, but failing is a great learning experience. I enjoy doing it every day.

As much as I want to jump into coding, I think learning to be a journeyman coder and finally break out of the chains of a novice would provide a better experience than continuing with the false sense that I’m a master. I suppose I regret not realizing sooner, but at some point I lost perspective of where I was at and stopped growing. I knew people who fell into that pit and I vowed I would never follow in their footsteps. Realizing this, I think reading more and rereading several books in order to apply the knowledge will benefit me better.

Something tells me I should do both, but I usually go all out until I hit a brick wall.

Possibly Related Posts:


The Laws of Neomancy

During High School, I was fascinated with Geomancy type magic systems. You know, the Earth, Wind, Fire and Water primary systems that Fantasy books sometimes fall into. It didn’t quite occur to me that there was a system beyond that until I discovered Brandon Sanderson. I think it was more of a lack of imagination and more that it is truly really difficult to create a magic system that is unique and not totally stupid. Geomancy type magic systems also had a lot of depth and originality to them in the different rules that each Fantasy series would establish.

My problem was that I enjoyed Fantasy more when Magic has defined set of rules and is used often. I liked Circle of Magic series more than the Earthsea series, because I felt that magic in Circle of Magic was used more often. Well, the real reason was that reading Earthsea was more like a chore and I never finished book 3 and skipped to book 4. What I did like in Earthsea was the Necromancy type magic system and the difference between its necromancy and the normal D&D type necromancy of raising skeletons and undead.

This leads me back to Neomancy and I thought why not combine the two? Why not create a magic system that combines Geomancy and Necromancy? Well, I thought there are limitations.

  1. Geomancy and Necromancy are opposites. They are they Geomancy light to the Necromancy dark.
  2. Normally you only have one or the other in series. I think that given the complexities of having two competing magic systems that conflicts would occur naturally.

Discovering these limitations, I decided that it should be possible anyway and decided to come up with a magical system that did allow for both to exist. Oh, wait, I did come up with 5 other distinct magic systems.

  1. One was based off of the stars in a sort of Pagan ritual. This one would be extremely limited since it required time, preparation, and precise execution in order to perform spells. However, this was countered by almost anyone being able to perform the magic.
  2. Another was based off of the D&D magic system of warrior mages type magic. Not that I completely researched this form of magic from D&D books, I wanted it to be less restrictive and more enhancing of the warrior’s abilities. Sure, there will be fire throwing spells and water control spells, but most of the warriors will use regular swords and strength and use their magic to enhance how fast they move and ensuring that their sword doesn’t break.
  3. Nonrestrictive Geomancy magic. This magic system relies of how powerful the user is and what spells they know. I suppose it is like the Harry Potter or Tolkien magic system.
  4. Nonrestrictive Dark magic. Not quite necromancy, this dark magic is more about curses and well, I never really fleshed out what this system would be like. I think really I didn’t want to go into it that much. Just be something that is alluded to and in the background or part of the lore and history.
  5. I forgot. It has been a decade and I lost my notes.

That said, majority of the outlines doesn’t actually go into any of the other magic systems. The problem with having too many magic systems is that there is no way to describe them all. In the original outlines and drafts, they aren’t even part of the story in at the least the first book. I think it is okay to establish the magic systems or perhaps it might be better to simplify the systems to a mage based magic system a warrior class and then have necromancy, geomancy and neomancy.

Limitations

The limitations of geomancy and necromancy is what you can form in your mind. The other magic systems have spells that form the basis of the spell and allow the caster to not fret the difficult stuff. However, it does limit the caster to what the spell caster can memorize. A geomancy or necromancy can do whatever they can hold in their mind and limited only to their imagination and strength. Breaking the concentration of a necromancer and geomancer breaks the spell and often the spells are complex enough that the caster can be defeated relatively easily. I mean, this does sort of sound a little Harry Dresden, but meh, I do think that this is a fairly common limitation in many magic systems even predating The Dresden Files.

Even the most basic spell, the casting of orbs while simple and part of every caster spell list relies on mental capability. For a geomancer and necromancer to last long, they have to practice several basic, moderate and advanced spells so that they can quickly call them up when needed and with little to no thought. The least powerful regulate themselves to the basic spell and then for a fee will perform other spells. The more powerful will either help others or wage war with armies. The most powerful are usually loners traveling the countries either looking for trouble or helping when needed. The most powerful usually don’t need to worry about being killed, because there are few of them and they are well known. Usually, from having to kill quite a few people or destroy a few towns.

Spells

There are 3 levels of the spells and some can be used to offset the disadvantages of the magic systems.

  1. Orbs. The basic level is throwing orbs of magic at the enemy. These balls range in size and thus damage. They are easy to create once enough practice has been established and can be thrown quickly by experienced or even moderately skilled geomancy and necromancy casters.
  2. Mental. Again, the next step is forming the spell in the mind and then releasing the spell. If done carefully, a powerful spell could be casted without the enemy realizing what they are defending against. Necromancers can be deadly assassins, which is also why they are barred from entering some countries and would be killed on sight. Other nations actively hunt down necromancers and in some parts, geomancers too.

    There is a payoff, which is the more often the mental spell is casted, the easier it is to cast the spell later. Some advanced users can form part the spell in their mind for calling up and completing at a later date. Older spell casters can call up several complex and deadly spells very quickly.

  3. Rituals. Very rare, because it relies on special items and also either a necromancy or geomancy dagger. These daggers are very rare and if found by the other magic systems or anyone outside of the daggers magical system will seek to destroy the daggers. I never really created how exactly the daggers were created. I had a few ideas and one was metal smiths helping extremely powerful necromancer or group of necromancers and the same for geomancy. I think the problem would be that it would be relatively simple for recreating the daggers if this was the only requirement. I do think the character in the book does create another set of daggers with the help of a metal smith. Another idea was to only allow neomancers to create daggers and, or use a special metal that naturally has the properies inherit of necromancy and geomancy.

Politics

The point of Neomancy is to be rare and mysterious. Yeah, yeah, same old same old. The point is that it isn’t mysterious to keep the reader in the dark, the magic system is extremely simple, the point is that in the world that the character that uses the magic system is extremely dangerous to those that are able to do Neomancy. I won’t get too in depth on why this is because I’m still kind of fleshing out and revising a lot of the story elements so that they aren’t too complicated and dumb. The point is that the mage magic systems don’t like geomancers and necromancers and absolutely will not tolerate neomancers. In that they will actively seek out and find neomancers and kill them.

The problem I have is creating a dynamic where the mage magic system is not totally evil from the perspective of the reader and where neomancy is good. This is not the case and the main character who uses neomancy is not good. Far from it actually. I mean, what else would you be if you were hunted and hated by everyone, normal people and mages alike.

I don’t know, the recent outlines that I have planned sort of offset the neomancy character and bring forth the other secondary characters. Soft of Circle of Magic fashion and giving each character their own book and then ending with the Neomancy book. I’m not sure I want to write 6 books, because each story has to be interesting to write and to read. I had other ideas where I sort of do a multiple point of view characters like Wheel of Time, Way of Kings, etc but damn those tend to be extremely long stories with complexities that I’m not sure I’ll have fun mapping out and writing. I don’t think I’m that smart to be able to pull it off as well as I would want.

I’m also not sure how dark I want the story. With The Song of Fire and Ice and other books, I could just go all out, but I don’t want the book to be unreadable. The world building I had previously was, I think, too broad and too difficult to comprehend. I think I will instead work on developing the politics of one country where the main character and another secondary character interact and then branch off into the politics of the magic system. In this, I think having the interactions take place in schools could also add another level of conflicts.

I want to keep the world simple, because it is really the only way I could write. The problem is that I don’t want to write a long book, but I don’t want it to be too short. Writing is quite a bit more difficult, but I mean the systems still need to be developed even if all you are going to do is work within them and never tell the reader what the rules are of the countries and schools are.

The world is not cheerful, but I think borrowing from my other themes might mean something here. I think there is enough with the character’s backstory to provide some interesting flashbacks and insights into the politics.

Religion

There is a religion that the magic systems are based on. It isn’t really faith based as the religion origin are real in the context of the book and there are certain elements that I might keep and relate in the book. I keep going back and forth with whether I should describe the religion or not. It is silly really and since I’ve created the origin of the religion, I’ve since seen similar types of themes and I’m thinking about either not revealing the origins or recreating the origins. It is frustrating that I’ve thought of the idea, only to find out that it has been done a crazy amount of times. Hell, there are real world religions similar to the one I thought of.

Well, I think I’ll leave religion out of any book, I’ll develop this idea further in Spirit Keeper instead. I also don’t like how religion is described and used in fantasy and anime series. I’d rather magic be the religion and I don’t think it is wise to attempt to create a new religion for every story. Many fantasy stories do not even talk about religion or describe the world’s religions, so I don’t think I will here.

I will keep in mind that Neomancy, geomancy, necromancy and the other magic systems were formed out of the religion and are based in part on the religion. I never really imagined that the characters would need religion since everyone simply assumes it to just be. To them, religion is more science than faith, because the magic is living proof of the religion. Therefore there is no reason to build churches or pray to a god or gods, everyone knows that while they exist, they won’t do a damn thing.

Possibly Related Posts:


Read Clean Code: A Handbook of Agile Software

I’ve only read the Introduction, which is fairly long for introductions and most people would skip it. I suggest you read it, the book and more importantly the Introduction. The Introduction sort of the reasoning behind the book and for me was part of the reason I will finish the book. If the introduction is any indicator as to the contents of the book, then the stories, the explanations, and the reasoning is enough to justify buying the book. I learned a lot from the introduction alone and expect that had I read the full book that I would have learned a great deal more.

That said, the introduction of the book sort of gave proof and reasoning to a lot of what I’ve been attempting to say at work for how to code. I do not think the author would agree with me completely as the author, from what I could remember, is not as hardline as I was previously with my assertions at work. I do think that this book will be beneficial to me in describing the ideas I could not put in words before for how code should be written and hopefully the rest of the book does a better job of detailing how you should code clean code than say the “Beautiful Code” book that reads more like a book of Fables than a how-to programming book.

I will say that if your viewpoint with coding is GSD (Get-Shit-Done) than it probably won’t flow with your mindset. However, I don’t think the author is that far off from GSD. He even says in the introduction along the lines of it is better to get something done than to put something off to where it never gets done. I interpreted him as to saying that it is better to code something that is somewhat clean and can be made cleaner in the future from simple refactoring than to code it completely terrible and require a complete rewrite. As well as including that it is not wise to dismiss every solution simply because none of them are clean. The primarily job of a programmer is to provide solutions, and to not ideology affect our thinking too much.

Again, this is all from the introduction, so I expect the rest of the book is full of more gems of knowledge and experience. I expect I’ll learn a lot from the rest of the book and I think other programmers will too. Check Amazon for the book.

Possibly Related Posts:


5 Year Goals

Summary

I’ve heard the key to success is to have a 5 year plan. I suppose the reasoning behind this is that if you look 5 years into the future, then it is enough time to at least get started with a few of those goals. It is somewhat true, I knew in middle school that I wanted to go to college and I worked extremely hard to achieve that goal during high school. I also made damn sure I didn’t have any children during high school and well, that was a bit easier to achieve, sadly.

  1. Comfortable enough with Python to create a project from start to finish with very little to no additional support from reference material.
  2. Comfortable enough with JavaScript to develop WebGL and other solutions using JavaScript with little to no additional support from reference material and tutorials.
  3. Ability to create a GUI project using D programming language and, or Java.
  4. Command of CSS3 and HTML5 to create a web site that is standards compliant with decent to great usability and accessibility.
  5. Projects that include Web based and Software based solutions encompassing bug / project tracking, directory, mobile and Windows application.
  6. Up to a bachelors of Science in Programming
  7. Research and programming AI in both browser games and programming libraries.

I should also add finding a mate, marrying mate and perhaps having a child or two during this time. However, I think just finding someone that I enjoy spending time with is good enough for me during this time period as well. I’ll be 30 years old in 5 years and well, I do hope that many of these goals will be accomplished by then. I had simply 4 goals for the past 5 years: Find a programming job, find a mate, complete at least 2 browser games and buy a house. I only completed two of those: find a programming job and buy a house.

Goals for the Next Month or Two

I plan on starting two projects. The Projile Python project and an untitled Directory project written in PHP using the Fuel Framework. Technically, I’ve been working on Projile and learning more about Python from books and the online reference. Parts of my goal is already being in progress, but I need to focus more on reading, because I don’t want to start a project that will be totally shit and require a lot of rewriting to get the shitty parts out.

I plan on reading the following books:

  • Software Testing (2nd Edition)Read. An interesting book and I learned a lot of the methodology and terminology, but wasn’t really what I was looking for. I think really the gist of the book makes sense I need to focus on testing my code more and satisfying more conditions with my testing. I learned that I simply test to pass and I need to practice test to fail to be a better tester.
  • The Pragmatic Programmer – A classic that I have yet to read. The next book I’ll be reading.
  • The Mythical Man-Month – Another classic that is next on my list to read after the Pragmatic Programmer.
  • Lessons Learned in Software Testing – Started reading this book, but I think I’ll simply go through it slowly and see what I can learn from its contents.
  • Predictably Irrational – Doesn’t really have anything to do with programming per se, but the concepts will hopefully help me market my products better and develop products that people are interested in.
  • Freakonomics – Another marketing book dealing with selling a product and how consumers react. A good book to read and see where the concepts can be applied.
  • Clean Code – A really good book that I started reading, but dropped a few months back. I think I’ll pick it back up when I start reading more books on Agile project management.
  • Expert Python ProgrammingRead. Well, technically, I haven’t finished the book, but I’ve read the important parts and could read the parts I skipped when I need them.
  • Quick Python Book
  • Python Pocket Reference
  • Python Essential Reference
  • Python Algorithms – Really, I think this book will be the next one I start on for learning Python. I need to get in the groove, so to speak, of thinking in the way Python works as opposed to attempting to apply my PHP or Object-Oriented programming paradigms and practices over to Python. I think this is part of the reason I don’t want to start programming python is that I fear it would be the wrong way and I’ll have to rewrite it all. Quite a bit demotivating, but I think once I do get into the Way of Python that Ruby and other languages like Python will come easier and also be able to apply some of the styles from Python to PHP, Java, etc.
  • People Styles at Work – I’m a terrible people person. Along the same lines of “How to Make Friends and Influence People” which I need to listen to again and quite possibility as much as possible. The issue at hand is that I don’t handle people very well and part of my journey so to speak is learning how to treat people with respect, even when I don’t feel like doing so and not burning bridges. My experience with WordPress has taught me some of this the hard way, but the next community I join, I don’t want to go in swing shit and expect to repair bridges down the road. If I join the Trac or Fuel Framework community, then I think this book and others will at least help with getting my point across and hopefully treat people in a respectable matter.
  • Design Patterns – There are quite a lot of books. I’ve already read one book dealing with a few design patterns for PHP. I need to get into the Gang of Four and the other book. There are other books written for Python and I suppose simply generic books like GoF and the other.
  • Algorithm Books – Algorithms are great for not reinventing the wheel and have it suck. Some algorithms are so common that many people have spent years refining them. Learning from them will help me be a better programmer.
  • Math and Scientific Programming – I’m really, really good at math. What I’m not so good at is remembering formulas. I’m planning on reading a few books on the basics Algebra and hopefully work my way up to Calculus and or Geometry. There is a Math and Physics book for game programmers that I think will at least serve as a reference book for some of the more common ones. The problem is that really you need to use them in order to remember them, but I think applying some of the concepts in reporting and statistics will also allow me to create better programs and I need to study more of that.

    Brushing up on the formulas, basic concepts, and more advance concepts will help when I start focusing on AI, which is heavy on math and when I start working on reporting and statistics.

  • Don’t Make Me ThinkRead Yet another area I’m terrible at. I’m not a designer, but I guess parts of my failing is never really focusing on usability. I plan on rectifying that mistake and spending more time creating different prototypes and usability testing until I master enough of it to where I don’t have to spend months to develop something.
  • Web Design Books I may be terrible at web design, but there are concepts and rules that I should be able to learn that will at least get me part way to a decent designed web site that is usable and decent enough to look at to where a designer can come in and make it pretty.
  • JavaScript Books – The problem with JavaScript books is that they don’t go into depth in to the internals of the language. They mostly are a primer of the same topics over and over again. Reading them doesn’t give you the tricks and hacks that the developers of jQuery were able to put together. Most of them don’t even go into that much develop of scoping, it issues, its tricks and workarounds. A lot of the books I’ve read at least barely focus on object-oriented programming in JavaScript, focusing instead on mainly procedural snippets. I’m sure part of my problem was that I never bought an “Advanced” JavaScript book and I hope that these issues I’ve had prior were from the overall past lack of professional and advanced topic JavaScript books. I hope the money I will be spending won’t be going to waste and won’t be a repeat of information I could get with a simple Google search.
  • Agile Project Development – Research for Projile bug and project tracker and well, I should be able to learn a lot and hope to apply some of the concepts to motivate me to work on and complete projects.

Well, I’m not going to spend all of my time reading and even if I did, I doubt I’ll be able to read, comprehend and apply the concepts in the books. I do hope to read as much as possible in these given subjects and actually finish the books in the list. I do like reading and I can always find time to pick up a book and read. I do desire to at least start the directory project and experiment with prototyping some things for Projile.

Next 6 Months

Finish more books and reread some of the books above for a second or third time. It is an ongoing process and something I’ve always attempted, but it is hard to stay with it. If you are reading, then you aren’t programming and you want to be reading when you are programming and programming when you are reading. I think my goal should be to read one computer programming or a book helpful to programming, like math or marketing or how to talk to people and not come off as an asshole a month. So that is 12 books a year for 5 years or 60 books. A completely possible and practical task that will further my knowledge of my field. Of course, I’ll be reading upwards to 20 to 30 books within the first month alone, and hopefully I read more than 60 to 80 books. The field is constantly changing and it is a battle to stay current. For the past 4 years, I’ve been negligent and I feel ashamed.

I want to have both the directory project and Projile project usable to some degree, even if it is simply the installer for both. I’m expecting the directory project to progress a lot faster since it will be using a language I’m extremely comfortable with and with MVC framework that enables rapid prototyping. The scope of the directory project is also limited for now until either I decide to give it away for free or sell it. If I plan on selling it, then I’ll want some funding. I’m probably going to go forward as if it is going to be a service and a paid product.

I at least want to start on the D language project of Minecraft Proxy project sometime within the next 6 months. I’m expecting that the release of 1.8 will push my motivation higher to the point where I either fix the Java version or attempt the D language version. At some point within the next month I’m going to prototype the socket layer of the code and see how well that works. If I can quickly and easily get that working, then it will provide enough motivation for me to focus on the OpenGL and, or Qt GUI layers. I’m hoping the D language version will be smaller, more efficient and faster. I have other plans, but this project is really a side project and I can’t plan on playing Minecraft or I won’t get any of my goals completed.

Next Year

In order to learn Python better, I either need to focus some time on Projile to keep my Python knowledge and experience fresh or I need to alternate between PHP and Python for each project I do. I think that for every other browser game I do, I could alternate between Python and PHP or if I continue to have a PHP job to do all of my hobby programming in Python. I need to get to the point where I have used every built-in module, created modules, eggs, and worked on at least 3 or 4 advanced solutions.

I also need to focus on working on open source projects that have experienced programmers in order to take direction and learn techniques from them. Trac seems to be a good candidate, but I need to see if there are other open source projects that have an established community and join them. It might not even be a web project and I think that might be better.

Sometime Between Year 2 and Year 5

I already have plans to write an Android App and a Windows Phone 7 App. I need to attempt to create a GUI application for Windows, Linux, and maybe Mac at least every other year. I already created one this year, but I’m still pretty novice when it comes to user interface design (the books above as well as future web application projects) and creating an installer. If and when I go back to school, I’ll be learning a lot more of C# and I should be able to apply the concepts and experience I learn in that language to D and Java.

I’ve decided that I’m probably not going to learn a whole lot of C / C++. The amount of time and energy required to get good at those languages probably is not worth my time during the next 5 years or 15 years. Focusing on D should help ease into C and C++. Some of my D programming will involve C programming, so I should pick up C experience, albeit very slowly. It is simply that the web application programming field is so large and is only growing larger in the next 5 years that I’ll probably never have to learn C / C++ and still be able to find enough jobs to hire me in the next decade or two. I do eventually want to learn those languages, but I hope by the time I do, that programming in the language will be so damn simple I’d wonder why I hadn’t done it sooner.

Possibly Related Posts:


Branson Tourism Center Looking for PHP Web Site Programmer

Branson Tourism Center is located in the Branson, MO, Ozarks area. Any PHP developer in Branson, Ozark, Springfield, Nixa, or north-western Arkansas or programmers looking to relocate to the area should send their resumes. Please call 417-334-4400 and ask for Tammy or Basil. If you want their email address then leave a comment and I’ll send it to you.

Requirements

  1. Must put that Jacob Santos referred you, on cover letter.

    I would appreciate this a lot and will be your friend forever [1].

  2. Must be a PHP programmer.

    Web site experience limited to HTML and CSS need not apply. The position demands someone with at least 2 years of PHP experience. You must know the language and you must be at least somewhat comfortable with object-oriented programming. Someone with a little PHP experience may be hired as long as they are bright, willing to learn and adaptable to changes to spec and deadlines.

  3. Must know MySQL SQL.

    All of the backend storage uses MySQL (MyISAM and some INNODB), so SQL is a must. However, most code will be using an ORM, however the candidate must be able to design a relational table scheme that is sane, justifying normalization and performance.

  4. Must have some working knowledge of SCM

    Subversion is used and will continue to be used. Basic knowledge of Subversion commands or TortoiseSVN experience is required. Training might be available for exceptional PHP programming candidates and those coming from other version control software.

  5. Apache, PHP installation and Linux experience recommended.

    It would be helpful and give you a boost having worked with configuring, installing and, or optimizing Apache and PHP installations. Majority of the PHP installations are on Linux, so knowledge of basic commands or ability to learn basic commands and roam Linux is a plus.

  6. Must not attempt to change the work environment.

    Going in thinking that you’ll change to GIT or Bazaar will not be appreciated during any interview. Furthermore attempting to transition to another database will also not be appreciated.

  7. CodeIgniter experience is a plus

    Any MVC framework experience will be appreciated and a bonus.

  8. Must know HTML and CSS and JavaScript

    Mostly jQuery for JavaScript, nothing too crazy besides AJAX pulling JSON and validation is used, so pretty simple stuff. HTML and CSS probably within basic levels. Must have an understanding of table-less designs, styles, etc. Pretty much if you’ve been putting together web sites using HTML and CSS for 1 year or so, then you should be good as long as you understand and know most of the tags and css properties and values. Mostly the designer will handle most of this for you, but you will need to be able to modify existing pages and create new pages without a tremendous amount of help.

Any Real Programmer

At this point any Python, Java, C# programmer that has real experience programming and can adapt their knowledge to another language quickly will probably be handed the job. However, you should have at least done a project or two in PHP before applying. It is not an immediate rejection to have experience in another language, but the project manager has to know that you will be able to code PHP without a lot of hand holding with teaching what variables, functions, and classes are. More than anything else, someone whom proves able to solve problems will most likely be hired.

Contract Work?

If you are going to contact about contract work, please place on the cover letter or resume that you are looking for contract work. Not doing so will potentially disqualify you from any future offers.

1 It should be noted that I actually won’t be your friend forever, just because you put my name on the resume. We’ll take it slow and see if a friendship works out.

Possibly Related Posts:


Learning Python: New Project Name – Projile

I decided to call my Python 3.2 conversion of Trac, Projile. This is until I find out that I accidentally named it “penis” from some foreign language or slang in my current language. Regardless, it is a temporary name, to prevent people from thinking that it is related to the official Trac project. I actually got some work done last night with setting up Python, CherryPy and reading Python Library documentation and CherryPy documentation. I haven’t played Minecraft in 2 days, so I’m doing pretty good so far.

I’m still going to have a web installer, which will default to some port. The problem I’m facing is that I won’t be able to completely remove all of the steps involved, unless I want to write a custom build script that is just run. I do think that reducing the steps using the installer and having majority of the configuration done using the installer and administration might be of benefit. However, the project has to be in a working completed state before any real user testing and survey can take place.

Experiment 1: Does having a web installer that reduces a few steps beneficial?

I want to somehow provide the ability to download and install and enable plugins. I plan on experimenting with the current loader.py in Trac to see if rewriting it using 3.2 module modules will shorten the code and be of some benefit. I think however, that I’m missing some point with those Python modules and they aren’t meant for what I think they are meant for. Whatever, the experience should be of some use to figure out exactly their purpose and using them will provide some experience for when they are actually needed. I do need to find where “env.is_component_enabled()” method is located.

The plan for the installer / upgrader is to list existing packages, the requirements and optional dependencies. The goal is to have the installer / upgrader guess as much as possible to get the project running as quickly as possible. Then allow for setting up projects and configuring the software. I’ve decided that I’m going to attempt as closely as possible provide as many configurations as possible, but I also think that providing an initial base for building off of and extending later to ease the process a little bit more each iteration would be better than attempting everything I want at this time.

So the initial installer will (hopefully):

  • Setup the database configuration, if not already
  • Setup administration username and password (optional, will default “admin” for username, and randomly generated password.
  • Check dependencies and display if not met.
  • Check for installer / upgrade plugins. Run plugins after upgrade, in case they have a hook for post upgrade.
  • Configure initial project name, description.
  • Check for existing trac.cfg file and convert it and existing projects.

Possibly Related Posts:


I need to Learn D Programming Language

I originally looked at D a few years ago before the version 1 was released. Now I looked at it and version 2 is released and the features and standard library look kick ass! I think for my next project after Trac will be to settle down and learn D programming language and port my Minecraft Proxy written in Java to D. I’m interested in seeing how much faster it runs and how much lower the memory footprint is.

I think it’d be fun to use the D programing language idioms in implementing the project. I think it would be interesting to use the concurrency module of the standard library and see if I can’t allow some of the more difficult parts of the Java programming faster and more stable in D. Provided if I did it right in Java, then I probably wouldn’t have so many headaches. I’m just curious if I could perhaps use the D standard library for pipe-lining the process for what could be cleaner code. I have to look and see if there is an opengl port to D. If not, then I’ll just attempt to use the C libraries and hope I manage the memory, unless D manages that as well.

Should be fun and I really can’t wait to get started on that in another 2 months. I am excited, because I’ve been meaning to learn C++ and C, Well, D is close enough in design to those languages that I’m hoping that creating solutions in C and C++ will be easier after working with D. My biggest weakness with C and C++ is memory management and really correctly using memory management that is handled by libraries and other third-party APIs. I think that if I can practice with D and C, that it’ll be easier for when I’m going between C and C++.The differences are huge and it’d be better to simply code in C when working with C APIs and code. I’m not sure. I want to use D and see how it works.

I can’t wait! Another reason to finish the Trac project, so I can get started. Of course, I’ll probably still maintain my Java project until the D one gets off the ground and works. I don’t know, I might start coding one weekend for grins and see how far I can get. If i can do the multithreading or socket polling and network code working for Minecraft in a day or two, then I think I can port the rest of the code in less than a week. The OpenGL code will be a little tricky, but since most of the code is one to one to the C API, I shouldn’t have a lot of trouble. The Java API does a lot of the window and input handling and implementing that won’t be that difficult, but will require testing and time.

Then I want to write a simple XMPP server.

Possibly Related Posts:


Working on Projile: Update and some decisions

Well, I caught the Minecraft bug again, so I lost a week to playing that game. It is like crack. Meh, I think I got it out of my system. Really, it has been good because it kept from working on Trac in the wrong way with going forward with bad decisions.

I lack motivation for rewriting Trac and I think that has really kept me from being pumped about doing anything. However, I think what I am going to try to do first is get Trac running and displayed in the browser. The next step I think is slowly refactoring the code base to use CherryPy, but still keep the same directory structure and hopefully everything as it is now.

From what I can see of the controller, it shouldn’t be that difficult to refactor the code base to use CherryPy. I do need to follow the code paths to further understand exactly how the front controller is passing the requests off to the different components. There is some Voodoo magic involved that I need to probably look at from the top-down with actually running Trac. I will need to maintain all of the routes, but I think this will be a good starting point and should be a small enough project, I hope, to get me more involved into the code base of Trac.

I’m still going to do the web installer, but I’m going to take a break. The existing way it is handled, works fine for now. The difficulty level is moderate, so while I still think it is worth investing the time, I really need to get involved in the trenches with Projile code base to get up the motivation to continue.

I need to remember that the reason I’m using Trac is not to fork Trac or create a new project management system. The point is to use an existing project and add features to test some solutions that I’ve been reading and contemplating for the last 2 years. Also, I want to learn Python and an established project is usually the best place to start.

Possibly Related Posts:


Switching Gears With Building PCs

I think my problem is that I’ve never had enough money to support more than one PC. This being the case, I think I’m going to switch my focus instead to sticking with one PC that is awesome, a laptop that gets the job done, and a phone that allows me to do more on the go.

In this, I’m going to move away from the dedicated Storage Server idea. I’m going to instead go with a cloud based solution which will support off site backup for my important projects and also allow for off-site backup. Something I haven’t been doing and needed to be doing for a number of years. I’ll need to go over my current files and decide which files will need to be backed up when the time comes. However, better organization will help now, so I’ll probably spend some time doing that as well.

Brother’s Machine

I’m going to transition parts from my machine (motherboard, processor, memory, DVD burner) to build my brother’s machine. It appears that really, all that I’ll need to buy is a case, hard drive, and power supply. I’ll give him my 22″ monitor as well.

This leaves me out those parts in my own machine, which I’ll need to replace. I think I’ll start with buying the case and then when I buy the replacement parts for my own machine, pop the parts in my brother’s case. Well, I plan on building my brother’s machine with a SSD or two and a 2TB drive or 2. His machine should be pretty sweet, and will be better than what I had planned for him.

My New Machine

My new machine will combine my plans for the gaming machine and storage machine. It appears that the new ASUS boards are finally adding extra SATA ports, which should allow me to use them up in better ways. My configuration went from No SSD to 2 SSD, 5 2TB hard drives and 1 Blu-Ray Burner / DVD-Burner combo drive. Combining both of the parts allows me to spend a little bit more.

I planned on buying 2 60GB SATA3 SSD drives. Now, I’m thinking about buying 2 120 SATA3 SSD drives for RAID0 configuration. The drives are rated at 548MB/s Reads and combining them in RAID0 should boost that to at least the max SATA3 speeds. Well, maybe, still be pretty damn fast. Shelling out >$400 for those drives alone.

The 5 2TB drives will be storage and I plan on dedicating most of those drives to storing video from my current and future cameras. Trust me, those probably won’t even be enough after a few years. I also plan on switching to external drives for longer term storage. Backing up to externals and keeping copies will allow me to remove older archives after some point. I might also RAID 5 the drives the drives for backups as well as allowing to replacing drives with higher capacity storage in the future.

The SSD part of my computer will be the gaming part and the 5 TB drives will be the storage part, which is really all I need for the storage. I did like that if I had bought Windows Home Server, that I’d have been able to remote in to get my files. I think that since most of my files will be in the cloud that I work on anyway, that this desire is unnecessary.

I plan on keeping my 23″ monitors and buying 4 25″ LED display port monitors for a total of 6 monitors. The reason, I think is that I plan on using several of them for displaying virtual machines. The 4 monitors will be my main. I’ll need to buy a graphics card to manage the monitors. I don’t think that with the games I’ll be playing that using one card for all monitors will matter. I’ll have to see when Skyrim comes out. However, I want to have all of this done before that game comes out and have the funds available to add a second graphics card for that game.

The new motherboard and processor will be the AMD NB990X or AMD NB970 chipsets. I don’t think I’ll be using the 990FX, since I’m more interested in having more SATA connectors. If ASUS or Gigabyte comes out with a board with 10 SATA connectors, then I’ll probably jump on that board. I’ll be waiting for the new AMD processors to be released to Amazon or Newegg before I buy the board. I’m hoping more ASUS boards come out with more SATA connectors.

Possibly Related Posts:


State of Bug Trackers

It is disappointing to me that the best Bug Trackers out there are web applications that you can’t access the source to. It is disappointing, because these web applications often lack some feature that make open source bug trackers great. The best of these that do combine the best of both worlds require payment and often have more features than most require.

I think the problem has always been that bug trackers have been built by programmers for programmers based on specifications that the programmers thought others would require, need or comprehend as useful. There are basic features for organization of bugs or tickets, but most of the time these are made for programmers. An user doesn’t really know what milestone or version the ticket will be completed, they might not even care. They probably don’t know how the administrators define each component and I doubt most really care.

The key element of most web bug trackers are that they are simple and easy. They remove most of the cruft and useless features that plague open source and other more complicated bug trackers. The break it down to the fundamentals of tracking bugs and leave you to have at it. Most of the time this is all you will need. When you get to the point where the basics are no longer cutting it for you, then either more features are being offered by the service or you move on to a more advanced platform.

I want something like this in an open source product that can be easily and quickly extended. I want something that takes the best of Trac, Get Satisfaction, 16 Bugs and maybe some of Fog Bugz.

Goals

The goal is to look at what makes these web applications great and include them in one package for people to use and hopefully extend. The goal is to also allow for enabling and disabling features as they are needed. If all you need is a 16 bugs (which is really more of a Basecamp clone), then well, that is what the basic package will be and you simply don’t enable any of the other features.

Features like roadmaps, components, reports, searching etc from Trac can be enabled, customized and configured later. However, what the web application will never be is anything more than a simple, but extendable bug tracker. There won’t be a Wiki, you would instead link to one, but I do hope to have some support for built-in linking of wiki, similar to the Trac feature.

Get Satisfaction

Looking at Get Satisfaction, I can really see why it will become popular in the future for a bug tracking web application. It is simple. Really incredibility simple, but well there are some navigation problems, but they are so minor that navigating the web site after the initial learning curve is not an issue.

It does what bug trackers should have been doing and really, I think you have to see it in action to realize its effectiveness. It allows you to not allow list problems, but also questions, request features and give praise. I think why it is so great needs a little bit of explanation, in case you don’t realize it already.

Why is giving praise important?

It tells the developers what people think they should be working on. It tells the developers and people making plans for the next release what features really made a person’s day; the one feature that sold the product for them. It also continues motivation for open source projects where no money is being made. It is really kind of depressing to read over defects all day, but with this feature on the site, people can tell you how much you helped them and that they care.

Why so simple?

If you think about it, what does the customer or user really care about? They really only care about telling you what the problem is and then leaving. Thinking about it some more and Trac is really setup to be confusing. How many people know which component a ticket belongs to? 1 or 2, 0 if the person who set them up was just winging it. How do you set the component when the ticket might belong to several? Throw darts most likely. What about the roadmap? Everyone thinks their ticket should be completed before the next release, but how often does that happen?

The power of Get Satisfaction is that it doesn’t burden the user with the minute details that really only the programmers care about or even know. It allows the customer or user to get in tell you about their problem and leave. In some ways Lighthouse is extremely similar, but mostly geared towards only defects and features with a bit of Trac thrown in for good measure.

I do like the bit about Giving Praise, along with asking for features. I’m thinking about including it. It won’t be that difficult to add and will work similar to everything else. It will just be a matter of allowing the administrator to disable it if so desired.

Problems of Get Satisfaction

I think Lighthouse solves many of the organization problems with Get Satisfaction. The major and only problem I can see with Get Satisfaction is the lack of milestones or separation of tickets. It is just one big list and when you have many tickets, praise, and feature requests, it can be a little overwhelming to go through them all. The other problem is the matter of duplicates. It is either difficult or impossible to mark something as a duplicate of something else.

Project Management

The strength of Fog Bugz is its project management and well, their other features as well. The initial version, I’m not going to focus on Project Management or Agile features, unless more time comes up.

I do think that this is what Trac is lacking. It is difficult to get metrics on what people want, on what people have done, how close the project is to being completed, etc. Reports and graphs are one aspect of this. The other is figuring out what programmers should focus their time on.

In my product, I want to initially focus on completeness of bug and feature tickets. I want to include ticket dependencies for features and bugs. I want a metric for whether a bug or feature is complete and for this I want a report that tells programmers which tickets they should be looking at.

Reporting

Ticket Completeness

The term ticket completeness is the workflow of the ticket from the initial report from the customer or user to the time is fixed or included into the project. It does not include tickets that are closed for being invalid or another reason.

  1. How Detailed is the Report? Does it include a detailed or proper description? Does it include correct steps to reproduce the issue? Does it include a workaround? Does it include Expected event -> Actual event descriptions?
  2. Does it have Attachments? Does it include a patch, a prototype, screenshots and, or other helpful files for reproducing or understanding the problem or feature?
  3. Does the ticket have comments? Are the comments helpful, debating the issue, or querying for more information? Do the attachments have comments, requests for feedback? Have the patches or prototypes been accepted?
  4. Does the ticket, defect or feature, have up votes telling the programmers what the users and customers care about?
  5. Has the extra information been completed: things like roadmap, version, OS, etc
  6. Time the ticket has been active, time the ticket has been opened, time the ticket has been stale.

    In a perfect world, every ticket will receive feedback within 24 to 48 hours. Whether it is a comment saying the ticket has been looked at and, or reviewed or a patch has been submitted. It is possible to include some of these feedback mechanisms into the web application. Whether the ticket has been looked at will include whether the core team has looked at the ticket or patch or whether a trusted member has looked at it or if someone else has looked at the ticket. These are easy features to include and might have some pay off for the reporter.

    This is really to tell the programmers which tickets are not receiving proper attention given the other criteria. It will also inform based on how complete the ticket is. If a ticket has a patch and the patch has not been reviewed, then why not based on a given number of days?

Giving programmers and contributors information to make wise decisions.

The programmers managing the project and the contributors should be able to see which tickets are being addressed and how well. They should also be able to quickly find tickets that haven’t received proper feedback and tickets that can possibility go into the next release.

I think this is the first step to project management features. The reports will be built-in, but completely optional. The emailing to the reporter on updates will also be optional and will be a single check box. The key will be to gradually give the reporter the impression that their ticket is being addressed and help the programmers address tickets.

Possibly Related Posts: