All streams
Search
Write a publication
Pull to refresh
115
0
Щекн-Итрч @sheknitrtch

User

Send message
Насколько Я вижу, у вас схема данных фиксирована и хранится как на отправляющей стороне, так и на принимающей. В UDP пакетах передаются только значения (без имён полей и структу). Вы не пробовали в качестве эксперимента использовать google.protobuf вместо cpickle? По-моему, protobuf как раз придуман как формат передачи данных фиксированной структуры. Я тут набросал небольшой пример:
Описание структуры данных:
gamedata.ptoro
package protobuf;

message MatrixRow {
	repeated int32 cell = 1 [packed=true];
}

message InnerDict {
	required int32 innerVal = 1;
	required int32 innerVal2 = 2;
	repeated int32 listOfVals = 3 [packed=true];
}

message GameData {
	required int32 someIntegerValue =1;
	required bool someBoolValue = 2;
	repeated int32 someListOfIntsValue = 3;
	required float someFloatValue = 4;
	required InnerDict someDictionaryValue = 5;

	repeated MatrixRow _2dArray = 6;
}


Серриализация одного объекта:
test.py
import gamedata_pb2

obj = gamedata_pb2.GameData()
obj.someIntegerValue = 1
obj.someBoolValue = True
obj.someListOfIntsValue.append(1)
obj.someListOfIntsValue.append(2)
obj.someListOfIntsValue.append(3)
obj.someFloatValue = 0.5

dictValue = obj.someDictionaryValue
dictValue.innerVal = 1
dictValue.innerVal2 = 2
dictValue.listOfVals.append(1)
dictValue.listOfVals.append(2)
dictValue.listOfVals.append(3)
dictValue.listOfVals.append(4)

#Create 2D matrix. Looks ugly but works!
row1 = obj._2dArray.add()
row1.cell.append(1)
row1.cell.append(2)
row1.cell.append(3)
row1.cell.append(4)
row1.cell.append(5)
row1.cell.append(6)

row2 = obj._2dArray.add()
row2.cell.append(7)
row2.cell.append(8)
row2.cell.append(9)
row2.cell.append(10)
row2.cell.append(11)
row2.cell.append(12)

row3 = obj._2dArray.add()
row3.cell.append(13)
row3.cell.append(14)
row3.cell.append(15)
row3.cell.append(16)
row3.cell.append(17)
row3.cell.append(18)

row4 = obj._2dArray.add()
row4.cell.append(19)
row4.cell.append(20)
row4.cell.append(21)
row4.cell.append(22)
row4.cell.append(23)
row4.cell.append(24)

data = obj.SerializeToString()
print(len(data))


В результате объект серриализуется в строку размером 67 байт.
Прикольно. На телефонах HTC подобная функциональность уже года два как работает и без штатива: демо с Youtube.
Указанный в статье алгоритм предполагает, что у одного сайта может быть только один пароль, так как пароль генерируется из имени домена. А что, если сайт подвергся взлому, и вам приходит официальное письмо от администрации: «пожалуйста, поменяйте пароль». И что делать?
В первом докладе Дмитрий Сошников делает очень странное заявление, будто F# — самый популярный функциональный язык программирования. И в качестве доказательства приводит индекс TIOBE, где F# занимает 16-е место. Я открыл этот индекс и увидел следующее:
  • Scala — 30-е место
  • Lisp — 32-e место
  • F# — 39-е место
Где правда? Может быть один месяц, когда F# вырвался в первую двадцатку? Откуда Дмитрий взял такие цифры?
Насколько Я знаю, скалярное произведение в произвольном конечномерном пространстве задаётся матрицей.

(ei — базисный вектор)
Для декартовой системы координат — это единичная матрица. Для косоугольной — эта матрица будет другой. Но свойства у неё прямо как у тензора. Или Я что-то путаю?
Если вы хотите окунуться поглубже в Тензорный анализ, то могу посоветовать учебник Б. Е. Победря «Лекции по тензорному анализу» 1986г.
Книга требует знаний в линейной алгебре, мат. анализе и аналитической геометрии. Из неё Я узнал про ковариантные и контрвариантные координаты, запись тензоров в Эйнштейновском виде, узнал, что скалярное произведение — это тоже тензор, и лично познакомился с тензором кривизны.
Я зашёл через Tor с американского IP и получил:
Судя по фамилии «Blazkowicz», которая видна на субтитрах, это Wolfenstein.
Вопрос 1: как Opera Software планирует взаимодействовать с Open Source сообществом? Сейчас браузер Opera полностью закрытый. Будут ли открыты исходники браузера, или сервера синхронизаций Opera Link, или сервера Opera Turbo, или почтовика M2, или других ваших продуктов?
Вопрос 2: Какова дальнейшая судьба почтового клиента M2? На него все забили?
Вопрос: Я думал, где бы завести англоязычный блог. Он мне нужен для анонсов и обсуждений. Я подумал, что Vivaldi.net — это хорошая идея. Но сейчас уже сомневаюсь. Текущий блог требует регистрации, чтобы смотреть посты. UI у Vivaldi.net не очень понятный. Коллеги, посоветуйте платформу для технического англоязычного блога, чтобы не поднимать свой сервер?
IntelliJ IDEA написана на Java. Весь API, доступный плагинам, это Java. Сама IDEA запускается под мультиплатформенной Java Virtual Machine, создаёт Java классы, описанные в plugin.xml, и вызывает их Java методы. В каком месте вы предлагаете написать код на D? И как вы предлагаете скомпилировать его под все платформы?
На чистом D есть IDE Poseidon, основанная на графической библиотеке DWT. Эту IDE пишут русские ребята.
Возвращаясь к «Disclaimer 2», это мой первый опыт разработки под платформу IntelliJ IDEA. Я следовал туториалу. Про stubIndex не слышал. Спасибо за наводку!
Visual Studio — это Windows Only решение. Про D-IDE не слышал. По-моему, IntelliJ IDEA одна из самых популярных IDE. Да к тому же, мультиплатформенная. Это моя основная среда разработки. И было странно, что под неё есть плагины для Go, Haxe и Erlang, но отсутсвует поддержка D.
К стати, Берлин уже перевели в 3D. Вот тут можно скачать модель города в формате GML с текстурами. Лицензия открытая.
Я тоже в своё время влюбился в этот язык программирования. Удивительно, что с 80-х годов синтаксис и основные принципы работы языка практически не изменились. То есть, изначально Алан Кей достал бритву Окама и сделал простой и одновременно мощный язык, который легко расширять (добавление Try-Catch конструкций можно сделать средствами самого языка, не вводя новых ключевых слов и не меняя виртуальную машину), и который объектно-ориентированный до мозга костей (в отличие от той же Java, где есть int, boolean и float, выпадающие из общей идеи «всё есть объект»). Плюс всё динамическое: можно добавлять/удалять классы и менять методы прямо в процессе работы приложения. Рекомендую пройти какой-нибудь туториал по этому языку. Он заставляет мозг работать немного по другому и прививает «чистый» ООП стиль программирования.
Конечно у Smalltalk есть недостатки. В частности меня смущает образ системы, внутри которого «живёт» виртуальная машина и управляет объектами.
totuin, подскажите, как происходит deployment приложения на сервер? Вы закачиваете готовый образ системы и запускаете VM с этим образом? Или рабочий сервер выкачивает исходный код из базы и компилирует его на лету?
Задача: найдите ошибку в следующем макросе:

#define arraySize(className, size)                        (sizeof(className) * size)

Ответ:
Возьмём пример:

int size = arraySize(double, 5 + 5);
// Эта строчка превратиться в
int size = (sizeof(double) * 5 + 5);

То есть, в макросе не хватает скобочек вокруг size.
Вот вам ещё один способ выстрелить в ногу ;)
А вы планируете использовать расширения как в Chrome и новой Opera? Мне удалось через страницу chrome://extensions установить Lastpass, но он всё равно не работает (нет иконки на панели инструментов, поля ввода логинов и паролей не подсвечиваются).
Мне понравился трейлер к Bioshock Infinite — музыка задаёт ритм, показан графоний из игры, а не просто CG мультики, и атмосфера передана неплохо:
Bioshock Infinite - Beast of America Trailer

А у вас есть аналогичная проверка исходного кода OpenJDK? Было бы интересно глянуть.
Ответ: Петр.
А вас не смущает, что точно такой ответ будет в Java, JavaScipt, C# и остальных языках, в которых присваивание копирует ссылку а не значения? Для вас это непривычное поведение, но для Python — это совершенно логично, это описано в документации и это поведение сохраняется при вызове функций и методов (аргументы передаются по ссылке, а не по значению).

А что будет если открыть другой редактор, который случайно вставит вместо пробелов Tab? Правильно, ошибка будет. Придётся искать где это произошло.
Теоретически — такое возможно. Но Я ни разу с таким не сталкивался. В крайнем случае Python, как воспитанный интерпретатор, выкинет Indentation Error и покажет номер «плохой» строки.

Что будет? Правильно, опять ошибка. Сначала нужно определить a['test1'], а потом что-то туда записывать.
Опять же, в JavaScript, в Ruby, и в других современных языках это нормальное поведение. Если очень хочется, то можете использовать класс defaultdict из стандартной библиотеки.

Не скажите. В PHP мы привыкли, что порядок уже изначально есть. Мы можем без проблем туда засунуть некий набор пунктов меню и потом также по порядку его вывести. А вот в Python как-то приходится мозг ломать. И делать список отдельный для сохранения порядка. Но список тоже не так прост, так как в него элемент абы как не воткнешь. Если понадобится вдруг воткнуть элемент в середину списка, то придется делать новый список.
Если есть нужда в словаре, который сохраняет порядок, то возьмите OrderedDict. Списки в Python изменяемые. Используйте срезы (slice):
data = [3, 1, 4, 8, 2]
data[3:3] = [1, 5] #Вставить два элемента после третьего элемента
data[-2:-1] = [9] #Заменить предпоследний элемент на девятку


Как Я советовал в своём комментарии выше, не пытайтесь перенести свои привычки из других языков. Python это не PHP и не Java. И если что-то работает не так, как вы привыкли, это не значит, что язык плохой. Просто он другой, он построен на немного других принципах. Но если вы попробуете проникнуться идеями, заложенными в Python, то, думаю, сможете увидеть его изящество, простоту и мощь.

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity