FINALLY! SOME UPDATES! This website is being reconstructed. Some content will go away soon. If you want to see my new stuff, visit my github: https://github.com/jrcharney/.

September 2, 2012

Footer fixed!

America's long national nightmare is over! Jersey Shore is canceled! (That sound you hear is your local library having a party!)

More importantly, a major problem with this website has finally been resolved. I thought I'd share why it was like that to begin with in order to spread the word on how to set up a website layout like the one that I've been using for about a year now.

I'd like to point out that as of this post, Jill.js and Poly.js are now integrated into this blog and that Jill.2.0a.js (formerly Jill.1.3a.js), which means that in this post (and any that follow that need a quick illustrated example), we can integrate them with ease.

Firstly, the horizontal elements must be set up first.

Secondly, the main body needs two colums. One that float:left, the other float:right.

Finally, one more piece to the puzzle. A <div style="clear:both;"></div> between the #content and the #footer divs. It will appear invisible but it is very important.

A few other things to note: Don't set the position CSS attribute for #header, #content, #footer, #main, #side, or the <div> that uses clear. It is unnecessary. If you set postion:absoulte on #side, the footer will jump up into the content area so don't do that. Also, don't set positon:relative to #side either or it will disappear. It's got something to do with using float:right. You can use position on the elements inside these elements, but if you want the layout I am using to work, don't use position at all! The sizes of these elements should also be in percentages as concrete values cause elements avoid appearing on the same level (especially #main and #side). Setting min-width on your percentange set elements is a must. For instance, setting width:90%; on #header, #content and #footer should also have min-width:1000px;. Likewise, if you set your #main and #side widths to 70% and 30%, you should probably set the min-widths to 700px and 300px.

You might also want to consider setting the margins on the <body>, #header, #content, and #footer to margin: 0 auto; so it appears center to the screen.

I'm glad I got this resolved. Now my site actually looks professional and I can focus on improving the header next.

August 17, 2012

new.sh v2.0a

I had completely forgotten to take care of a few major bugs with new.sh when I went to write new_c.sh this summer. Like the recursion bug that was fixed with the trailblazer function.

Fortunately, I caught it and fixed the errors.

Keep in mind, new.sh doesn't do as much as new_c.sh. So if you are trying to get it to run Java or Python to complile the code you just wrote, new.sh won't do that. You'll need to do that directly. I am open to suggestions for adding such a command if needed.

The next version of Jill.js will require Jill Objects to be created like any other object.

Jill 1.2 Jill 1.3a (soon)
<div id="contents"></div>
<script>
function drawingFunc(ctx){
 /* Drawing Function stuff */
}

makeCanvas(
 "myDrawing","#contents",
 "600px","400px",drawingFunc);
</script>
<div id="contents"></div>
<script>
function drawingFunc(ctx){
 /* Drawing Function stuff */
}

var jill = new Jill("myDrawing","600px","400px");
jill.setFunc(drawingFunc);	// Hopefull this works
jill.putIn("#contents");
</script>

As you can see, the next version of Jill will be more object oriented. I'm hoping that this example declaration will pave the way for putting the everything before jill.putIn("#contents"); before #contents as opposed to being after. I plan on doing some experimenting this weekend.

A couple of HTML5 Canvas library projects I've noticed that are also online are the Create.js suite, Rafaël,js, and Processing.js. Of these three rivals, I still have great respect for the folks at Processing.js. The animation is fluid, impressive, and has motivated me to work on the Jill.js project to begin with.

Such love is not reserved for the folks at Create.js which is Adobe's way of trying to still be relevant as the folks at Google and Apple are eventually replacing Adobe Flash and Adobe Reader with their own embeded programs. I have a feeling that under all that JavaScript is a bunch of obsfucated code that tries to re-embed Flash objects. Add to that, the goal of Jill (unlike the Create.js suite) will be Open Source and eventually will converge into a single file. It is my eventual goal to create Jill such that you only need to embed jQuery and Jill in the header...maybe less if that is possible. (Perhaps Jill can embed jQuery.)

An honorable mention would be Rafaël.js for completing a task I thought about doing, which was to use Scalable Vector Graphics (SVG) style paths. I'm assuming Rafaël tries to embed SVG into HTML5 Canvas. Jill likely won't have that ability. On the other hand, it may include executing SVG style paths through my own definiton. And of course, EVERYTHING will be object-oriented.

Finally, I'm thinking about writing a content management system interface that uses NCurses as opposed to HTML.

There are some very good reasons to go old school. Firstly, I LOVE using SSH and FTP. They are simple and direct, especially SSH which can be used on just about any device even without something elaborate like VNC. Secondly, NCurses would allow me to write a program that would bridge the gap between the database and the webpages. Sure, you could use something like Wordpress, Joombla, or Drupel. But if vim, tmux, and irssi are frequently listed in your shell history, a program than handles blogging or whatever else that uses a Content Management System makes reasonable sense. Besides, where do you think this site was developed? Finally, even if this site is written in NCurses, and is designed for a terminal shell, there are programs that emulate terminals inside the browser such as Terminus. Of course, if your browser crashes a lot, it would still be in the interest to work on your stuff in a crash-safe environment accessable from any device.

August 14, 2012

Projects Reloaded!

Major structural changes have occured to this website today. As you and I both can agree on, we can only wish they were on the footer section that keeps overlapping the sidebar. (I just know it is something very simple I am forgeting.)

But now most of the projects on the projects page have their own pages. A clean alternative to that monstrous queue I had initailly developed. There are still a few things I want to do, mainly involving some jQuery or JavaScript in the header.

Jill.js has its own page now. So does New_c.sh. It's a tremendous growth to the website today. Something that I hope will impress a lot of people.

A few other things worth mentioning that have occured in the past 24 hours is that I finally got Festival working thanks to a little help from the folks at Revision3 and Hak5. Check out this video. I'd strongly recommend watching it and doing the tips in this video. As an extra bonus, add this line to your ~/.bash_aliases file.

alias speak="festival --tts --pipe"

You should use this like you would with bc, and pipe it.

echo "I am stuck in this box. I hear voices." | speak

Thanks to that video, I also don't have to put up with Unity's "Heads Up Display" (HUD) blocking the Alt keys anymore. I've re-assigned that key to Window+U or as us Linux people call the Window key "Super", "Meta", Hyper", or "Mod4". Just for fun, I'd like to see someone call it "Steve". (Let's call it that for the rest of this post.) Steve+U is appropriate because Unity's HUD isn't a true Run prompt like on Windows where you can just type Steve+R. An important keyboard shortcut would be to create a Steve+T for a terminal. However, Ubuntu has kind of put itself in charge of most of the commands that start with Steve. So instead of assign the talk.sh script in the video to Steve+H (like how Mac has always had Apple+H for its "Speak" command in their text editor and word processor, we have to use CTRL+ALT+H. Keep in mind, this hack works accordingly to the one in the video such that you'll need xsel installed, talk.sh written up, and lines selected for text.

I think the next thing I want to do with festival is find some better voices.

Finally, the last thing worth metioning that I found usefull, except for the stylesheet is this page on how to get an android device that won't automatically connect to your computer to do so. The stylesheet on this page is TERRIBLE! Fortunaly for those who know better than to write code in ALL CAPS, I have a copy of my 51-android.rules file right here which is set up for Android and it has in the comments a list of instructions on how to use it. I just hate how all the permissions only work when it is chmod a+rwx. Every file and every directory is executable at all permission levels. There are also a few bugs with it like you can't edit files but you can create new ones. I'm just happy it work at least. I tried doing that last night when I was modifying my resume and cover letter stored on my rooted HP Touchpad. So I'm thinking the method for using MTP needs work.

In the next few weeks I'd like to explain how to use the weather program for showing weather information on the console. I've been using a shell script for pulling up local weather info as the Unbuntu app crashes after waking up my computer from sleep.

That seems to be everything for now.

August 13, 2012

The Triangle

I probably should have used this weekend to look for work, instead, I did something way better. Despite suffering a cold, this weekend had to be one of my most productive weekends ever.

Jill is now stable. It's still alpha, but stable. Poly is practically object-oriented. I just need to clean up some code in it for the next version. I've got my JavaScript groove back! I just need to take care of some business with events, animation, and interactivity.

A new version of my HexColors example is now way more efficient. Instead of six loops, everything is done in three. Basically, three different hexagons are drawn at the same time.

Meanwhile, my Pascal/Sierpinski Triangle program demonstrate everything that Poly is capable of. All the shapes, colors, and text in this program are HTML5 Canvas and JavaScript. This program requires quite a bit of math to calculate despite it being efficient. The triangle goes as far as 32 steps and with the present algorithms in use are able to handle around 48 steps before math errors kick in.

Download pascaltriangle.html at the end of this post. It looks even better on a smartphone!

Yes, computers do err in mathematics. Particularly when really, really, really large numbers come into play that are larger than what the preset datatypes can handle. But this was a fun program and something I had been looking toward completing ever since I was a teenager.

Today was a momentous occasion. A quiet victory and one step closer to much greater things.

My next version of Jill may have the next version of Poly integrated into it. At least the stable parts.

The next step will likely to work on Evan, an events and animation JavaScript library.

A fun piece of JavaScript that I wish could be applicable to other languages is this line.

( !(val % 2) ? celleven : cellodd[0] ).fill(ctx);

The very essence of this code SCREAMS Perl, but it is JavaScript. I've used this line serveral times in pascaltriangle.html and I love it!

To break it down, the fill() function is actually a function I wrote that is a corollary of the fill() function defined by HTML5 Canvas. My version is a more flexible and has some feature that make for effective Canvas development.

For example, when I think of Canvas's command for fillStyle and fill(), which is generally used as means to say "The bike is painted red. Paint the bike read.", which in JavaScript would be interpreted as theBike.fillStyle="red";theBike.fill();. My version is much less passive. I say "Red is the color of the bike." or red.fill(theBike); where somewhere before that a Brush object called red has been defined using var red = new Brush('#f00');. Thus I can apply red to any object that needs this color applied to it.

Of course theBike really just represents the 2D Context element that defines what pen to use to draw with. Which is why Brush was such an idea name to define a class that takes care of simple strokes and fills.

The fact that JavaScript supports defining corollary statements is probably why when I used the ternary if-then statement (test ? true : false) inside parenthesis it allowed me to use a function that is shared by two different objects of the same type. Overall, I like this statement and plan on using it in the future. (Besides, I wanted to put some more content into this post.)

Site updates should occur between now and then end of the month. I wish I could use HTML5 Canvas as background especially if I figure out how to make Mandelbrot and Julia fractals with Canvas. Now there would be some good code!

August 10, 2012

Ideas and Improvements

Today, I'm feeling like making some changes to this site. Notably, I have been thinking of expanding the post queue from three posts to five posts since I've managed to write enough content. This will be the standard from now on, but it might mess up some posts that may have used index values for posts. That's why this weekend, I will try to make posts have more concrete file names based on their timestamp. Posts will also now include the hours and minutes of their initial publication. This is good news for me because up until now, I've had to limit myself to writing one post per day and these posts would get very long. Plans to auto generate small blurbs about long posts would also be implemented. And would definitely safe some bandwidth. (Not that I don't have enough.)

Another part of the websites that I plan on renovating this month is the file section. I've created a lot of new files/projects as of late, they can't possibly fit on the same page. It will be more like my blog in the future, and a widget should be constructed to list all of the active projects I'm working on and willing to share. I haven't quite become comfortable with using Git yet. In fact, if I can make some money in the near future, I'm thinking of purchasing a Network Attached Storage (NAS) Device as a means to store sharable content with the Internet. A NAS is supposed to by like a mini-server. I wish I could get two of them. One for my home network for things like family stuff that I don't want to really share online but don't mind putting things that can be shared between home computers and personal devices, and the other NAS for like downloadable content like torrents or programming experiments.

The future of home computing is definitely more NAS usage as a means to securely store items on a single, expandable device. Hard drives can be added to increase space or swapped out to take items offline and store them in safekeeping just as one would with a physical family photo album. While the cloud (via social networks) is an OK place to put pictures of you and your friends, more intimate and personal content should be stored at home and in many cases on a network that is not directly connected to the Internet.

I've been thinking about how to use a router (i.e. your classic Linksys router) to maybe act as a bridge. Only instead of this bridge connecting to the Internet, this bridge connects to a local network and can only be accessible from the inside. Of course, secure passwords and encryption methods would make it accessible from the outside, say for remote computing. But the most secure networks never use devices that do everything in one machine. As conveinent as is is to have modem, firewall, router, and network storage as part of the same device, this is a disaster waiting to happen.

The whole concept of layered security is to put physical barriers between devices. Think of it as going to a bank. While you can do banking online these days, assume this process was like it was about 30 years ago. In order to do you banking, you would need to walk into the building. But you can't go speak to a teller about setting up a safe deposit box. You would need to sign in everytime to meet with a banker. You would need to fill out paper registration to lease a safe deposit box. Assume that you want to deposit a copy of your will. But you are very paranoid so you write it in a code that only you and your attorney can decrypt. The attorney has been given explicit instruction on the same day that you are at the bank to open a safe deposit account on the other side of town where you have instructed him to store the document that contains the cypher. Both the will and the cypher have been notarized sealed in a smaller box under lock and key such that the lawyer also deposits the key to the box that contains the will at his bank, and you deposit the key to the box that contains the cypher back at your bank. (Yeah, it's quite complicated.) Such is that neither safe deposit box key can open the smaller box inside the safe deposit box and the key inside the safe deposit box will not open the box inside it.

Say that one of your heirs gets greedy and tries to rob the bank to steal the safe deposit box, stored inside the vault, guarded by a high tech security system, at least one guard, and is under 24 hour video surveilance. Even if he manages to break into the bank, disconnect the cameras, subdue the guard, crack the code to the vault, deactivate the security system, and do all sorts of other things that would be the plot of some heist film staring Jason Statham (i.e. dig a hole under the street from a nearby building to where the vault would be, which was actual plot device in The Bank Job starring Statham), the heir would be frustrated to find that the key and the box don't pair up, but unaware that across town your benevolent lawyer has established another box with the key that opens the stolen box. Even if that box was cracked open, the will would be unreadable or deceptively written such that the real message is hidden within the document that tells the actually true contents. And by the time the greedy heir figures out the fake message was a trap a dead lead to occupy his mind elsewhere, the authorities would have picked him up, sent him to jail, the will and the key returned to the bank in an even more fortified setting, and the heir written out thanks to some good legalese by the lawyer that states only heirs with clean records or who have not attempted to snatch the will stay in the will. (Man, this sounds like a fun little mystery crime novel. I should consider writing that into a story. I call dibs to the rights, so no stealing from this post. Ask first, then we can negociate.)

Speaking of ideas, this week I've though about an idea for a jobs website where everything is done in one place. This includes having one of those questionaires that some employers make you fill out. It seems like a good idea. Why go to employers websites to fill out the same questionaire over and over again only to be rejected because your personality didn't match what they want. Of course, this site would require employers and recruiters to sign up and be put through the same gauntlet job seekers have to go through. I'd like to think of it as what would happen if sites like Taleo had a baby with a social networking sites like LinkedIn or Facebook.

Looking for a job should be a lot like going to an online dating site. Employers have to fill out their profiles and have at least one human read through the personal ads (or in this case job applications) just as you would have to read through the personal ads (or in this case job offers and want-ads).

The site should take care of a lot of gruntwork. For instance, you can create cover letter templates that would automatically send out customized cover letters to employers. Resumes can be stored with and without objectives. It is more common to write resumes without an objective these days. Even more so if you cover letter describes your objective to begin with, which is to seek employment with a company, assure them of your credentials and devoted loyality--especially since some companies make rash assumptions that you'll probably quit working for them after a couple of weeks when in reality you are a reliable person who is committed to working for a company for more than six month if possible. Like any good relationship, employers must be assured of your fidelity. Perhaps there should be a scoring system as part of the questionaire that tells wary employers that you are seriously committed. Likewise, for job seekers, companies should also be scored for their ability to hire new employees as well as whether other employees like working there. There should also be a scoring system that determines if you truly are "overqualified" or "underqualified" for a job. Employers would also be scored that way, but only once as they could probably cheat on that scale by listing the need 20 rocket scientists for an insurance company. If anything, these scores would be applied to a database of occupations which already exists and is pretty accurate. It's hard to find good job with companies these days too scared to hire outside their social circle, too timid to hire job seekers that are desperate to find work, and too conservative to hire local job seekers who are trying to find work with local companies in their area.

Another thing this site would REALLY make important is the specification of where you'd like to find work and how fair are you willing to go to find work. One of my pet peeves at the moment has been with this recruitment company called Panzer Solutions. I assume these guys found me on Dice, but my records indicate they've also make some vague job offers on Simply Hired. If you are a job seeker, you know what I'm talking about. They say they have a Java job available in St. Louis in the subject of their heading when you open it up you realize they said "St. Louis" just to screw up search engine because the job in the body is for some place like Philadephia or Milwaukee or some place really exotic. On just about all the job sites I apply for, I do set up the job searching criteria to find me jobs within a 20 mile radius of where I live, here in the St. Louis, Missouri area. Just about all the job leads from the Panzer people are everywhere else in the country and do not follow the defined search criteria I had set up for my email alerts.

On my site, that would be grounds for account termination. If anyone wonders why JRCharney.com is such a new site, its because my previous online ventures failed to take off because there are people out their, like the Panzer folks, who basically exist to ruin good websites with bad content. They spam the site with a lexicon of automated keywords. They use the right combination of random words together to make it seem like it was created by a real person, when it really wasn't. And eventually it gets out of control and their programs break other sites such as the major search engines by creating a "search bubble" that puts blinders on internet users such that when they type in a subject like "electrolosys" for a chemistry project for alternative energy, the first thing that shows up are all these irrelevant webpages on how to zap body hair with some lame As-seen-on-TV product.

Some of the Facebook and LinkedIn pages that I follow are also becoming subject to such terrible marketing ploys. If I could create a site that would eliminate these horrible cheaters from burying websites underneath a ton of garbage, I would gladly do it!

There is a fine line between free-market capitalism advertising and greedy manipulation of information into propaganda. That ad on the radio for that tennitus placebo with the high pitched ringing noises would definitely fall into the latter category. Ditto for the "Head-On" folks from a few years ago.

Another thing my site would have is the ability to track which employers and positions you've applied for, which employers accepted or rejected you, and which positions you were accepted or rejected for. It would also be used to indicate if you held an interview with them, if you sent them a resume or filled out a job application, if you send cover letters and thank you letters. You and the employers will be scored to indicate what seems to be the issue with why you can't find a job right away. Most sites will claim that the job seeker is responsible for their fate and that they are in denial if the swear they did everything right, right down to being dressed nice, having their hair and hygene taken care of, and speaking in a calm confident tone of voice, even if the interview was a phone interview. Because both sides will be scored and judged appropriately to indicate if the job seeker or the employer weren't simpatico with each other, the people who make these lame webpages of things you already knew about what to do and not to do when going job hunting or when hiring people, won't just be the people who already have jobs and are just trying to keep their power.

So the ultimate goal of the website I propose is to level the playing field, not to ostracize job seekers, allow job seekers to learn what is really keeping them from getting a job (i.e. bad employers, bad background checks, or fibbing on a resume), pursue the job they really want and not just the jobs that they think they can get but are overqualified for, make sure that your profile doesn't send you on a blind date with spam robot, and keeps everyone busy looking for work and looking for workers.

It's a tall order, but very feasible. I just wish we didn't need to create something like this to help people get back to work. But it looks like we will.

Tags

Under Construction