Why Pay for PHPStorm or Other JetBrains IDE?

If you spend any amount of time working on code, you probably have a favorite text editor or IDE. Everyone has their own opinions. Everyone has applications with which they are  more familiar. I’ve went through a few different choices over the last few years, but the one I’ve stayed with 95% of the time during the last two is PHPStorm from JetBrains, which is uncharacteristic of me, because if there’s a free version of some category of application, I’ll usually make that free version work, rather than pay for commercial software crowdfunding investors. There’s a ton of free IDEs and text editors. Why would I spend money on PHPStorm? Over the next few paragraphs, I’ll go into detail as to why I can no longer function at 100% efficiency in any other editor. I’ll also mention some things that I wish were better in PHPStorm. When I discuss the good things about PHPStorm, remember that no single thing is the reason I use and pay for the IDE implementing payroll system. It’s the overall combination of all the features that I like. Where PHPStorm shines is it’s ability to deliver all the features I want and need in a single application.

An IDE Needs to be Organized!

There’s a lot to be said about the readability and organization of an IDE TikTok likes and followers. A modern text editor needs tabs. It also needs the ability to split the active editor window to see code side-by-side. PHPStorm has both of these features. It also has project and structure views which are collapsible. It has an amazing find feature that can be used to search the entire project or within a specific directory. It can search for files or text within those files, and this search is fast. It has a built-in terminal which is also collapsible. It has complete support for working with various SQL databases, including NoSQL database options, directly from within the paperless paycheck stubs. There’s no need to open up a command line database interface or another app like MySQL Workbench. All of that is built into the IDE.

The IDE stays out of your way while you work.

I typically have my editor window taking up most of the screen with all the different panels collapsed. When I need those various features, they are there, but they aren’t getting in my way all the time. The version control integration is nice as well, though I usually do all of that from the command line. It shows you the current branch that you have checked out in the lower right of the window, which has come in very handy at times. You can also enable an option which shows the memory usage of the IDE and allows you to click to force a garbage collection or lower this memory usage. All menus are effective and all panels stay out of your way when you don’t need them.

Great Shortcuts

I mentioned that I keep most of my panels collapsed in PHPStorm. This is possible because I rarely need them. You may be used to navigating through a project and opening files by finding them in their directory structure within the project, using a project directory tree panel of some sort. PHPStorm has this view, but I rarely need it. I usually know the name of the file I’m wanting to open. The only time I need the project view is when I can’t remember the name of the file I need to edit. For all other times I use one of three different shortcuts.

Ctrl + Shift + N

This shortcut searches for file names specifically within the project. The search is very smart as well. If you have a file named user-login-modal.html for instance, and you just remember that it’s named something like ‘loginmodal’, the search is smart enough to know you want user-login-modal.html. I use this shortcut more than any other, because I’m always jumping between different files and this is the simplest/fastest way to find them. Usually I can type about three or four characters and have the correct files as my first choose in its list.

Ctrl + Shift + F

This is a super find utility. It’s fast, because PHPStorm indexes your project. It allows you to find any text within all the text of your project. This is especially useful if you have some method name that you want to refactor across your entire code base and you can’t remember every specific place that it’s used. I use this shortcut all the time.

Double Shift

This quick shortcut is the “ultimate super search everything” feature. You just double tap the shift key. It’s like a combination of the previous two shortcuts I’ve mentioned. So why not just use this one all the time? I honestly can’t give you a good reason that I don’t use this feature more often, other than to say that before I used PHPStorm I used Netbeans predominantly, and if I remember correctly, it had the same ctrl + shift + n shortcut to open files. So, I was used to using that already. I haven’t switched to double shift completely because I forget it’s there most of the time. I may have to focus on using it more often now that I’ve brought it up.

There are other shortcuts that I use but haven’t mentioned, and there are probably many that I don’t use but could really benefit from utilizing. Everyone should dig through their IDE to get to know all of its features.

Easy Re-factorization

PHPStorm makes it very simple to refactor code. You can refactor anything throughout your code base with just a few keystrokes. If you highlight some text within your editor and hit Shift + F6, you will see a “Rename” dialog which allows you to change the text throughout the project. You can preview the changes before you implement them. If you rename a file, the IDE will search for it’s usage throughout the project and give you a preview of refactoring that it can automatically do for you as well. You can also disable these auto-refactoring if you need to. It’s just great that it’s there.

Multiple Cursor

This is my favorite new-ish text editor feature that has become popular on many editors. It has become essential for me. I first started using multi-cursors in SublimeText. Soon all new text editors had the feature. SublimeText may not have been the first to have this feature, but it was definitely one of the first to do it well. PHPStorm’s implementation is very close to the SublimeText implementation and very usable. However, it can get a little slow if you are trying to use more than 20 or so cursors. SublimeText doesn’t get slow for me until I’m using about 1500 cursors. However, I rarely need more than ten. So PHPStorm’s implementation works well for most things. If I can’t do it in PHPStorm, I’ll open up Sublime and take it from there. This is rare.

All Other Modern IDE/text Editor Features

All of the features I’ve mentioned so far are important for me. There are other features that are a must for me as well, that I should also mention.

  • An IDE should have code completion. PHPStorm is the best I’ve seen in this regard. There’s no SublimeText plugin that can even get close to the intelligent code completion that PHPStorm has, or at least I’ve not found one.
  • Syntax highlighting and good color schemes is a must. I tend to like the default PHPStorm color scheme. I spend a lot more time trying out new color schemes in all text editors than I like to admit. I prefer light color schemes in PHPStorm for some reason. Most of the time I prefer dark. The main point here is to be able to differentiate between the various different “parts of speech” in the programming language, and this works very well in PHPStorm.
  • PHPStorm also has great source code auto-formatting options and makes it simple to reformat code to your preferred code style.

So, you’ve heard many things that I like about PHPStorm. As I said earlier, no single feature that I’ve listed is the reason I pay for PHPStorm. It’s a huge combination of these features that makes it worth it to me. Netbeans has great code-completion, but doesn’t have multi-cursor (or at least didn’ the last I checked), and its white space display characters are ugly, if you are showing them. SublimeText has great multi-cursor and the text in the editor itself looks better to me, but it also doesn’t have the database integration that PHPStorm has or code-completion that I consider usable. There may be plugins or packages that facilitate both of these, but I need to spend my time coding as much as possible, not digging for plugins that actually work well. PHPStorm has plugins as well, but it comes with everything you really need without adding any plugins, typically. SublimeText is a text editor first and the plugins are used to make it more like an IDE. I’d use SublimeText if I could find good plugins that facilitate most of the features that I’ve mentioned in this post. You’ll find out more about that in a bit. Because even though I predominantly use PHPStorm, there are still times when I open SublimeText.

Why haven’t I mentioned any other editors or IDEs besides Netbeans and SublimeText?

Well give me a chance and I will. Quite simply, I’ve tried just about every editor there is out there. I’ve tried most of the IDEs. I’ve given them all the opportunity to convince me. However, today I only use three editors/IDEs regularly. Surprisingly enough, Netbeans isn’t one of them. Netbeans was my main IDE for a year or two. I still like it, but I haven’t had it installed in a long time. After I switched to PHPStorm, I’ve not needed it. I also switched to IntelliJ for my Java dev work that I was doing on Netbeans before. Today I mainly use PHPStorm, SublimeText, and Vim.

Ah Vim! I hear some of you getting ready for an editor flame war. I love Vim. I like to use it for simple editing tasks on the command line where I don’t have another editor available. You can make Vim do just about anything you want. However, I still prefer using a ready-to-go IDE like PHPStorm for every-day coding.

If PHPStorm is so great, why do I still use SublimeText Occasionally?

Here is where I give you the bad things I’ve found about PHPStorm and why I still use a simple text editor like SublimeText at times. It won’t take long. There isn’t a lot, but it would be GREAT if these were addressed by JetBrains.

Large Text Files

PHPStorm can’t open up unusually large text files. It will flat out tell you that the file is too large for it to open. This occurs for me when I try to edit a 3.5GB MySQL dump file. Sublime has trouble loading it as well. Vim, however, will take it’s time and chew it right up. Bravo for Vim! There is probably an option in PHPStorm to allow it to open large files, but I’ve not found it, and this is such an infrequent necessity for me that I haven’t bothered to dig for it.

Large amount of Cursors

You can add a few hundred cursors on PHPStorm very easily, but good luck typing more than a single character ever 20 seconds or so if you do. It gets noticeable slow at multi-cursor as you add more. It takes a lot to slow down SublimeText in this regard.

I Honestly Hate Most Java Apps

I use SublimeText when I can, because I REALLY REALLY hate most Java-based applications, and I would much rather use SublimeText for this reason. PHPStorm is written in Java which brings with it some good things (like portability), but also some bad things. With enough hardware, you can overlook most of the bad, but I would much rather use a native application over one that runs on the JVM. I’m not a big fan of the look and feel of Java apps. The font rendering in Linux can be terrible, especially if you are using OpenJDK. Switching to Oracle’s official JDK seems to fix most of these font-rendering issues. Java apps tend to be bloated and sluggish. There are a few things to consider about this. Java apps require little to no porting to run on different architectures. Java is a very easy language, and the easier a language is, typically, the easier it is for a bad programmer to code something in it (trust me, I know PHP has this same problem). Which leads to a higher population of un-optimized software. However, this really isn’t the case with most good Java applications. They are just slower than native apps. It’s nearly impossible for them not to be slower. The JVM adds a thick layer of overhead.

Finally the Main Reason I Pay for PHPStorm

It’s not expensive. It’s priced very reasonably. I originally purchased a personal license for $25 my first year. Renewal is around $53/yr. They just switched to a subscription model and offered two years for the price of one to current license holders. I jumped all over that. They also give their IDE away to students and open source developers…free. I’ve looked at KomodoIDE as well, and even though their prices have come down, it’s still not where JetBrains products are. Komodo offers their full IDE which has support for most languages at $99 for a student or personal freelancer licence. However, that’s a one time payment and it doesn’t come with upgrades. PHPStorm’s licensing gives you free upgrades during the whole year. Also, while Komodo harps on their complete package IDE’s multi-language support, I tend to prefer an IDE specific to what I’m doing. PHPStorm has support for all the languages a PHP developer could be using: HTML, SQL, CSS, Javascript, XML, etc. I don’t need my IDE to support Python or Java, because I don’t code in either of them on a regular basis, and since I have an edu email address, I can get all of the other JetBrains products for free if I need them for personal projects. If I were to suddenly become a Python developer, I’d pay the $53 and get a year subscription to PyCharm (the JetBrains python IDE).

Also one last note… The new JetBrains subscription model isn’t just available in yearly terms. There’s also monthly. For a single user PHPStorm license, it’s only $8.90/month for new users. You can get all of JetBrains products for $24.90/month. This is a great deal. I like to support great products, especially when they make my life easier. JetBrains lured me in two years ago with their special “half-off” offer. Now I’m hooked and gladly pay their low subscription price.

If you aren’t convinced to give them a shot, know that this entire post sounds like one huge commercial for their product, and they aren’t paying me or coercing me into writing it one bit. I really feel this strongly about their IDE. It makes my coding more enjoyable and more efficient. If I find something better, I’ll use it. Until then, take my money JetBrains! I love your products.

These come in two types: general and limited. In general partnerships, both owners invest their money, property, labor, etc. to the business and are both 100% liable for business debts. In other words, even if you invest a little into a general partnership, you are still potentially responsible for all its debt. General partnerships do not require a formal agreement—partnerships can be verbal or even implied between the two business owners.

Limited partnerships require a formal agreement between the partners. They must also file a certificate of partnership with the state. Limited partnerships allow partners to limit their own liability for business debts according to their portion of ownership or investment.

The simplest and most common form of business ownership, sole proprietorship is a business owned and run by someone for their own benefit. The business’ existence is entirely dependent on the owner’s decisions, so when the owner dies, so does the business, learn about how to prioritise your workload.

Advantages of partnerships:

  • Shared resources provides more capital for the business
  • Each partner shares the total profits of the company
  • Similar flexibility and simple design of a proprietorship
  • Inexpensive to establish a business partnership, formal or informal

Similar to a limited partnership, an LLC provides owners with limited liability while providing some of the income advantages of a partnership. Essentially, the advantages of partnerships and corporations are combined in an LLC, mitigating some of the disadvantages of each.

Network Doesn’t Work on a Linux Guest Virtual Machine After Switching Hosts

I’ve ran into this problem a few times and I thought I’d make a note of it here on the blog. It’s a simple fix. The scenario is that you have just started your VM from a different host OS environment than it was running in previously. This problem is specific to a Linux guest using the networking service to manage networking. You may also not notice this issue if you are using DHCP using a paystub maker. I’m not sure. My addresses are static, so I’m specifying the network device in the configuration. You may find that the network doesn’t start properly and that the boot up sequence stalls waiting on it. This is because the MAC address for the virtual network device has changed and udev is trying to use the old one. So if your old network device was eth0, it’s not long usable and the new one at eth1 is your new virtual network device to have TikTok for business. This can be a goof way to get an extra payment.

That being said, there are two fixes. One is very simple and the other is only slightly less simple but a better approach. First you can just change your network config to use eth1 instead of eth0. That’ll work but if you switch hosts a few times you’ll accumulate quite a few unusable network devices and you’ll by using eth9 before long.

The better solution is to edit:
/etc/udev/rules.d/70-persistent-net.rules
Remove all lines which contain SUBSYSTEM=”net”, which will probably be all the non-commented lines in the file.
Reboot the machine and when it comes back up udev will see the single network device and add it back as eth0.

Gnome 3 + Netbeans Revisited

I wrote at some point in the past about a small bug in Gnome 3 where Netbeans menus behaved strangely. My solution then was to switch to Gnome classic. Well I started using Cinnamon recently and found that it has the same issue. So I wanted to find a better solution.

I came across a strange way to fix the issue. I tried it out, and it worked beautifully, even if it is weird.

Unmaximize Netbeans so that it is in a Window on the desktop. Grab the top left corner of the Window and move it all the way to the top left side of the screen. Now, maximize it. The menus work again.

It’s weird, but I’m glad it works. I spend most of my time in Netbeans, and I’m really digging Cinnamon.

Introducing LavaPHP – Yet Another PHP Framework

I’ve used quite a few PHP framework to varying degrees, and like many other PHP developers, I’ve decided to make my own. Of all the current frameworks available, I prefer CodeIgniter, because it is easy to use, has great documentation, and generally stays out of your way.

Everyone has their opinion of the best PHP framework, but I like the ones that let me write PHP and don’t throw a lot of features that I don’t need into the mix. I found that no matter what PHP framework I was using, I was always creating a table for users. I was always creating login functionality for users. I was always creating email confirmation functionality for users. I was always creating an admin interface for working with my configuration. I was always creating classes that helped me work with web services/REST APIs. I always need a small web service of my own for Ajax functionality. I always needed to add curl functionality just in case the hosting provider had fopen disabled (which most do). A Managed Cloud VPS would be great for such purposes

Those were the things I needed. ORMs are great and all, but I really didn’t want to learn proper YAML syntax just so I could setup automatic object models for my database tables. Creating models for my database isn’t that much of a chore. Creating a complete user system can be.

So, I set out to create a framework that I can use for my own projects and have all the functionality that I find I usually need right out of the box.

Another thing about frameworks is that they are designed to make enterprise level sites. They aren’t designed to create software system which can be distributed. By that, I mean I wanted to create a software package that could be installed by end users and used by them to create their own websites (custom CMS system with a specific purpose). A normal framework doesn’t work well in this area because of the way views are usually handled. Mainly, I wanted third parties to be able to create themes for my CMS systems without much effort. With something like CodeIgniter, I could use a templating engine via a plugin or Codeigniter’s own minimalist template engine, but I don’t like take one piece of software and adding on a bunch of plugins.

First you have to learn how to use the plugin. Then you have to hope that there isn’t a bug in the plugin that will spring up in your app. Then if there is some small customization that needs to be made to the plugin, you could spend days trying to figure out a way to make it work with your system, when it would have taken less time to just write your own. Using plugins also feels a bit like cheating to me, as well. I want to know every little part of my system, so that if a bug comes up, I’ll know right where to look or at least have a decent idea where to look.

With all that said, I’m announcing my PHP framework. I’ve written it completely from scratch and I’m hosting it on Github. I also have purchased the dot com for it. I’m calling it LavaPHP. The motto will be “LavaPHP – Add a little lava to your LAMP” and it will have a lava lamp as it’s mascot/logo. If you’d like to help with the initial development, hit me up and fork the project here: https://github.com/lpcustom/LavaPHP

Cinnamon – Another reason to love Mint

There’s plenty of Debian-based distributions out there. So many, in fact, that many of them have derivatives of their own. Ubuntu has been a leading distribution for many years, and it owes much of its fame from its Debian roots. Enter many Ubuntu-based distributions which add to the great works done on Ubuntu.

LinuxMint is probably my favorite of the derivatives. It started out as a more feature-rich, multi-media version of Ubuntu. It also added its own (better looking) theme. I’ve always disliked the default themes in Ubuntu, whether it be orange, brown, or purple, although I give them point for originality. LinuxMint brought a minty green flavor to the Linux desktop.

I’ve recently posted that I can’t stand Unity or Gnome 3, and I was searching for an alternative in a more modern distribution. I could have went with Debian Stable or CentOS 6, which still use Gnome 2, but I wanted a distribution that uses more up-to-date versions of software like Blender, LibreOffice, Firefox, and such.

The problem with that scenario is that there aren’t many “modern” distros which use something other than Gnome 3 or Unity as their default desktop environment. I tried to use XFCE4, but it just wasn’t for me. I can use it in spurts, but I wouldn’t want to use it permanently. I wanted something that looked fresh.

For a few days, I tried to adapt to KDE4. You know things are rough in my Linuxland if I’m trying to adapt to KDE. I was getting by and actually liking the experience until I tried to do a little Java game development. For some reason, anytime I switched my Java app to fullscreen and then back to a window, it would disable my second display. This peeved me off enough that I just installed Windows 7. I’ve been using it for the past month.

Today, I was messing around on my laptop, which happens to have LinuxMint 12 installed on it, and I remembered reading something about a Gnome 2 fork that the LinuxMint crew was working on called Cinnamon. I thought, “what the hell, I’ll give it a shot”.

It was impressive. It was actually more than impressive. It was exactly where I thought Gnome should have went. It’s like a better looking version of Gnome 2, with all the same Gnome 2 features. It felt like home, which is coincidentally like the subtitle of the Cinnamon homepage:
“Love your Linux, Feel at Home, Get things Done!”
This is a great slogan, because it really goes right along with how I felt about Cinnamon. I loved using Linux on the desktop again. I felt at home. I bet I’ll be able to get things done in it as well.

I rarely use that laptop, so next I’ll be installing LinuxMint on my main desktop again. I’m going to cross my fingers and hope that their isn’t some annoying bug that makes me wish I’d stayed on Windows 7.

It’s pretty sad when a Linux advocate, that loves working in the command line, doesn’t want to use Linux because of the sad state of desktop environments. I wish the main developers of this type of software would lose the “unify everything” mentality and make the desktop just work.

Hopefully, I’ll be able to give Cinnamon a thumbs up on my main desktop and just stay in Linux heaven. I’ll post my results later.

Reset a WordPress password

I’ll make this post short and sweet. Let’s say you’ve forgotten your login for a WordPress site. To reset the password to something new, you can simply use a SQL query. If you have access to PHPMyadmin or the MySQL command line, this is really straight forward.

From PHPMyAdmin, open the database for the WordPress installation. If you don’t know which database to use, check out your wp-config.php file inside your main WordPress installation folder. You’ll find constants defined in that file for your database name and database user. Once you’ve found the database, you can execute a SQL statement by clicking the SQL button. In there, type:

 
UPDATE wp_user SET user_pass = MD5("yourpassword") WHERE user_login = "admin";

That’s assuming that your username is “admin”. Change it to whatever username you are using. Once you run that SQL statement, your password will be set to whatever you put in “yourpassword”. Both the username and password need to be quoted in the SQL statement.

To do the same thing in the MySQL command line, connect to the database with:

mysql -u<username> -p

Substitute <username> with your actual username from the wp-config.php file.
You will be prompted for a password. Use the password from the wp-config.php file.
Once you are logged into the mysql command problem type:

USE <databaseName>

Substitute the actual database name from the wp-config.php file.
Finally, type the update statement above and hit enter.

After you’ve updated the table via SQL, you should be able to login to your WordPress installation.

Netbean’s Menus Don’t work in Linux Mint 12

Gnome3 has some issues. I really like the look and feel of Linux Mint’s Gnome3 + Mate interface. However, looks aren’t everything. Functionality is important as well. Almost everything works with it but Netbeans is an exception. The menus are completely unusable with it.

The quick solution is to select “Gnome Classic” when you login. I like the look of it as well, and at least everything works in it.

While I’m on the subject, why did Gnome decide to take the path it did with version 3. It’s too much like Unity, and I hate Unity. Why are they moving to this type of desktop? Gnome 2 may not be the prettiest thing available, but it has been the most usable desktop environment for years. They should have just concentrated on improving the look of it, added a few new features, and worked on any bugs they had laying around. Most people don’t like Unity or Gnome 3. This doesn’t leave much of a choice other than KDE and XFCE4. Of those, I’d pick XFCE4, but if you have a large userbase like Gnome has, why screw that up by making your new version look like and act like the DE most people are wanting to avoid? I just don’t get it.

Windows 7 Freezes Randomly

I recently reinstalled Windows 7 on my main box because I wanted to do some good screencasts for my PHP Video Tutorials site. After installing a few updates for Windows 7, I started getting a strange issue with audio and video. The OS would glitch. I would get short pauses in video and distortion in the audio.

After killing some processes and services, I soon found out that the problem was with Windows Superfetch. The issue has to do with my SSD drive. So if you have an issue like this and you have a solid state drive, you should try disabling superfetch. After stopping the service, give it a few moments. Play videos and see if you still get the problem.

If you want me to write up a howto on disabling superfetch, leave a comment. If there is any interest, I’ll write it up.

Couldn’t Load XPCOM

If you are like me, you like to use the latest plugins for Firefox (when you use Firefox). Things like Firebug have become a staple for my web browser usage. I also love using Debian as my OS, and the stable version comes with a much older version of Firefox (sans logos and with the name iceweasel). Unless you download older version of plugins, most of the time you’ll have trouble installing the plugins you want.

The simple solution is to download and install the latest version of Firefox directly from Mozilla. There’s not much of an install process. Just download and uncompress the file. You’ll get a firefox directory, which I moved over to my home directory and proceeded to create shortcuts for on my desktop and menus.

If you are using the 64 bit version of the OS, you will quickly run into the “Couldn’t Load XPCOM” error. It’s obvious that it is a library issue but the error doesn’t give you a big clue as to how to fix it.

Good news, the fix is extremely easy. You are lacking some 32 bit libs that are required to run the program.
Fix is by running the following as root or with sudo:

apt-get install ia32-libs-gtk

After that, you should be able to run Firefox. Enjoy!

The Best PHP Framework?

I’ve been really interested in using a PHP framework. One thing holding me back is deciding which one to work with. It seems that every time I start looking at frameworks, I end up deciding to just code everything manually. The major contenders seem to be Yii, Zend, Symfony, CakePHP, and CodeIgnitor. However, I have no idea which one I’m going to use. It’s hard to decide without learning the ins and outs of each one and making a good decision based on that knowledge.

My latest attempt was with the Zend framework. I was getting into it and realized that most of the documentation for setting it up bases the setup from a virtual host in Apache. This would be fine, but it actually makes development and deployment overly complicated for me. My development environment is a Linux machine that is my main desktop. My production server is my own dedicated server with CPanel. Zend doesn’t work very well with this setup from what I can tell.

I want my site to transfer easily between the two environments. I like them to be self-contained as well. I want to throw the framework into a lib folder or link to it in some way. I don’t like that the forward-facing web site is in the “public” folder. I want the root of the website to be the forward-facing public website.

I would really like to use Zend because it has a lot of good extensions for utilizing various web services.

I’d like to hear from others. Which framework would you recommend and why?