Friday, July 18, 2014

Sitecore DMS with MongoDB

From Sitecore 7.5, Sitecore has move its DMS database to MongoDB database.

    http://www.velir.com/blog/index.php/2014/06/03/xdb-sitecore-dms-moves-to-mongodb/
    http://www.sitecore.net/About/Press-and-Media/Press-Releases/2014/05/MongoDB.aspx

Some of the benefits that Sitecre is aiming to achieve by moving to MongoDB are,

  • Scalability
  • Speed/Performance
  • High Availability
  • Flexibility with the Data model

About MongoDB
MongoDB is the leading NoSQL database, empowering businesses to be more agile and scalable.
MongoDB is built for scalability, performance and high availability, scaling from single server deployments to large, complex multi-site architectures.
Quote : https://www.mongodb.com/mongodb-overview

To achieve high scalability and speed, MongoDB has cut down (removed) some features in RDBMs. Few features that MongoDB does not deal with are,

  •     Joins
  •     Complex Transactions


MongoDB provides some online training/certification programs, which I think very good to learn about MongoDB.
    https://university.mongodb.com

I have started to follow "M102: MongoDB for DBAs" training program from MongoDB university. Even though I am in the beginner level when it comes to MongoDB, I have already started to love this new database. :-)

Tuesday, May 20, 2014

Drawbacks in Twitter Bootstrap

From last year onwards, when I first saw and used bootstrap, I was a great fan of that. I used it in one of my ASP.NET MVC project and I was actually in love with it. It makes life so much easy for the developers that is not very good with front-end development (as in my case :-D ) as well as for rapid application development and prototyping.

Bootstrap, a sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.
Quote : http://getbootstrap.com 
But, recently I have heard some negatives about Bootstrap framework from few of my UI expert friends. I tried to list the drawback points below.
  • Adds more than necessary (bulky) HTML and CSS to a web page
  • Hard to structure/design web pages as necessary
  • Contains some accessibility issues - Ex: color contrast issues, non-sementic markup, etc
  • Released versions are not backward compatible
  • W3C HTML and CSS validation issues

Alternative/Options :

  • Customize the bootstrap framework to fix these issues
  • Foundation 5 framework - http://foundation.zurb.com     
    • Note: I have not used this. One of my UI expert friend highly recommend this framework


Some good links regarding this issues :

http://www.wearecube.ch/limitations-of-twitter-bootstrap/
http://stackoverflow.com/questions/14227000/pros-cons-of-switching-to-twitter-bootstrap
https://github.com/dobtco/bootstrap-accessible/issues


Wednesday, April 16, 2014

Modeling Sitecore Data Templates

Yesterday, one of my best friends asked me, "What is the process you are using to Model sitecore data templates, out of sitecore?"

After that I did some research and came up with the below points.
  • Think sitecore data templates as Object Oriented classes.
  • Use template inheritance as OO Inheritance.
  • Use Class Diagrams to do the initial modeling of data in the site.
  • Think only about the data in the site. Don't think about the design.
  • MS Visio (or any that kind of tool) can be used for draw your initial models

I found following links very useful

http://gettingtoknowsitecore.blogspot.com/2010/01/inheritance-content-modeling-sitecore.html

http://maigruen.netzkern.de/data-modeling-in-sitecore.aspx

http://sdn.sitecore.net/Developer/Fundamental%20Concepts/Template.aspx

http://sdn.sitecore.net/upload/sdn5/developer/fundamentals.pdf
        2.3 Templates and Field


Please let me know your idea/methodology about this as comments below.

Friday, March 14, 2014

Sitecore Support Package Generator tool

Earlier days, when we need support from sitecore support, they are asking to submit set of documents. Normally, they are the same set of document like log files, App_Config folder, web.config, etc. This is a time consuming, boring process.

Last year, sitecore released a tool to generate these necessary files for sitecore support automatically.

That is Sitecore Support Package Generator.
http://marketplace.sitecore.net/en/Modules/Sitecore_Support_Package_Generator.aspx

This tool will generate/collect the required files from a given sitecore installation and generate a zip for you or will directly submit it to sitecore support. Cool.. isn't it :-)
This saved lot of time for us. :-)

Quote :
Features
The Sitecore Support Package Generator looks at a Sitecore CMS instance and collects information about:
• Application pool
• Web.config file
• /App_config folder content
• Sitecore and IIS logs
• Windows event logs
• Performance counters
• /bin directory listing
• .NET framework files — required for working with process memory dumps
• Machine's hardware configuration
• IIS application pool identity user permissions
• Hash codes of all files in the solution.
• All files from /temp/__UpgradeHistory folder.


Think of a scenario that you don't have access to your production servers or your production servers are managed by a other team. Then you need to get some details from the server to fix a bug/issue in the production environment.
This tool comes handy in this scenario also. You can provide this tool to those people who manage production servers and just asked them to run this and send you the generated zip. simple. :-)



Thursday, February 20, 2014

How to find packages installed on a Sitecore Instance

Few years back, one of the questions that I got from my manager was "Is there a way to detect/backtrack which packages are installed on a sitecore instance ?"

My answer was "No" to him at that time.

But, recently when I'm going through google, I found a blog post which describe a way to achieve this. Actually, this feature is already there in sitecore. We only have to know the where to look.

Login to Sitecore Desktop
Change database to "Core"
Open Content Editor and expand "/sitecore/system/packages/installation history" node

Here, you can view all the packages installed in the sitecore instance.
One thing to note that is, when you create the packages, remember to use the "Package name", "Author", "Version" fields as needed. Those field values are stored in the package installation history items.

For example, keeping "Package Name" as same for same type packages will store them under the same parent node in sitecore "/sitecore/system/packages/installation history" node.


Following blog post is about a simple tool/webpage to see the above information in a graphical way.
http://sitecorebasics.wordpress.com/2013/11/11/package-history-user-guide/


http://kirkegaard-at.blogspot.com/2013/10/sitecore-package-installation-history.html




Use of EnableEventQueue setting

When an item is updated and published, it did not get reflected on the website. But, when IIS cache is cleared, this new changes started to reflect on the website.

So, I looked into the code and could not find any issue. Then, I moved my focus to the sitecore configurations. Following are the steps that I tried/look.

1. Checked current website name is included in the <event name="publish:end"> node and <event name="publish:end:remote"> node.
    What this setting does is, it says to sitecore clear html cache of the sites specified in that event section, on publish.

2. Then, I looked into EventQueue table in the web database. It does not had any entries. So, that was the issue. So, I change "EnableEventQueues" setting to "true" on CM instance. This did the trick.

Reason for our issue was that sitecore is using EventQueue table entry to clear the cache on publish. Since there were no entries in the table, sitecore did not clear any cache.

Read following blog entries which describe the use of EventQueue table and settings in details to get a better understanding.

http://sitecorebasics.wordpress.com/2011/03/19/basics-of-sitecore-event-queue/
http://www.sitecore.net/Community/Technical-Blogs/Getting-to-Know-Sitecore/Posts/2010/07/Introducing-the-Sitecore-Event-Queue.aspx

Saturday, February 1, 2014

Sitecore IDTable

Recently when I'm trying to clear some of my old documents, I found "Student handbook Web Site .NET developer" handbook. When I go through that document quickly, I saw an entry about "IDTable" in sitecore. Eventhough I have seen this table, I was not aware of the use of that table till now. So, I thought of writing a post regarding the IDTable table.


The IDTable
You can store persistent mappings of arbitrary keys to Sitecore IDs in the Sitecore IDTable. 

By default, this is only used by the Sitecore CMS WebDAV functionality to keep locks on media items in the CM environment and does not need to be synchronized with the CD environment
You configure the location of the IDTable in the web.config file in the IDTable section in the connectionStringName parameter:
<IDTable type="Sitecore.Data.$(database).$(database)IDTable, Sitecore.Kernel" singleInstance="true">   <param connectionStringName="master" />
  <param desc="cacheSize">500KB</param>
</IDTable>
To synchronize the contents of the IDTable between the CM and CD environments, change the connectionStringName parameter in the IDTable configuration section to point to a Core database that is shared or replicated between the environments. Alternatively, it can point to a shared Web database
          Quote "Sitecore CMS 6.6 or later - Scaling Guide"
          http://sdn.sitecore.net/upload/sitecore6/66/scaling_guide_sc66-a4.pdf


IDTable can be used for tasks like keeping track of duplicate items when doing a custom import from another third-party application to sitecore.
   Sitecore.Data.IDTables.IDTable.Add(string prefix, string key, ID id);
By keeping IDs of items that has already imported to sitecore, if you run the import more than once, you have the option of skipping the IDs that already had imported to the system by keeping/monitoring the IDTable entries.

You can find an old blog entry about IDTable from following url :
http://sitecoredev.blogspot.com/2005/11/idtable.html

Updated:
http://sitecorejunkie.com/2014/03/01/synchronize-idtable-entries-across-multiple-sitecore-databases-using-a-composite-idtableprovider/