понедельник, 8 июня 2009 г.

.NET: Отладка приложений / сервисов

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


C#:
if (!Debugger.IsAttached) Debugger.Break();
* This source code was highlighted with Source Code Highlighter.

VB.NET:
If Not Debugger.IsAttached Then
  Debugger.Break()
End If

* This source code was highlighted with Source Code Highlighter.

среда, 3 июня 2009 г.

ORACLE: Перемещение таблиц и индексов пользователя в другой tablespace

собственно ответ на вопросы:
How to move LOB data to another tablespace?
How to move user tables to a different tablespace?
How to move user indexes to a different tablespace?

скрипт пока не умеет перемещать индекс-таблицы и секционированные таблицы.

  1. DECLARE
  2.   table_ts_name  VARCHAR2 (30) := 'USER_DATA'; –- табличное пространство для перемещения таблиц
  3.   index_ts_name  VARCHAR2 (30) := 'USER_INDEX'; –- табличное пространство для перемещения индексов
  4.   varUser VARCHAR2(30) := 'HR'; – схема объекты которой необходимо переместить
  5. BEGIN
  6.   FOR obj
  7.   IN ( -- перемещение таблиц содержащих поля LOB типов
  8.     SELECT 'alter table '||owner||'.'|| table_name||' move lob('|| column_name 
  9.         ||') store as (tablespace '|| table_ts_name move_sql
  10.      FROM  dba_tab_cols
  11.     WHERE  owner=varUser and data_type='%LOB'
  12.     UNION ALL
  13.     -- перемещение остальных таблиц   
  14.     SELECT 'alter table '||t1.owner|| '.'||t1.object_name||' move tablespace '||table_ts_name move_sql
  15.      FROM all_objects t1
  16.     WHERE t1.owner=varUser
  17.        AND t1.object_type = 'TABLE'
  18.        AND t1.temporary = 'N'
  19.        AND NOT EXISTS (
  20.                 SELECT 1 from dba_tab_cols t2
  21.                 where t1.owner = t2.owner
  22.                 AND t1.object_name = t2.table_name
  23.                 AND t2.data_type = 'LONG'
  24.                 AND t2.data_type = 'LONG RAW')
  25.     UNION ALL
  26.     -- перемещение и ребилд индексов, за исключением IOT индексов
  27.     SELECT 'alter index '||owner||'.'|| index_name|| ' rebuild tablespace '|| index_ts_name move_sql
  28.      FROM  all_indexes
  29.     WHERE  owner=varUser AND index_type <> 'IOT - TOP')
  30.   LOOP
  31.   dbms_output.put_line(obj.move_sql);
  32.    EXECUTE IMMEDIATE obj.move_sql;
  33.   END LOOP;
  34. END;
* This source code was highlighted with Source Code Highlighter.

понедельник, 1 июня 2009 г.

DateTime.ToString и "/" подстава

задолбался
      DateTime dt = DateTime.Now;
      Trace.WriteLine("ToString() - " + dt.ToString());
      Trace.WriteLine("dd/MM/yyyy HH:mm - " + dt.ToString("dd/MM/yyyy HH:mm"));
      Trace.WriteLine("dd[MM[yyyy HH^mm - " + dt.ToString("dd[MM[yyyy HH^mm"));
      Trace.WriteLine(@"dd\/MM\/yyyy HH:mm - " + dt.ToString(@"dd\/MM\/yyyy HH:mm"));
      Trace.WriteLine("System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator - " +
        System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator);


* This source code was highlighted with Source Code Highlighter.


Output:
ToString() - 01.06.2009 15:44:54
dd/MM/yyyy HH:mm - 01.06.2009 15:44
dd[MM[yyyy HH^mm - 01[06[2009 15^44
dd\/MM\/yyyy HH:mm - 01/06/2009 15:44
System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator - .

Спрашивается чем слеш(/) неугодил?

четверг, 14 мая 2009 г.

Сваял утилитку "Tfs BatchUndo"

Время от времени подваливают программеры с просьбой сделать откат CheckOut для файликов. Все бы хорошо, но Checkout они делали до переустановки операционки, или смены компа или имени. До того как меня достало я писал скрипт для этого, а теперь все это можно сделать с помощью утилитки TFS BatchUndo.

Интересная статья на данную тему Undoing a checkout that belongs to another user.

четверг, 30 апреля 2009 г.

WiMAX таки в Уфе

Компания Yota объявила о начале тестовых испытаний своей сети в Уфе.
И с 1 мая начнет собирать заявки от желающих, из всей толпы будут отобраны 500 чемпионов-тестеров ;-)

Компания Yota, ведущий российский разработчик и поставщик мобильных сервисов на основе технологии 4-го поколения Mobile WiMAX, объявляет о начале опытной эксплуатации своей сети в Уфе. Для демонстрации и тестирования возможностей сети Mobile WiMAX в Уфе стартует программа Команда Yota.

Пятьсот жителей Уфы войдут в Команду Yota и станут первыми пользователями сети беспроводного быстрого доступа в интернет по технологии Mobile WiMAX — Yota Чемпионами. Во время действия программы, до середины лета 2009 года, Yota Чемпионам будет предоставлена возможность безлимитного использования всех возможностей сети. ....


Условия участия в программе «Команда Yota»
программа "Команда Yota"

среда, 22 апреля 2009 г.

SRM 438

Решаю потихонку задачки...

250
namespace SRM438
{
  public class UnluckyNumbers
  {
    public int getCount(int[] luckySet, int n)
    {
      Array.Sort(luckySet);

      int result = 0;

      for (int i = 0; i < luckySet.Length - 1; i++)
      {
        if (luckySet[i] < n & luckySet[i + 1] > n)
        {
          if (luckySet[i + 1] - 1 - luckySet[i] + 1 > 1)
          {
            result += (luckySet[i + 1] - n) * (n - luckySet[i]) - 1;
          }
        }
      }

      return result;
    }
  }
}


* This source code was highlighted with Source Code Highlighter.



Заюзал NUnit v2.5 для тестирования ;-)
[TestFixture]
  public class UnluckyNumbersTests
  {
    [TestCase(new int[] { 1, 7, 14, 10 }, 2,4)]
    [TestCase(new int[] { 4, 8, 13, 24, 30 }, 10,5)]
    [TestCase(new int[] { 10, 20, 30, 40, 50 }, 30,0)]
    [TestCase(new int[] { 3, 7, 12, 18, 25, 100, 33, 1000 }, 59,1065)]
    public void getCountTest(int[] luckySet, int n, int expectedResult)
    {
      UnluckyNumbers unluckyNumbers = new UnluckyNumbers();

      int result = unluckyNumbers.getCount(luckySet, n);

      Assert.AreEqual(expectedResult, result);
    }
  }


* This source code was highlighted with Source Code Highlighter.

SRM 438

Решаю потихонку задачки...

250
namespace SRM438
{
  public class UnluckyNumbers
  {
    public int getCount(int[] luckySet, int n)
    {
      Array.Sort(luckySet);

      int result = 0;

      for (int i = 0; i < luckySet.Length - 1; i++)
      {
        if (luckySet[i] < n & luckySet[i + 1] > n)
        {
          if (luckySet[i + 1] - 1 - luckySet[i] + 1 > 1)
          {
            result += (luckySet[i + 1] - n) * (n - luckySet[i]) - 1;
          }
        }
      }

      return result;
    }
  }
}


* This source code was highlighted with Source Code Highlighter.



Заюзал NUnit v2.5 для тестирования ;-)
[TestFixture]
  public class UnluckyNumbersTests
  {
    [TestCase(new int[] { 1, 7, 14, 10 }, 2,4)]
    [TestCase(new int[] { 4, 8, 13, 24, 30 }, 10,5)]
    [TestCase(new int[] { 10, 20, 30, 40, 50 }, 30,0)]
    [TestCase(new int[] { 3, 7, 12, 18, 25, 100, 33, 1000 }, 59,1065)]
    public void getCountTest(int[] luckySet, int n, int expectedResult)
    {
      UnluckyNumbers unluckyNumbers = new UnluckyNumbers();

      int result = unluckyNumbers.getCount(luckySet, n);

      Assert.AreEqual(expectedResult, result);
    }
  }


* This source code was highlighted with Source Code Highlighter.