Online Store | About Us | Blog
Page 1 of 21 in the News category Next Page
# Wednesday, August 18, 2010




Announcing Vmana Beta Program

Today, the world of search is one step closer to revolution.

Vmana - the cloud-based commerce search engine - is entering beta on September 1, 2010. Starting today, we are accepting requests from users who wish to participate in the beta program.

The Vmana beta program is expected to run for at least two months. We plan to accept up to 200 beta testers; no more.

What is Vmana?

In a nutshell, Vmana is a hosted e-commerce search engine.

It supports filtering, facets, XML feeds, and all of the other bells & whistles of a top notch search engine.

It is fully managed, with a 100% up-time SLA (service level agreement).

Being a hosted solution, performance never suffers. We always grow capacity behind the scenes to meet demand.

Why is it a revolution?

Quite simply, this has never been done before. Especially not on the scale that it is about to be done.

As the cost of computing continues to decline exponentially (at a rate of ~40% per year), the time for providing high-level software APIs in the cloud is growing ever closer to the present. Vmana is one such example: a high-level search API sitting in the cloud.

Up until now, cloud computing has centered around the idea of providing low-level services (such as queues, storage, or CPU) to the user. This is akin to the days of time-sharing computers and dumb terminals.

The key to the future of cloud computing lies in the ability to provide high-level services (such as search). This is only recently becoming possible. Just as the evolution from the command line to the GUI required a certain critical performance level to be reached, we are now on the cusp of a major transition in cloud computing, from low-level "dumb" APIs to high-level "smart" APIs.

Vmana is a high-level API, which is why it is called "intelligent" search. That's why it's a revolution.

How is it being done?

Behind the scenes lies Lucene - a powerful open-source search engine. However, Lucene is just a tiny fraction of Vmana.

Vmana consists of a crawler, a search engine, and a management & administration dashboard.

Key features include: on-demand and automatic crawling, comprehensive logging, XML feed support (for input), XML search results, REST-style API, and more.

Why cloud?

There are several key advantages to cloud computing in general:
  • Guaranteed performance.
  • Guaranteed reliability.
  • You only pay for what you use.
  • Easy setup and deployment.
These are the advantages of Vmana over, say, an enterprise search appliance like the GSA (Google Search Appliance).

Why not a "bare bones" search engine like Lucene?

There are several disadvantages to doing that:
  • Steep learning curve.
  • Integration effort is costly.
  • Maintenance is difficult (often requires dedicated staff).
  • No analytics or reporting features.
The better question is - why live with those disadvantages?

Conclusion

A hosted search solution really makes sense when you take into account all of the disadvantages of the alternative solutions.

For those willing to try something new, it may be worthwhile to sign up for the Vmana beta program or learn more about Vmana.

Note - we are only accepting 200 beta testers in total.

August 18, 2010 3:43 AM Eastern Daylight Time  #    Comments [0] - Trackback
.NET | Business | Commentary | News | Search | Technology
# Sunday, August 08, 2010




Ray Tracing to Replace Rasterization by 2020

Say goodbye to polygons and shaders. Say goodbye to OpenGL and DirectX. The future, from this point on, is all ray tracing.

One chart - one image - shows it perfectly:



(Source: PC Perspective)

Ray tracing outperforms rasterization for large numbers of polygons.

There are many disadvantages to rasterization:
  • It is slow (linear in time) for large numbers of polygons.
  • It does not produce reflections very efficiently or accurately.
  • It cannot dynamically produce effects like refraction or shadows.
  • It relies heavily on textures (which use up tons of space!) to produce lighting effects.
  • Coding rasterized games is difficult because of the requirement to approximate every single lighting effect that would be calculated automatically using ray tracing.
Of course, rasterization does have one advantage (and one only), and that is that on present-day PCs, it can render scenes in real time at higher quality than ray tracing.

Throughout computing history, it has always been the case that temporary approximation techniques were phased out when enough computing power was available to do away with them. For example, the use of color palettes in the 1990s (i.e. 256 colors) disappeared as soon as there was enough GPU memory to store 32-bit pixel values. When resolutions rose to 800x600 and beyond, bitmap fonts could finally be replaced by True Type fonts. Pixels were gradually phased out of the graphics world in favor of ems or inches.

Notice that rasterization has dominated the PC gaming industry since the 1990s. Currently, ray tracing cannot produce scenes at 1080p resolution in real time without sacrificing quality severely. However, this will soon change.

The amount of increase in CPU power (from present levels) needed to allow rendering of ray-traced images at 1080p resolution at 24 fps is only about 10X. This will almost certainly happen before 2020.

There is a movie coming out (in 2012) that is supposedly rendered entirely in real time using ray tracing.

To close off, here is a ray traced image using a ray tracer that I built recently:



Notice the accuracy of the reflections and shadows, and how they come at no extra cost - virtually no performance penalty and no extra code required!

August 8, 2010 2:19 AM Eastern Daylight Time  #    Comments [0] - Trackback
Business | Commentary | History | News | Science | Technology
# Thursday, August 05, 2010




Technorati Inclusion

Here is my claim code -
KP4VFDRPWQ9T
If you're wondering what this is, I am submitting my blog to Technorati and they require that I post something on my blog in order to verify that I am the author of the blog.

The Technorati claim process is how you submit your blog to Technorati.

August 5, 2010 4:53 PM Eastern Daylight Time  #    Comments [0] - Trackback
News | Tips
# Saturday, July 31, 2010




C# Serializable Dictionary - a Working Example

Here is the example:

using System;
using System.Runtime.Serialization;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Text;

[Serializable()]
public class SerializableDictionary<TKey, TVal> : Dictionary<TKey, TVal>, IXmlSerializable, ISerializable
{
        #region Constants
        private const string DictionaryNodeName = "Dictionary";
        private const string ItemNodeName = "Item";
        private const string KeyNodeName = "Key";
        private const string ValueNodeName = "Value";
        #endregion
        #region Constructors
        public SerializableDictionary()
        {
        }

        public SerializableDictionary(IDictionary<TKey, TVal> dictionary)
            : base(dictionary)
        {
        }

        public SerializableDictionary(IEqualityComparer<TKey> comparer)
            : base(comparer)
        {
        }

        public SerializableDictionary(int capacity)
            : base(capacity)
        {
        }

        public SerializableDictionary(IDictionary<TKey, TVal> dictionary, IEqualityComparer<TKey> comparer)
            : base(dictionary, comparer)
        {
        }

        public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer)
            : base(capacity, comparer)
        {
        }

        #endregion
        #region ISerializable Members

        protected SerializableDictionary(SerializationInfo info, StreamingContext context)
        {
            int itemCount = info.GetInt32("ItemCount");
            for (int i = 0; i < itemCount; i++)
            {
                KeyValuePair<TKey, TVal> kvp = (KeyValuePair<TKey, TVal>)info.GetValue(String.Format("Item{0}", i), typeof(KeyValuePair<TKey, TVal>));
                this.Add(kvp.Key, kvp.Value);
            }
        }

        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("ItemCount", this.Count);
            int itemIdx = 0;
            foreach (KeyValuePair<TKey, TVal> kvp in this)
            {
                info.AddValue(String.Format("Item{0}", itemIdx), kvp, typeof(KeyValuePair<TKey, TVal>));
                itemIdx++;
            }
        }

        #endregion
        #region IXmlSerializable Members

        void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)
        {
            //writer.WriteStartElement(DictionaryNodeName);
            foreach (KeyValuePair<TKey, TVal> kvp in this)
            {
                writer.WriteStartElement(ItemNodeName);
                writer.WriteStartElement(KeyNodeName);
                KeySerializer.Serialize(writer, kvp.Key);
                writer.WriteEndElement();
                writer.WriteStartElement(ValueNodeName);
                ValueSerializer.Serialize(writer, kvp.Value);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
            //writer.WriteEndElement();
        }

        void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)
        {
            if (reader.IsEmptyElement)
            {
                return;
            }

            // Move past container
            if (!reader.Read())
            {
                throw new XmlException("Error in Deserialization of Dictionary");
            }

            //reader.ReadStartElement(DictionaryNodeName);
            while (reader.NodeType != XmlNodeType.EndElement)
            {
                reader.ReadStartElement(ItemNodeName);
                reader.ReadStartElement(KeyNodeName);
                TKey key = (TKey)KeySerializer.Deserialize(reader);
                reader.ReadEndElement();
                reader.ReadStartElement(ValueNodeName);
                TVal value = (TVal)ValueSerializer.Deserialize(reader);
                reader.ReadEndElement();
                reader.ReadEndElement();
                this.Add(key, value);
                reader.MoveToContent();
            }
            //reader.ReadEndElement();

            reader.ReadEndElement(); // Read End Element to close Read of containing node
        }

        System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
        {
            return null;
        }

        #endregion
        #region Private Properties
        protected XmlSerializer ValueSerializer
        {
            get
            {
                if (valueSerializer == null)
                {
                    valueSerializer = new XmlSerializer(typeof(TVal));
                }
                return valueSerializer;
            }
        }

        private XmlSerializer KeySerializer
        {
            get
            {
                if (keySerializer == null)
                {
                    keySerializer = new XmlSerializer(typeof(TKey));
                }
                return keySerializer;
            }
        }
        #endregion
        #region Private Members
        private XmlSerializer keySerializer = null;
        private XmlSerializer valueSerializer = null;
        #endregion
}


The full C# file can be downloaded here: SerializableDictionary.cs

This class is both XML-serializable and binary-serializable. It is hard to find examples out there that do both.

July 31, 2010 2:42 AM Eastern Daylight Time  #    Comments [0] - Trackback
.NET | News | Personal | Technology | Tips
# Tuesday, July 27, 2010




10000 vs. 7200 RPM - Which is Faster?

Does RPM matter? It appears not. Read on to view the shocking results!

Tools Used

Hard Drives Compared

  • Western Digital VelociRaptor 150 GB - WD1500HLFS -- 10,000 RPM
  • Seagate 7200.12 1 TB - ST31000528AS -- 7,200 RPM
  • Samsung Spinpoint F3 500 GB - HD501LJ -- 7,200 RPM

Both of the 7200 RPM drives have 500 GB per platter density. The 10,000 RPM VelociRaptor has a density of 150 GB per platter.

The Showdown

Here are the hard drive benchmark scores for the drives tested:

DriveAverage Score (MB/s)# of Samples
VelociRaptor60.61
Seagate54.04
Samsung44.43


The results have been taken from the available reference results in Dacris Benchmarks.

It appears that the 10,000 RPM VelociRaptor is slightly faster (12%) than its closest 7200 RPM rival.

The 12% difference does not seem like much, given how much more the VelociRaptor costs, and how much less capacity you get.

Conclusions

As of this moment, you would do better to save your money and go for a large 7200 RPM drive rather than a small 10,000 RPM drive. It seems that the lower areal density of the VelociRaptor counteracts any positive effect that might be had from the higher spindle speed.

While the VelociRaptor is the fastest conventional drive out there (SSDs are faster), it is not significantly faster than a traditional 7200 RPM drive.

July 27, 2010 3:31 AM Eastern Daylight Time  #    Comments [0] - Trackback
Business | Commentary | News | Technology | Tips
Archive
<September 2010>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
About the author/Disclaimer

Disclaimer
The opinions expressed herein do not represent the opinions of the author or of any employer, employee, or associate of the author.

© Copyright 2010
Dan Tohatan
Sign In
Statistics
Total Posts: 182
This Year: 38
This Month: 0
This Week: 0
Comments: 46

Computers
Top Blogs


Copyright © 1999-2010 Dacris Software, Inc. All Rights Reserved.     Privacy Policy  |  Who We Are  |  Blog

Need professional resume writing services?