Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: В настоящее время эта функция требует доступа к сайту с помощью встроенного браузера Safari.
Кратко. У меня только одна претензия.К сожалению, у меня нет столько свободного времени, как у вас, поэтому читать эти простыни я конечно же не буду
Вот тут на все 100% согласени при отсутствии доступа не стартует?! Вот на кой хер это было сделано?!
Согласен на столько процентов, на сколько мне перехотелось делать перевод на ноуте ?Вот тут на все 100% согласен
Такое же
Я понимаю, что уже поздно что-то писать данному пользователю, но все время, когда он был активен, было обсирание чужих трудов. Виделись только косяки других, свой же код был "идеален". Если что-то не нравится в данной программе - напиши свою или укажи на ошибки, помоги. А ты просто обсираешь.Ну поехали посмотрим этот софт в деле. Как я и говорил, обфусцируешь когда есть что прятать, а тут есть что.
Рассмотрим даже это по. Начнём с того, что такое обфускация? Приведение исходного текста или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. Для платного по может и плюсом, но всё восстанавливается. А теперь посмотри на минусы и почему сами разработчики запрещают обфусцировать дополнения:
Что мы видем в этой поделке? Кривая логика, кривая работа. Нагрузка на процессор достигает 100%. Программа не способна читать нормально файлы и не только.
- Код после обфускации может стать более зависимым от платформы или компилятора
- Для обфусцированного кода может требоваться больше памяти. Помимо того как любят многие обфускаторы изменять на goto приведёт к ещё большим затратам памяти
- Проблемы с отладкой кода, а если у пользователя возникнут проблемы будет невозможно её быстро решить и прийдётся давать копию без обфускации
- Возможность утечки памяти в вызове классов
Я не буду для начала приводить код и покажу оптимизацию и работу этого софта на реальной машине и что бы тс не отмазывался, про якобы слабую машину или ещё что то говорил о характеристиках, я приведу скрин:
Посмотреть вложение 112592
Ну давайте проведём тесты кода
Посмотреть вложение 112593
На данном изображение мы запустили только приложение, а давайте загрузим теперь фразы?
Посмотреть вложение 112594
Мы запускаем и наш софт уже ушёл в лаг и нагрузку цп
Посмотреть вложение 112595
105 мегабайт ушло на загрузку фраз
Посмотреть вложение 112596
Перешли на вкладку тех поддержка и добавили затраты памяти.
Посмотреть вложение 112597
Перешли во вкладку настроек
Посмотреть вложение 112598
Полазили по настройкам
Посмотреть вложение 112599
После настроек и в течение минуты простоя софта памяти уже 125 мегабайт. При любых действиях говнософт отваливается и падает, о чём можно судить по скриншотам
Посмотреть вложение 112602
Обычная логика и работы программы с невозможностью нормальной и плавной работы.
С самой работой программы уже ясно и понятно, что софт не является актуальным. Я бы мог привести в пример QT Translator и не только, но я думаю не стоит и займёт ещё больше времени, а по функциональности тсу до него как раком до китая. Тут проскачила фраза раз, типо профессионалы используют такой софт. Кто? Данный софт не позволяет вручную вводить перевод, а только с гугл перевода и переводит это всё. Как минимум профессионалы не переводят через гугл переводчик.
Лирическое отступление
Данное лирическое отступление несёт минимум текста, который немного не относится к теме, но подойдёт на заметку каждому. Кому не интересно могут его пропустить.
Щас я расскажу небольшую историю о валекоре, который продавал якобы продавал искусственный интеллект вспомнили? Так где же твой ии? Где деньги полученные от гугла и прочих крупных корпораций которые не могут так добиться? Ты же у нас мастер кодинга и создания нейросетей, а ты забыл наверное ну я напомню эту тему
У Вас недостаточно прав для просмотра ссылок. Вход или РегистрацияБыли и ещё несколько тем в корзине и искать и показывать у меня сейчас нет желания, кому нужно тот найдёт сам.
И напомню как разработчик крупной нейросети забросил же свою нейросеть)
Причём крупные корпорации вида гугла, фейсбука, амазона, нвидии говорят мы не можем сделать искусственный интеллект, но человек написал такую крутую разработку и решил здесь кинуть вброс про нейросети и не только, надеясь, что хомячки схавают и поведутся на такие слова
Конец лирического отступления
А теперь как у нас был проведен анализ до лирического отступления мы зайдём в код и посмотрим. Но перед этим мы посмотрим на реальный мир и мир вещей, что в современном мире никто не пишет на винформах уже, пишут на WPF или же UWP. Помимо этого никто не пишет под нет фреймворк, а используют новую платформу .NET Core которая делает возможность запускать в любой ос и среде приложения. Но наш эксперт кодит как аля 2000 год.
Давайте посмотрим для начала пару интересных моментов в бесплатном программном обеспечение:
Наверное круто собирать данные и делать костыльные проверки. Помимо всего этого передавать данные на сервер к себе о пользователе и его данных. Но ведь это бесплатный софт, какая информация может передаваться и уж темболее получать информацию о лицензии? Правильно никакой. Дальнейший код с проверками я не захотел вставлять, кому надо тот посмотрит.C#:internal void GetInfoLic(string closeSession = "1") { try { string str = "XenForo"; HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create("https://nub-club.com/soft/appFree/XenTranslator/check-update.php"); byte[] bytes = new UTF8Encoding().GetBytes("Custom_protocol=" + Uri.EscapeDataString(CryptData.Cryp("versionId=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.AppVersion + "&hddId=" + str + "&hackSoft=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.HackSoft + "&onlineStatus=" + closeSession + "&hdtmp=f&dt=" + Conversions.ToString(DateAndTime.Now)))); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Timeout = 5000; httpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; httpWebRequest.Headers.Add("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"); httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.12) Gecko/10050026 Firefox/3.6.12"; httpWebRequest.ContentLength = (long) bytes.Length; Stream requestStream = httpWebRequest.GetRequestStream(); requestStream.Write(bytes, 0, bytes.Length); requestStream.Close(); HttpWebResponse response = (HttpWebResponse) httpWebRequest.GetResponse(); StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string end = streamReader.ReadToEnd(); response.Close(); streamReader.Close(); if (end.Contains("<!DOCTYPE html>")) Environment.Exit(0); if (end.Contains("Fatal error")) Environment.Exit(0); if (end.Contains("Новые версии XenTranslate отсутствуют.")) return; Environment.Exit(0); } catch (Exception ex) { ProjectData.SetProjectError(ex); Environment.Exit(0); ProjectData.ClearProjectError(); } }
Автор любитель сотни исключений:
Хмм, вот майки дурачки зачем же они вешают эксепшен листенеры, ведь можно и так повесить.C#:if (this.CheckBoxHideColumns.Checked) { MyProject.Forms.Form1.Log("Отключение лишних полей. Ожидаем...", new Color()); try { if (!this.CheckBoxShowHideTitleColumn.Checked) MyProject.Forms.Form1.DataGridView1.Columns["title"].Visible = false; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { MyProject.Forms.Form1.DataGridView1.Columns["addon_id"].Visible = false; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { MyProject.Forms.Form1.DataGridView1.Columns["version_id"].Visible = false; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { MyProject.Forms.Form1.DataGridView1.Columns["version_string"].Visible = false; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { MyProject.Forms.Form1.DataGridView1.Columns["global_cache"].Visible = false; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } MyProject.Forms.Form1.Log("Лишние поля отключены.", new Color()); }
У Вас недостаточно прав для просмотра ссылок. Вход или РегистрацияДарю в изучение появленное ещё в 1.1 фреймворке
А кто будет закрывать хендл?C#:private void ToolStripButton3_Click(object sender, EventArgs e) { int num = (int) Interaction.MsgBox((object) "Сейчас будет открыт сайт разработчика.\r\nЕсли необходима быстрая помощь или поддержка, обращайтесь по указанным на сайте контактам.\r\n\r\nПочему я не могу ответить на сайте, на котором вы скачали программу?\r\nМои программы опубликованы на многих сайтах, поэтому я просто физически не могу ходить по всем сайтам и отвечать.", MsgBoxStyle.Information | MsgBoxStyle.SystemModal, (object) "Информация"); Process.Start("https://nub-club.com/threads/razrabotka-programm-na-zakaz.3280/"); }
Process
помеченIDisposable
интерфейсом не просто так
Так же дарю на изучение
У Вас недостаточно прав для просмотра ссылок. Вход или РегистрацияКак минимум таких диспозов по коду очень много, что и создают утечки
Теперь мы рассмотрим, как автор говорит он кодит не привет нулевые. Ладно, а давайте всё таки разберём основную проблему этих лагов? Все лаги из-за того, что автор и не умеет нормально писать код, а умеет только врать, как это было сказано про нейросеть, про якобы среду настроенную на сразу обфускацию, когда она цепится к проекту и он чисто физически не может переносить их.
Давайте рассмотрим элементарную загрузку xml файла и разбор её:
Привет 2000 год и так никто не делает и не пишет, компания Microsoft для этого специально написала сериализатор, который имеет ассемблерные вставки для быстрой загрузки и не затрагивания ресурсов как процессора, памяти так и дисковых операций.C#:internal bool LoadXml(string filePath) { bool flag1 = true; if (this.col != null) this.col.Visible = false; this.DataGridView1.DataSource = (object) null; this.DataGridView1.Update(); this.DataGridView1.AllowUserToAddRows = false; this.xml = new XDocument(); this.xml = XDocument.Load(filePath); IEnumerable<XElement> source1 = this.xml.Root.Elements((XName) "phrase").Take<XElement>(1); Func<XElement, XElement> selector; // ISSUE: reference to a compiler-generated field if (Form1._Closure\u0024__.\u0024I29\u002D0 != null) { // ISSUE: reference to a compiler-generated field selector = Form1._Closure\u0024__.\u0024I29\u002D0; } else { // ISSUE: reference to a compiler-generated field Form1._Closure\u0024__.\u0024I29\u002D0 = selector = (Func<XElement, XElement>) (el => el); } IEnumerable<XElement> source2 = source1.Select<XElement, XElement>(selector); bool flag2; if (source2.Count<XElement>() == 0) { flag2 = false; } else { if (!(source2 is XElement[] xelementArray)) xelementArray = source2.ToArray<XElement>(); IEnumerable<XAttribute> xattributes = ((IEnumerable<XElement>) xelementArray).Attributes(); try { foreach (XAttribute xattribute in xattributes) { if (xattribute.Name == (XName) "addon_id") this.translatedPluginId = xattribute.Value; } } finally { IEnumerator<XAttribute> enumerator; enumerator?.Dispose(); } this.ds = new DataSet(); int num = (int) this.ds.ReadXml(filePath); this.DataGridView1.DataSource = (object) this.ds.Tables[1]; this.DataGridView1.Rows[0].Cells[0].Selected = false; try { this.DataGridView1.Columns["addon_id"].ReadOnly = true; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { this.DataGridView1.Columns["version_id"].ReadOnly = true; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { this.DataGridView1.Columns["version_string"].ReadOnly = true; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { this.DataGridView1.Columns["global_cache"].ReadOnly = true; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { this.DataGridView1.Columns["title"].ReadOnly = true; } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } try { this.DataGridView1.Columns["phrase_text"].HeaderCell.Style.Font = new Font("Tahoma", 9.75f, FontStyle.Bold); this.DataGridView1.Columns["phrase_text"].ReadOnly = true; this.rowCnt = this.DataGridView1.Rows.Count; this.DataGridView1.Columns["phrase_text"].HeaderCell.Value = (object) ("Оригинал (кол-во фраз: " + Conversions.ToString(this.rowCnt) + ")"); } catch (Exception ex) { ProjectData.SetProjectError(ex); ProjectData.ClearProjectError(); } if (this.col == null) { this.col = new DataGridViewTextBoxColumn(); this.col.HeaderText = "Перевод (кол-во переведёных фраз: " + Conversions.ToString(0) + ")"; this.col.Name = "lessonName"; this.col.HeaderCell.Style.Font = new Font("Tahoma", 9.75f, FontStyle.Bold); this.DataGridView1.Columns.Add((DataGridViewColumn) this.col); this.col.Visible = true; } else { this.DataGridView1.Columns.Remove((DataGridViewColumn) this.col); this.col = new DataGridViewTextBoxColumn(); this.col.HeaderText = "Перевод (кол-во переведёных фраз: " + Conversions.ToString(0) + ")"; this.col.Name = "lessonName"; this.col.HeaderCell.Style.Font = new Font("Tahoma", 9.75f, FontStyle.Bold); this.DataGridView1.Columns.Add((DataGridViewColumn) this.col); this.col.DisplayIndex = checked (this.DataGridView1.Columns.Count - 1); this.col.Visible = true; } this.DataGridView1.RowsDefaultCellStyle.WrapMode = DataGridViewTriState.True; this.DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders; IEnumerator enumerator1; try { enumerator1 = this.DataGridView1.Columns.GetEnumerator(); while (enumerator1.MoveNext()) { DataGridViewColumn current = (DataGridViewColumn) enumerator1.Current; if (Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "phrase_Text", false) == 0 | Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "phrase_text", false) == 0) this.indexPhraseText = current.Index; if (Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "title", false) == 0 | Microsoft.VisualBasic.CompilerServices.Operators.CompareString(current.Name, "Title", false) == 0) this.indexColumnPhraseTitle = current.Index; current.SortMode = DataGridViewColumnSortMode.NotSortable; } } finally { if (enumerator1 is IDisposable) (enumerator1 as IDisposable).Dispose(); } this.Log("Файл с фразами загружен.", new Color()); this.NumberAllRows(); flag2 = flag1; } return flag2; }
У Вас недостаточно прав для просмотра ссылок. Вход или РегистрацияСериализация XML — это процесс преобразования открытых свойств и полей объекта в серийный формат (в данном случае в формат XML) для хранения или транспортировки. При десериализации объект повторно создается в исходном состоянии из выходных данных XML. Сериализацию можно представить как способ сохранения состояния объекта в поток или буфер. Например, ASP.NET использует класс XmlSerializer для кодирования сообщений веб-службы XML.
Данные в объектах описываются с помощью конструкций языка программирования, например классов, полей, свойств, типов-примитивов, массивов и даже встроенного XML в форме объектов XmlElement или XmlAttribute. Вы можете создавать собственные классы, закомментировать их атрибутами или используя средство определения схемы XML (XSD. exe) для создания классов на основе существующего документа определения схемы XML (XSD). При наличии схемы XML можно запустить XSD. exe, чтобы создать набор классов, строго типизированных в схему, и добавить к ним атрибуты, которые будут соответствовать схеме при сериализации.
Для перемещения данных между объектами и XML требуется сопоставление из конструкций языка программирования с XML-схемой и из схемы XML в конструкции языка программирования. XmlSerializer и связанные с ними средства, такие как XSD. exe, предоставляют мост между этими двумя технологиями как во время разработки, так и в среде выполнения. Во время разработки используйте XSD. exe для создания документа схемы XML (XSD) из пользовательских классов или для создания классов из заданной схемы. В любом случае классы снабжаются с помощью настраиваемых атрибутов, чтобы указать XmlSerializer, как сопоставлять систему XML-схем и среду CLR. Во время выполнения экземпляры классов могут быть сериализованы в XML-документы, следующие за заданной схемой. Аналогичным образом эти XML-документы можно десериализовать в объекты среды выполнения. Обратите внимание, что схема XML является необязательной и не требуется во время разработки или в среде выполнения.
С XmlSerializer можно воспользоваться преимуществами работы со строго типизированными классами и обеспечить гибкость XML. Используя поля или свойства типа XmlElement, XmlAttribute или XmlNode в строго типизированных классах, можно считывать части XML-документа непосредственно в объекты XML.
В рамку и на стенку.
У Вас недостаточно прав для просмотра ссылок. Вход или РегистрацияThe XmlSerializer creates C# files and compiles them into .dll files to perform this serialization. In .NET Framework 2.0, the XML Serializer Generator Tool (Sgen.exe) is designed to generate these serialization assemblies in advance to be deployed with your application and improve startup performance.
Так же в рамку и на стенку.
Помимо всего этого автор сам жаловался на то, что переводчик сам работает кривовато здесь реализовано, а почему? Потому что автор решил пускать через свой ип и тем самым каждый раз на перевод шлётся его IP, а не IP пользователя за что гугл и банит и отправляет вводить каптчу. А каптчу софт не может обработать и возникают ошибки перевода у всех:
И при переводе автор опять стучит к себе на сервер и собирает данные о вас =).C#:internal string SendPhraseToTranslate(string phrase, string lineId) { string str1 = ""; string str2; if (phrase.Contains("{") | phrase.Contains("}") | phrase.Contains("<") | phrase.Contains(">")) { this.Log("Строка - " + lineId + ", данная фраза имеет запрещенные символы или спецтеги. Фразы такого типа необходимо переводить вручную.", Color.Red); str2 = str1; } else if (phrase.Length == 0) { str2 = str1; } else { this.HcSfD(); string hardwareId = this.GetHardwareID(); string str3 = ""; if (this.DataGridView1.SelectedCells.Count == 1) str3 = phrase; if (this.DataGridView1.SelectedCells.Count > 1) str3 = phrase; try { HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create("https://nub-club.com/soft/appFree/XenTranslator/check-update.php"); XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage = Microsoft.VisualBasic.Strings.Replace(XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage, "=", "ravno", 1, -1, CompareMethod.Binary); XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage = Microsoft.VisualBasic.Strings.Replace(XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage, "&", "concat", 1, -1, CompareMethod.Binary); byte[] bytes = new UTF8Encoding().GetBytes("Custom_protocol=" + Uri.EscapeDataString(CryptData.Cryp("needTranslate=" + str3 + "&translate_language=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.TranslatedLanguage + "&versionId=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.AppVersion + "&hddId=" + hardwareId + "&hackSoft=" + XenTranslator.Resources.GlobalsVarFuncSub.Globals.HackSoft + "&plugin_id=" + this.translatedPluginId + "&trtmp=f&dt=" + Conversions.ToString(DateAndTime.Now)))); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Timeout = 5000; httpWebRequest.Accept = "application/json"; httpWebRequest.Headers.Add("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"); httpWebRequest.Headers.Add("Accept-Charset: UTF-8"); httpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.12) Gecko/10050026 Firefox/3.6.12"; httpWebRequest.ContentLength = (long) bytes.Length; Stream requestStream = httpWebRequest.GetRequestStream(); requestStream.Write(bytes, 0, bytes.Length); requestStream.Close(); HttpWebResponse response = (HttpWebResponse) httpWebRequest.GetResponse(); StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.Default); string end = streamReader.ReadToEnd(); response.Close(); streamReader.Close(); if (end.Contains("Custom_protocol=")) { string data = Microsoft.VisualBasic.Strings.Replace(end, "Custom_protocol=", "", 1, -1, CompareMethod.Binary); data = CryptData.DeCryp(ref data); IJEnumerable<JToken> jenumerable = JArray.Parse(Microsoft.VisualBasic.Strings.Split(data, "[SPL]", -1, CompareMethod.Binary)[0]).First.Values((object) 0); try { foreach (JToken jtoken in (IEnumerable<JToken>) jenumerable) { string str4 = jtoken.ToString().TrimStart('{').TrimEnd('}'); str1 += str4; } } finally { IEnumerator<JToken> enumerator; enumerator?.Dispose(); } str2 = str1; } else { this.Log("Строка - " + lineId + ". Не удалось перевести фразу.", Color.Red); str2 = str1; } } catch (Exception ex) { ProjectData.SetProjectError(ex); this.Log("Строка - " + lineId + ". Не удалось перевести фразу.", Color.Red); str2 = str1; ProjectData.ClearProjectError(); } } return str2; }
Весь софт напичкан рекламой со своим говно форумом и напичкан помимо всего этого разными стучалками и коннектами к себе на сайт.
Где не надо у автора исключений пруд пруди, где надо их не существует. Свой софт он не позволяет в оффлайн режиме работать и не только.
В данном по нет ничего уникального и такой функционал пилится на коленке за день.
На проведение всего этого анализа мы сделали вывод и почему тс обфусцирует код.
P.S архив с очищенным билдом, разобранным исходником, созданным pdb файлом и переконверчено всё в студию по быстрому. Правда в студии нужно будет немного подогнать, а лучше пересоздать проект и подогнать под это и почистить от декомпила.
P.S.S совместными усилиями с CrazyHackGUT существует полнофункциональный аналог, который лишен данных недостатков и софт работает на линуксе и не только. Даже можно на андройде запустить. На данный момент решается информация по поводу мультиязычности приложения и поддерживается смена темы светлой/темная. И решаются моменты с фильтрацией и поиском содержимого.
Посмотреть вложение 112605
Загрузка 12к+ фраз и помимо всего этого работает за считанные секунды и не нагружает не диск, не процессор, не память
Посмотреть вложение 112606
Затраты памяти не доходят до 50 мегабайт с кроссплатформенностью. Работает даже на макОС и написано всё при помощи .NET Core и WPF как делают нормальные люди в современном обществе.
Скорей всего гугл у себя поменял что то, а софт не обновляли. Потому и не работает.Приветствую.
Пытался сделать перевод, но почему-то ни одна строка не переводится.
Код:[18.03.2021 1:33:37]: Строка - 1. Не удалось перевести фразу.
Запускал через права администратора, перезагружал компьютер. Ничего не помогает.
Не запустится. Программа давно не работаетУ меня не запускается
Win11 x64
Мы используем основные cookies для обеспечения работы этого сайта, а также дополнительные cookies для обеспечения максимального удобства пользователя.
Посмотрите дополнительную информацию и настройте свои предпочтения