понедельник, 30 декабря 2013 г.

Чтение Excel через ODBC и .NET

Если вам необходимо программно прочитать данные из Excel файла, это можно сделать с помощью ODBC. В данной статье я покажу как. 
Итак у нас есть документ Excel в котором присутствуют некоторые данные, например такие как показано ниже:
Для того что бы иметь возможность обратится к ним из .NET кода через ODBC необходимо создать в системе соответствующий источник данных. Для этого заходим в Пуск->Панель Управления->Система и Безопасность->Администрирование->Источники данных (ODBC) и создаем источник данных на базе драйвера Excel:

Далее для этого источника данных необходимо указать название источника, его описание (на картинке ниже это TestExcel) и путь к Excel файлу, где находятся интересующие нас данные (на картинке ниже это D:\test.xls.

 Итак, источник данных готов, теперь немного магии на C# и фокус готов. Для этого будем использовать соединение, команды и ридер ODBC. В общем код примерно такой:
using System;
using System.Data.Odbc;

namespace ODBCExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new OdbcConnection("DSN=TestExcel;"))
            {
                var command = new OdbcCommand("Select Title, Description, Id from [Sheet1$]", connection);

                try
                {       
                    connection.Open();
                    OdbcDataReader reader = command.ExecuteReader();

                    var count = reader.FieldCount;
                    for (int i = 0; i < count; i++)
                    {
                        Console.Write(reader.GetName(i) + "\t");
                    }
                    Console.WriteLine();

                    while (reader.Read())
                    {
                        for (int i = 0; i < count; i++)
                        {
                            Console.Write(reader.GetValue(i).ToString() + "\t");
                        }
                        Console.WriteLine();
                    }
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
            }

            Console.ReadKey();
        }
    }
}


Тут думаю все интуитивно понятно, поэтому объяснять нечего. В строке соединения указываем имя нашего ODBC источника, в SQL запросе название листа Excel (Sheet1) плюс магический символ доллара (куда же без доллара в наши дни) трактуется как название таблицы. Самая первая строка в файле Excel формирует поля таблицы, которые мы и запрашиваем в выражении Select у таблицы [Sheet1$]. Результат будет примерно такой:


Что собственно и требовалось получить.




 

среда, 27 ноября 2013 г.

Маркетинг = Взлом Человека



Некоторые люди, кто имеет дело с бизнесом программного обеспечения верят пословице: “Если вы это сделаете – они придут за вами” (несмотря на то что пословица несколько превирает). В дополнению к большой работе по программированию и поддержке продукта, вам также необходимо:

  • убедится, что вы создаете  что-то, за что некоторые люди действительно будут готовы платить деньги.
  • Найти способ для эффективного продвижения стоимости продукта
  • Эффективно информаировать что ваш продукт делает
  • Выбрать оптимальную цену

Все это известно под общим термином “маркетинг”. Если вы не возьмете эти пункты себе на заметку, вероятность коммерческого успеха вашего продукта стремится к нулю. Это может выглядеть тривиально, по сравнению со всей комплексной сложностью написанных десятков тысяч строк вашего кода. Но вещи имеют обыкновение выглядеть просто ровно дло тех пор пока вы не решите их начать использовать. Как вы можете найти кого то кто купит ваш продукт до того как вы его создадите (как говорил известный Стив Джобс: “Люди не знаю чего хотят, до тех пор пока я им не покажу это”)? Как вы можете продвинуть ваш продукт, что бы он был замечен нужными людьми, в нужное время по цене которую вы предложили, в то время когда такое огромное количество других продуктов конкурирует за внимание своих потенциальных покупателей? Как вы сообщите потенциальному заказчику, что способны решить его проблемы за несколько секунд, которые у вас есть до того как он нажмет кнопку «Назад»? Как вы сформируете оптимальную цену и учтете всевозможные существующие факторы, такие как “цена как сигнал”, закрепление, сегментация и цена конкурентов? Это все совсем не тривиальные проблемы.

Я думаю что многие разработчики относятся к маркетингу, как к работе для людей, которые недостаточно умны что бы быть разработчиками. По правде говоря маркетинг трудно сделать хорошо. Люди намного более сложные чем микропроцессоры или языки программирования. Они в большинстве случаев не принимают решения базируясь на рациональной составляющей (можно обратиться к замечательной книге Предсказумо Иррациональный). Мы часто не понимаем самих себя, как же мы может понять чего хотят другие? Маркетинг имеет также репутацию (в приципе заслуженную) манипуляций и обмана. Но он не обязан быть таким. Хороший маркетинг неацелен на получения понимания ваших заказчиков и эффективного взаимодействия с ними. В любом случае манипулирование и обман людей редко работает в долгосрочном периоде.
 
Вы можете нанять маркетологов.  Но как вы узнаете, хорошо ли они делают свою работу, если вы сами даже не попробовали ее сделать? Понятно, что знания маркетинга – это очень хороший пункт в вашем резюме, но как на деле получить эти знания и опыт? Вариант только один – просто изучить эту область. Преуспеть в какой то области несложно, если вам нравится заниматься этой деятельностью. Трюком для меня касательно маркетинга было – заставить себя понять что это просто другой вариант хакинга, или взлома если хотите, но в данном случае взлом человека а не компьютера.  Как я могу использовать доступные стредства для увеличения количества продаж потратив на это фиксированную сумму денег и усилий? Мои результаты станут лучше, если я попробую использовать эту аудиторию/канал/выражение/картинку? Как только я посмотрел на маркетинг в таком свете, им стало заниматься намного интересней.


Хорошая новость заключается в том, что среднестатистический программист имеет реальное преимущество перед традиционным маркетологом в технических/численных оластях онлайн маркетинга, таких как оплата-по-клику, A/B тестирование и аналитика. Пользуйтесь этим. Также вы можете применить научный подход:  форму гипотезы (Реклама Facebook даст положительный результатв плане моих денег и времени), проведите эксперимент (добавьте рекламу в Facebook) и посмотрите на результат (сколько стоит каждая продажа).
 

Есть старая шутка. Два человека фотографируют льва, и он в это время начинает бежать на них. Один из фотографов бросает фотоаппарат и начинает убегать. «Это бессмыслено, вы никогда не сможете бежать быстрее льва» говорот ему другой фотограф. «Да, но я и не должен», отвечает первый «Мне достаточно бежать быстрее тебя». То же самое касается и маркетинга – вы не должны быть гуру в этой области. Вам просто нужно быть лучше чем ваши конкуренты, большинство из которых обыкновенные программисты, которые не любят маркетинг.