Thursday, May 30, 2024

Exploring the Most Widely Used Software and System Architectures Today

     In the rapidly evolving world of technology, the architectural foundations of software and systems play a pivotal role in shaping how we interact with digital services and products. Today, several architectural paradigms dominate the landscape, each bringing unique advantages that cater to the diverse needs of modern enterprises. This blog post delves into the most widely used software and system architectures, highlighting their features, benefits, and real-world applications.

 1. Microservices Architecture

     Microservices architecture has become a cornerstone for modern application development. Unlike monolithic architectures, where all components are interwoven into a single system, microservices break down applications into smaller, independent services. Each microservice focuses on a specific business function and communicates with others through well-defined APIs.

 Benefits:

- Scalability: Individual services can be scaled independently, allowing for more efficient resource utilization.

- Flexibility: Teams can develop, deploy, and manage services independently, fostering a more agile development process.

- Resilience: Failure in one microservice does not necessarily bring down the entire system, enhancing overall system stability.

 Applications: Companies like Netflix, Amazon, and Spotify leverage microservices to handle their vast, dynamic user bases and complex operations.

 2. Serverless Architecture

     Serverless architecture represents a shift from traditional server management to a model where cloud providers dynamically manage the allocation and provisioning of servers. Developers write and deploy code in the form of functions, and the cloud provider executes these functions only when needed.

 Benefits:

- Cost Efficiency: Charges are based on execution time and resources consumed, eliminating the cost of idle infrastructure.

- Simplicity: Developers focus solely on writing code without worrying about server maintenance or infrastructure management.

- Scalability: Functions automatically scale with the demand, ensuring optimal performance without manual intervention.

 Applications: AWS Lambda, Google Cloud Functions, and Azure Functions are popular serverless platforms used in various scenarios, from data processing to real-time file processing.

 3. Containerization and Kubernetes

    Containerization, often associated with Docker, involves encapsulating applications and their dependencies into containers. Kubernetes, an open-source orchestration platform, manages containerized applications across a cluster of machines, ensuring automated deployment, scaling, and management.

 Benefits:

- Portability: Containers can run consistently across different environments, from development to production.

- Efficiency: Containers share the host OS kernel, making them lightweight and fast to start compared to traditional virtual machines.

- Orchestration: Kubernetes provides robust tools for managing large-scale container deployments, handling load balancing, scaling, and more.

 Applications: Organizations like Google, Airbnb, and Goldman Sachs use Kubernetes to manage their containerized applications, ensuring reliability and scalability in their operations.

 4. Cloud-Native Architecture

     Cloud-native architecture is designed specifically to leverage cloud environments, encompassing a range of practices such as microservices, containerization, and DevOps. It emphasizes the use of cloud services, infrastructure as code, and continuous integration/continuous deployment (CI/CD) pipelines.

 Benefits:

- Resilience: Cloud-native applications are designed to handle failures gracefully, with built-in redundancy and automated recovery.

- Agility: Rapid development and deployment cycles enable organizations to respond quickly to market changes and user feedback.

- Cost Optimization: Leveraging cloud services allows for dynamic resource allocation, optimizing costs based on actual usage.

 Applications: Companies like Uber, Shopify, and Pinterest exemplify cloud-native approaches, utilizing the cloud's full potential to deliver robust, scalable, and agile applications.

 5. Event-Driven Architecture

     Event-driven architecture (EDA) revolves around the production, detection, consumption, and reaction to events. This asynchronous communication model decouples event producers from consumers, enabling more flexible and scalable systems.

 Benefits:

- Decoupling: Components can operate independently, improving modularity and reducing interdependencies.

- Scalability: Systems can handle varying loads efficiently by responding to events in real-time.

- Responsiveness: EDA supports real-time processing and decision-making, enhancing user experiences.

 Applications: Financial services, e-commerce platforms, and IoT applications often employ EDA to process transactions, manage inventories, and handle sensor data in real-time.

 Conclusion

     The landscape of software and system architectures is continually evolving, driven by the need for scalability, flexibility, and efficiency. Microservices, serverless, containerization, cloud-native, and event-driven architectures each offer unique advantages that cater to different requirements and challenges. By understanding and leveraging these architectures, businesses can build resilient, scalable, and responsive systems that meet the demands of today’s fast-paced digital world.

Wednesday, October 28, 2020

Editing bacpac file before importing


The bacpac file I have generated from Azure SQL had a reference to an external resource - that I do not require. Hence, when I was importing the database locally it was failing. Clearly, I need to remove the reference to the external data source.

As I do, googled, and got couple of solutions :

  • Change collation of an Azure SQL database by hacking the BACPAC file : Very helpful to know what exactly need to be done to copy an Azure SQL Db to local SQL server. When I tried create the cheksome of the model.xml file - it was saying invalid dacpac file - (quite obvious as mine was a bacpac file not dacpac)
  • Editing a .bacpac file : Then this microsoft article helped me creating a PowerShell script - which did not quite working for me - ( I am on a Windows 10 machine, possibly and using different PowerShell ? - did not get enough time to investigate further).
  • Get-FileHash : PowesrShell to generate checksum for files : Finally, found the command that helped me to generate the checksum for the file as explained in other two articles. (BTW, I had to remove all the reference to the external data source)
voilĂ  - now I need to start my actual task - track the transactions in the database for some front end activity and finally create SQL script to generate test data. 

Thursday, March 23, 2017

Salesforce (SFDC) as an Identity Provider (Idp)

Started to implement SSO for one of my project without knowing anything.
Trying to note down to identify the bits and pieces here.
Steps followed :

  1. Set up a dev account with Salesforce. https://developer.salesforce.com/signup
  2. Playing with Salesforce how SAML based authentication works in there : https://developer.salesforce.com/docs/atlas.en-us.identityImplGuide.meta/identityImplGuide/identity_quickstart_SAMLgen.htm
  3. Set up a custom web application (SP-service provider) to work with Salesforce (Idp) : https://developer.salesforce.com/page/Configuring-SAML-SSO-to-Custom-.Net-Application
  4. Step 4 din cover how I can actually redirect to a particular page after successful login. Utilising the  RelayState parameter.

When sending Authentication request pass the RelayState parameter as below :
On AssertionConsumerServiceUrl check for the RelayState url parameter is passed back :

Issues I will be working on next are :
1. Registration - how it works from custom website
2. How it will works for manual approval for registered users.Any api or else ?
3. How the authentication works through this custom site wide - do I need to ping every time to Idp ?

Ultimate goal is to prepare a project template that can be reused.

Thursday, April 21, 2016

Opensource PDF generator : wkhtmltopdf

wkhtmltopdf and wkhtmltoimage are open source (LGPLv3) command line tools to render HTML into PDF and various image formats using the Qt WebKit rendering engine. These run entirely "headless" and do not require a display or display service.
There is also a C library, if you're into that kind of thing.
I am writhing this post just to keep record of what actually worked for me - the command I mean.

PATH_TO_wkhtmltopdf\bin\wkhtmltopdf --header-spacing 14 -T 22mm --header-html header.html cover cover.html toc --xsl-style-sheet toc-default.xsl article.html article_to_publish.pdf 
The command above prints a page as pdf with cover page, table of contents and header The TOC layout used is generated using a command as bellow:
PATH_TO_wkhtmltopdf\bin\wkhtmltopdf --dump-default-toc-xsl >> toc-default.xsl
Full document can be found here, which definitely I din find quite qood. 

Wednesday, September 16, 2015

LINQ: Problem with Deferred execution

This morning I started my day googling for an exception in the code:
Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries
And as most cases, I ended up with a Stackover solution:


The code that I was cleaning up was as bellow:


This was breaking for large data but working fine for small data.

It was breaking when the Except() is used to compare large data – the reason is EF most cases does Deferred execution- so all the incompleteCourseId, completedCourseId and requeriedCourseId are evaluated when the Except() is called. For small data it can execute – but for large data it breaks.

Similar thing can happen when complex query needs to be executed through LINQ; So possibly its a good idea to split the queries into multiple ones and evaluate whenever required/whenever requires fetching large data.

So the solution is I forcefully evaluated each of the query using ToList() and it seems it is working good now. Off course cost is multiple SQL call.

Reference:
http://stackoverflow.com/questions/14163390/some-part-of-your-sql-statement-is-nested-too-deeply-rewrite-the-query-or-break


Monday, June 15, 2015

Passing EventArguments to RelayCommand in MVVM

I was to override the default behavior of the editable ComboBox control. Where if clicked the in the combobox the text will always be selected.

The View :
<ComboBox x:Name="cboList" FontSize="25"
     TabIndex="8" MaxDropDownHeight="270"
     Style="{DynamicResource ComboBoxStyleLargeScroll}"
     DisplayMemberPath="Name" SelectedValuePath="RepID"
     ItemsSource="{Binding VisitorHostList, UpdateSourceTrigger=PropertyChanged
   ,ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
     SelectedItem="{Binding UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True, ValidatesOnDataErrors=True
   ,NotifyOnValidationError=True, Path=SelectedVisitorHost}"
     SelectedValue="{Binding Inductee.HostRepID, UpdateSourceTrigger=PropertyChanged
   ,ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" IsEditable="True" VerticalContentAlignment="Bottom" MinWidth="0" MaxWidth="351">
                                    <ComboBox.Resources>
                                        <Style TargetType="{x:Type ScrollBar}">
                                            <Setter Property="Width" Value="50" />
                                        </Style>
                                    </ComboBox.Resources>
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="GotFocus">
                                            <cmd:EventToCommand Command="{Binding GotFocusCommand, Mode=OneWay}" MustToggleIsEnabledValue="True"/>
                                        </i:EventTrigger>
                                        <i:EventTrigger EventName="PreviewMouseUp">
                                            <cmd:EventToCommand Command="{Binding PreviewMouseUpCommand, Mode=OneWay}" MustToggleIsEnabledValue="True" PassEventArgsToCommand="True" />
                                        </i:EventTrigger>

                                    </i:Interaction.Triggers>
                                </ComboBox>
The ViewModel :
#region Commands
  public ICommand PreviewMouseUpCommand { get; set; }
 #endregion
#region Constructor
        public MyViewModel()
        {
         
            PreviewMouseUpCommand = new RelayCommand<MouseButtonEventArgs>(PreviewMouseUp);
         
        }
#endregion
#region eventhandler
private void PreviewMouseUp(MouseButtonEventArgs e)
        {
            try
            {
                System.Windows.Controls.ComboBox cboHostList = e.Source as System.Windows.Controls.ComboBox;
                if (cboHostList != null)
                {
                    var cboEditableTextBox = (cboHostList.Template.FindName("PART_EditableTextBox", cboHostList) as System.Windows.Controls.TextBox);
                    if (cboEditableTextBox != null && !cboHostList.IsDropDownOpen)
                    {
                        Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            cboEditableTextBox.SelectAll();
                            cboEditableTextBox.Focus();
                        }));
                    }
                }
            }
            catch(Exception ex)
            {
                Util.Logger(typeof(MyViewModel)).Error("Error in PreviewMouseUp of ComboboxList", ex);
            }
        }
#endregion

Friday, May 22, 2015

Custom ActionFilter in ASP .Net MVC

I had a scenario like if a person doesn't have proper access to a resource he will receive a message on a page.
Initially I thought I should implement custom Authorization Filter [customize the existing Authorization Filter] - but it looked like Authorization filter is implemented [at least in my application] more like if the filter is not met you are redirected to login page - kind of session checking and stuffs like mandatory things for each of the Actions.
But in my case I was putting this check on a single Action - off course having option to reuse the filter later.
Following is the Controller with Filter:

[Authorize]
[PermittedSiteActionAttribute]
public ActionResult Siteinfo(int id = 0, string nodeType = "")
{
RASSiteDetailsModel model = null;
return View(model);
}

The  PermittedSiteActionAttribute lokked like :
public class PermittedSiteActionAttribute : FilterAttribute, IActionFilter
    {
        bool _IsAuthorised = false;
        void IActionFilter.OnActionExecuted(ActionExecutedContext filterContext)
        {
            try
            {
                if (!_IsAuthorised)
                {
                    filterContext.Controller.ViewData.Model = null;
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Error in PermittedSiteActionAttribute>OnActionExecuted", ex);
            }
        }
        void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
        {
            try
            {
                var actionParams = filterContext.ActionParameters;
                object siteId;
                actionParams.TryGetValue("id", out siteId);
                if (siteId != null && decimal.Parse(siteId.ToString()) > 0)
                {
                    Util util = new Util();
                    _IsAuthorised = util.IsPermittedSite(decimal.Parse(siteId.ToString()));
                }
                if (!_IsAuthorised)
                {
                    filterContext.Controller.ViewBag.AuthorizationMessage = "You are not Authorised to access this resource; Please select a different site.";
                }
            }
            catch(Exception ex)
            {
                Logger.Error("Error in PermittedSiteActionAttribute>OnActionExecuting", ex);
            }
        }
    }
Here OnActionExecuting event I am checking the permission and if fails I am setting the Model to be Null at OnActionExecuted event - so that the user doesn't views the resource returned by the Action. May be not the perfect way of doing this - but a way around, I guess :)

To get started with these Asp .Net Action filters following tutorial is a good one:


Open source Push Server

  • PushSharp: [C#] :A server-side library for sending Push Notifications to iOS (iPhone/iPad APNS), OSX (APNS 10.8+) Android (C2DM and GCM - Google Cloud Message), Chrome (GCM) Windows Phone, Windows 8, Blackberry (PAP), and Amazon (ADM) devices!
  • PushSharp.Web: [C#] A web wrapper for PushSharp
  • AeoroGear UnifiedPushSeerver: [JAVA]: Easy and promising - does have a Openshift gear and can be tested over Openshift
  • Pushd:[Node.js] :Pushd is a pluggable "unified" push server for server-side notification to mobile native apps, web apps etc. With pushd you can send push notifications to any supported mobile platform, web app or HTTP server from a single entry point. Pushd takes care of which device is subscribed to which event and is designed to support an unlimited amount of subscribable events.
  • Loopback.io: [Node.js]: Loopback is basically a nodejs framework to easily create api - but it does have component to create push servers.
  • Node-Push-Server: [Node.js]: It looks like a stripped down version of Pushd.

Thursday, May 21, 2015

Logging in DotNet applications

  • log4net: log4net from Apache is a library tool to help the programmer output log statements to
    a variety of output targets. log4net is a port of the excellent Apache log4j™ framework to the Microsoft® .NET runtime. We have kept the framework similar in spirit to the original log4j while taking advantage of new features in the .NET runtime.
  • ELMAH: ELMAH (Error Logging Modules and Handlers) is an application-wide error logging facility that is completely pluggable. It can be dynamically added to a running ASP.NET web application, or even all ASP.NET web applications on a machine, without any need for re-compilation or re-deployment.For asp.net applications to log without putting any code inside the applications

WCF vs Asp.Net Web API

When I first learnt about Web API, I got confused - as I was always doing the RESTful services using the WCF - why then another way to accomplish the same thing ?

WCF ASP.Net WEB API
  • Back-end Services
  • SOAP, WS-*
  • Transporst: HTTP, UDP, TCP, QUEUES, Custom
  • Message Patterns: request-response, one-way, duplex
  • Use WCF Web HTTP to add HTTP endpoints to existing WCF Services
  • Use WCF Data Services for full OData support
  • Front-end Services
  • Media Type: JSON, XML, form-URL-encoded, Custom
  • Request-reply only
  • REST, resource centric
  • Use SignalR for asynchronous signaling (polling, long-polling, WebSockets)

For further reference:

Friday, May 9, 2014

Opensource tools for Analyzing Website Traffic Stats

While developing reports fr one of my applications I have got some interest in data and analytic - while googling I have got some of the good works that are open sourced :) [There are always some good folks online :B] . I am listing couple of the tools here:


"Hummingbird lets you see how visitors are interacting with your website in real time."
Hummingbird is built on top of Node.js, and utilizes Websocket to provide 'Live' stats.
Platform : Node.js and javascript





Pikwik
"Piwik is the leading open source web analytics platform that gives you valuable insights into your website’s visitors, your marketing campaigns and much more, so you can optimize your strategy and online experience of your visitors."
Platform: PHP- MySql



For more of them check the list in the following link :

http://en.wikipedia.org/wiki/List_of_web_analytics_software

Monday, October 28, 2013

"WHERE IN" for LINQ

I was trying to convert the following query to LINQ :

select Osid,OsName,CompanyId,Pid,description,type from OrganisationStructure where OSId in (" + location + ") and type='location'
Where location is a string like '123,2345,12356' ...
What I got on some places the where in clause is converted as bellow :

List<string> locList = location.Split(',').ToList();
var orgloc = (from b in context.OrganisationStructures
                                  where locList.Contains(b.OSId.ToString()) select new{b.OSId,b.OSName,b.CompanyId,b.pID,b.description,b.Type});
This was not giving any error on design time. But while debugging I got the following error:
LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression
The reason is LINQ to SQL doesn't know how to translate the .ToString() call to a SQL expression.Therefore I had to change it like bellow:
var orgloc = (from b in context.OrganisationStructures select new{b.OSId,b.OSName,b.CompanyId,b.pID,b.description,b.Type}).ToList().Where( s => locList.Contains(s.OSId.ToString()) && s.Type.Equals("location") ) ;

Refrence :

Wednesday, October 9, 2013

Opensource Chatbots/Chatterbots

I have started playing with a Program-O a chatbot that really worked for me. Liked it very much and while googling a little more I have found there is a good community who work for creating chatbots - thought I might list them so that I can check them later; Right now I am just listing and will update this post once I check each of them :

Some other good references I have got from Chatbots.org

Wednesday, September 11, 2013

Opensource applications with CodeIgniter

So far I have a crash for CodeIgnier and whenever I start developing for myself my first preference is always been CI :)
In this post I will be listing some of the Opensource projects built on top of CI :

Blogging tool :
Open blog: http://www.open-blog.info/
Stblog: https://github.com/stblog/Stblog >
Simple blogging App: https://github.com/indranil/scribe
Blog system App: https://github.com/mengu/ciblog
Blogging App: https://github.com/brenden/Ignited-Blog

CMS:
Ionize Cms: http://www.ionizecms.com/
Egypt CMS: http://blazeeboy.github.com/Codeigniter-Egypt/
Max CMS: http://max-3000.com/
Getfuel Cms: http://www.getfuelcms.com/
CodeFight Cms: http://codefight.org/
Pyro Cms: http://pyrocms.com/
Image CMS: https://github.com/firstrow/ImageCMS
Manager CMS: https://github.com/souzadavi/CMS
Photo gall CMS: https://github.com/bensonarts/GalleryCMS
Fotochest gall CMS: http://fotochest.com/

Forum
Forum App: http://sourceforge.net/projects/forumprojesi/
Dove Forum: https://github.com/ChrisBaines/Dove-Forums

Social Networking
Social Network Framework: https://github.com/valfreixo/Social-Network-Framework
Book Sharing social network: https://github.com/viaduk/BookSharing
Maran Cake Melody - Social Portal using Cakephp or CodeIgniter + Doctrine ORM : http://code.google.com/p/marancakemelody/

E-commerce
Social ecommerce platform: https://github.com/lammoth/Cloubiz

Other:
Classroom Bookings App: http://classroombookings.com/
Bamboo Invoice App: http://www.bambooinvoice.org/
MyClientBase Invoice App: http://myclientbase.com/
68 Knowledge Base App: https://github.com/68kb/
Sitemanager App: http://designelemental.net/sitemanagr
QuickSnaps Gall App: https://github.com/eoinmcg/QuickSnaps


Sunday, June 23, 2013

Dev boards to make your own custom computers !

The improvements of computers and the electronics has given (and possibly giving) birth of some evaluated couple of developer (bread !!)boards - They are more like some smart super-micro[bigger than nano :P] computers. Just wanted to go through some of the famous ones and list them as I go.
Somewhere I found that somebody was depicting the story as
Then Massimo Banzi invented a new single board: Arduino.
And everyone was happy. At last, prototyping was easy, cheap, and fast.
Then the unexpected happened: David Braben invented the Raspberry Pi. Everyone became happier. Prototyping became easier, cheaper, and faster.
The story does not end here: now we have CubieBoard, Gooseberry, APC Rock, OLinuXino,Hackberry A10, et caetera.
Here is a list of the boards I was studying to pick one up from :
 
Some fun stuff that you can do with Raspberry Pi
If you are a Windows user and don wanna wait to give it a look; check the follwoing link.
http://sourceforge.net/projects/rpiqemuwindows/. And here's a post how to start you DotNet[actually mono] programming on Raspberian

So far what my understanding is depending on the project you want to do/budget you have you have to carefully choose from the list. But for me I might go with Raspberrypi.
To find out a comprehensive comparison of the feature and price the following link can be checked. 

Wednesday, April 10, 2013

Testing the performance of a web application

Currently, I am working with a web application and one of the main duty is to improve the performance of the application. I am trying to reduce the page refresh time first. Here I m going to note down all the tools and techniques I am utilizing.
To identify exactly what is bottle-necking I used the following tools:
FireBug
IE Developer tools
Yslow
Pagespeed
Fiddler
I needed to compress/minify my css and js files. I got some tools that are of high rank. But finally I wrote my own tool to perform the same :
https://github.com/marifrahman/WebResourceCompressorForm

Some of the clients has very slow internet connection. Therefore I needed to test the site using low speed internet  To accomplish that following tools were very useful.
Sloppy
a fiddler extension [http://fiddlerdelayext.codeplex.com/]

Saturday, December 15, 2012

Twitter Bootstrapping resources

As I am kinda addicted with Twitter bootstrap. I have almost got a habit to bookmark all the resources that enriches Twitter Bootstrap. In this post I will continue putting the resource links I get useful.
  • The Twitter Bootstrap : The main Twitter Bootstrap project. They have released new version since I last posted my solution for Multilevel Dropdown menu for Twitter Bootstarp.
  • Free Gallery of Twitter Bootstrap code snippets: Its an amazing open platform to share code snippets utilizing Twitter Bootstrap.
  • Toggle buttons : Somebody posted some wonderful variations of toggle buttons here.
  • jQuery UI Bootstrap : This is basically implementation of jQuery UI to look like Twitter Bootstrap - a jQuery UI Theme. Therefore, its actually nothing to do Twitter Bootstrap but thought jQuery addicts (as I am :P) might want to give it a look.
  • Inline/In-place editing : This is an awesome plugin that utilizes Twitter Bootstrap, jQuery UI and jQuery to make in place editing cooler.
  • Win 8 Metro: This is an implementation of Win 8 Metro look using Twitter Bootstrap - good for creating nice looking dash boards..
  • Bootstrap for Asp.Net MVC3 application: I have created a Asp.Net MVC3 application template to get going with Asp.Net MVC3 and Twitter Bootstrap. There are other variations online. But I wanted to make the layouts as it comes with the Bootstrap and maintain the updates synced with the Bootstrap updates.
  • Bootstrap for Asp.Net MVC4: A beautiful article to configure Visual Studio 2010 to work with Twitter Bootstrap and Asp.Net MVC4.
  • Bootstrap hero: A big list of twitter bootstrap resources ranging from hacks and tips to frameworks and mockup creators.
  • Bootstrap Wizard: A wonderful Step-By-Step wizard tool utilizing Bootstrap. 

Wednesday, May 30, 2012

Open source framework for responsive UI

Its not worth to develop your UI for your PC browser and then again for your Mobile devices and then again for Tabs. What we need is grab a Responsive UI Framework to get going - you develop for your PC and rest are taken care of.
Here I am listing all the responsive UI frameworks that I thought I might check.
  • Twitter Bootstrap: I kinda liked and it seems many are rushing to use it as the original developers are from Twitter. But the thing is I felt couple of things are still missing (at least until I am writing this post); Like I was expecting a file input control. However, I got managed the file input control from another source. You can check it here
  • Kickstrap: Its a fork of Twitter Bootstrap plus themes, enhancements, and other goodies.Worth checking.
  • Zurb Foundation: Yet to check. But seems its quite promising.
  • Gumby Framework: Seems quite up to date for getting started instantly.Including psd seems makes it more options in design. 
  • Kendo UI:  Its a complete UI framework including almost all the elements/ controls needed to get start.
  • Skeleton: I think its the first of the kind - to me it is not that appealing - din dig deep though ;)

Wednesday, May 9, 2012

Multilevel Dropdown menu for Twitter Bootstarp


Twitter Bootstarp is an excellent responsive UI framework to start your web application. But it seems they are yet to implement a multilevel Dropdown menu. I was googling for it and got couple of solutions and finally came up with my fork :
Update : this was done for twitter bootstrap 2