Как стать автором
Обновить
16
0
Сергей Тарасевич @NOSTRA

Пользователь

Отправить сообщение

XMPP-SMS шлюз на Android

Время на прочтение11 мин
Количество просмотров20K


Введение

Причиной написания данной статьи послужила необходимость создания программы для системы Android, с помощью которой можно отправлять данные заказа в виде SMS сообщений владельцам интернет магазинов о том, что был совершен заказ товаров или услуг. Ранее мною использовалась система включающая GSM-модем и программу написанную на языке С++, использовавшая AT-команды для общения с модемом и библиотеку gloox для получения сообщений по протоколу XMPP, на стороне web-сайта использовалась библиотека xmpphp, для отправки данных заказа. При такой схеме приходилось держать включенным компьютер постоянно, так как система приема заказов работала круглосуточно, соответственно отсюда дополнительный расход электроэнергии, шум от вентиляторов ночью и постоянный контроль интернет соединения.
Читать дальше →
Всего голосов 55: ↑49 и ↓6+43
Комментарии19

Фрилансер и заказчик. Взаимодействие

Время на прочтение7 мин
Количество просмотров14K
Каждый, кто имеет дело с IT в той или иной форме, так или иначе сталкивался/слышал о том, что существует такое явление, как фриланс. Как может показаться на первый взгляд, фриланс несет в себе одни плюсы. Ни тебе работника в офисе, для которого надо организовать рабочее место, ни проблем с оформлением его по ТК и последующим увольнением (если нанимать на четко заданный объем работ). Так же стоимость фрилансера, как правило, оказывается от 2 до 20 раз меньше, чем у фирмы, предлагающей те же самые услуги.

Тем не менее, существует огромное количество негативного опыта работы с фрилансом. О его приинах и возможных способах устранения — под катом

Читать дальше →
Всего голосов 39: ↑30 и ↓9+21
Комментарии21

Хабраигра «Стартап»

Время на прочтение5 мин
Количество просмотров90K
На прошлой неделе «Мосигра» отгрузила Хабру первые 20 коробок игры «Стартап», которую мы совместно пилили больше трёх месяцев. Это игра про малый бизнес, IT-проекты, умение договариваться, планировать время, оценивать свои силы и вместе разруливать разные проблемы.

Вот что мы хотели от настольной игры:
  • Сделать наконец-то что-то про IT.
  • И про свой бизнес.
  • Игра должна быть тренирующей навыки переговоров и иллюстрирующая проект-менеджмент.
  • Начать играть можно за 2 минуты, но нюансы искать ещё долго.
  • Без 100% выигрышной стратегии, каждый раз — по ситуации.
  • Без кубиков и адского рандома.
  • С небольшой долей чёрного юмора и локальных мемов.
И вот что у нас получилось. Вот так выглядит игра «Стартап», которая с прошлой недели продаётся в Мосигре:

Читать дальше →
Всего голосов 141: ↑133 и ↓8+125
Комментарии194

Оптимизация расхода батареи

Время на прочтение5 мин
Количество просмотров23K
image

Введение


В этой статье приводится несколько советов по оптимизации расхода батареи приложениями.
Отключая фоновые сервисы обновлений при потере соединения или уменьшая частоту обновлений при низком уровне заряда батареи можно существенно минимизировать влияние работы приложения на батарею.
Некоторые фоновые сервисы (загрузка из сети обновлений или контента приложения, сложные расчеты и т.д.) целесообразно отключать или снижать частоту их запуска при низком уровне заряда батареи. Для подобных действий важно принимать во внимание несколько факторов, как, например, текущее состояние зарядки устройства, наличие подключенной док-станции или наличие соединения с сетью. Ниже представлены способы получения этих значений и мониторинга их изменений.
Читать дальше →
Всего голосов 52: ↑49 и ↓3+46
Комментарии12

Новый курс по разработке под Windows Phone, обновление центра Windows Phone и все-все-все …

Время на прочтение3 мин
Количество просмотров4K


Каждый раз, когда я собираюсь писать статью, особенно если она часть курса, я пытаюсь понять, кому она будет нужна и как её будут использовать. И когда коллеги предложили мне взяться за написание небольшого вводного курса по разработке под Windows Phone, первое, что я сделал, я просмотрел все доступные материалы претендующие на роль обучающего курса или книги. Несмотря на то, что платформа Windows Phone достаточно молодая, материалов по ней, как русскоязычных так и англоязычных великое множество.
Читать дальше →
Всего голосов 77: ↑61 и ↓16+45
Комментарии14

Малоизвестные особенности Java. Вторая часть

Время на прочтение3 мин
Количество просмотров58K
Как и обещал, предлагаю вашему вниманию следующие пять пунктов.

Малоизвестные особенности Java. Первая часть

6. Конфликт имён.

Если импортированы несколько классов с одним и тем же именем из разных пакетов, возникает конфликт имён. В таком случае при обращении к классу следует указывать его квалифицированное имя, то есть полное имя, включая и имя пакета, например java.lang.String.

Неужели ничего нельзя с этим поделать? Оказывается можно. Следующий код скомпилируется без проблем, несмотря на то, что класс List присутствует и в пакете java.awt, и в пакете java.util:

import java.awt.*;
import java.util.*;
import java.util.List;

public class Класс {
	public static void main(String... аргументы) {
		List простоСписок = Collections.emptyList();
		System.out.println(простоСписок);
	}
}


Достаточно дополнительно импортировать необходимый класс, java.util.List в данном примере.

Тут, как вы заметили, используются кириллические идентификаторы. Да! Для кого-то это станет откровением, но Java… такая Java. Идентификатор может состоять из совершенно любых букв, помимо цифр, знаков подчёркивания и валюты США (однако последний знак ($) использовать не рекомендуется, он предназначен для системных нужд). Но оно нам надо? Разве только в целях обфускации. Только представьте себе, сколько разных идентификаторов можно сгенерировать всего-то из символов «А» английского, русского и греческого алфавитов…

Читать дальше →
Всего голосов 67: ↑61 и ↓6+55
Комментарии42

Малоизвестные особенности Java

Время на прочтение4 мин
Количество просмотров141K
Готовясь к собеседованию, я решил освежить память да и вообще поискать каверзные и малоизвестные нюансы языка Java. Выборку пяти наиболее интересных на мой взгляд моментов я вам и предлагаю.

Вот уже подоспела и вторая часть статьи.


1. Нестатические блоки инициализации.

Всем, я думаю, известно, что в Java существуют статические блоки инициализации (class initializers), код которых выполняется при первой загрузке класса.

class Foo {
	static List<Character> abc;
	static {
		abc = new LinkedList<Character>();
		for (char c = 'A'; c <= 'Z'; ++c) {
			abc.add( c );
		}
	}
}


Но существуют также и нестатические блоки инициализации (instance initializers). Они позволяют проводить инициализацию объектов вне зависимости от того, какой конструктор был вызван или, например, вести журналирование:

class Bar {
	{
		System.out.println("Bar: новый экземпляр");
	}
}


Такой метод инициализации весьма полезен для анонимных внутренних классов, которые конструкторов иметь не могут. Кроме того, вопреки ограничению синтаксиса Java, используя их, мы можем элегантно инициализировать коллекцию:

Map<String, String> map = new HashMap<String, String>() {{
	put("паук",  "арахнид");
	put("птица", "архозавр");
	put("кит",   "зверь");
}};


Очень даже мощное средство, не находите?

JFrame frame = new JFrame() {{
	add(new JPanel() {{
		add(new JLabel("Хабрахабр?") {{
			setBackground(Color.BLACK);
			setForeground(Color.WHITE);
		}});

		add(new JButton("Торт!") {{
			addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent event) {
					System.out.println("Хабрахабр - торт!");
				}
			});
		}});
	}});
}};


Остальные четыре пункта под катом.
Читать дальше →
Всего голосов 163: ↑150 и ↓13+137
Комментарии75

31 метод эффективного программирования под Android

Время на прочтение5 мин
Количество просмотров24K
Данная статья является переводом очень хорошего топика с форума Stack Overflow. Так как английский язык не является для меня родным, то какие-либо непонятные мне места я просто пропускал, что бы не разгневать тех, кто его действительно знает. Статья содержит список советов и рекомендаций для начинающих разработчиков под Android.

Читать дальше →
Всего голосов 145: ↑130 и ↓15+115
Комментарии65

Маленькие хитрости Java. Часть 2

Время на прочтение5 мин
Количество просмотров109K
В продолжение первой статьи я добавлю еще несколько штрихов о наиболее часто встречающихся ошибках и просто плохом коде, с которым часто приходится иметь дело при работе с уже написанными проектами. Я не выносил это в первую часть, так как эти ситуации встречаются гораздо реже, но поскольку первая часть вызвала много позитивных отзывов, решил продолжить. Спасибо всем комментаторам, отзывам и замечаниям. Я постараюсь избежать допущенных ошибок. Итак, продолжим:

Buffered Streams

//медленно
InputStream is = new FileInputStream(file);
int val;
while ((val = is.read()) != -1) {
}
//быстро
InputStream is = new BufferedInputStream(new FileInputStream(file));
int val;
while ((val = is.read()) != -1) {
}

Казалось бы — очевидная истина, неправда ли? Но как показал чужой код и опыт собеседования кандидатов, часть разработчиков определенно не понимает в чем преимущество буферизованных стримов. Кто до сих пор не разобрался — метод read() класса FileInputStream:
public native int read() throws IOException;

Согласитесь, каждый раз делать системный вызов, чтобы считать один байт несколько расточительно. Собственно для того, чтобы избежать этой проблемы и были созданы оболочки-буферы. Все что они делают — при первом вызове системного read() считывают несколько больше (в зависимости от указанного размера буфера, котрый по умолчанию равен 8 кб) и при следующем вызове read() считывают данные уже из буфера. Прирост производительности — на порядок. Системные вызовы, на самом деле, это не всегда плохо, например:
System.arraycopy(src, srcPos, dest, destPos, length);

В случае копированния массива — системный метод будет гораздо быстрей реализованного на java. И еще — считывайте данные порциями, а не по байтам, это тоже позволит прилично сэкономить.
Читать дальше →
Всего голосов 93: ↑84 и ↓9+75
Комментарии91

Маленькие хитрости Java

Время на прочтение4 мин
Количество просмотров270K
Я уже достаточно много лет занимаюсь разработкой на java и повидал довольно много чужого кода. Как это не странно, но постоянно от одного проекта к другому я вижу одни и те же проблемы. Этот топик — попытка ликбеза в наиболее часто используемых конструкциях языка. Часть описанного — это довольно банальные вещи, тем не менее, как показывает мой опыт, все эти банальности до сих пор актуальны. Надеюсь, статья пригодится многим java программистам. Итак, поехали:

new vs valueOf

//медленно
Integer i = new Integer(100);
Long l = new Long(100);
String s = new String("A");

//быстро
Integer i = Integer.valueOf(100);
Long l = 100L;//это тоже самое что Long.valueOf(100L);
String s = "A";


Старайтесь всегда использовать метод valueOf вместо конструктора в стандартных классах оболочках примитивных типов, кроме случаев, когда вам нужно конкретно выделить память под новое значение. Это связано с тем, что все они, кроме чисел с плавающей точкой, от Byte до Long имеют кеш. По умолчанию этот кеш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кеша. Значение из кеша достается в 3.5 раза быстрее чем при использовании конструктора + экономия памяти. Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной. В случае, если ваше приложение очень часто использует целые типы, можно увеличить кеш для Integer через системное свойство «java.lang.Integer.IntegerCache.high», а так же через параметр виртуальной машины -XX:AutoBoxCacheMax=<size>.
Читать дальше →
Всего голосов 141: ↑126 и ↓15+111
Комментарии166

Установка приложений Google в эмулятор Android

Время на прочтение3 мин
Количество просмотров37K


В этой статье описано как установить дополнительные программы (в частности, Google Apps) в эмулятор Android. Это может понадобиться если вы хотите на эмуляторе:
1. Настроить синхронизацию с аккаунтом Google.
2. Установить календарь и календарь провайдер.
3. Установить Android Market.
4. И прочее…

Читать дальше →
Всего голосов 54: ↑49 и ↓5+44
Комментарии17

Хабраиндекс для статей по программированию под Android

Время на прочтение2 мин
Количество просмотров94K
Читать дальше →
Всего голосов 220: ↑204 и ↓16+188
Комментарии43

Информация

В рейтинге
Не участвует
Откуда
Гродно, Гродненская обл., Беларусь
Дата рождения
Зарегистрирован
Активность