39 заметок с тегом

Программирование

Позднее Ctrl + ↑

zend online users count

Добавил в исходники класс на PHP для отслеживания количества юзеров онлайн.
Вообще странно, что для Zend-а ничего такого готового за пять минут гугления не нашлось, оычно плагинов разных тьма, а тут пришлось велосипедить костыль :-) Зато его можно использовать и с Zend Framework и с любым другим, или вообще без всяких фреймверков.

2012   Программирование
2012   Программирование

Mono

Код CIL под линуксом работает — это прекрасно. А вот MonoDevelop 2.8.6 — убожество без визуального редактора. Весь же смысл Visual Studio в intellisence и в том, что компоненты можно бросать на форму мышкой, и не описывать их руками. Ни тем, ни другим в MonoDevelop и не пахнет, непонятно вообще для чего он нужен, недо-eclipse, пере-sublime.

А еще печально, что парни из devexpress используют P/invoke и gdi+ которых в Mono нет, и не ожидается. Похоже все эти удобности и красивости придется самим писать на PHP и Javascript.

Иногда я просто ненавижу опенсорс.

2012   Программирование

#228

Казалось бы, причем здесь программисты?

2012   Люди   Программирование   Управление проектами

first steps on android

One man advised me to start blogging on English to practice in language. So, it is my first try.
Last week i trained in Android development making my hello world applications. Surprise was that methods that looks-like-a-crunch in .NET are okay in Java and provided in official Android SDK documentation. For example, to handle ’button’ click on the screen we should write:

Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
         // Perform action on click
     }
});

The first applications were classical `hello world`, an app with two text boxes and button, text copied form first text box to second on button click, and application drawing red balls on the screen where i touch my finger.

Also tried phoneGap framework to make platform-independent html application for mobile, but it starts too slow. I mean you should wait for 2-3 seconds while your application starts on your device. It is terrible.

But the same way this experience was very joyful and I was very happy to see apps running on my android phone.

2012   Программирование

Возможно ли совмещать эти две должности?

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

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

Ключ к решению этой проблемы — проектирование взаимодействия. Нам нужен новый вид профессиональных проектировщиков взаимодействия, которые станут проектировать поведение программного обеспечения. Сегодня программисты сознательно проектируют «код» программ, но лишь непреднамеренно проектируют взаимодействие с людьми. Они проектируют возможности, но не то, как программа ведет себя, общается или уведомляет. Напротив, проектировщики взаимодействия сосредотачиваются непосредственно на том, как пользователи воспринимают и взаимодействуют с продуктами, основанными на программном обеспечении.

Ремесло проектирования взаимодействия — новое, оно не знакомо программистам, так что — если программисты вообще это признают — ему уделяется внимание лишь после того, как программирование завершено. Но в этот момент уже слишком поздно.

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

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

Все из той же книги Алана Купера.

2011   Люди   Программирование   Управление проектами

Вовремя отбирать игрушки

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

Вот сегодня отобрал у одного головоломку: два часа корпел над какой-то адской регуляркой, чтобы заменить в CSV файле некорректные номера телефонов в одном из столбцов. Попросил импортировать в MySQL, написть 33 запроса update table set phone = null where phone like %a% — оскорбился :-)

2011   Люди   Программирование

«Семь привычек крутых инженеров»

Невероятно точно подмечено:

  1. Они щедры в своем эгоизме.
  2. Слепота улучшает их зрение.
  3. Они кусают не только руку кормящего, но еще и собственные руки.
  4. Они готовы приложить любые усилия, чтобы сохранить впечатление, будто их не заботит собственный имидж.
  5. Они чинят то, что не сломано, до тех пор, пока это не сломается.
  6. «Не я дал неверный ответ, а вы задали не тот вопрос».
  7. Считают отсутствие критики комплиментом.

По Бронсон (Ро Bronson).

2011   Люди   Программирование

SOA и транзакций мучений пост

Имеем сервис-ориентированное приложение. На сервисе AAA вызывается метод, который должен сделать 1 запись в БД (отправить запрос на сервис БД), отправить запрос на два других сервиса, которые в свою очередь тоже должны сделать по 1 записи в БД (отправить запросы на сервис БД) каждый.

Как сделать так, чтобы если хотя бы один из сервисов не смог сделать свою запись в БД, другие записи тоже откатились бы?

Отправлять на сервис БД uniqid транзакции, сервис БД должен будет дождаться все запросы с таким uniqid, затем сотворить что-то вроде:

$db = self::db();
$q['1111-1111-111'] =  "UPDATE balance SET total = total - 100 WHERE account_id=1;UPDATE balance SET total = total + 100 WHERE account_id=2;";
$db->beginTransaction();
try
{
$db->exec($q['1111-1111-111']);
$query = $db->commit();
}
catch(Exception $e)
{
$db->rollBack();
}

А если каждый последующий запрос связан с результатом предыдущего? Скажем, нужно в сервис BBB передавать ID сущности добавленной сервисом AAA? Обломинго.

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

Или. В сервисе ААА генерить uniqid транзакции, сообщать его дочерним сервисам, и сервису БД, и сервис БД сам, в случае неудачной операции в БД должен удалить все записи с таким uniqid.

А если это не INSERT, а UPDATE или DELETE? Хранить где-то бекап обновляемой/удаляемой сущности?..

2011   Программирование

PHP негодуэ

Раздражает отсутствие строгой типизации переменных. Это приводит вот к такому бардаку:

$someData = "hello";
$someData = 12345;
$someData = array('z',x,c,12);
$someData = unserialize($someData);</pre>
Абслютно все валидно. Конвертация типа перемнной сводится к приведению её к типу. Например $someData = (int)$a;

Бесит отсутсвие строгой типизации функций. Это приводит к тому, что разработчик не может быть уверенным, что функция вернет ему определенный тип данных. Что вызывает у меня особое недоумение — то, что PHP программеры считают это абсолютно нормальным, и в документации к коду пишут @return: mixed. Мол, может вернуть boolean, а может и объект, или целочисленное.

function foo($bar)
{
 if ($bar == "apple")
  {
     return "steve";
  }
 else
 {
     return 100500;
  }
}

Да, и вот такой стиль написания функций у пыхарей тоже раздражает. Результат должен возвращаться только в одном месте, только в конце функции, перед её закрытием. Пусть мои новые коллеги и посмеиваются надо мной за мой «Microsoft-way» стиль кодирования, но такой код мне нравится гораздо больше (C#):

public string sFoo(string sBar)
{
string sResult = "";

if (sBar == "apple")
 {
  sResult = "steve";
 }
else
{
 sResult = "bill";
}

return sResult;
}

Засранный неймспейс, в котором хранятся все имена функций, которые когда-нибудь могут понадобиться. Причем часть из них имеет суффиксы, а часть — нет.

Отсутствие Threading. Ну тут уж грешно над ущербным смеяться...

Надо бы замутить чтоли снова какой-нибудь проектик на ASP.NET, так, чтобы для души...

2011   Программирование
Ранее Ctrl + ↓