Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 682

Очередной выпуск рассылки! За последнее время на сайте произошло столько всего, столько всего, что все просто не уместилось в этот выпуск! Но ничего, ведь вы всегда можете ознакомиться со всеми обновлениями непосредственно посетив сайт. Кстати, помимо изменения в содержании Kbyte.Ru, появлении новых интересных материалов, проект постоянно совершенствуется технически, и вы можете принять в этом непосредственное участие, присылая свои идеи и предложения.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Форум и поиск @artF 29.03.2012 23:03
Всем доброго времени суток.Вопрос либо я не внимательный и не заметил кнопку поиска но помоему при посмотре форума нигде нет поиска по форуму конкретно.Именно при просмотре форума http://kbyte.ru/ru/Forums лично сейчас я хотел найти но такой функции не обнаружил, предлогаю добавить такую,должно быть удобнее)

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 29.03.2012 23:39
Это слишком дорогое удовольствие. Нагрузка на базу будет высокой, сейчас и без поиска все напределе.
На главной есть справа поиск от Google.

Возможно, на новом сервере появится, это пока только в планах.

[- к содержанию -]

Добавить свой ответ в эту тему
Ребят, всем привет, помогите разобраться с одним вопросом...

Изучаю патерны проектирования, изучил одну статейку на codeproject.com, а именно вот эту... все довольно тривиально, но у меня возник вопрос, а собственно зачем создается абстрактный класс в котором имплементится интерфейс, не проще ли имплементить интерфейс в классах реальный бизнеслогик, или все же это сделано для удобства хранения данных (ведь интерфейс не может хранить их) и нейкой начальной базовой реализации... на данном этапе я понимаю это так... интерфейс создается с целью предоставить набор доступных действий, а абстрактный класс прежоставляет самую общую реализацию бизнеслогики, после чего мы можем унаследоваться от абстрактного класса и "уточнить" поведение конкретного класса бизнес логики?

Разъясните этот вопрос более подробно...

[- к содержанию -]

Подскажите кто знает как добавить эквалайзер в проигрыватель? Что для этого нужно.
Меня интерисует как сделать команды на СКРОЛБАРЫ: панорама, срез низкие частоты, срез высокие частоты, делей (эхо).
в среде Delphi

[- к содержанию -]

Ребят, помогите разобрать тему процессов и потоков...

Вообщем надо организовать WinForms приложение, которое работает с потоками выполнения, нужно использовать Thread, Treadpool, Backgroundwoker, которые будут выполнять метод в разных потоках, можно для примера просто пересчет от 1 до 100, отобразить ход выполнения в Label, при чем сделать нужно так, есть кнопка, по нажатию которой добавляется новый поток в котором начинает выполняться метод, при чем добавляет новый Label где отображается выполнение метода в новом потоке... Помогите разобраться с работой потоков и как вообще правильно делать это все...

P.S. буду крайне признателен за комментарии в коде, хотя бы минимальные, заранее благодарю

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 27.03.2012 12:29
можно для примера просто
Просто не получится, работа с потоками, и в частности синхронизация - сложная тема, для каждой конкретной задачи решение будет уникальным

С Label-ами решение может быть таким:
public partial class Form1 : Form
{

  private int _TotalThreads = 0;

  public Form1()
  {
    InitializeComponent();
  }

  private void button1_Click(object sender, EventArgs e)
  {
    // отправляем label на panel
    Label l = new Label();
    l.Text = "новый поток";
    l.AutoSize = true;
    panel1.Controls.Add(l);

    // создаем поток
    Thread t = new Thread(ThreadMethod);
    t.IsBackground = true;
    t.Start(l);// передаем ссылку на Label в поток

    // увеличиваем счетчик потоков
    _TotalThreads++;
  }

  private void ThreadMethod(object arg)
  {
    // получаем ссылку на Label
    Label l = arg as Label;
    // цикл, для наглядности
    for (int i = 1; i <= 100; i++)
    {
      // определяем размер паузы
      int sleepTime = new Random(DateTime.Now.Millisecond).Next(1000, 5000);
      // меняем текст в Label
      UpdateLabel(l, String.Format("цикл: {0}, пауза: {1} сек.", i, sleepTime / 1000));
      // ставим поток на паузу
      Thread.Sleep(sleepTime);
    }
    // работа почти завершена
    // удаляем label
    RemoveLabel(l);
    // уменьшаем счетчик потоков 
    _TotalThreads--;
  }

  /// <summary>
  /// Метод обновления текста в Label
  /// </summary>
  /// <param name="l">Ссылка на Label, текст в котором нужно обновить</param>
  /// <param name="msg">Новый текст</param>
  private void UpdateLabel(Label l, string msg)
  {
    if (this.InvokeRequired)
    {
      this.Invoke(new MethodInvoker(delegate { UpdateLabel(l, msg); }));
      return;
    }
    l.Text = msg;
  }

  /// <summary>
  /// Метод удаляет Label из panel
  /// </summary>
  /// <param name="l">Label, который нужно удалить</param>
  private void RemoveLabel(Label l)
  {
    if (this.InvokeRequired)
    {
      this.Invoke(new MethodInvoker(delegate { RemoveLabel(l); }));
      return;
    }
    panel1.Controls.Remove(l);
  }

  #region обновление расположения Label-ов в panel, чтобы не было пробелов
  private void panel1_ControlAdded(object sender, ControlEventArgs e)
  {
    UpdateLabelPostions();
  }

  private void panel1_ControlRemoved(object sender, ControlEventArgs e)
  {
    UpdateLabelPostions();
  }

  private void UpdateLabelPostions()
  {
    for (int i = 0; i <= panel1.Controls.Count - 1; i++)
    {
      if (i == 0)
      {
        panel1.Controls[i].Top = 0;
      }
      else
      {
        panel1.Controls[i].Top = panel1.Controls[i - 1].Top + panel1.Controls[i - 1].Height;
      }
    }
  }
  #endregion
}
partial class Form1
{
  /// <summary>
  /// Требуется переменная конструктора.
  /// </summary>
  private System.ComponentModel.IContainer components = null;

  /// <summary>
  /// Освободить все используемые ресурсы.
  /// </summary>
  /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
  protected override void Dispose(bool disposing)
  {
    if (disposing && (components != null))
    {
      components.Dispose();
    }
    base.Dispose(disposing);
  }

  #region Код, автоматически созданный конструктором форм Windows

  /// <summary>
  /// Обязательный метод для поддержки конструктора - не изменяйте
  /// содержимое данного метода при помощи редактора кода.
  /// </summary>
  private void InitializeComponent()
  {
    this.panel1 = new System.Windows.Forms.Panel();
    this.button1 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    // 
    // panel1
    // 
    this.panel1.AutoScroll = true;
    this.panel1.Borderstyle="System.Windows.Forms.BorderStyle.FixedSingle;"
    this.panel1.Location = new System.Drawing.Point(12, 55);
    this.panel1.Name = "panel1";
    this.panel1.Size = new System.Drawing.Size(530, 231);
    this.panel1.TabIndex = 0;
    this.panel1.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.panel1_ControlAdded);
    this.panel1.ControlRemoved += new System.Windows.Forms.ControlEventHandler(this.panel1_ControlRemoved);
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(12, 12);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(139, 37);
    this.button1.TabIndex = 1;
    this.button1.Text = "Добавить поток";
    this.button1.UseVisualStyleBackColor = true;
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 
    // Form1
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(554, 330);
    this.Controls.Add(this.button1);
    this.Controls.Add(this.panel1);
    this.Name = "Form1";
    this.Text = "Form1";
    this.ResumeLayout(false);

  }

  #endregion

  private System.Windows.Forms.Panel panel1;
  private System.Windows.Forms.Button button1;
}
Но лучше всего оформить это делать в виде класса, как минимум одного, и передавать ссылку на его экземпляр в поток. Чтобы все совсем было красиво, можно реализовать события в классе.
Как уже говорил, универсального решения в таких задачах быть не может. Тема сложная, если есть возможность обойтись без потоков, то лучше использовать эту возможность. Неправильная организация работы многопоточного приложения может стать причиной смерти проекта на стадии зачатия

[- к содержанию -]

Ответ #2 @InfoMaster 28.03.2012 12:42
Спасибо огромное, Алексей, буду изучать тему на вашем примере

[- к содержанию -]

Подскажите.Ни разу не пробовал делать программу, с возможностью обновления через интернет при необходимости. Подскажите технологию каким образом это делается. Спасибо...

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 26.03.2012 14:39
1. Сделать запрос на страницу в интернет, которая будет возвращать номер последней версии программы, или дату обновления. Для этого нужен сайт, домен.
2. Если версия текущей программы уже устарела, то нужно загрузить новую версию. Удобней закачивать дистрибутив. Когда программа будет закачена, нужно выключить текущую работающую версию (которая закачивала новую версию) и запустить установщик.

Технически, реализовать проверку обновлений и загрузку дистрибутива можно при помощи сокетов.

[- к содержанию -]

Ответ #2 @Леонид 27.03.2012 04:01
А можно ли на примере как то объяснить? Спасибо... Программа на VB5.

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 27.03.2012 11:33
Примеры получения данных из Интернет при помощи Visual Basic 5.0/6.0 вот:
USD And Euro Course
POST-запрос через WinSock
Загружаем любой файл из интернета
InternetNews

Серверную часть, если нет домена и нормального хостинга, можно сделать даже на бесплатном хостинге. Например, narod.ru. Сделать файлик, например:
http://mydomain.narod.ru/version.html

который будет содержать версию программы. Например:
первая версия:
1
вторая версия:
2
десятая версия:
10

Файл http://mydomain.narod.ru/version.html обновлять вручную, при необходимости.
Программа будет периодически загружать этот файл http://mydomain.narod.ru/version.html - т.е. там буквально одна строка данных будет, состоящая из нескольких символов. Если число в файле больше, чем число вшитое в программу, то программа должна будет закачать новый дистрибутив.
Например, в программу вшито число 1, в файлике http://mydomain.narod.ru/version.html стоит 2. Новый дистрибутив лежит (где именно, зависит от фантазии разработчика) по адресу: http://mydomain.narod.ru/updates/2/file.exe Программа должна его закачать, одним из способов, показанных в приведенных выше примерах. Затем запустить, при помощи команды Shell.
Собственно, файл http://mydomain.narod.ru/version.html может содержать не номер версии, а ссылку на последний дистрибутив программы. Да и вообще, все что угодно может содержать. Я привел максимально простую схему.

[- к содержанию -]

Ответ #4 @artF 29.03.2012 20:28
Можно так же сделать вроди этого- файл http://mydomain.narod.ru/version.html:

2
http://mydomain.narod.ru/upd/file.exe
Здесь описание что нового в программе,чтобы сразу вывести его в программу а там пользователь примет решение обновлять или нет

пример как парсить все данные на VB6( думаю с VB5 похож синтаксис):
Dim version1 As Integer
 version1 = InStrRev(strResponse, "[/ver]")

Dim version2 As Integer
 version2 = InStrRev(strResponse, "<result>", version1)

result = Mid(strResponse, version2 + Len("[ver]"), version1 - Len("[ver]") - version2)

тут:
strResponse это строка с ответом от сервера( в нашем случае с заголовками и содержимым от http://mydomain.narod.ru/version.html
result строка с нашими нужными данными

[- к содержанию -]

Добавить свой ответ в эту тему
Ребят, нужна помощь

есть класс внутри которого описан такой вот массив:

public TimeSpan[]
TimeSpanArrayField;

Как написать свойство для доступа к нему используя атрибуты set и get

P.S. индексатор здесь не подойдет, я не использую класс как обертку над единственным массивом

Заранее благодарю!

[- к содержанию -]

Ответ #1 @InfoMaster 23.03.2012 19:16
Решил проблему, кому интересно делается это так:

public string[] TimeSpanArray
        {
            get
            {
                string[] strings = new string[TimeSpanArrayField.Length];
                for (int number = 1; number <= TimeSpanArrayField.Length; number++)
                    strings[number - 1] = TimeSpanArrayField[number - 1].ToString();
                return strings;
            }
            set
            {
                TimeSpanArrayField = new TimeSpan[value.Length];
                for (int number = 1; number <= value.Length; number++)
                    TimeSpanArrayField[number - 1] = TimeSpan.Parse(value[number - 1]);
            }

        }

[- к содержанию -]

Добавить свой ответ в эту тему

Все темы и обсуждения

Исходные коды

Gimme Light in WPF

Visual Basic .NET: Мультимедиа @Shark1 25.03.2012 17:17
Пример одного уровня игры похожей на "Gimme Light".

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Все исходные коды

Вакансии в IT

Ведущий разработчик (Руководитель группы)

Россия, Москва | Работа в офисе

Разработчик БД

Россия, Москва | Работа в офисе | 60 000.00 RUB

Разработчик программного обеспечения С#/ Программист С#

Россия, Москва | Работа в офисе | 50 000.00 RUB

Java разработчик

Россия, Москва | Работа в офисе | 110 000.00 RUB

Специалист / программист по адаптации flash сайта

Россия, Москва | Удаленная работа

Программист

Россия, Москва | Работа в офисе | 100 000.00 RUB

Инженер-программист BIOS

Россия, Москва | Работа в офисе

Программист для создания ГИС

Россия, Москва | Работа в офисе | 55 000.00 RUB

Программист Delphi

Россия, Москва | Работа в офисе | 60 000.00 RUB

Программист

Россия, Москва | Работа в офисе | 80 000.00 RUB

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

Европа создаст единый центр по борьбе с киберпреступлениями

По сообщению агентства Associated Press, Еврокомиссия намерена учредить специализированный центр по работе с киберпреступностью и защите граждан от "незаконной онлайн-активности". Сегодня в Брюсселе поступило предложение по созданию соответствующего центра как части Европола - европейского полицейского ведомства. Расположить новый общеевропейский центр по борьбе с киберпреступностью предлагается в Гааге (Нидерланды).

В заявлении Еврокомиссии говорится, что крупномасштабные кибератаки в Европе становятся все более частыми и сложными, дойдя до той стадии, когда они начали представлять собой реальную угрозу европейским финансовым учреждениям и объектам критически важной общественной инфраструктуры.

Сообщается, что на первом этапе центр сосредоточится на борьбе с финансовым мошенничеством и атаками на банки с их ИТ-системами.

29.03.2012 12:01 · Категория: Безопасность · Источник: CyberSecurity.ru

[- к содержанию -]

Google работает над продвинутыми веб-технологиями

Google работает над рядом продвинутых техник программирования, позволяющих облегчить написание сложных веб-приложений. "Мы находимся в точке, когда веб превращается в место интеграции платформ и аппаратных компонентов", - говорит Алекс Рассел, инженер Google, ведущий разработку браузера Chrome и создатель фреймворка Dojo JavaScript.

Рассел накануне представил свой доклад на технической конференции EclipseCon в американском Рестоне (шт Вирджиния), где признал, что несмотря на популярность концепции современного веб-пространства, современная веб-среда имеет лишь сравнительно примитивные средства программирования по сравнению с теми средствами, что имеют операционные системы. "Одной из наиболее очевидных проблем веб-технологий является отсутствие общей компонентной модели", - говорит Рассел. "Это значительно затрудняет тестирование кода и его последующее использование".

По его словам, Google сейчас работает над рядом проектов, которые должны обеспечить продвинутый софтверный инжиниринг для веб-среды. Основная идея таких проектов заключается в том, чтобы представить низкоуровневые управляющие элементы без существенного усложнения стека технологий, применяемых сейчас. "Мы занимаемся платформами, которые позволят создать низкоуровневые очень производительные веб-приложения", - говорит он.

На сегодня значительные преимущества веб-среды заключаются в простоте используемых тут технологий: программистам не нужно писать большие объемы кодов, браузеры прощают некоторые ошибки в кодах, а форматирование текстов и внешнего вида осуществляется на уровне базовых технологий, таких как CSS. "На определенном этапе такая простота и доступность технологий превращается в лимит. К примеру, в CSS вы просто не сможете создать новые классы, кроме тех, что заранее предусмотрены, вы не сможете изменить прорисовку под себя и это не слишком здорово. Google создает унифицированную компонентную модель, которая позволит программистам самим определять свойства и поведение тех или иных компонентов и элементов", - говорит он.

В качестве примера он привел образный элемент commenting, позволяющий пользователям комментировать что-либо на сайте. Для веб-страниц, позволяющих комментарии, этот элемент должен быть доступен к качестве простого тэга, способного автоматически форматировать и оформлять текст и графику. Однако на системном уровне этот тэг должен работать через сеть API, которые самым гибким образом позволят управлять HTML-кодом.

По словам Рассела, нечто подобное есть в JavaScript, когда ключевые элементы объектно-ориентированного программирования, классы и иные объекты могут повторно использовать ранее полученные данные или повторять ранее обозначенное поведение. Для прикладных веб-технологий это, по мнению инженера Google, будет означать более эффективное использование вычислительных ресурсов как серверов, так и клиентских ПК.

"Мы предлагаем работать таким образом, чтобы программист под себя мог создать все, начиная с самых примитивных элементов. Сейчас это сложно сделать, так как у нас нет общей точки зрения и нет общего веб-языка, либо единой веб-платформы", - признает он.

29.03.2012 12:00 · Категория: Бизнес в IT · Источник: CyberSecurity.ru

[- к содержанию -]

Самый большой в мире OLED-телевизор оценили в 8 тысяч долларов

OLED-телевизор LG с 55-дюймовым экраном будет стоить 7,9 тысячи долларов и поступит в продажу до летних Олимпийских игр в Лондоне. Ранее сообщалось, что устройство выйдет во второй половине года. Аналогичный телевизор готовит к выпуску Samsung, но цена на него пока не раскрывается.

29.03.2012 11:59 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное