The year wouldn't be complete without it :) It took a lot longer then I hoped, for variety of reasons, but finally went live. New version is much more pleasant to use, it is improved and simplified in many ways. Besides new design, it went through lots of code changes which may not be obvious and this is what I want briefly explain here.
The state of affairs
The project was built in ASP.NET 2.0 time and this shows. It is heavily server-side, with WebForms and user controls on the front end. Obviously, not an optimal these days. During long run, project grew by including lots of code from many people. This is great, but it gets less consistent, harder to maintain with less interest from developers who usually interested in very latest tech to sharpen their skills. To keep it alive and well, we have to push tech side to keep up with time. And this was one of the biggest reasons for 3.2 release.
The 3.2 update
There are two opposite ways to go when you need to bring old code base to the latest tech. You can start from scratch and move your way up, adding features. It seems simpler and cleaner - unless you tried it before. If you did, you know it takes ten times more effort you thought it would and won't guarantee your code will be much better. Inevitably, you'll be reinventing lots of wheels with various success and find yourself diving into old code and borrowing a lot. I don't like this.
The other way is to re-think your code and start pushing it to better state piece by piece. Split it into components and modernize them one by one. That seems like a lot more work, but it is not. In fact, I believe with "real" product this is the only way - you don't disrupt your customers and do migration behind the scene as much as possible. In case with BlogEngine, we can switch URL rewrite to routing. Then get rid of user controls in widgets, modernizing entire widgets framework. Then take care of themes removing remaining user controls. At this point, it is MVC ready. And MVC project can eventually start taking advantage of new features in MVC5, like platform portability, code editor independence and so on. I know it is not as exiting as jumping right into new environment, but this is where it is going, and I'm ok with that. In fact, in my experience this is the most practical skill developer needs to master.
We getting really close to BlogEngine 3.2 release and I'm mostly switching to integration tasks, checking how it works with external code, like themes, plugins etc. As an exercise I decided to refresh my old Boldy theme and make it work with very latest code. To make things simpler, I took layouts from new standard theme and applied Boldy styles on top of it. The result you can see here on this blog, install from gallery if you running BlogEngine.NET blog or check out code at GitHub.
Also, if you running BlogEngine.NET, I would really encourage download latest version and try it out with your blog to make sure it works smoothly and we didn't miss anything specific to your environment. There were lots of changes to the core base, not just UI, and we would love to catch errors before we go live.
BlogEngine supported multiple users as far back as I can remember. But what people really wanted was multiple blogs on the single application install. So that hosting company, for example, can install application and provide free blog to everyone buying hosting space. Having multiple users not helping here, it just not the same. And at some point BlogEngine went all in and added multiple blogs feature. It did it by allowing basically replicate entire blog structure as many times as needed, including membership, in every child blog. So right now we have multiple blogs, each with multiple users, custom roles and elaborate access right permissions for every user. This is nuts. More...
There has been a lot of activity lately on BlogEngine.NET development that went under the radar, so I want to clear things up a little. Because code moved from Codeplex to Github without much publicity, people don't see any changes in a while and assume project is
dead done. This is exaggeration :) New release is under active development and coming along in a month or so. It is a bit of ironic that auto-update added in the previous version supposed to allow small quick releases, but somehow we ended up with another monster update. Old habits die hard, I guess. Anyways, here are some highlights on the coming features, some already implemented and some planned or in the works. More...
Usually blogs have well known structure, which is understandable; one of the core ideas behind blogs is ability to "talk" to each other using RSS, format that defines very strict set of entries like "post", "category" or "tag". Also common format helps to move data from one blog engine to the other making your data portable - big plus. But there are times when you want to go beyond this limitation, and add something valuable to you and your readers. So there is need to extend blog's data structure somehow to hold this extra data. For example WordPress adds meta tables for most main entities, and you have post meta, comment meta, user meta etc. I don't necessarily like this approach as it tightly binds extensibility points to existing structure. To borrow from famous Rumsfeld's rant, those are "known unknowns", and sometimes we have to deal with "unknown unknowns". Maybe single generic entry where post or user defines a type would be a better choice, because then we could add new type instead of creating new entry (table). This also allows (oh my!) to have meta for meta entries and not just stick another key/value pair into the post or comment. More...
Looking for improvements to layout and theme structure in the next BlogEngine, I went through existing code analyzing how these things work now. Its not very straightforward, so I decided to put together a quick overview that might help someone maintaining and modifying blog built with BlogEngine.NET. More...
BlogEngine.NET 2.8 was just released to the public, and if you feel lazy going through the steps to upgrade, here is how to do it easier. Download little utility from the link in the end of this post, watch short video with example how it works and you should be able to upgrade without breaking a sweat. One thing that is not mentioned in the video is that this utility if it finds issue it will try to fix it and log this into log.txt in the same directory where you run it. You might want to check this log file to make sure it did a correction properly. More...
BlogEngine 2.6 release is out and you might want to upgrade your existing blog to take advantage of all the new features. You can read instructions how to manually upgrade your site or you can try updater utility I've been using lately to automate upgrades for my blog, it worked well for me and chances are it'll work for you too. It doesn't do database part, so you'll need to do some extra work to run database script and update web.config with connection string. For XML provider all you need is follow instructions below.
Lets assume you use c:\upgrade directory for this exercise.
- Download 2.6 release (web), unzip and copy files to c:\upgrade\be26
- Pull your existing blog to c:\upgrade\old using FTP client like FileZilla
- Download and extract BeConsole.exe to the same c:\upgrade directory
- Create new folder: c:\upgrade\blog
- Open command line, change directory to c:\upgrade and run this command:
beconsole -u c:\upgrade\old c:\upgrade\be26 c:\upgrade\blog
The c:\upgrade\blog now should have your blog upgraded to version 2.6 and ready to be uploaded to your host. I tested it upgrading from 2.0 and 2.5 versions and it worked quite well. Let me know if you run into issues and I'll try to improve it more. May be we can plug it into next BlogEngine for one click auto-update, who knows.
Post navigation in BlogEngine is a little hard to customize. By default it looks like picture below and that works fine with standard theme. Small problem is that those angle brackets and "|" in the middle not that easy to get rid of without some nasty CSS tricks because they baked into the core code that nobody likes to touch (or you'll have to remember to carry it over during upgrade). Good news is that you don't have to touch it and still modify navigation any way you like pretty easily if you follow this little guide. More...