А чем вы отличаетесь от этих угнетателей, поддерживая других угнетателей?
Вы же всё покупаете, всё лицензионное, поддерживаете разработчиков. Но действительно ли деньги текут к разработчикам, или же ещё один олигарх где-то там вкладывает прибыль с продаж в "другие компании, использующие рабский труд"?
Тут сто лет назад уже одни пытались свергнуть "угнетателей, душителей идей"(С) Результаты до сих пор расхлебать не могут на 1/6 части суши.Мой работодатель создал 40000 рабочих мест и всем обеспечил не нищенскую зарплату а возможность достойно жить. В отличие от работодателя в колхозах или школах, гед живут от ЗП до ЗП. А куда он вкладывает - его дело. Свои обязательства передо мной он выполняет. Куда там текут деньги мои от покупки - меня мало волнует, но я точно знаю, что разработчики с той стороны тоже не бедствуют) И тот же Билл Гейтс основал крупнейший в мире фонд благотворительности и значительную часть доходов тратит на него.
Нет, гражданин Dmitriy_2014, это ты просто свое воровство пытаешься прикрыть красивыми словами. Манифест? Так ворье тоже придумало себе "понятия" типа))) А разницы никакой нет. Борешься с корпорациями которые наживаются? Так иди обнеси Икею, они при производстве мебели использовали бесплатный труд заключенных. Или условный Адидас, который шьет свои кроссы в Индонезии, платит копейки местным а тут продает по 100 баксов)) Или вот, не покупай а воруй продукцию у жителей Дагестана и Чечни - там в селах периодически рабский труд используют.Что, слабо?
Когда за пиратское ПО ты будешь получать реальный срок, как за кроссовки, ты живо забудешь про всякие манифесты и начнешь жить по закону, пират))
Просто есть другие способы монетизации.
Простейший пример - Android OS или Punto Switcher.
Представляю себе Винду, которая каждые 5 минут запускает тебе на весь экран рекламный ролик на 2 минуты с блокированием всех функций, думаю ты будешь сильно рад, если в этот момент подключен онлайн куда-то и нужно принимать решения. Пунто, который собирает о тебе всю информацию - вообще отличный пример. Он вообще-то приплачивать должен за свою установку, он и так хорошо получает от спецслужб.Если тебе не нравится засекреченность архивов - это тебе с предложениями в зак. орган, принимай новые законы, в чем проблема)))НЕ понимаю как все это соотносится с тем, что я написал программу, ты ее украл и еще и ищешь себе оправдания.
Мне понятно твоя позиция абсолютно. Мне противна позиция тех, кто готов воровать, потому что им "дорого", "баги" и иные оправдалки))
Это все очередные оговорки. Для начала - читай лицензионное соглашение, в котором ты соглашаешься использовать ПО "as is". Если у тебя есть замечания - открывай багрепорт. Большинство разработчиков реагируют на замечания и оперативно исправляют баги. Но стоит понимать, что во-первых иногда это исключительно твое предпочтение. Во-вторых - системы типа винды и больших игр - сложные системы и баги неизбежны. Если в целом они помогают решить твои задачи - нет причин не платить. Но всегда можно отказаться. Аот я 2 года платил за TomTom navigator. В какой-то момент решил, что он меня не устраивает и перешел на Waze и мирюсь с рекламой.
А если ты скачал кино и оно тебе не понравилось - это повод потребовать вернуть деньги? В кинотеатре ты тоже так делаешь?
Давай не будем уходить в эту плоскость. К сожалению это реальность наших дней и нужно правильно понимать причины. Мне вот тоже недоступны российские сервисы - не считаю поводом идти и воровать это ПО.Просто перестал использовать.
Воруешь ПО. Для меня нет разницы. Кража есть кража, как ее не прикрывай. Есть продукт, который произвел другой человек. Он его продает. А ты воруешь. Нет денег - пользуйся бесплатными альтернативами, их предостаточно.
А почему ты считаешь, что в Польше нет таких воришек как Дмитрий? Потому и пасуться. Тут на скачивание пока не особо смотрят, вот за раздачу можно попасть.
Дешевый отмаз и оправдание воровской натуры. Если фигня не существует - зачем она тебе? Какая разница - вирутальный это продукт или реальный? Ты кусок хлеба сьедаешь за минуту, а за компом с пиратской виндой сидишь сутками - что реальнее. Не устраивает чужой продукт - создай свой. Нет разницы, в каком магазине воровать - виртуальном или на соседней улице. Просто там ты боишься попасться, а тут можешь сделать это безнаказанно. Пока что. В Германии за торренты такой штраф - можно не одну Винду купить. В Польше можно попасть тоже, особенно за раздачу.
Но в целом, пираты мне симпатичны свой удалью и беспринципностью 😁
Когда тебе обнесут хату - тоже будешь восторгаться их удалью?
я не собираюсь за кучу денег покупать для домашнего использования Photoshop, dreamweaver или RAD Studio (развитие Delphi)
пусть их покупают организации для коммерческого использования
Я не собираюсь в магазине покупать хлеб или джинсы, потому что это для личного использования! Пусть их покупают рестораны/организации! А у меня есть полное право своровать их!Реально омерзительны ТС с такими вопросами и все кто тут его поддерживает. Воровство и есть воровство, как его не назови. И восторгаться теми кто обходит защиту продуктов от копирования - ну такое себе. Теми, кто из магазинов вещи прет - тоже восторгаешься? А теми, кто залезет в твою квартиру и обнесет тебя по полной - тоже аплодировать будешь?
В итоге нашел, как удалять картинки, правда не до конца. В твоем документе 3 картинки, одна битая и ее удалить не может. Нужно возиться с контент-тайпами, проверять что с ней и тоже добавлять в список на удаление.Это код чисто для бэка, для колаба нужно модифицировать работу с выводом на экран, это мне уже лень.
import osimport docxfrom docx import Documentimport ipywidgets as widgetsfrom IPython.display import display, clear_output# from google.colab import filesimport iofrom PIL import Imagefrom fastapi import Pathfrom docx.enum.shape import WD_INLINE_SHAPE_TYPEfrom docx.text.run import Runfrom docx.oxml.ns import qnimport pandas as pdimport matplotlibimport matplotlib.pyplot as pltimport numpy as npfrom structlog import get_loggerlogger = get_logger(__name__)matplotlib.use('Agg')path_str = os.getcwd()class WordEditor: def __init__(self, file): self.file = file self.document = None self.tables = [] self.images = [] def load_file(self): if isinstance(self.file, str): with open(self.file, 'rb') as f: self.document = Document(f) else: self.document = Document(io.BytesIO(self.file)) return self.document def get_empty_tables(self): for i, table in enumerate(self.document.tables): if all(not cell.text.strip() for row in table.rows for cell in row.cells): self.tables.append(table) return self.tables def get_images(self): """Extract images from both inline shapes and shapes in Word document""" images = [] try: # Handle inline shapes (embedded images) for shape in self.document.inline_shapes: try: if shape.type == WD_INLINE_SHAPE_TYPE.PICTURE: rId = shape._inline.graphic.graphicData.pic.blipFill.blip.embed image_part = self.document.part.related_parts[rId] if image_part and hasattr(image_part, 'blob'): images.append({ 'image_data': image_part.blob, 'content_type': image_part.content_type }) except Exception as e: logger.error(f"Error processing inline shape: {str(e)}") # Handle floating shapes for rel in self.document.part.rels.values(): try: if "image" in rel.target_part.content_type: self.images.append(rel.target_part) except Exception as e: logger.error(f"Error processing relation: {str(e)}") except Exception as e: logger.error(f"Error accessing document: {e}") logger.info(f"Found {len(images)} images in document") return self.images def remove_empty_tables(self): """Remove empty tables from document using the result of get_empty_tables.""" removed_count = 0 for table in self.tables: table._element.getparent().remove(table._element) removed_count += 1 return removed_count def remove_images(self): """Remove all images from document use self.images.""" removed_count = 0 for image in self.images: del self.document.part.rels[image.rId] removed_count += 1 return removed_count def save_new_document(self): """Save self.document with new name with prefix cleared_""" new_filename = os.path.join(path_str, "media/cleared_document.docx") self.document.save(new_filename) return new_filenameif __name__ == "__main__": print("path:", path_str) filename = os.path.join(path_str, "media/worddoc.docx") executor = WordEditor(file=filename) executor.load_file() executor.get_empty_tables() executor.get_images() executor.remove_empty_tables() executor.remove_images() executor.save_new_document()
Российские рубли не берут, а вот гривну - вполне себе принимают. Не сочиняй, чего не знаешь.
Ну да, ну да...