Не могу привести кавычки в соответствие с тем, что задает оригинальный вопрос, но я приземлился здесь в поисках ответа на аналогичный вопрос.
import cv2
def resize_and_letter_box(image, rows, cols):
"""
Letter box (black bars) a color image (think pan & scan movie shown
on widescreen) if not same aspect ratio as specified rows and cols.
:param image: numpy.ndarray((image_rows, image_cols, channels), dtype=numpy.uint8)
:param rows: int rows of letter boxed image returned
:param cols: int cols of letter boxed image returned
:return: numpy.ndarray((rows, cols, channels), dtype=numpy.uint8)
"""
image_rows, image_cols = image.shape[:2]
row_ratio = rows / float(image_rows)
col_ratio = cols / float(image_cols)
ratio = min(row_ratio, col_ratio)
image_resized = cv2.resize(image, dsize=(0, 0), fx=ratio, fy=ratio)
letter_box = np.zeros((int(rows), int(cols), 3))
row_start = int((letter_box.shape[0] - image_resized.shape[0]) / 2)
col_start = int((letter_box.shape[1] - image_resized.shape[1]) / 2)
letter_box[row_start:row_start + image_resized.shape[0], col_start:col_start + image_resized.shape[1]] = image_resized
return letter_box
I had two web applications with similar settings as you. I stopped using FindBugs and Checkstyle as they showed more than 10.000 problematic points. The applications used JDBC level data access, JSP for presentation and a custom framework for request dispatching. Luckily for me, these low level settings allowed me to do the extensions and fixes on medium difficulty. During the 3 year project, only about 20% of the original code remained as it were. Sooner or later everything else needed to be either changed, replaced or removed (and finally I was able to use FindBugs and Checkstyle).
We too faced the dilemma of complete rewrite. However, there were several factors against it:
It boils down what you want to do actually.
Do you want to rewrite, despite the complexity?
You don't want to rewrite?
If you want to taste the code, try to add the Hello World! function/screen to the application. That tells how hard and how fast you can implement new things.
«Intel-совместимый» не очень точен.
Intel использовала для создания процессоров с обратным порядком байтов, особенно StrongARM и XScale. В них не используется IA32 ISA, широко известный как x86.
Еще дальше в истории Intel также сделала i860 и i960 с прямым порядком байтов, которые также не являются x86-совместимыми.
Еще дальше в истории - предшественники. x86 (8080, 8008 и т. д.) также не совместимы с x86. Для 8-битных процессоров порядок байтов на самом деле не имеет значения ...
В настоящее время Intel по-прежнему выпускает Itanium (IA64) с обратным порядком байтов: нормальная работа - обратный порядок байтов, но процессор также может работать и в малом -индийский режим. Так получилось, что код x86 можно запускать в режиме прямого порядка байтов, но собственный ISA не является IA32.
Насколько мне известно, все процессоры AMD были x86-совместимыми, с некоторыми расширениями, такими как x86_64, и поэтому обязательно имеют прямой порядок байтов.
Ubuntu доступен для x86 (прямой порядок байтов) и x86_64 (прямой порядок байтов), с менее полными портами для ia64 (обратный порядок байтов), ARM (эл. ) (прямой порядок байтов), PA-RISC (прямой порядок байтов, хотя процессор поддерживает оба), PowerPC (прямой порядок байтов) и SPARC (прямой порядок байтов). Я не верю, что существует порт ARM (eb) (big-endian).
s слишком много или недостаточно абстракцииПопробуйте быстро нарисовать диаграмму архитектуры приложения, если они не предоставят вам документ об этом.
Соберите статистику и факты, напишите отчет и отправьте его в компанию. Они захотят минимизировать затраты и попросят вас избегать исправления кода, который не поврежден. Вы начинаете со статистики, затем переходите к фактам и предложениям с указанием времени / приблизительного процента затронутого кода / цен.
Обычно устаревшие приложения Struts - это лаваш, которую нужно поддерживать, если это было сделано. Если бы это не было частью твоей работы, я бы сказал, отпусти. Если вы сталкиваетесь с "автономными" страницами, которые не содержат много шаблонов и подвержены множеству изменений,
Вы сосредотачиваетесь на ремонтопригодности и расширяемости, что очень хорошо.
Я бы добавил, сколько времени потребуется, чтобы перезагрузить проект. Они используют систему контроля версий? Есть ли у них отдельные среды для интеграции и пользовательского приемочного тестирования? Есть ли сервер сборки?
Когда нужно потратить два месяца, прежде чем появится первое улучшение, кто-то должен заранее учесть ожидания клиента.
Мне очень нравится ваш список. Я думаю, у вас есть отличный план атаки для начала.
Я бы посмотрел на стандартизацию либо Spring, либо EJB 3.0, но не обоих.
Я сам не читал его, но мне интересно, Майкл В книге Фезерса «Эффективная работа с устаревшим кодом» есть какие-нибудь хорошие идеи?
ОБНОВЛЕНИЕ:
Может быть, вы можете помочь, поместив их в автоматизированную сборку и непрерывную интеграцию - Круиз-контроль, Хадсон, или Team City. Если вам придется провести рефакторинг, это поможет.