Client Environment – A Sitecorian Tip #1

Do not cut corners with your pre-production environments! – Phil Wicklund, Jason Wilkerson, Professional Sitecore 8 Development: A Complete Guide to Solutions and Best Practices.

Let’s be honest with ourselves, most of our clients prioritize cutting cost on their environment infrastructure as long as it is not production yet. However, this is not the optimal solution anymore.

I’m 100% certain that during your career, you had your production servers go down and had that “call” in the middle of the night. You wake up, stumble upon the reasons why the server went down, check the logs, reset the server, reset the IIS, check last deployment package, revert the last deployment, Ugh! countless attempts to figure out what happened.

In times of emergencies and especially when your client is losing money per the second, you will need to have your environment highly available to accommodate cases of emergency and that is not necessarily your production environment.

  • Your staging environment can serve as your production environment when sh*t hits the fan, so make sure it is a replica of your production.
  • When your client argues that they will invest only in the production environment, put your feet to the ground and make sure to win the stagingproduction argument.
  • Make sure to flush your staging environment with content from production in case you are not following a standard of having content authors start their authoring in staging towards production.
  • Make sure to use a standard continuous integration to deploy your work in order to not miss a step while deployment.

Happy Sitecoring!

Advertisements

Sitecore Tips and Tricks: Using NuGet Packages to Reference DLLs in your Project

One of the most irritating things we usually face whenever we worked on an inherited project from previous clients is the way DLLs are referenced in the solution project.

Typically, you will find a couple or more of missing DLLs due to referencing directly to the “bin” folder, WTH  !

An alternative for this which is not bad at all solution is having all your referenced DLLs stored in a folder called Lib\Library\Assemblies or any external folder that exists in your root folder and referenced in all your solution projects.

However, since I discovered the power of using NuGet packages for referencing DLLs, I found it useful for many reasons:

  • It is elegant and neat, and follows the same technique if you already are using NuGet packages to download and reference different libraries in your solution.
  • You can create different versions of your package adding/removing DLLs and still easy to update.
  • Re-usability! It allows you to reference your well-defined package over and over again and easily checkin inside your versioning system.
  • It makes you look smart! Oh well ¯\_(ツ)_/¯ !

MAGIC

  1. How to create a Nuget Package

To create a NuGet package, please do the following:

  • Create a folder with all DLLs you need to reference: C:\Sitecore POC\Custom Sitecore Nuget Packages\sitecore-lib-8.1
  • Create a “.nuspec” file. This file is an xml file that contains the definition of your NuGet package, references for your DLLs and source/target combination when referenced in your project.

You can use whatever naming convention you wish to have, I’m using Sitecore version along with the revision (update number). You can also include the version number as part of the name for later updates in visual studio. Mine is “SC8.1update3.nuspec”.

  • Install “nuget.exe”. You can find it here.
  • Run the following command after redirecting to the location of the “nuget.exe” file.

Now your package is ready and has the following name “Sitecore-8.1.0.160729.0.nupkg”.

2. How to install the NuGet package in your solution.

In order to install custom NuGet packages in your solution, please do the following:

  • Right click on the project you wish to install the package on and select “Manage NuGet Packages..”.
  • Define a new custom package source. Click on the settings icon on the top right hand of the window and you will be prompted with an options dialog.

NugetPackageSource

  • Click on the + icon to add a new source, give it a name and a source, click update and then Ok.
  • Now you can browse for your source and select the package you wish to install.

NugetPackageSelection

  • Repeat the same steps for all your packages. If it happened and you created a new version from the package, the NuGet package manager is smart enough to give you the option to update the solution using the new package if you wish.

NugetPackageUpdate

Bon Appetit!

SUGCON Europe 2016: An Insider Look – Part 2

Date: April 26th, 2016 – Bella Center, Copenhagen.

IMAG5532

An early bird start for the second day of the SUGCON, around 8:30 AM we barely overcame last night’s excitement and headed to an interesting start about xDB and mobile Analyticsc O_O eyes completely awake!

Mobile Analytics with xDB

IMAG5533

Do you know that tracking mobile activities and leveraging Sitecore xDB is possible! In a couple of screens, @agenttmi showed us how to map a mobile experience into xDB:

  • Users: in xDB, you can map users into contacts that has profiles where
  • Behaviors: what users do on a mobile phone is usually navigating between screens and triggering events, These users are assigned a persona and using certain campaigns and goals, page events are created to trigger certain metrics that are tracked in xDB and used to customize the experience for users.
  • Sensor Data: data collected from users include geolocation coordinates and gestures (impressive!) that are stored in xDB.

So how does this actually work:

This slideshow requires JavaScript.

So I was struggling to wake up here so hopefully you will have the chance to watch the full session after the great @kayeeNL finishes uploading them to Youtube.

Seconds and Cycles – Performance Optimization on the Sitecore Platform

IMAG5542

Ok, this was a very interesting talk about performance and optimization in Sitecore by Nathanael Mann and no wonder that many of Sitecore people were there at the room :)

To put all variables that affects Sitecore performance into perspective, he introduced Performance Candy:

  • Publishing: take into consideration what happens when you publish an item on production and how it is gonna kill your HTML cache and other factors specially with CM/CD environments.
  • Indexing: Fast queries are easy to use, however, don’t use them when the right thing to do is indexing!
  • Content Tree: yeah, remember to not overkill your content tree with too much direct children items under home node. Also, be wise and use Sitecore Buckets when needed, do not overkill your tree again with too much children items under a given parent item.
  • Caching: caching is important, you might not like what Sitecore is offering, but make sure that your components are designed where you can enable caching easily. Also, actually test that Sitecore caching is actually working in your MVC implementation!
  • Modules:
  • You code 😈: aah, remember how we like to overkill our code with too much IoC! yup, be careful when you write your code. Sometimes,

IMAG5551

If you ever had performance issues at production, and most probably you had, you would have experimented with different profiling techniques so make sure to foolproof your code against stress testing and make sure your server hardware specs won’t fail you when things get serious. My favorite tool is dotTrace but you can choose whatever you feel comfortable with.

Deep Dive – You, me and Sitecore MVC

IMAG5560

I recall my first encounter with MVC for Sitecore in late 2012 or 2013 (can’t remember exactly) and at the time, we got an RFP from a client specifically asking to use MVC in our implementation. At that time, and don’t be judgemental, the only question my colleague and I had was what is the added-value of MVC given that Sitecore is handling routing perfectly! (yup, at that time again, working on different non-Sitecore MVC projects, the only value we saw at the time was the awesome routing and neat URLs o_O).

Having worked with different Sitecore MVC implementations now and giving training to new developers, the first thing I would ask them if they worked with MVC before, if no, then I will ask them to learn MVC first and then learn Sitecore MVC as the two things are not the same and I didn’t want them to think that they both the same! (sorry Sitecore!)

IMAG5562

@herskinduk did a great and amazing session talking about Sitecore MVC and how is Sitecore is working to align with Microsoft who eventually ditched Webforms and investing only in MVC forms in frameworks starting of ASP.Net 5.

Also, if you have worked with Sitecore MVC before, you would have learned to have your View Rendering as light as possible (dumb accroding to Kern) only rendering content with no logic whats so ever. However, Kern is even telling you that your Controller Rendering should be even dumper and only use to call the view! so where is the business logic and all the magic will happen! well, it should be done on the service level as you will learn from @mhwelander when she shares her experience refactoring doc.sitecore.net!

So the bottom line is: MVC ALL THE THINGS 😎

 

Hedgehog Development – Sponsor Technical Highlight

This slideshow requires JavaScript.

In a 10 minutes window, both @seanholmesby and @nsgocev answered community questions regarding why to use TDS and pay for it while we now have Unicorn? I have been working with TDS since 2011 and it turned to be my best tool for serializing Sitecore items and doing deployments to different development, staging and production environments.

In addition, it helped having a visual tool inside your Visual Studio to track changes and facilitate deployments. However, I have to admit that I’ve been too lazy to explore the different capabilities TDS developed over time and most importantly the “Auto Sync” and “Comparing Sitecore Item Changes” that I learned a lot about it afterwards with a quick chat with @seanholmesby.

I still have the main concern of paying a license fee for each developer given that I have a development team of 15 Sitecore developers and the constant question from the CEO to justify paying that much money! however, I urge you to check @hhogdev youtube channel spotlight videos to learn more about it.

IMG_5791-1024x768 IMG_5792-1024x768

Photo credit: @billyjava

Can I have a Hedgehog swag next time!

The Physical Web with Sitecore – beacons, IoT and Sitecore Personalization

Cg9r9_5WwAAV_54

Photo credit: @kayeeNL

So with the widespread of the physoical web and IoT, @Sobek85 demonstrated brilliantly that this made possible with Sitecore. I’ve gotta say, I didn’t read much about this yet but Mike showed us how to use Raspberry Pi and Windows 10 IoT Core to capture users interactions to Sitecore xDB and it actually worked! AWESOME stuff man!

He also built a Kyosk application that was actually running live to demonstrate what will happen if you were in a Zoo and decided to see different animals and hence collect that into Sitecore xDB and personalize your experience next time you visit this via your mobile! pretty much cool stuff, right! check more here.

This slideshow requires JavaScript.

 

Practical Habitat: Embrace the Architecture

IMAG5580

So if you are not familiar with Sitecore Habitat, it is the architecture used to build the latest Sitecore Hackathon on top. You can say that it was the most controversial topic to hear from different developers at SUGCON. And as @seanholmesby puts it, it should not be mistaken as the toolkit or the recommended solution by Sitecore to go with when you build your own projects, but rather, it is the architecture, the modular design, the way of thinking that you can embrace or take into consideration when you build your project.

@AndersLaub started his talk by comparing Software Architecture to Engineering Architecture trying to reach out for a definition or at least a perspective on how software engineering and architecture should be approached and hence defined.

IMAG5581

Now, according to Anders, you should look at your solution architecture as your macro building block, the basis of your foundation implementation that should persist over time and hence should be done right. Remember how many times you had to revamp the whole thing for choosing the wrong architecture approach for your solution o_O!

IMAG5582

Now, once you define the architecture design for your solution, you go deep down into how you define your functions (methods) and here you look mirco meaning, these little pieces and components of you code are small well-defined units that can be either reused/replaced over time and hence are subjected to modifications over time.

IMAG5584

We developers are in love with tools and we use it all the time and I guess over time, we are no longer able to keep up with all new tools and plugins that intends to make our lives much easier (mmm.. I guess this is debatable, isn’t it!). Anyway, these tools are the most changeable over the life time of a project.

IMAG5585

So to sum this up, remember when you started you architecture design with N-Tier 101 and developed it overtime to include SOA and then MVC and Web APIs on top of service layers and yada yada yada… and do you remember when you implemented that perfect solution design and found out later that 90% of subsequent projects you won follows the same architecture design and then you had to reinvent the wheel and try to build your own company framework that serves as the basis of future development and implement separate modules that are ready to plug-in into any new implementation! well, now you hear me! whether you choose to use Habitat as the basis of your solution architecture, or customized that and followed a modular approach or DDD or even The Onion architecture, always pick the right solid architecture design and build on it!

IMAG5586

By the way, you can find a Habitat version built with TDS here.

Ladies and Gentleman, Start your Testing!

IMAG5591

Oh boy, this session was an epic where Alistair Deneys proved that integration and unit tests in Sitecore are possible and not a nightmare for developers to create Item Contexts and Database Contexts. Now, why Unit Testing against Sitecore is usually hard? mainly because input data is usually exists in the content tree, add to that, it is hard sometimes to mock some Sitecore APIs not to mention some of these are older versions before unit testing became popular.

By trying different techniques, he managed to run live different types of testing using:

  • FakeDB: which is a unit test framework that provides full items functionality in the memory. This approach allows you to fully mimic Sitecore items and test against real data.
  • Using the test runner in VS where you can test Sitecore classes directly. (Loved the live success/failure on the stage :mrgreen:).
  • Adding unit test projects to your solution with proper referencing to Sitecore dlls and configs. You can create your own dummy database in the config and use it when calling your items.
  • Using Sitecore.LiveTesting and Sitecore.LiveTesting.Extensions which are frameworks that allows you to run tests in real asp.net environments. More can be found here.

Unfortunately, I missed the initial part of the talk as I was hanging out in the Digital Marketing Summit booths! oooh well… ¯\_(ツ)_/¯

 

I refactored doc.sitecore.net and all I get was this experience

IMAG5595

A closure won’t be perfect without the amazing @mhwelander with her decisions Donkey Kongs that led her through the journey of refactoring doc.sitecore.net :mrgreen:

So, the basic requirements Martina had in mind were:

and what she came up with was:

Cg-XO61VEAAJVlj

Photo credit: @KurtBilde

So what do we get here:

  • MVC all the things, and as Kern said, you start with a very thin View and controller renderings and what Sitecore is trying to do here is to try to be more closer to ASP.NET MVC implementation.
  • You build your Business Logic into a service layer. What we are trying to accomplish here is to keep the two above as dump as possible but at the same time avoid implementaing another Sitecore wrapper on top of Sitecore implementation o_O.
  • Build with Unit Testing in mind, here she introduced a Fake Repository to facilitate testing as being explained at Alistair session.
  • Keep it simple and easy  to maintain.

Thanks Martina for sharing your experience with us, you’ve been AWESOME 😄😎

ChDPDAtU4AEZRuW

Closing word with Pieter Brinkman

IMAG5601

So what this conference is all about? it is about you and me, about those who are passionate about Sitecore and very enthusiast to share their knowledge and participate in the community. Those who believe that Sitecore is the platform to go with and are eager to enhance it in their every day implementation.

This slideshow requires JavaScript.

It was really great meeting y’all guys (as my southern friend says) 🙂 and hope to catch up with you in other #Sitecore events and #SUGCONs. And for the #SUGCON team, you all ROCK! Cheers! 😎⭐:mrgreen:

Copenhagen, you’ve been nice! I finally had the chance to meet these two great guys who have supported me all the way to become a Sitecore MVP and influenced me to be active in the Sitecore community, you guys Rock! see ya later I guess 😄

IMAG5559

And you Copenhagen… till next time 🙂

IMAG5637

SUGCON Europe 2016: An Insider Look – Part 1

Date: April 25th, 2016 – Bella Center, Copenhagen.

This slideshow requires JavaScript.

Have you ever been high before?! looking in retrospective, these two days of SUGCON EU were one of the most amazing times I spent this year. First and foremost, I had finally the chance to meet lots of great people I met online and on twitter and never had the chance to meet in person before and second, for the amazing sessions and talks we had during these days amazingly presented by @TakeItEasyAlan! 😎

What is next for Sitecore?

Of course, a start never perfect without @sitecore for the opening keynote where @mssitecore and @ln_sitecore talked briefly about Sitecore vision for later releases like Sitecore 8.3 (Oooh, give us a break! clients didn’t grasp Sitecore 8 to start with yet but yeah.. whatever!) and the focus on enhancing the Content Management Experience along with Marketers experiences by enhancing:

  • Sitecore MVC implementation.
  • Better migration tools for content from previous versions to newer ones (mmmm… lets see about that!).
  • Sitecore publishing and caching.
  • Focusing on contextual experiences.
  • Stuff I couldn’t remember because I was too excited to concentrate o_O.

As Michael Seifert said “Sitecore aims at providing the right content to the right consumer in the right time through the right channel”, Sitecore aims at expanding its outreach and support for other channels and enhancing the overall xDB experience.

The highlight of the day was … and wait for it… the possible death of WFFM and replacing it with inline editing experiences along with ECM setup as part of forms creation 😥 (Well.. not really, kill all the things WFFM 😈).

Serialize all the things with Unicorn

I’ve gotta admit, my first real encounter with Unicorn was when I worked on Sitecore Habitat. I read about it before but never used it to serialize Sitecore items. Now, as Kam Figy puts it, this is a tool that was developed to serve one purpose only which is serializing Sitecore items which makes it unfair to compare it to other products and tools that do this and more and yup.. it is open source.

Unicorn provides you with an up-to-date experience of keeping your Sitecore items live on the disk meaning that it always works with the “Master Repo” and whenever you perform a pull request, you will immediately merge any conflicts with your local changes.

Also, it uses “Rainbow Engine” to enhance the merging experience. What I liked about the new changes provided (along with the easy code changes made to the codebase) was merging single-line field values. Let’s take the Delta XML value stored for the Layout in your item for example. The changes are stored as a single-line XML tags that changes as you add/remove sublayouts, now a change is made and a conflict is obviously there so how we are gonna take both changes into consideration! what Unicorn does is to split the values into separate lines allowing you to easily merge from both sides 🙂

Also, he discussed serializing and syncing users and roles using YAML and Nuget packages.

IMAG5442

It was nice meeting you @kamsar and wow! too much of you and @AndersLaub in one pic! 😮

Commerce Nerdvana for Sitecore with uCommerce

I have attended a uCommerce for Sitecore training earlier this year and having worked with it previously on some projects, it is a very powerful tool for creating products and creating a very easy and rich eCommerce experience while integrating it fully within Sitecore items and campaigns.

In this session, Soren Spelling Lund talked about the technical aspects of uCommerce development that leverages SOLID principles that allows developers to extend all the things >:D😎 and making it an easy experience to custom integrate uCommerce APIs within your current Sitecore implementation.

I liked the resemblance with LEGO in his implementation. I mean, as long as you break down your implementation to the smallest well-defined component (you can think atomic as well), you can create whatever shape you want, from small applications to large ones with plug-in style and it is easily overridable and I saw it first-hand while working with it.

And… meet my nice uCommerce Hoptimist ❤

IMAG5635

 

Starting now, you were obliged to pick and choose between different sessions that were held in the same time 😥 however, thanks for the great @kayeeNL for recording these sessions and making it available on youtube 😎

IMAG5445

Atomic design to the Max

This slideshow requires JavaScript.

I loved this session by @tbraga01 and it was a pleasure meeting him in person 🙂 you see, if you go back in time to when you have experienced working with clients who continuously changes content, images and even the whole page layout based on different user journeys and locations, the whole personalization implementation was a real pain in the arce! you would implement some workarounds where dynamic placeholders are used to hold different sublayouts and yada yada yada..

Now with Atomic design, similar to the Lego picture from the previous session, intends to further break down your component implementation to more smaller reusable atoms that allows for a full rich content editing experience to content editors and marketers giving them a whole ownership on how pages looks like and changes based on different campaigns and journeys.

This slideshow requires JavaScript.

Furthermore, I assume that you are familiar with Carousel implementation where you had to move even the text of the button along with all text and background images to Sitecore to be dynamically changeable while relying on CSS styles to control the location of the content and how it looked like (not to mention the pain of responsive design in this case). Now going atomic in this case allows you to break the carousel control into smaller pieces that can later be reused as a text banner, an image banner, a video banner, an image carousel, an image/video carousel without worrying how content editors will later on use these controls on your pages. (For me, this whole thing make it easier when you estimate development time for different controls and functionalists when bidding on projects specially those with tight schedules 😉).

Now, the question would be, do we go Atomic moving forward in our implementations? well Tim says No! you have to be smart when to use it based on your business needs and requirements. In addition, he illustrated the pros and cons of using Atomic design in your implementation.

IMAG5463

Thanks Tim for the AWESOME Poster, soon to be hanging in my office 😄

Cg5RmSMUoAEcBoy

 

Design Patterns on Sitecore: The Good, the Bad and the Ugly

This slideshow requires JavaScript.

I finally met the great @mike_i_reynolds in person! I have known Mike for my whole Sitecore development life and finally thanks to @SUGCONF and @TanasukTech for making this a reality 😀

Now, we developer, are very tempted to use design patterns in our implementations even if this is not the right thing to do sometimes o_O and as one would say:

all-the-processors

If you know Mike, he likes to give you a background history of places, countries and of course about design patterns!

IMAG5469

and then, he took us on a quick ride on how to implement three of the famous deign patterns within Sitecore along with how not to overkill your implementation with these design patterns:

Decorator Pattern: One of the most commonly used design pattern that is served as a wrapper to your objects within the same interface and hence you can apply changes to this single object without affecting the behavior of other objects in the same place. You can find more detailed implementation here.

Template Method Design Pattern: among all design patterns presented, I loved this the most! In this design pattern, you will implement a parent (general) abstract class that defines how inherited classes will behave once implemented. You will be able to override methods with whatever logic you fancy. However, you need to be careful as it is tightly coupled to the abstract class. More on implementing this pattern can be found here.

Strategy Design Pattern: similar to the previous one, it allows you to select the behavior of your classes at runtime. Meaning, this pattern captures the abstraction of your implementation in an interface and make it separate (independent) from clients using it by making the implementation details in the inherited classes. More can be found here.

Although Mike was jet lagged a bit, however, it was an interesting talk and nice to see these design patterns actually implemented in Sitecore 😉

Sitecore xDB personalization at the client

IMAG5485

Ok, let’s agree that this one yet another great presentation brought by Nick Hills and I learned a lot seeing xDB live for the first time in my life 😥

So when and how you decide to scale your personalization experience to client-side (building personalization rules in JavaScript) and what are the considerations and variables to take into account. First and foremost you have to understand your system! pretty much easy right! well… there is many factors that derives how you are planning to do so, the components of your system, variables, parameters that direct the way of how your clients will be experiencing your system and how you are going to personalize this experience for them.

Now, you can use a cookie and querystring to derive how a user in Copenhagen will see data presented on your site (lets say you are promoting SUGCON for developers to register and join) compared to those coming from outside the event location. You can extend their experience by leveraging xDB data to add more depth, scale and accuracy to their engagement. Now, the question would be:

IMAG5490

The answers could be one of these:

This slideshow requires JavaScript.

mmmm… however, it seems that..

IMAG5496

So how does it actually work:

IMAG5499

If you didn’t totally understand all of this, it is fine! this is what marketers actually do and this bla bla goal conversions, tracking users behaviors and provide custom personalization experiences.. meh! anyway, it was a great talk and I enjoyed it nevertheless :)

Introducing Coveo for Sitecore Pro Cloud Edition

IMAG5500

In a 10 minutes race, Laurent Simoneau presented the new changes @Coveo for Sitecore is bringing to intelligent search that leverage machine learning to stud and learn users search behaviors and helping them to search precisely for what they want.

For instance, sometimes, some users search for the label that is placed underneath a computer mouse! now, for many keyword search engines, this small little detail is hardly used or even recognized as a valid search term. However, Coveo are developing their search algorithm to enhance users search experience for tiny little details like these.

Also, they introduced taking Coveo to the cloud where you no longer bound to on-premise installation and you can leverage the cloud features to enhance Machine-Learning experience even more 💡

The MVP and Hackathon Awards Ceremony and quiz time!

IMAG5631

Hurray! I got my MVP Award as part of the Emerging Market region 😎😄 and if anyone of you guys has pictures for the awards handing, please tweet them to me 😀

It was really nice celebrating all these great developers as part of Sitecore active community members. I felt very proud to be among these and hopefully will continue this experience for the coming years as well.

This slideshow requires JavaScript.

As for the rest of the day, man! It was loads of fun, talking and talking and talking! I guess this is the most enjoyable part of the whole thing, being able to talk and have fun with fellow developers in person and enjoy it to the max 😄

Coming up next, SUGCON Europe 2016: An Insider Look – Part 2, stay tuned!

Sitecore MVC 101 Series

Hello

I have been giving Sitecore training to my team for almost three years now. Over the years, lots of Sitecore concepts, tricks and best (recommended) practices became so familiar that whenever I sat with a developer, I will confuse him with a bunch of different ways to do the same thing and let him eventually do whatever s/he wants 🙂

Now, finally, I’m putting my brains in my head and creating this blog series so they would find a centralized source/location of articles that helps them understand Sitecore 101 instead of being swamped with the old Sitecore training materials we had from Sitecore 6.2 times!

This time, however, I’m doing it on top of Sitecore Habitat as is, meaning, I will include all the difficulties and issues that might come in the way and provide a fix on the spot. Also, I will leverage more open source tools to get them up to speed on different tools our different partners use in their day-to-day development tasks.

As I’m learning myself a load of stuff along the way, I decided to do it proper using a bootstrapped theme and will continue building on it until.. who knows.. one day I quit Sitecoring O_o if only that is a possibility!

Github location for the solution is here.

Sitecore 101 series:

  • How to create a new project on top of Sitecore Habitat Solution.

Sitecore Habitat: Issues on the Side!

So I finally had the chance to setup Sitecore Habitat! I’ve gotta say that it took me sometime trying to figure out why the Gulp script was not working. Now, all you need to setup the site and configure it is to follow the steps in Anders Laub blog and then follow Martina’s video.

Now, I went ahead and changed the configuration settings to match my pwn local files structures and links. Following these steps was pretty much straightforward. However, what happened is that whenever I tried to run the first Gulp scrip, I kept getting the error below:

CopSitecoreLibI’m not gonna lie, this took me quite a while to figure out what is happening. Finally, I decided to put my brains in my head (meaning thinking like a developer!) and started to debug the Gulp script by writing on the console some logging information where I finally figured out what was happening! When I changed the paths in the gulp_config.js file, I copied and pasted the folder path without any consideration of the need to ad ‘\\’ between folder paths! ending up to have a missed up location route that prevented the copy dlls from working!

WrongFolderPath

So changing the paths to the below fixed the issue O_o

websiteRoot: “C:\\inetpub\\wwwroot\\HabitatLocal\\Website”,
sitecoreLibraries: “C:\\inetpub\\wwwroot\\HabitatLocal\\Website\\bin”

Another issue I faced was no matter I ran the “Copy-Sitecore-Lib” scrip without any errors it didn’t copy the dlls back from Sitecore to the project based on the sequence determined in the tasks list!

GulpTasks

What I ended up doing was running the scrip “Publish-Assemblies” to get the thing working, even the script itself indicates that this is the right thing to do.

PublishSolution

Also, Running “Sync-Unicorn” took forever that I doubted it even worked. I went and done that manually from http://habitat.local/unicorn.aspx?verb=

Hope you find these small things handy next time you set up your Habitat instance.

Can’t Open Installation Wizard Popup in Sitecore 8

An interesting issue we stumbled upon recently was that we had an issue in the “Installation Wizard” and the “Package Designer”. Whenever we opened the popup, it freezes and stop working. We made sure that the IIS User has full permission on the website folder, checked all log files with no clear or suspicious error in the log!

InstallationWizardAs I was in a hurry to install some packages to the client, I went ahead to “Workaround All The Things“! checked the “Data” folder and manually created “Packages” folder and put the packages to install there and went back to the Installation wizard, put the package name and Voila it worked!

What I found later on after checking the Package designer to create some packages that the issue was fixed! So the morale of this is: Workaround all the things 😈 ! nop… the missing “packages” folder in the Data folder was the root cause of this and apparently Sitecore assumes that the folder will always be there and crashes if it was missing instead of creating it! 😕