More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  Gaidar MagdanurovPhotosProfileFriendsMore Tools Explore the Spaces community

Gaidar Magdanurov

View space
SilentDeuce
View space
Kirill Tropin
View space
(без имени)
View space
b.weber
View space
Friend
View space
Saniata
View space
Alexey Goldbergs
View space
Daniel A. Kornev
View space
Андрей Алтухов
View space
Машенька
View space
Igor
View space
Vladimir
View space
OLEGaFX
View space
Sergey Zwezdin
View space
Alexander Shevchuck
View space
Роман
View space
Евгений
View space
Alexander Popov
View space
Alant
View space
Mikhail Chernomordikov
View space
Peter Didenko
View space
Burlyaev Dmitry
View space
Alexander Lozhechkin
View space
Alex Dybenko
View space
Виталий Кузнецов
View space
Eugene Ostroukhov
View space
Roman Nikitin
View space
RayShade
View space
Andrey Kruchkov
View space
Eugene Agafonov
View space
AlexeyBurlachenko
View space
MIkhail
View space
Marina

July 16

Широкой публике открыт "Форум обсуждения терминологии Майкрософт"

К вопросам локализации можно относиться по-разному: она может быть не нужна профессионалу, привыкшему к английской терминологии, но полезна обычному пользователю программных продуктов. Но, согласитесь, приятно, когда есть выбор пользоваться продуктом на родном языке.
Относительно локализации продуктов Microsoft высказывали много претензий (особенно показательно выразил свое отношение посмотреть профиль Антон Борисович на прошедшей в мае в Москве конференции ReMIX), поэтому Microsoft открывает широкой публике форум для обсуждения терминологии, используемой при локализации. Теперь каждый может внести свой вклад в то, что он прочитает на экране при пользовании локализованным продуктом.
Подробнее узнать о терминологии и нелегкой работе локализаторов Microsoft можно узнать в блоге "Терминоведение и русскоязычная терминология".

May 19

PowerShell на Windows Server 2008 Server Core

Дима Сотников опубликовал подробную инструкцию по установке .NET 2.0/Power Shell на Server Core. Разумеется, этот способ установки не поддерживается Microsoft и в службе тех. поддержке вам о нем не расскажут. Но этот способ работает - у меня все получилось без проблем на виртуальной машинке с Server Core.

Ура!

May 12

Очередная встреча MDNA

Наконец-то после очень долгого перерыва состоиться очередная встреча группы пользователей MDNA - 15 мая в офисе Microsoft. Приглашаем всех желающих!

Эта встреча будет необычной - у нас в гостях представитель Яндекс Анатолий Орлов, который расскажет об архитектуре поиска Яндекс и ни слова не скажет о технологиях Microsoft и .NET. Неожиданно? :) Кроме того, вас ожидают доклады двух замечательных докладчиков - Тимофея Казакова и Евгения Агафонова.

Информация о встрече и регистарция здесь - http://mdna.ineta.ru/Events/EventSimpleInfo.aspx?Id=121f3bfe-df0c-4531-9d88-2e111a3e1ab5

Регистрируйтесь и приходите!

May 04

PHP на Windows. Установка и настройка PHP для использования с модулем FastCGI.

Я начинаю писать серию сообщений об установке и использовании PHP на Windows с модулем FastCGI. В этом сообщении я опишу процесс установки PHP. Согласитесь, логично установить PHP если есть желание его использовать.

Шаг 1. Скачать PHP

На сайте PHP.net нужно скачать последную версию PHP для Windows. Для использования с FastCGI рекомендуется устанавливать версию PHP без контроля безопасности потоков, поскольку сам модуль FastCGI гарантирует, что выполнение происходит в одном потоке и поддержка контроля безопасности потоков в самом PHP привносит лишние проверки и блокировки, приводящие к значительному падению производительности. Поэтому выбираем Non-thread-safe Win32 binaries (версия 5.2.6 актуальна на момент написания этого сообщения).

Стоит отметить, что веряим Non-thread-safe была разработана специально для работы с FastCGI на IIS (первый релиз был в версии 5.2.1) и использовать в других средах не рекомендуется. Кстати, начиная с версии 5.2.2 Zend серьезно работает над оптимизацией производительности PHP под Windows, что не может не радовать. Если сравнить версии 5.2.1 и 5.2.2, то разницу в скорости обработки запросов можно легко увидеть с помощью простого нагрузочного теста.

Шаг 2. Установка PHP

Установка осуществляется совсем просто: поскольку мы скачали архив с исполнимыми файлами, достаточно развернуть этот архив (это .zip, поэтому с ним справится встроенные в оболочку Explorer архиватор). Например, установим PHP в директорию C:\Web\PHP.

В качестве базовой конфигурации воспользуемся рекомендованными установками: cделаем копию файла php.ini-recommended в php.ini в этой же директории и откроем его для редактирования, после чего пройдем файл сверху расскоментируя следующие строки, дабы обеспечить безопасность и совместимость с большинством PHP приложений:

  • open_basedir = директория, где размещены PHP приложения.
    Указание директории ограничит права доступа к файлам PHP приложений только этой директорией. Удобно переопределять эту настройку в файлах конфиграции непосредственно для каждого приложения, однако не помешает установить эту настройку и указать корневую директорию всех PHP приложений. Например, C:\inetpub\PhpSites.
  • cgi.force_redirect = 0
    По умолчанию установлено 1, но необходимо установить в 0, поскольку IIS контролирует безопасность выполнения PHP и в этой настройке нет необходимости. Более того, включение может привести к неожиданным результатам. При использовании с другими web-серверами на Windows эту настройку необходимо включить.
  • cgi.fix_pathinfo = 1
    PHP будет устанавливать имя файла в переменной SCRIPT_FILENAME, если установить значение 0, то имя файла будет в переменной PATH_TRANSLATED, что может нарушить совместимость с большинством приложений.
  • fastcgi.impersonate = 1;
    FastCGI позволяет процессу имперсонироваться используя контекст клиента, вызывающего процесс. Этот механизм работает только под FastCGI/IIS, например на Apache на Windows это работать не будет.
  • short_open_tag = On
    Большинство приложений используют короткие теги <? ?>, поэтому будет не лишним включить их поддержку.
  • display_errors = On
    На время проверки и отладки PHP приложений на FastCGI стоит включить вывод сообщений об ошибках.

Шаг 3. Проверка работоспособности PHP

Пока мы не сконфигурировали IIS, проверить работоспособность интерпретатора можно просто, например, выполнив команду c:\web\php\php.exe -info > c:\test.txt

В файле test.txt будет выведена информация о параметрах, используемых PHP.

May 01

Удаление дубликатов и обновление таблиц с использованием JOIN

Я давно хотел придумать "живой" пример для удаления дубликатов и обновления таблиц с использованием JOIN, и он пришел ко мне сам собой. Только что пришлось написать небольшой скрипт T-SQL, на примере которого и продемонстрирую несколько советов.

Задачка: есть некоторая табличка Table1, содержащая записи колонки ID1 int, ID2 int, Date datetime. В этой таблице существуют повторяющиеся пары ID1 и ID2, а дубликатов по этим парам быть не должно. Необходимо сделать несколько действий: 1) Посчитать количество дубликатов 2) Оставить только записи с самой поздней датой 3) Посчитать записи сгрупированные по ID2 и обновить поле в таблице Table2. Сама по себе логика проста - в одной таблице собираются голоса от разных пользователей, привязанные к некоторым сущностям в Table2, в самой Table2 важны два поля ID2 int и Total int, первое - идентификатор сущности, второе число строк сгруппированых по ID2 в Table1.

Для начала посчитаем сколько у нас дубликатов:

SELECT ID1, ID2, count(*) FROM Table1 GROUP BY ID1, ID2 HAVING count(*) > 1

Потом сделаем выборку во временную таблицу уникальных существующих ID1 и ID2, после чего привяжем к ним последнюю дату голосования и обновим основную таблицу:

DECLARE @UniqueTable TABLE(id1 int, id2 int, date datetime)

INSERT INTO @UniqueTable
    SELECT id1, id2, MAX(date) FROM table1 GROUP BY id1, id2

TRUNCATE TABLE table1

INSERT INTO table1 (id1, id2, date)
    SELECT id1, id2, date FROM @UniqueTable

Теперь, когда у нас есть нужный набор данных, обновим поля таблицы Table2, используя выражения UPDATE и JOIN:

DECLARE @TempTable TABLE(id2 int, total int)

INSERT INTO @TempTable (id2, total) SELECT id2, Count(*) AS total FROM table1 GROUP BY id2

UPDATE table2 SET table2.total = [@TempTable].total
    FROM table2
    INNER JOIN @TempTable ON [@TempTable].id2 = table2.id2

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

Советы по оптимизации как всегда будут приняты с благодарностью!

View more entries