The evil code experience

bad programming

Well, most of the experienced programmers have faced similar situation of trying to make the worst code run. If you have been through the “evil code experience” do let me know in the comments below.

The following blog is a direct copy of a fantastic answer from stackoverflow website. I felt every programmer should read and feel the experience of writing bad code. So, here it goes… Enjoy! :)

 My company inherited 130,000 lines of garbage from India. The application was written in C#; it was a teller app, the same kind of software tellers use behind the counter whenever you go to the bank. The app crashed 40-50 times a day, and it simply couldn’t be refactored into working code. My company had to re-write the entire app over the course of 12 months.

Why is this application evil? Because the sight of the source code was enough to drive a sane man mad and a mad man sane. The twisted logic used to write this application could have only been inspired by a Lovecraftian nightmare. Unique features of this application included:

  • Out of 130,000 lines of code, the entire application contained 5 classes (excluding form files). All of these were public static classes. One class was called Globals.cs, which contained 1000s and 1000s and 1000s of public static variables used to hold the entire state of the application. Those five classes contained 20,000 lines of code total, with the remaining code embedded in the forms.
  • You have to wonder, how did the programmers manage to write such a big application without any classes? What did they use to represent their data objects? It turns out the programmers managed to re-invent half of the concepts we all learned about OOP simply by combining ArrayLists, HashTables, and DataTables. We saw a lot of this:
    • ArrayLists of hashtables
    • Hashtables with string keys and DataRow values
    • ArrayLists of DataTables
    • DataRows containing ArrayLists which contained HashTables
    • ArrayLists of DataRows
    • ArrayLists of ArrayLists
    • HashTables with string keys and HashTable values
    • ArrayLists of ArrayLists of HashTables
    • Every other combination of ArrayLists, HashTables, DataTables you can think of.

    Keep in mind, none of the data structures above are strongly typed, so you have to cast whatever mystery object you get out of the list to the correct type. It’s amazing what kind of complex, Rube Goldberg-like data structures you can create using just ArrayLists, HashTables, and DataTables.

  • To share an example of how to use the object model detailed above, consider Accounts: the original programmer created a seperate HashTable for each concievable property of an account: a HashTable called hstAcctExists, hstAcctNeedsOverride, hstAcctFirstName. The keys for all of those hashtables was a “|” separated string. Conceivable keys included “123456|DDA”, “24100|SVG”, “100|LNS”, etc.
  • Since the state of the entire application was readily accessible from global variables, the programmers found it unnecessary to pass parameters to methods. I’d say 90% of methods took 0 parameters. Of the few which did, all parameters were passed as strings for convenience, regardless of what the string represented.
  • Side-effect free functions did not exist. Every method modified 1 or more variables in the Globals class. Not all side-effects made sense; for example, one of the form validation methods had a mysterious side effect of calculating over and short payments on loans for whatever account was stored Globals.lngAcctNum.
  • Although there were lots of forms, there was one form to rule them all: frmMain.cs, which contained a whopping 20,000 lines of code. What did frmMain do? Everything. It looked up accounts, printed receipts, dispensed cash, it did everything.Sometimes other forms needed to call methods on frmMain. Rather than factor that code out of the form into a seperate class, why not just invoke the code directly:
    ((frmMain)this.MDIParent).UpdateStatusBar(hstValues);
    
  • To look up accounts, the programmers did something like this:
    bool blnAccountExists =
        new frmAccounts().GetAccountInfo().blnAccountExists
    

    As bad as it already is creating an invisible form to perform business logic, how do you think the form knew which account to look up? That’s easy: the form could access Globals.lngAcctNum and Globals.strAcctType. (Who doesn’t love Hungarian notation?)

  • Code-reuse was a synonym for ctrl-c, ctrl-v. I found 200-line methods copy/pasted across 20 forms.
  • The application had a bizarre threading model, something I like to call the thread-and-timer model: each form that spawned a thread had a timer on it. Each thread that was spawned kicked off a timer which had a 200 ms delay; once the timer started, it would check to see if the thread had set some magic boolean, then it would abort the thread. The resulting ThreadAbortException was swallowed.You’d think you’d only see this pattern once, but I found it in at least 10 different places.
  • Speaking of threads, the keyword “lock” never appeared in the application. Threads manipulated global state freely without taking a lock.
  • Every method in the application contained a try/catch block. Every exception was logged and swallowed.
  • Who needs to switch on enums when switching on strings is just as easy!
  • Some genius figured out that you can hook multiple form controls up to the same event handler. How did the programmer handle this?
    private void OperationButton_Click(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        if (blnModeIsAddMc)
        {
            AddMcOperationKeyPress(btn);
        }
        else
        {
            string strToBeAppendedLater = string.Empty;
            if (btn.Name != "btnBS")
            {
                UpdateText();
            }
            if (txtEdit.Text.Trim() != "Error")
            {
                SaveFormState();
            }
            switch (btn.Name)
            {
                case "btnC":
                    ResetValues();
                    break;
                case "btnCE":
                    txtEdit.Text = "0";
                    break;
                case "btnBS":
                    if (!blnStartedNew)
                    {
                        string EditText = txtEdit.Text.Substring(0, txtEdit.Text.Length - 1);
                        DisplayValue((EditText == string.Empty) ? "0" : EditText);
                    }
                    break;
                case "btnPercent":
                    blnAfterOp = true;
                    if (GetValueDecimal(txtEdit.Text, out decCurrValue))
                    {
                        AddToTape(GetValueString(decCurrValue), (string)btn.Text, true, false);
                        decCurrValue = decResultValue * decCurrValue / intFormatFactor;
                        DisplayValue(GetValueString(decCurrValue));
                        AddToTape(GetValueString(decCurrValue), string.Empty, true, false);
                        strToBeAppendedLater = GetValueString(decResultValue).PadLeft(20)
                                                    + strOpPressed.PadRight(3);
                        if (arrLstTapeHist.Count == 0)
                        {
                            arrLstTapeHist.Add(strToBeAppendedLater);
                        }
                        blnEqualOccurred = false;
                        blnStartedNew = true;
                    }
                    break;
                case "btnAdd":
                case "btnSubtract":
                case "btnMultiply":
                case "btnDivide":
                    blnAfterOp = true;
                    if (txtEdit.Text.Trim() == "Error")
                    {
                        btnC.PerformClick();
                        return;
                    }
                    if (blnNumPressed || blnEqualOccurred)
                    {
                        if (GetValueDecimal(txtEdit.Text, out decCurrValue))
                        {
                            if (Operation())
                            {
                                AddToTape(GetValueString(decCurrValue), (string)btn.Text, true, true);
                                DisplayValue(GetValueString(decResultValue));
                            }
                            else
                            {
                                AddToTape(GetValueString(decCurrValue), (string)btn.Text, true, true);
                                DisplayValue("Error");
                            }
                            strOpPressed = btn.Text;
                            blnEqualOccurred = false;
                            blnNumPressed = false;
                        }
                    }
                    else
                    {
                        strOpPressed = btn.Text;
                        AddToTape(GetValueString(0), (string)btn.Text, false, false);
                    }
                    if (txtEdit.Text.Trim() == "Error")
                    {
                        AddToTape("Error", string.Empty, true, true);
                        btnC.PerformClick();
                        txtEdit.Text = "Error";
                    }
                    break;
                case "btnEqual":
                    blnAfterOp = false;
                    if (strOpPressed != string.Empty || strPrevOp != string.Empty)
                    {
                        if (GetValueDecimal(txtEdit.Text, out decCurrValue))
                        {
                            if (OperationEqual())
                            {
                                DisplayValue(GetValueString(decResultValue));
                            }
                            else
                            {
                                DisplayValue("Error");
                            }
                            if (!blnEqualOccurred)
                            {
                                strPrevOp = strOpPressed;
                                decHistValue = decCurrValue;
                                blnNumPressed = false;
                                blnEqualOccurred = true;
                            }
                            strOpPressed = string.Empty;
                        }
                    }
                    break;
                case "btnSign":
                    GetValueDecimal(txtEdit.Text, out decCurrValue);
                    DisplayValue(GetValueString(-1 * decCurrValue));
                    break;
            }
        }
    }
    
  • The same genius also discovered the glorious ternary operator. Here are some code samples:frmTranHist.cs [line 812]:
    strDrCr = chkCredits.Checked && chkDebits.Checked ? string.Empty
                        : chkDebits.Checked ? "D"
                            : chkCredits.Checked ? "C"
                                : "N";
    

    frmTellTransHist.cs [line 961]:

    if (strDefaultVals == strNowVals && (dsTranHist == null ? true : dsTranHist.Tables.Count == 0 ? true : dsTranHist.Tables[0].Rows.Count == 0 ? true : false))
    

    frmMain.TellCash.cs [line 727]:

    if (Validations(parPostMode == "ADD" ? true : false))
    
  • Here’s a code snippet which demonstrates the typical misuse of the StringBuilder. Note how the programmer concats a string in a loop, then appends the resulting string to the StringBuilder:
    private string CreateGridString()
    {
        string strTemp = string.Empty;
        StringBuilder strBuild = new StringBuilder();
        foreach (DataGridViewRow dgrRow in dgvAcctHist.Rows)
        {
            strTemp = ((DataRowView)dgrRow.DataBoundItem)["Hst_chknum"].ToString().PadLeft(8, ' ');
            strTemp += "  ";
            strTemp += Convert.ToDateTime(((DataRowView)dgrRow.DataBoundItem)["Hst_trandt"]).ToString("MM/dd/yyyy");
            strTemp += "  ";
            strTemp += ((DataRowView)dgrRow.DataBoundItem)["Hst_DrAmount"].ToString().PadLeft(15, ' ');
            strTemp += "  ";
            strTemp += ((DataRowView)dgrRow.DataBoundItem)["Hst_CrAmount"].ToString().PadLeft(15, ' ');
            strTemp += "  ";
            strTemp += ((DataRowView)dgrRow.DataBoundItem)["Hst_trancd"].ToString().PadLeft(4, ' ');
            strTemp += "  ";
            strTemp += GetDescriptionString(((DataRowView)dgrRow.DataBoundItem)["Hst_desc"].ToString(), 30, 62);
            strBuild.AppendLine(strTemp);
        }
        strCreateGridString = strBuild.ToString();
        return strCreateGridString;//strBuild.ToString();
    }
    
  • No primary keys, indexes, or foreign key constraints existed on tables, nearly all fields were of type varchar(50), and 100% of fields were nullable. Interestingly, bit fields were not used to store boolean data; instead a char(1) field was used, and the characters ‘Y’ and ‘N’ used to represent true and false respectively.
    • Speaking of the database, here’s a representative example of a stored procedure:
      ALTER PROCEDURE [dbo].[Get_TransHist]
       ( 
            @TellerID   int = null,
            @CashDrawer int = null,
            @AcctNum    bigint = null,
            @StartDate  datetime = null,
            @EndDate    datetime = null,
            @StartTranAmt     decimal(18,2) = null,
            @EndTranAmt decimal(18,2) = null,
            @TranCode   int = null,
            @TranType   int = null
       )
      AS 
            declare @WhereCond Varchar(1000)
            declare @strQuery Varchar(2000)
            Set @WhereCond = ' '
            Set @strQuery = ' '
            If not @TellerID is null
                  Set @WhereCond = @WhereCond + ' AND TT.TellerID = ' + Cast(@TellerID as varchar)
            If not @CashDrawer is null
                  Set @WhereCond = @WhereCond + ' AND TT.CDId = ' + Cast(@CashDrawer as varchar)
            If not @AcctNum is null
                  Set @WhereCond = @WhereCond + ' AND TT.AcctNbr = ' + Cast(@AcctNum as varchar)
            If not @StartDate is null
                  Set @WhereCond = @WhereCond + ' AND Convert(varchar,TT.PostDate,121) >= ''' + Convert(varchar,@StartDate,121) + ''''
            If not @EndDate is null
                  Set @WhereCond = @WhereCond + ' AND Convert(varchar,TT.PostDate,121) <= ''' + Convert(varchar,@EndDate,121) + ''''
            If not @TranCode is null
                  Set @WhereCond = @WhereCond + ' AND TT.TranCode = ' + Cast(@TranCode as varchar)
            If not @EndTranAmt is null
                  Set @WhereCond = @WhereCond + ' AND TT.TranAmt <= ' + Cast(@EndTranAmt as varchar)
            If not @StartTranAmt is null
                  Set @WhereCond = @WhereCond + ' AND TT.TranAmt >= ' + Cast(@StartTranAmt  as varchar)
            If not (@TranType is null or @TranType = -1)
                  Set @WhereCond = @WhereCond + ' AND TT.DocType = ' + Cast(@TranType as varchar)
            --Get the Teller Transaction Records according to the filters
            Set @strQuery = 'SELECT 
                  TT.TranAmt as [Transaction Amount], 
                  TT.TranCode as [Transaction Code],
                  RTrim(LTrim(TT.TranDesc)) as [Transaction Description],
                  TT.AcctNbr as [Account Number],
                  TT.TranID as [Transaction Number],
                  Convert(varchar,TT.ActivityDateTime,101) as [Activity Date],
                  Convert(varchar,TT.EffDate,101) as [Effective Date],
                  Convert(varchar,TT.PostDate,101) as [Post Date],
                  Convert(varchar,TT.ActivityDateTime,108) as [Time],
                  TT.BatchID,
                  TT.ItemID,
                  isnull(TT.DocumentID, 0) as DocumentID,
                  TT.TellerName,
                  TT.CDId,
                  TT.ChkNbr,
                  RTrim(LTrim(DT.DocTypeDescr)) as DocTypeDescr,
                  (CASE WHEN TT.TranMode = ''F'' THEN ''Offline'' ELSE ''Online'' END) TranMode,
                  DispensedYN
            FROM TellerTrans TT WITH (NOLOCK)
            LEFT OUTER JOIN DocumentTypes DT WITH (NOLOCK) on DocType = DocumentType
            WHERE IsNull(TT.DeletedYN, 0) = 0 ' + @WhereCond + ' Order By BatchId, TranID, ItemID'    
            Exec (@strQuery)
      

With all that said, the single biggest problem with this 130,000 line application this: no unit tests.

bad programming

To read about what others had to say, here is the direct link to the question

Posted in Technology Tagged with: , , ,

Epic battery life: Smartphones are getting there

Battery

A guest blog by Lea Cramer. Lea Cramer is an enthusiastic writer from Germany. After a semester in her dream city, Paris, she moved to London to continue her studies and pursue her goal: becoming a journalist.  Her passion for technology stems from the fact that it’s an ever growing market, which will continue to do just that: blossom & grow!

The touch screen smartphone age has brought about a number of advancements in the world of mobiles. With more apps than you could ever use and features that keep us continually up to date, it has become an important companion. Man’s new best friend, the only problem is the battery life. Almost everyone has this debate and it’s about time your battery was capable of dealing with your myriad of apps on a daily basis.

Chemistry, that’s what is holding us up. Alongside the perpetual notion that aesthetics is the most important feature of a smartphone. The battery works with lithium ions and graphite that are currently maxed out and can only be improved through using a better, bigger battery. That said, there are devices that have longer battery life than others, like:

  • Lenovo P series – The Chinese company is spreading worldwide. The P780 is said to last 25 hours when put on 3G and that is unrivalled in terms of battery life.
  • Motorola Droid Maxx – It has numerous features and a colourful screen. The big smartphone lasts some 15 hours and 50 minutes on full charge and that is the big story with this device.
  • Samsung Galaxy Note 3 – Motorola created the Maxx to fight back by taking top spot in battery life but the third generation Note also boasts some 15 hours of life.
  • LG Optimus F6 – A bright screen and good camera, this LG option might not be swimming with features but it is a reliable handset that offers more than 11 hours.

Battery

Is Lenovo a game changer?

The brand has shown incredible growth, particularly over the last few years, and is now a major player in the worldwide smartphone and computer markets. There are four categories offered and that includes affordable, entertaining and ultra-slim alongside the big addition of epic battery life.

Epic battery life allows you to ‘work hard, play harder’ according to Lenovo. Large, sharp display alongside quick, smooth processing makes it easy to use and it is unmatched with the 4,000mAh battery. This is the biggest in a smartphone and the standout feature. It blows the closest web browsing competitor out the water by offering some four hours more and video playback by an hour.

How can others catch up?

As we mentioned, the problem comes from the fact that the smartphones can’t house a bigger battery and that means waiting for the science to catch up. This is believed to be a couple of years away at least. If you love your phone then it’s all about maximizing current battery life, and this can be done through:

  • Turning off location services.
  • No more push notifications.
  • Have a dark wallpaper.
  • Activate ‘Airplane Mode’ when you don’t need your phone.
  • Download an app like BatteryGuru on Android that helps you optimize battery life.
  • Remove unused apps.
  • Turn down the brightness.
  • Keep your smartphone cool.
Posted in Technology

J.S. I love you

JavaScript by Saad

[This is a humorous blog, where, the last letter from the book P.S. I Love You is modified as a letter from programmer to JavaScript creator / developer. Read, Share, Enjoy :) ]

Programmer : Dear JS developer, I don’t have much time. I don’t mean literally, I mean, you’re out preparing to release next version and it will be out soon. I have a feeling this is gonna be the best update, because there is only one thing left for you to do. It is not to go down memory lane or make you buy a third party library, you can build it by yourself with some help from outsource community.JavaScript by Saad It’s to tell you how much you move me, how you have changed me. You made me an efficient programmer, by creating JavaScript. And for that, I am eternally grateful, literally. If you can promise me anything, promise me that whenever you’re sad, or unsure, or you lose complete faith, that you’ll try to see yourself through patent fights. I’m a programmer with no regrets. How lucky am I. But I’m just a chapter in yours. There’ll be more. I promise. So here it comes, the big one: Don’t be afraid to develop again. Watch out for that signal, when life as you know it ends.

J.S. I will always love you.

Posted in Technology Tagged with: , ,

Freedom For Developers [C#]

pic1

I have recently noticed the rise of  “ecosystem” awareness among non-technical crowd. This awareness is a blessing for companies who are trying hard to get on consumer’s desk [computer], hand [tablet] and in pocket [mobile]. For example an iPhone user is now more likely buying an iPad, a windows user preferring to buy a Surface tab along with his windows phone. This creates a virtual boundary among consumers. Although it is good to have these virtual boundaries but in order to have more devoted faithfuls, companies tried building boundaries across developers, in which, they were successful until recently.

Xamarin Studio, an IDE to build any application using C#. Either you are building for iProducts or Windows or Android, its all possible here. I was introduced to Xamarin by SSVS Sarath one of my colleague at Amazon. It took me no time to get this system up and running on my Windows 7 machine . Here is the screenshot of what Xamarin plugin does to your Visual Studio. So, as you can see in the picture below

pic1

Xamarin have templates for iPhone, iPad and Android as well. When I checked templates for a particular device [iPhone, iPad or Android] I was amazed to find these templates for the following devices

iPhone

  • Empty Project
  • HelloWorld Application
  • OpenGL Application

iPad

  • Empty Project
  • HelloWorld Application
  • Master-Detail Application
  • OpenGL Application

Android

  • Android Application
  • Android Honeycomb Application
  • Android Ice Cream sandwich Application
  • Android OpenGL Application
  • Android Class Library
  • Java Bindings Library

One interesting point to note here is, when you reduce the .NET Framework version from 4.5 to .NET Framework 4.0 “Empty Project” from iDevices [iPhone or iPad] disappears.

I decided to test Android application development. I selected Android Ice Cream sandwich Application, named the app and started. Without writing even a single line of code by myself, Xamarin had already built this app for me [Reminded me of ASP.NET MVC website project, where it built much of the website just at start (Homepage, About page, Login, Register, Sign In, Change Password)]. Here is the auto-generated code

using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace AndroidApplication1
{
            [Activity(Label = “AndroidApplication1”, MainLauncher = true, Icon = “@drawable/icon”)]
            public class Activity1 : Activity
           {
                      int count = 1;

                      protected override void OnCreate(Bundle bundle)
                     {
                                base.OnCreate(bundle);

                                 // Set our view from the “main” layout resource
                                 SetContentView(Resource.Layout.Main);

                                // Get our button from the layout resource,
                                // and attach an event to it
                               Button button = FindViewById<Button>(Resource.Id.MyButton);

                               button.Click += delegate { button.Text = string.Format(“{0} clicks!”, count++); };
                      }
            }
}

After checking this code i just debugged and built the solution. I found many emulators to test the code. As per my selected app [Ice Cream Sandwich] I selected “MonoForAndroid_API_15“. It was a basic app counting the number of clicks.

android2

 

 

 

 

 

 

Thus it is fantastic for C# developers and for the people who are planning to learn C#, this is one important thing to consider.

Further reading:

Xamarin.iOS

Xamarin.Android

Posted in Technology Tagged with: , , , , ,

Being in the race

As per Einstein nothing can travel faster than light. However, technological advancements are moving faster than the speed of light [ yes that is a valid comparison 😉 ]. And everyone, yes everyone , even remotely related to technology is working hard to lead the race. Things are more faster, efficient and reliable and these developments have moved on from years to months and now days.  A new product in the market is no longer “new” for long.  Consumers are unaware of the amount they are investing in the form of money and time. These investments are beneficial if done in a product which is truly innovative.

A beneficial investment is to invest in buying a good Operating System. Talking about Operating Systems, the most reliable and highest sold OS is undoubtedly windows.  Upgrade of the OS is required to enjoy and gain more benefits of the technological advancements. There are thousands of new features which many users are unaware of. It is time to upgrade, time to move on.

One such upgrade is the upgrade to Windows 8. Be it for your business or your home, Windows 8 has proved to be more efficient, faster and reliable than its predecessors.  Businesses that has adapted technologies intelligently and quickly are at a good position in the technological race. It is time for the great users of windows XP to upgrade and be in the race. Microsoft has recently announced some amazing offers that are worth considering.

windows xp to windows 8

You might only lead the race if you are IN the race. Think – Plan – Consider – Upgrade.

Posted in Technology

Collaboration – The success principle

The word success have different meanings depending on the perception of the person defining it. But no matter how a person defines, it always includes accomplishments of different forms. There are numerous books and articles written on success thus I am writing on one of the key principle of success – Collaboration.

Collaboration for many is the key to success. It is indeed! consider any scenario, you will find better results when collaborated with right people.  For example, if a kid wants to take a toy from the upper shelf, he will collaborate with his brother or friend and they will achieve the goal. Look at Facebook, “like” button on other websites is indirect way of collaboration where the website gets publicity and  Facebook will have more engaged users.

There are numerous platform for people to network and collaborate, one such platform is the user groups. These groups usually consists of people from similar background or interests. Among these jungles of user group one most common jungle of UG [user group] is Microsoft UGs. These are worldwide groups where technical experts, manager, developers or any tech-enthusiast meet to share and gain.

One such newly created user group in UAE [United Arab Emirates] is Microsoft User Group of Ras Al Khaimah.  This group consist of tech enthusiasts from different walk of IT life. It is officially sponsored by Pluralsight and Microsoft .

Microsoft User Group - Ras Al Khaimah

Gain the benefit of collaboration through this awesome UG. If you are visiting / living in  UAE, drop by in the next meetup of MUGRAK. Be a mRaktie :)

Posted in Technology

Open Door UAE

Microsoft Gulf open door

What is Microsoft’s Open Door Event?

Microsoft Open Door event is a place where customers, partners, enthusiasts meet. In the event Microsoft’s latest products, be it software solution or hardware are showcased. Along with the products an attendee will also know about the latest news and updates from Microsoft.

What is the registration fee for the event?

There is no registration fee for the event. Attendees will get to meet the speakers and get insights of Microsoft’s latest happenings in person.

When is the next upcoming event?

Next Open Door event is on 9th April in Intercontinental Abu Dhabi, U.A.E [location map]

Where can I register for the event?

You can register for the event here.

SEE YOU ON 9th APRIL!! :)

Microsoft Gulf open door

Posted in Technology

Nokia Lumia 920

Nokia has been trying hard in the smart phone era.  Once a leader in cell phone market failed to conquer in the smart phones arena. With Lumia 920 with windows 8, looks like Nokia is back in the competition.  It has got fabulous specs and pretty good hardware. One can also find the “rough & tough” feel, the feel of old Nokia phones. It has 32 GB space, 1 GB RAM and 1.5 GHz Dual core processor.

 

The Good

  • Camera:  8.7 Megapixel
  • Display:  4.5 inches [~332 ppi pixel density]
  • Wireless Charging
  • Windows Phone 8 OS

The Bad

  • Weight
  • Less number of apps

Lumia 920

View the official page of Nokia Lumia 920 here.

 

P.S: Before buying any gadget, re-think and buy only if you really need it. Anyways its your money, spend wisely. Also, you can join me to support this cause. Join me Now!


Posted in Reviews Tagged with: ,

Microsoft Surface

With “Surface” Microsoft has entered the tablet market. Surface was the name of a multi-touch table built by Samsung {SUR40] which is now called as PixelSense. Here is a quick review of Microsoft Surface tablet. It is a very artistic tablet and the touch & feel of this tablet is pretty good.

The Good

  • Core i5 processor
  • 1920 x 1080 full HD resolution
  • Full size USB [3.0] support
  • Keyboard [backside velvet touch gives it the perfect finish]

 

The Bad

  • Price
  • Battery Life
  • Separate purchase of Keyboard
  • No Cellular support

Microsoft Surface Pro

Visit the official page here

 

P.S: Before buying any gadget, re-think and buy only if you really need it. Anyways its your money, spend wisely. Also, you can join me to support this cause. Join me Now!


Posted in Reviews Tagged with: , ,

Sneaking into the future of technology

Every other individual nowadays is trying to predict the future of technology. Everyone has got their own valid points. However, what many people are missing is to take technology as a whole and analyse for predicting the future. Like I have stated in my previous blogs that mathematics and technology are on similar path , we can see it more clearly now. Remember how mathematics evolve from the ancient times of prehistoric mathematics which is believed to be dated 35,000 BC and then many changes and developments happened giving rise to Indian mathematics then Islamic mathematics and so on to the modern mathematics of 21st century. In schools today, how is mathematics taught? Even a toddler is taught the basic mathematics and at later stages we learn various concepts of mathematics like trigonometry, algebra, geometry, statistics and if you go to a higher level you will go for differentiation and integration  How much of mathematics do we use in real life? We do mathematics 24×7. Our every thought every breathe is mathematics. X amount of oxygen is taken and Z amount of CO2 is breathed out, we make assumption and think about the probabilities, we use mathematics while playing games and etc.

Similarly we have technology. In days to come programming languages will not be considered something unusual, being a programmer will be a casual thing. You are not amazed when a kid calculates 2+2. similarly every one will be programming as per their requirements. As mathematics is integrated in our lives so will be technology. Can you imagine life without gadgets? without computer, without mobile phone, without internet? Majority of us just can’t live without them. It is natural as it has become our necessity. There is no harm and we have to accept this fact and try to manage ourselves. In years to come we will not even think “technology” as a different thing similar to mathematics. Do you note down your assumption before kicking the ball in soccer, it is natural. So will be technology. As the world started to change with the advent of mathematics so will be with the technology. Being knowledgeable is no big deal today, because of internet. bigger deal is to manage that knowledge and use it in a proper way.

Thus no matter what people say about the future of technology, I believe technology will not be considered as an industry itself however it will be merged with every other industry. This will eventually happen in years to come. Be prepared to see babies like this 😉

hello world

Posted in Technology Tagged with: , ,

Stay in touch

Follow Now!