Проблемы legacy-кода знакомы подавляющему большинству разработчиков программного обеспечения. Процесс превращения кода в legacy неизбежен, ведь прогресс в программировании не стоит на месте. Проекты либо «умирают» навсегда, либо требуют постоянной поддержки и написания новых функций. Таким образом, в любом проекте на любом языке программирования legacy-код возникает и доставляет разные неудобства при дальнейшей разработке. На примере PVS-Studio, в этой статье я расскажу, как сразу начать использовать статический анализатор кода в своём проекте.
Читать полностью »
Рубрика «разработка под windows» - 42
Как перешагнуть через legacy и начать использовать статический анализ кода
2017-08-31 в 6:58, admin, рубрики: legacy, legacy code, pvs-studio, sonarqube, static code analysis, Visual Studio, Блог компании PVS-Studio, Компиляторы, Разработка под Linux, разработка под windows, статический анализ кодаКак мы создали новый продукт, удалив 130 тысяч строк кода из старого
2017-08-29 в 23:17, admin, рубрики: Delphi, TexEd, TextEditor, windows, разработка под windowsНачну с того, что примерно 15 лет назад (в начале 2000-х годов) нам потребовалось создать свой редактор текстовых документов. Почему свой? Да потому что не совсем текстовых документов и совсем не WYSIWYG редактор. Вы скажете, что это тогда и не редактор документов вовсе. А что вообще тогда такое редактор документов? Какие функции он должен содержать? И как нам пришло в голову делать такой велосипед? А вот как...Читать полностью »
Решение прямой и двойственной задачи линейного программирования средствами Python
2017-08-27 в 11:20, admin, рубрики: python, scipy. optimize, двойственные задачи, Задачи линейного программирования, математика, методы оптимизации, разработка под windowsВведение
Следует отметить, что методы решения задач линейного программирования относятся не к экономике, а к математике и вычислительной технике. При этом экономисту нужно обеспечить максимально комфортные условия диалога с соответствующим программным обеспечением. В свою очередь такие условия могут обеспечивать только динамично развивающиеся и интерактивные среды разработки, имеющие в своём арсенале набор необходимых для решения таких задач библиотек. Одной из каких сред разработки программного обеспечения безусловно является Python.
Постановка задачи
В публикациях [1,2] рассматривались решения прямых задач оптимизации методом линейного программирования и был предложен обоснованный выбор решателя scipy. optimize.
Однако известно [3], что каждой задаче линейного программирования соответствует так называемая выделенная(двойственная)задача. В ней по сравнению с прямой задачей строки переходят в столбцы, неравенства меняют знак, вместо максимума ищется минимум (или наоборот, вместо минимума — максимум). Задача, двойственная к двойственной — эта сама исходная задача.
Решение двойственной задачи очень важно для анализа использования ресурсов. В данной публикации будет доказано, что оптимальные значения целевых функций в исходной и двойственной задачах совпадают (т.е. максимум в исходной задаче совпадает с минимумом в двойственной).
Оптимальные значения стоимости материала и труда будут оцениваться по их вкладу в целевую функцию. В результате будут получены «объективно обусловленные оценки» сырья и рабочей силы, которые не совпадают с рыночными ценами.Читать полностью »
ColumnsGrid для WPF
2017-08-26 в 5:55, admin, рубрики: .net, C#, custom grid, wpf, Программирование, разработка под windowsРазмещение элементов в контроле Grid может быть утомительным. Удобнее, когда они автоматом размещаются по ячейкам, как в UniformGrid.
ColumnsGrid добавляет к этому следующие возможности:
- Колонки задаются одной строкой Columns=«Auto,*,200,Shared1»
- Задается интервал между колонками Spacing=«4»
- Переход на следующую строку задается элементом <Separator Height=«4»/>
Parallels Desktop для Mac 13: к macOS High Sierra готовы
2017-08-22 в 12:23, admin, рубрики: Parallels, parallels desktop, parallels desktop for mac, parallels desktop for mac 13, virtual machines, virtualization, vm, Блог компании Parallels, Разработка под OS X, разработка под windows
Год назад вышла 12-я версия Parallels Desktop — утилиты для виртуализации Windows на macOS. Быстрая. Простая. Удобная. 365 дней позади. Все это время мы не сидели сложа руки. В течение года мы встречались в офф-лайне с пользователями, провели дополнительные опросы среди купивших и тестирующих наше ПО, изучили перспективные новинки от Apple и Microsoft, покопались в пользовательских проблемах, а также прошерстили тематические форумы. Все это позволило более внимательно отнестись к просьбам и учесть ключевые пожеланиям. И сегодня хочется рассказать о некоторых фишках новой — 13-й — версии Parallels Desktop. Тут много любопытного не только для разработчиков, но и для обычных пользователей. Под катом описаны наиболее интересные нововведения. Всего их около полусотни. Enjoy! Ну, и делитесь впечатлениями в комментариях.Читать полностью »
Игровая модель поведения на рынке двух конкурирующих фирм на Python
2017-08-20 в 6:20, admin, рубрики: python, математика, математические модели в экономике, оптимизация экономических систем, разработка под windows, стратегической играВведение
Математическое моделирование в экономике позволяет предупредить возникновения ряда проблем, возникающих в реальной предпринимательской деятельности. Одной из таких проблем у производителей товаров является банкротство.
Поэтому знакомство со стратегиями, позволяющими избежать банкротство в условиях конкуренции, хотя бы на самом начальном уровне безусловно полезно. Кроме того, популярность Python растёт, и реализация задач экономической оптимизации на этом языке так же поспособствует их популярности.
Постановка задачи
Рассмотрим модель поведения на рынке двух конкурирующих фирм, выпускающих аналогичный товар в объемах х и у, пользующийся неограниченным спросом [1]. Построим следующие две функции для цены и издержек.
# -*- coding: utf8 -*-
import numpy as np
import matplotlib.pyplot as plt
a=10
def f(q): Функция цены от объёма товара
return a*np.e**(-0.5*q**2)
def h(q): #Функция издержек от объёма товара
return np.sqrt(q)
plt.figure()
q= np.arange(0, 2.01, 0.1)#Массив значений аргумента
plt.title(r'$y=f(q)$') #Заголовок в формате TeX
plt.ylabel(r'$f(q)$') #Метка по оси y в формате TeX
plt.xlabel(r'$q$') #Метка по оси x в формате TeX
plt.grid(True) #Сетка
plt.plot(q,f(q)) #Построение графика
plt.figure()
plt.title(r'$y=h(q)$') #Заголовок в формате TeX
plt.ylabel(r'$h(q)$') #Метка по оси y в формате TeX
plt.xlabel(r'$q$') #Метка по оси x в формате TeX
plt.grid(True) #Сетка
plt.plot(q,h(q)) #Построение графика
plt.show() #Показать график
Клонирование игры Lode Runner с первого ПК в СССР «БК-0010» плюс несколько слов о программировании игр в конце 80-х
2017-08-20 в 5:13, admin, рубрики: Astralax, Lode Runner, БК-0010, Программирование, разработка игр, Разработка под Linux, Разработка под OS X, разработка под windows, старые игрыНедавно я оказался в не совсем обычной для себя ситуации вынужденного безделья. Пару недель поваляв дурака, я стал чувствовать, что это не такое уж и веселое занятие, которое к тому же еще и стало переходить в скуку. И мне надо было себя занять чем-нибудь относительно полезным. Раньше мне периодически приходили в голову мысли о том, чтобы вернуть к жизни какую-нибудь старую игру из времен моей юности. Но я всегда гнал такие идеи прочь, так как понимал, что "никому это теперь не надо". Но сейчас у меня было свободное время и, главное, было желание. В результате для клонирования я выбрал один из вариантов игры Lode Runner, в который я когда-то играл на первом персональном компьютере времен позднего СССР, который назывался БК-0010. Не думаю, что многие о нем помнят, так как мир «железа» поменялся с тех времен очень сильно. Однако сам Lode Runner с этого БК-0010 был достаточно уникален своими правилами среди других одноименных Lode Runner-ов. Эта версия игры была моей самой любимой, как мне кажется, по объективным причинам, хотя… может быть тут дело просто в ностальгии. В результате я сумел себя мотивировать тем, что "лично мне", а, возможно, и "всему миру", эта игра может быть интересна, и на её восстановление стоит потратить время (ссылка на полученный результат).
Для начала взглянем на оригинал с БК-0010 (хвала Интернету, в котором можно найти почти всё):Читать полностью »
Разбираемся с памятью: тесты и оптимизация
2017-08-17 в 14:23, admin, рубрики: .net, Блог компании JUG.ru Group, оптимизация кода, отладка, память, Программирование, разработка под windows, метки: .net память оптимизация кода программированиеВ сегодняшнем посте мы предлагаем вам расшифровку доклада Андрея DreamWalker Акиньшина с DotNext 2017 Piter о памяти, в котором Андрей разбирает, как работает память с точки зрения производительности приложений. Пост получился огромный, так что запасайтесь кофе и терпением.
Весь код лежит здесь, а сама презентация — здесь.
Все мы хотим, чтобы программы, которые мы пишем, работали быстрее и кушали мало памяти. Поэтому практически всем программистам приходится заниматься перформансными работами разной степени сложности. И в ходе оптимизации главное — не хвататься за первый попавшийся кусок кода. Лучше найти узкое место программы, в которое упирается производительность. Можно сколько угодно оптимизировать другие места, но, скорее всего, эффект будет не очень заметный.
К сожалению, поиск узких мест — зачастую нетривиальная задача. Но с типом узкого места чаще всего удаётся определиться. Это может быть, например, процессор, доступ к базе данных, к диску или к сети. Один из распространённых кейсов — это доступ к основной памяти. Думаю, просто потому, что с основной памятью мы работаем чаще всего.
С точки зрения перформанса память — штука очень коварная и непонятная. Будем разбираться с тем, как она работает.
В этом докладе с DotNext 2017 Piter мы поговорим о том, что влияет на скорость работы с памятью. Обсудим как низкоуровневые хардварные штуки (CPU cache и его ассоциативность, выравнивание, store forwarding, 4K aliasing, prefetching, cache/page splits, cache bank conflicts и т.п.), так и более .NET-специфичные проблемы (pinned objects, large object heap, особенности работы кучи в полном .NET Framework и Mono).
Читать полностью »
Вызов управляемого кода из неуправляемого
2017-08-14 в 13:14, admin, рубрики: C#, c++, cli, msdn, Блог компании ICL Services, неуправляемый код, Программирование, разработка под windows, системное программирование С задачей вызова неуправляемого кода из управляемого мы сталкиваемся довольно часто, и эта задача имеет простое решение в виде одного атрибута [DllImport] и небольшого набора дополнительных правил, которые хорошо изложены в MSDN. Обратная же задача встречается гораздо реже. В данной статье мы и рассмотрим небольшой пример, как это можно сделать. Его не стоит рассматривать как исчерпывающий, скорее лишь, как направление хода мыслей и концепцию. Итак, начнем.
Читать полностью »
Расширение, изменение и создание элементов управления на платформе UWP. Часть 3
2017-08-09 в 11:53, admin, рубрики: .net, uwp, Блог компании Mobile Dimension, разработка мобильных приложений, разработка под windows, разработка приложений
Ознакомившись со средствами расширения и изменения существующих элементов управления в предыдущих частях, мы подходим к наиболее интересной теме данного цикла статей – создание новых элементов управления.
Часть 3. Создание новых элементов управления
Посредством присоединенных свойств (Attached Properties) и поведений (Behaviors) мы имеем возможность расширять существующие элементы управления без вмешательства в их внутренее устройство. Располагая же разметкой их шаблонов, мы также можем изменить их внешний вид и работу визуальных состояний (VisualState). Однако, если требуется изменить или расширить логику существующего элемента управления, или и вовсе создать новый элемент управления, то нам необходимо опуститься на уровень кода (ControlName.cs).
Читать полностью »