среда, 22 мая 2013 г.

Отправил пост о необходимом велосипеде на хабр

Сегодня 20 мая, отправил пост о "полезном велосипеде" на хабрахабр.
Хочу получить инвайт, и наконец-то иметь возможность писать комменты к статьям. Очень надеюсь, и жду...
Ждать сколько, не знаю, сказали ждать письма, так что скрестим пальцы.
Это мой первый пост, для строгого хабражюри, и для меня очень важно, услышать ответы - прочитать комменты, узнать где прав, где неправ и как сделать лучше.

Пост об окне для выбора каталога, OpenFile Dialog, реализованном на WPF, который почему-то отсутствует в Visual Studio. Тем самым если Вам нужно реализовать в приложении выбор папки для пользователя, приходится использовать Windows.Forms, что нарушает единый дизайн всего приложения.

Если интересно, читайте, и комментируйте.

Версия для скачивания, сыровата. В ней я реализовал костяк, остальные недоделки допилил и планирую через пару дней опубликовать новый шаблон.

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

понедельник, 20 мая 2013 г.

Как найти файлы в директории с заданными расширениями

Понадобилось мне обработать все изображения в папке, а так как расширений у изображений много, это и gif, jpg, bmp и тп, то простым Directory.GetFiles(path, *.jpg) тут не обойтись. Поэтому нашел простое решение. Можно было б использовать лямбда выражение и сделать код короче, но так нагляднее.

Способ использует цикл в цикле, и проходит по каждому найденному файлу, в директории.

string SelectFolder = "C:/Work/Folder"; // Путь к каталогу
string[] typeOfFiles = {"*.jpg", "*.jpeg", "*.gif", "*.png", "*.bmp", "*.flw" }; 
   foreach (string typeOfFile in typeOfFiles)
   {
       string[] filesForWork = Directory.GetFileSystemEntries(SelectFolder, typeOfFile);
       // Показываем с какими файлами работаем
       foreach (string filesFinded in filesForWork)
       {
        // Вывести только названия файлов без пути
           FileInfo imageName = new FileInfo(filesFinded);
    // вывести названия файлов в листбокс
           listBox1.Items.Add(imageName.Name);
       }
}


Это еще один способ код нашел на cyberforum.ru/:
string[] extensions = new[] { ".jpg", ".tiff", ".bmp" };
 
FileInfo[] files =
    dinfo.GetFiles()
         .Where(f => extensions.Contains(f.Extension.ToLower()))
         .ToArray();

пятница, 17 мая 2013 г.

C# Чтение в строку из файла и перевод строки.

Обычно, когда мы читаем текстовый файл в строку, с помощью StreamReader, то теряем переводы строки, то есть вместо
Первая строка
Вторая строка
Получаем:
"Первая строкаВторая строка".


И при записи этих строк в файл, затем ищем способы как снова разделить строки...

Что бы этого не происходило, при чтении файла в строку, читаем построчно и добавляем в конец читаемой строки символы "/r/n" (перевода строк для Windows)и тогда все будет в порядке.

// Открыть файл и прочитать в строку
 string someText = "";
using (StreamReader streamReader = new StreamReader(fileWithText,
System.Text.Encoding.Default))
{
       while (!streamReader.EndOfStream)
       {

            // Заносить в строку, построчно - Учитывать Перевод строки
           someText += streamReader.ReadLine() + "\r\n"; 
       }
       streamReader.Close();
}

суббота, 23 марта 2013 г.

И понял я, CVS - Это полезно!

В работе (верстка html файлов) для облегчения обработки файлов, я использую самописные утилиты, которые я называю "гномулиты").
Одна из подобных "гномулит" - Shablor. Утилита для обработки шаблонов и внесения изменения. Она помогает мне при обработке проектов и выполняет около 10 монотонных функций. Особенно удобно если нужно обработать 200 проектов, в которых более 10 000 файлов.
Итак, вчера решил я внести изменения в эту утилиту, для ускорения оной.
Изменил одну из функций и амба! Приплыли, ошибка за ошибкой, а времени для исправления мало.
 Как и для каждого фрилансера: время - деньги. Потратил около получаса для удаления изменений, и вернул все как было.
И вот тогда я подумал, что если бы я использовал - Систему контроля управлениями версиями. Откат изменений занял бы пару минут!
Ранее я думал, что различные системы управления версиями (СУВ) - cvs, не требуется для одинокого разработчика. И был не прав.


Поэтому, решил выбрать СУВ, почитав на Хабре полезную статью, о быстром старте в использовании СУВ. Выбрал Mercurial. (Подумывал о GIT, но на Windows все таки лучше Mercurial). С удивлением узнал что эту СУВ использует Mozilla, и мой любимый DWM.

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

P.S Я знаю что такое TDD - Разработка через тестирование, но пока в процессе изучения, читаю очень полезную книгу Кент Бек - "Экстремальное программирование разработка через тестирование". Пишу заранее так как знаю, что кто-нибудь, обязательно посоветует)



вторник, 12 марта 2013 г.

Сегодня проходил тест по php на Мамбе (37 вопросов), и набрал 164 балла. Без подсказок и гугления, конечно.
Ровно месяц назад набрал 137, прогресс!
Если и Вы хотите узнать свои силы в php, добро пожаловать.
Мне выдали вот такой виджет




Приятно, буду дальше изучать php, и постараюсь через месяц опубликовать результат!

пятница, 22 февраля 2013 г.

Если столкнулись с php ошибкой open_basedir


require_once() [function.require-once]: open_basedir restriction in effect


Вот что съело целый час моего времени, которое я мог потратить на разработку своего приложения DojoDojo. Возникает она, из-за настроек php.ini, а именно пункт open_basedir, в котором прописаны пути.
  • open_basedir ограничивает список файлов, к которым может обращаться PHP, указанным деревом директорий.
  • open_basedir может применяться независимо от того, используется защищенный режим или нет.
 На хабре уже обсуждалось, что из-за настроек open_basedir, файлы могут не загружаться на сервер.
Настройки php.ini можете просмотреть запустив phpinfo(), или создав файл info.php на сервере и вставив туда код

<?php
phpinfo(); 
?>

Он выведет, всю информацию, и в пункте open_basedir можно увидеть пути, которые открыты для использования скриптами. Значит если возникает эта ошибка, скорее всего Вашему скрипту доступ к каталогу, к которому доступ ему запрещает php.ini. Нужно дополнить, в значение open_basedir, путь до каталога скрипта.

Итак, ошибка ясна, что дальше? Рытье в гугле дало следующее.
Дальше есть три способа решить этот вопрос.
1. Изменить php.ini, добавив туда нужный каталог со скриптом, (просто вставив после двоеточия). Этот способ, я отношу к маловероятным, так как хостинг редко дает возможность изменять этот файл. Можете написать в техподдержку хостинга, возможно они решат эту проблему.
2. Добавить .haccess (если нет), прописав туда значение "php_value open_basedir Путь". Тоже не всегда помогает. Мне не помог. Но вдруг поможет Вам.
3. Создав свой php.ini файл, в корневой папке.
Если Php запущен как fast-cgi. А это обычно php 5.3*.
Добавляем в .htaccess


AddHandler php5-fastcgi .php
Action php5-fastcgi /cgi-bin/php5.fcgi


В этой же папке создаем папку cgi-bin (она уже там может быть), переходим в нее и создаем в ней файл php5.fcgi .
То есть выходит создан файл по адресу public_html/cgi-bin/php5.fcgi. Содержимое данного файла:


#!/bin/sh
exec /usr/local/cpanel/cgi-sys/php5 -c /home/ВАШ ЛОГИН ОТ СИПАНЕЛИ/public_html/cgi-bin/php.ini 


Сохраняем и ставим права на этот файл 755.

После чего, создаем файл php.ini там же, в папке cgi-bin и прописываем туда необходимые php директивы через равно. Например:


register_globals = on
magic_quotes_gpc = on
open_basedir = /home:/tmp


Сохраняем, и все начинает работать.

Да, способы, так себе, но пока не нашел ничего лучше.

среда, 20 февраля 2013 г.

GoodOS = Debian + DWM

Пробуя различные операционные системы, благо есть из чего выбирать, отдельное спасибо Торвальду Линуссу за Линукс. Я устанавливал и пользовался уже:

Windows: Windows 98, Windows XP, Windows 7


 
Linux: Ubuntu, Fedora , openSUSE , DebianALT Linux


FreeBSD: FreeBSD , PC-BSD

 Общая таблица, по времени использования (примерная)


Операционная система, DE
Время использования (год, месяц)
Примечания
Windows 98
3 месяца
Старый компьютер, после перехода на новый – не использовал.
Windows XP
2005 – 2013, около 100 месяцев
Основная ОС, для работы, и Игр
Windows 7
3-4 месяца
Баги, глюки в играх, некоторые программы не поддерживает или поддерживает с «бубном»,(пример: Outpost Firewall) требует больше памяти и места.



Ubuntu + XFCE
6-7 месяцев
Удобна, но хочется быстроты
Fedora + Gnome
1 месяц
Глюки ,из-за «железа»
Opensuse + Gnome
0.5 месяца
Просто, не понравилась
Debian+ XFCE+DWM
7-9 месяцев
Очень удобно, есть почти все
Alt Linux + KDE
2 дня
Много лишнего



FreeBSD + Gnome
3 - 4 месяца
Много настроек, но – самая быстрая загрузка
PC BSD + KDE
0.5 месяцев
Много лишнего, неудобно





В данный момент остановился на XP и дополнительно-основная ОС Debian + DWM.

Плюсы:
на Windows XP
Работаю в программах от Adobe
Использую Visual Studio 2010 (C#)
Играю в почти современные игры (Готика, Стронгхолд, Call of Duty).
на Debian 
Минимализм (обожаю)
Удобно программировать. (Ruby&RoR например, поддерживается лучше чем на Windows)
Не боюсь вирусов. (Советую правильно настроить IP фильтр)

Минусы:
Visual Studio 2012 не идет на XP
Игры вовсю переходят на W7, W8 и не поддерживают XP

Вот в общем то и все. Думаю, после апгрейда моего старенького, но шустрого ПК, перейти на Windows 7, и попробовать ArchLinux...продолжение следует!

Google