Вы видите копию треда, сохраненную 3 октября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Шапка: https://github.com/CSharpShapka/SharpHat/wiki
(пока просто перенесена шапка из ОП-поста, в ближайшее время приведу к более-менее адекватному виду, не стесняйтесь слать свои пулл-реквесты)
Прошлый тред тонет здесь: https://2ch.hk/pr/res/796165.html (М)
Этот код не компилится:
http://pastebin.com/89NFWke0
Выдает:
http://pastebin.com/0gxMwFgM
А этот компилится:
http://pastebin.com/ytMH13zK
Почему? Разве из
var RbtnArr_Planets = new RadioButton[Output.Length];
не понятно, что массив будет из радиобаттонов?
Что происходит?
ну не же, написал, что для всех радиобаттонов группы
т.е. если у тебя
Group1
|__RadioButton1
|__RadioButton2
|__RadioButton3
Grid
|__RadioButton4
|__RadioButton5
то тебе надо написать:
radioButton1.CheckedChanged += GroupRadioButtonCheckedChanged
radioButton2.CheckedChanged += GroupRadioButtonCheckedChanged
radioButton3.CheckedChanged += GroupRadioButtonCheckedChanged
где
private void GroupRadioButtonCheckedChanged(object sender, EventArgs args)
{
var control = (RadioButton)sender;
switch((SomeEnum)control.Tag)
{
...
}
}
>>824850
знаешь разницу между "не компилится" и "исключение в рантайме"?
> не понятно, что массив будет из радиобаттонов?
ссылка на радиобаттон не может быть пустой? или каждый инстанс в языке - это априори какой-то объект?
ну не же, написал, что для всех радиобаттонов группы
т.е. если у тебя
Group1
|__RadioButton1
|__RadioButton2
|__RadioButton3
Grid
|__RadioButton4
|__RadioButton5
то тебе надо написать:
radioButton1.CheckedChanged += GroupRadioButtonCheckedChanged
radioButton2.CheckedChanged += GroupRadioButtonCheckedChanged
radioButton3.CheckedChanged += GroupRadioButtonCheckedChanged
где
private void GroupRadioButtonCheckedChanged(object sender, EventArgs args)
{
var control = (RadioButton)sender;
switch((SomeEnum)control.Tag)
{
...
}
}
>>824850
знаешь разницу между "не компилится" и "исключение в рантайме"?
> не понятно, что массив будет из радиобаттонов?
ссылка на радиобаттон не может быть пустой? или каждый инстанс в языке - это априори какой-то объект?
> Неправда. C# довольно активно развивается, недавно вышел новый компилятор, шестая версия шарпа, и уже активно разработывается седьмая. Весь дотнет понемногу становится опенсорсным, а ASP.NET становится независимым от платформы. В некотором смысле понемногу вымирают десктопные приложения с развитием веб-технологий, но в том же энтерпрайзе он еще очень даже востребован.
Не верьте этому говноеду, .NET сейчас как делфи только под легаси код. Веб в .net доживает последние дни, а десктоп умер, на его смену пршел Qt из мира С++
на .net работы больше,
(Мимо подсмотрел эту идею у питоно и ява-господ)
Спасибо за ответ, буду продолжать.
Разьясни пожалуйста этот момент:
>ссылка на радиобаттон не может быть пустой? или каждый инстанс в языке - это априори какой-то объект?
Разве конструкция new
>new RadioButton[Output.Length]
не создает физический массив в памяти?
И почему с
>string[] StringArr = new string[]
работает?
при создании new RadioButton[length] у тебя создается массив радиобаттонов в куче, но до тех пор, пока ты не инстациируешь каждый из элементов у тебя будет null, ибо их все в отдельности ты не успел еще создать
то же самое касается и string[] и ЧегоБыТоНиБылоСсылочного[]. вот про int либо другие структуры я бы тебе еще поверил
AngleSharp
Вообще интересно получается. Мне нужно сделать несколько зависимых друг от друга групп радиобаттонов.
Для этого - нужно понимать event-ы.
Для event-ов - нужно пройти делегаты.
И над всем этим - динамическая выборка радиобаттонов через LINQ.
Кто там кукарекал про низкий порог вхождения?
Что тут сложного?
> Для event-ов - нужно пройти делегаты
ну, в общем-то, тут вопрос возникает, что такого нужно знать, чтобы просто использовать событие на форме? по-моему, достаточно по-дилетантски того, что событие когда-то вызывается со указанием в sender отправителя
> динамическая выборка радиобаттонов через LINQ
зачем тут линк? почему "над этим всем"? и что, опять-таки, ты предлагаешь понимать в этом всем?
Ага, а потом утечки памяти, потому что никто не знает, что от событий отписываться нужно. И никто не знает, почему с дизайнером мы руками не отписываемся, например. Не, нужно с азов.
Отписываться же нужно, только если источник живет дольше подписчика, не?
Есть несколько классов, в которых надо просто ебаническое количество свойств описать. Какие-то есть хоткеи или что-то вроде ctor для того, чтобы сразу готовое шаблонное писалось?
Спасибо, это и надо было
2 Кто-нибудь пробовальставить студию 2015 под вайн не веб-инсталлером, а с iso -образа?
1 а в чем разница?
2 ну, мало чем отличается, либо ждешь загрузку после выбора компонентов, либо качаешь все и ставишь что надо
братан, ты уже блять окошко нарисовал и радиобатоны загружаешь из файла.
на си ты бы ещё только начинал бы
1 https://appdb.winehq.org/objectManager.php?sClass=version&iId=32486
>garbage
>What works Nothing.
>What does not Cannot run web installer.
2
>What was not tested Did not test ISO/offline installer.
castle.windsor?
Есть начальник, зам, менеджер по персоналу. У них три компьютера без сети. Сеть отпадает!
Задача - сделать для трех не связаных компьютеров программу в которой есть перечень персонала (100 сотрудников), перечень наказаний для персонала (сажание на кол, удары плетью), перечень проступков (опоздание на милисекунду, недостаточно низкий поклон начальству). Данные динамические, ведь сотрудники уходят, проступки ужесточаются. Так вот, программа должна автоматически вычислять наказание для сотрудника который провинился.
Вопрос: как лучше подойти к делу? Какой нужен стек технологий (файловые бд? Entity framework? WPF?). Как лучше хранить данные, как организовать архитектуру? Ведь если менеджер по персоналу добавит нового сотрудника, то начальнику придется делать то же самое. Целевая платформа windows XP Не могу спланировать архитектуру, анон, если чувствуешь себя неебаться софтвейр архитектором то помоги, ты практически поучавствуешь в стартапе.
Анон, алгоритм это дело десятое. Мне больше архитектура важна, где хранить данные, как обеспечить репликацию данных между компами без сети. Пусть носят на флешке, но как мержить данные, хранить в XML, в Sqlite? Может оставить как есть и пускай каждый в своём пека вводит заново а я просто sqlite запердолю?
использовать хранение текущего состояния данных как журнал событий, при обнаружении новой пачки на устройстве (условно говоря, втыкнули флэшку), накатывать изменения. xml или sqlite - это, по-моему, уже дело десятое
Вот гипотетическая ситуация. При мерже будет черти что. Я уже думал все изменения от запуска программы хранить локально в виде патчей. А потом чтобы раз в месяц люди патчились между собой, но это выглядит лютой ебенью.
Я остановился на таком варианте - каждый работает локально и не ебёт людям голову, в случае чего загружает чужой файл с данными целиком вместо своего если не работал в программе месяц.
ну ты пиздец, конечно. попробуй посмотреть интерактивно, как git тот же работает в таких случаях
> но это выглядит лютой ебенью
это выглядит совершенно рабочей версией в некоторых разработках (где это необходимо, естественно). при наличии какой-никакой активности производится регулярная репликация изменений и подвигание условного нуля
тебе не кажется, что ты пытаешься срать через ноздрю? ты хочешь сделать базу данных, которая предполагает, что есть централизованное хранилище информации, к которому подключаются клиенты, а ты наоборот пытаешься подключить источник информации к клиентам. не проще ли в организации поставить роутер/свитч, протянуть витую пару, организовать локальную сеть и внутри неё создать обычную сеть с стандартным распределением клиент-бизнес сервер-дата сервер?
Анон, меня именно об этом и просят. Срать через ноздрю, принеси на флешке и чтобы всё работало. Алсо мне только такие и предлагали подработки, дай программу и чтобы работало, а вести провода не будем и закупать вайфай адаптеры тоже, нахуй нам этот геморой.
>>825814
Босс запускает у себя программу, менеджер из отдела кадров тянет ему флешку. Что должно происходить далее? Я за этим вопросом и пришел к вам, аноны.
обнаруживаются данные -> способом fast_forward объединяются изменения, предварительно отсортировав их по дате изменений -> вычисляется новое состояние хранилища -> изменения обновляют алгоритм
У тебя в требованиях только DI? Тысячи их, в asp.net core даже встроенный есть.
Как решить эту проблему?
Тебе Qt для этого нужен
у дженериков есть замута с ковариантностью/контрвариантностью.
Не осбо помню что там и к чему, но как минимум прочекать это можешь
Дело не в дженериках, он и без них выдает ошибку.
Сделай приватные переменные тоже интерфейсными.
Мы Avalonia понемногу пробуем, кое-какие проблемы есть, но в целом заебись.
реализация интерфейса предполагает публичный доступ к членам, объявленных интерфейсом, а не то, го написал ты
>>826279
тестится бизнес-логика, как правило. но, если ты удумал тестировать контроллер, то тебе надо создавать моковую базу данных, либо заглушку, что есть подобие интеграционных тестов, и все это дело соответствующим образом инжектировать
Хорошо, спасибо. Напишу тесты пока для тех частей приложухи, где не идет никаких DIs.
А я что написал? Вон у меня на скрине публичный доступ к Next реализован. Остальные просто не стал скринить, потому что ошибка не в этом.
В общем проблему я уже решил (пик).
Расскажите про уровень программистов, на что нужно обращать внимание для мамкиного вкатывальщика. Шапку если что прочитал полностью, но интересны стори анонов.
просто редко бывает, что n <=255. да и выгоды особо никакой, ящитаю.
Просто берешь и без задней мысли вкатываешься, серьёзно. Причем тут вообще география?
Если в цикле обращаться к элементам массива, то итератор все равно неявно скастится к int (кроме лонга вроде).
>>826285
Вот есть сервис, в него инжектится контекст, вот контроллер, в него инжектится 3 сервиса соответственно, я хочу протестить для начала только сервис, как это можно сделать? Скорее даже так, можно ли это сделать с существующим контекстом, миграциями и базой данных соответственно, если проект со всеми зависимостями стоит как ссылка внутри библиотеки с тестами? Если в юнит тесте пытаться инжектить через конструктор, понятное дело, ничего не получается, как на третей картинке, как можно это сделать?
если тебе надо тестировать только бизнес-логику - берешь последний вариант с Mock<>
если по какой-то причине нужно задействовать при этом реальную базу данных - берешь свой используемый контекст
единственное, что мне не совсем ясно - зачем держать поле контекста в классе теста? но это уже такое, издержки реализации
Cпасибо.
спасибо
А по производительности не пиздец будет? 25 этих фреймов, у каждого событие на свайп в каждую сторону...
Решение с вторым Startup'ом и пустым Main'ом в библиотеке работает после запуска команды по ссылке, отличный RTM, пойду обмажусь говном.
Ты сначала попробуй.
Вопрос:
- с использованием чего сейчас модно делать десктопные приложения с клиентской и серверной части для локалочки?
Самостоятельное изучение вопроса почему-то всё упирает в IIS и ASP.NET, хотя нутром чувствую, что таки да надо дрочить WPF/XAML.
Есть,
высокий (смотря где, но мне повезло),
на книгу CLR via C#, C# in depth, Release IT, и иже с ними.
Electron + WebAPI!
А как обстоят дела за рубежом? Реально ли после вуза при наличии проектов и экзамена по языку вкатиться джуном или даже около миддлом? И какого уровня должны быть проекты? Ну, например на новом asp.net. Конечно, тут без линкедина не обойтись, но речь о проектах.
installshield, insted
for (int i = 0; i < files.Length; i++)
{
if (IsImageFile(files))
{
//var data = parser.Parse(files);
//data.ToList().ForEach(Console.WriteLine);
System.IO.FileStream fs = new System.IO.FileStream(files, System.IO.FileMode.Open);
System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
fs.Close();
img_info ii = new img_info();
ii.Width = img.Width;
ii.Height = img.Height;
ii.Ratio = ii.Width / ii.Height;
ii.hash = Path.GetFileNameWithoutExtension(files);
img_list.Add(ii);
Console.WriteLine("Обрабатываю: {0} [{1}/{2}]", Path.GetFileName(files), i+1, files.Length);
}
}
Помогите ускорить этот код.
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(sqlExpression,connection);
int number = command.ExecuteNonQuery();
Console.WriteLine("Добавлено объектов: {0}", number);
}
Пиздец тупой. Короче, пример из учебника, правда там БД создается из SQL Studio, а я добавил LocalDB вариант.
Подключение без ошибок, но в базу ничего не пишется.
Сам запрос выполняется, но запись в БД появляется только после того как ручками обновишь. ЧЯДНТ? Похоже, что в моем варианте как-то в программе надо обновить табличку, но не соображу каким образом
Большие куски кода лучше где-нибудь на pastebin выкладывай. А тут скорее всего надо транзакцию закоммитить.
Что это за безумие с неймспейсами? Очередная лабораторная на лето?
Не помогает
insert users? пиздец лол
>>827672
ты уверен, что insert и select выполняется из одних и тех же баз данных?
Эмм. Я без select смотрю в базе, в которой таблица Users. И там нихуя. База одна всего. Не, я рылся в интернете, видел там ситуации когда человек путался, но тут она тупо одна
Меня взяли без опыта только на работу за 10к гривен.
До этого пару месяцев почти никто на резюме не отвечал и не звонил.
На собеседовании дали не очень сложные тесты, которые даже не зная ответа, можно догадаться какой правильный. Для вката с 0 думаю норм, учитывая что варинатов не было.
>>827059
Веслаешь на галере + релокейшн. Дипломы наших вузов не котируются за рубежом
А вообще лучше в магистратуру поехать за границу учиться, если есть соответствующие программы для твоего вуза. У меня знакомый в Европке уже год, сейчас доучитвается и будет у него диплом европейского вуза, с этим ему конечно будет проще свалить.
>запись в БД появляется только после того как ручками обновишь
>как-то в программе надо обновить табличку
В какой программе, какую табличку, какая запись? Ты смотришь на БД через стороннюю прогу или через датагрид в твоей?
насколько я понял, паттерн предполагает разделение программы на три концепции:
model - как я понял, это классы объектов, информация о которых отображается пользователю ИЛИ, если я неправильно понял, то модель - это класс окна/страницы, откуда всё запускается
view - уровень представления. то есть то, что пишется в xaml'e - всякие контролы, привязки их друг к другу, из графические особенности, (цвет, запах, анимация и тд) то есть то, что видит пользователь
view-model - уровень, который связывает модель и view, то есть объясняет представлению как отображать тот или иной объект пользователю. во view-model обычно описывают свойства, которые привязывают к контролам во view. также во view model запихивают команды, вызываемые при событиях контролов, и описывают общую логику взаимодействия. типа, стремись оставлять класс окна (c# код) пустым так долго, как это возможно, и описывай всё в xaml'e. если нужно что то припиздячить к контролам, то это, по возможности, описывается во view-model'e. надеюсь, найдутся аноны, которые поправят меня.
400* ошибка же, глупость написал
Все правильно же, по умолчанию аттрибут выставлен в true, если идет запрос как на картинке, вью - модель вместо "" будет держать null в поле text, если false, то вместо null идет "", не знаю к чему твой зеленый маркер.
>аттрибут, который должен переназначать null на ""
>ConvertEmptyStringToNull
Судя по названию он наоборот заменяет "" на null
Хочу перекатиться из VBA.
Поставил SharpDevelope и NetOffice.
C моделью Экселя разобрался, а по виндовой api-шке куда лазить? Хочется изнутри ее пощупать
Тоже хотел спросить. Бампану
Ноутпад, да с интеллисенсом, отладкой и другими ништяками.
имеются веб-интерфейсы от МФУ xerox и ricoh. Они совершенно разные по интерфейсу и функционалу.
Задача собирать статистку по отпечаткам каждый день.
Скажите, как это сделать? В компании 100 МФУ двух типов.
resharper же
Установка длится уже более 4-х часов с постоянной загрузкой доп. компонентов.
Микрософт в своем репертуаре.
Еще чуть чуть и я дропну это говно
А когда если установится, ты охуеешь от медленности, а если решарпер поставишь - то вообще вешаться можно.
Калькулятор свой дропни, собачка.
Есть, допустим, мои приложение/библиотека и я хочу добавить новые фичи в это приложение/библиотеку при этом, чтобы версия которая есть сейчас продолжала работать и не трогать ее вообще.
Если текущее решение находится в папке Program_v1.0.0.0, я хочу создать новую папку Program_v2.0.0.0 скопировать туда все содержимое из первой и поменять версию в настройках Visual Studio, и все. Такой подход практикуется? Что может пойти не так? И как по-нормальному решаются такие вопросы?
>продолжала работать и не трогать ее вообще
Так сделай билд и не трогай ее вообще.
>папки какие-то, скопировать куда-то
Ты про гит, например, слышал?
https://ru.wikipedia.org/wiki/Система_управления_версиями
Самая популярная сейчас – git.
https://try.github.io/levels/1/challenges/1
Если тебе BlogImage нужен Blog - то делаешь, если не нужен - не делаешь. Вопрос то в чем?
> зачем они ставят public Blog Blog
чтобы иметь доступ к связанной сущности из BlogImage, очевидно
Ну что - нибудь из книг Фаулера наверное, можешь навернуть Gang of Four, но тебе ведь основы нужны? Все эти книжки по паттернам скорее для архитекторов, джуну достаточно знать основы ООП + пару паттернов, которые идут в любой литературе по C#.
Ну ок, на будущее тогда сохраню, я пока читаю с# players guide, хорошо написана, может и освою.
> Хардкорная литература по шарпу
Ептя, анон. Спасибо за наводку. Алсо, есть ли еще что-то интересное по Machine Learning и прочему ИИ для дотнета? На курсере эта тема вскрывается с помощью питона, а меня от его синтаксиса блевать тянет.
а то ведь чувствую, что придется качать скилл борьбы с брезгливостью
плюралсайт сосет хуй
Ах да, и лучей добра тебе за такие книжечки.
В программе есть абстрактный класс, у него несколько полей и свойств, часть полей и свойств переопределены в классах-наследниках.
В другом классе есть метод, обрабатывающий данные из этих полей. Но, так как метод завязан на сравнение данных, мне нужно передать ему в качестве параметров два экземпляра класса, чтобы в теле метода вызывать свойства, возвращающие нужные мне значения. На момент компиляции не знаю, какого типа будут эти экземпляры, знаю только, что это будет один из унаследованных от абстрактного, классов. Всяческие мои ухищрения приводят меня к ошибкам, сама частая "Error CS0120 An object reference is required for the non-static field, method, or property", из-за несоответствия типов.
Наверное, мой способ кривой, но эта концепция с наследниками от абстрактного работала до текущего момента.
Ты что-то не то несешь, у тебя ругается на static, а не на абстрактность. Покажи вырезку из кода, как-что вызываешь. В чем проблема передать два объекта с типом абстрактного класса?
Спасибо, надо было просто проговорить проблему: уже что-то под ночь туплю., забыл создать экземляр.
Извиняюсь за беспокойство.
< C# 6.0 and the .NET 4.6 Framework (Andrew Troelsen) ?
Линк/коллекции/делегирование усвоил? Пиши приложуху, попутно разберешься асинхронностью, узкими местами языка, поймешь несколько архитектурных паттернов, разберешься с фреймворками той области, в которой хочешь работать, смотри решения на SO, рефакторь свой код, попутно можешь полистать что - нибудь уровня Writing High Perfomance или CookBook, через пару месяцев сможешь спокойно пособеседоваться, так как половину ты уже знать будешь, рихтера оставь на потом, ну, или прочитай если ты так этого хочешь. Не увлекайся книгами, а то будешь рассказывать про паттерны и цититровать CLR via C#, не имея ни одного проекта.
Спасибо за развернутый ответ, но я только пол книги прочитал и спрашивал на будущее, ну короче так и сделаю, а вообще хочу попрообовать игру сделать, только не знаю Monogame или юнити выбрать.
>GameObject tile = (GameObject) Instantiate(er);
Вначале понятно - объявление переменной tile типа GameObject, которой присваивается результат функции Instantiate c аргументом er. Но что значит (GameObject)?
Спасибо.
auto property
ViewModel вообще ничего не должна знать ни о контролах, ни о событиях.
Типичный юнити-говнокодер, лол.
Так и так пишут, самый простой пример если взять DI
public Class(IService service) {
...this.service = service;
}
public Class(IService service) {
..._service = service;
}
Хотя в офиц. документациях в основном _prop идет, без this
Ты вынужден называть переменную с подчеркиванием?
Дело вкуса
Алсо, оно сделано процентов на 70 только, буду в конце семестра допиливать, не успеваю так как.
Во первых твой код падает с OutOfMemoryException, а во вторых работает также медленно как и мой.
Сам разобрался, Taglib# помог.
- оборачивать Stream в using
- оборачивать Bitmap/Image в using
- избавиться от лишних IO-операций, коими являются те же Console.WriteLine
- не очень ясно, что такое IsImageFile(files) (и, судя по всему, на всех шагах цикла, оно возвращает абсолютно одинаковое значение)
- используй Parallel
- шо такое img_info - тоже ясно достаточно смутно
- зная длину конечного листа, создавай экземпляр с явным указанием размеров
- наконец, зачем тебе бездонный лист имэджев? делай что-то с ними на каком-то этапе уже
Разобрался. В итоге в говнобазах в говнообозревателях серверов, объектов SQL и прочих эксплореров заблудился, в разные базы запросы посылал и смотрел итог.
Вот полный код, уже переделанный.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SQLite;
using System.Data;
using System.IO;
using TagLib;
namespace Azusa
{
class Program
{
static void Main(string[] args)
{
//string connection_string = "data source=C:\\utils\\Erza\\erza.sqlite";
Console.WriteLine("Получаю список файлов из {0}", args[0]);
string[] files = Directory.GetFiles(args[0], ".", SearchOption.AllDirectories);
//Parser parser = new Parser();
List<img_info> img_list = new List<img_info>();
for (int i = 0; i < files.Length; i++)
{
if (IsImageFile(files))
{
//var data = parser.Parse(files);
//data.ToList().ForEach(Console.WriteLine);
//System.IO.FileStream fs = new System.IO.FileStream(files, System.IO.FileMode.Open);
//System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
//fs.Close();
img_info ii = ParsePhoto(files);
if (ii != null)
{
//img_info ii = new img_info();
//ii.Width = img.Width;
//ii.Height = img.Height;
ii.Ratio = (float)ii.Width / (float)ii.Height;
ii.hash = Path.GetFileNameWithoutExtension(files);
img_list.Add(ii);
}
Console.WriteLine("Обрабатываю: {0} [{1}/{2}]", Path.GetFileName(files), i+1, files.Length);
}
}
WriteDB(img_list, ".\\img_info.db");
}
static void WriteDB(List<img_info> img_list, string BaseName)
{
SQLiteConnection.CreateFile(BaseName);
using (SQLiteConnection connection = new SQLiteConnection("data source=" + BaseName))
{
connection.Open();
using (SQLiteCommand command = new SQLiteCommand(connection))
{
command.CommandText = @"CREATE TABLE [image_info] (
[id] integer PRIMARY KEY AUTOINCREMENT NOT NULL,
[hash] char(32) NOT NULL,
[width] integer NOT NULL,
[height] integer NOT NULL,
[ratio] real NOT NULL
);";
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
}
//hguihuihihiu
using (SQLiteConnection connection = new SQLiteConnection("data source=" + BaseName))
{
int count_file = 0;
int all_files = img_list.Count;
DateTime start = DateTime.Now;
connection.Open();
SQLiteTransaction transact = connection.BeginTransaction();
foreach (img_info img in img_list)
{
count_file++;
using (SQLiteCommand command = new SQLiteCommand(connection))
{
command.CommandText = "INSERT INTO image_info(hash, width, height, ratio) VALUES(@hash, @width, @height, @ratio);";
command.Parameters.AddWithValue("hash", img.hash);
command.Parameters.AddWithValue("width", img.Width);
command.Parameters.AddWithValue("height", img.Height);
command.Parameters.AddWithValue("ratio", img.Ratio);
command.ExecuteNonQuery();
}
Console.WriteLine("Фаил {0} добавлен. [{1}/{2}]", Path.GetFileName(img.hash), count_file, all_files);
}
transact.Commit();
DateTime finish = DateTime.Now;
Console.WriteLine("Файлов проверено: {0} за: {1} секунд ({2} в секунду)", img_list.Count, (finish - start).TotalSeconds.ToString("0.00"), (img_list.Count / (finish - start).TotalSeconds));
}
}
static bool IsImageFile(string s)
{
int t = s.LastIndexOf('.');
if (t >= 0)
{
string ext = s.Substring(t).ToLower();
switch (ext)
{
case ".jpg":
return true;
//break;
case ".jpeg":
return true;
//break;
case ".png":
return true;
//break;
case ".bmp":
return true;
//break;
case ".gif":
return true;
//break;
case ".tif":
return true;
//break;
case ".tiff":
return true;
//break;
}
}
return false;
}
static img_info ParsePhoto(string path)
{
img_info ii = new img_info();
TagLib.File file = null;
try
{
file = TagLib.File.Create(path);
}
catch (TagLib.UnsupportedFormatException)
{
Console.WriteLine("UNSUPPORTED FILE: " + path);
Console.WriteLine(String.Empty);
Console.WriteLine("---------------------------------------");
Console.WriteLine(String.Empty);
return null;
}
var image = file as TagLib.Image.File;
if (file == null)
{
Console.WriteLine("NOT AN IMAGE FILE: " + path);
Console.WriteLine(String.Empty);
Console.WriteLine("---------------------------------------");
Console.WriteLine(String.Empty);
return null;
}
/
Console.WriteLine(String.Empty);
Console.WriteLine(path);
Console.WriteLine(String.Empty);
Console.WriteLine("Tags in object : " + image.TagTypes);
Console.WriteLine(String.Empty);
Console.WriteLine("Comment : " + image.ImageTag.Comment);
Console.Write("Keywords : ");
foreach (var keyword in image.ImageTag.Keywords)
{
Console.Write(keyword + " ");
}
Console.WriteLine();
Console.WriteLine("Rating : " + image.ImageTag.Rating);
Console.WriteLine("DateTime : " + image.ImageTag.DateTime);
Console.WriteLine("Orientation : " + image.ImageTag.Orientation);
Console.WriteLine("Software : " + image.ImageTag.Software);
Console.WriteLine("ExposureTime : " + image.ImageTag.ExposureTime);
Console.WriteLine("FNumber : " + image.ImageTag.FNumber);
Console.WriteLine("ISOSpeedRatings : " + image.ImageTag.ISOSpeedRatings);
Console.WriteLine("FocalLength : " + image.ImageTag.FocalLength);
Console.WriteLine("FocalLength35mm : " + image.ImageTag.FocalLengthIn35mmFilm);
Console.WriteLine("Make : " + image.ImageTag.Make);
Console.WriteLine("Model : " + image.ImageTag.Model);
/
if (image.Properties != null)
{
//Console.WriteLine("Width : " + image.Properties.PhotoWidth);
//Console.WriteLine("Height : " + image.Properties.PhotoHeight);
//Console.WriteLine("Type : " + image.Properties.Description);
ii.Height = image.Properties.PhotoHeight;
ii.Width = image.Properties.PhotoWidth;
}
//Console.WriteLine();
//Console.WriteLine("Writable? : " + image.Writeable.ToString());
//Console.WriteLine("Corrupt? : " + image.PossiblyCorrupt.ToString());
/
if (image.PossiblyCorrupt)
{
foreach (string reason in image.CorruptionReasons)
{
Console.WriteLine(" " + reason);
}
}
Console.WriteLine("---------------------------------------");*/
return null;
}
}
class img_info
{
public string hash;
public int Width;
public int Height;
public float Ratio;
}
}
Вот полный код, уже переделанный.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SQLite;
using System.Data;
using System.IO;
using TagLib;
namespace Azusa
{
class Program
{
static void Main(string[] args)
{
//string connection_string = "data source=C:\\utils\\Erza\\erza.sqlite";
Console.WriteLine("Получаю список файлов из {0}", args[0]);
string[] files = Directory.GetFiles(args[0], ".", SearchOption.AllDirectories);
//Parser parser = new Parser();
List<img_info> img_list = new List<img_info>();
for (int i = 0; i < files.Length; i++)
{
if (IsImageFile(files))
{
//var data = parser.Parse(files);
//data.ToList().ForEach(Console.WriteLine);
//System.IO.FileStream fs = new System.IO.FileStream(files, System.IO.FileMode.Open);
//System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
//fs.Close();
img_info ii = ParsePhoto(files);
if (ii != null)
{
//img_info ii = new img_info();
//ii.Width = img.Width;
//ii.Height = img.Height;
ii.Ratio = (float)ii.Width / (float)ii.Height;
ii.hash = Path.GetFileNameWithoutExtension(files);
img_list.Add(ii);
}
Console.WriteLine("Обрабатываю: {0} [{1}/{2}]", Path.GetFileName(files), i+1, files.Length);
}
}
WriteDB(img_list, ".\\img_info.db");
}
static void WriteDB(List<img_info> img_list, string BaseName)
{
SQLiteConnection.CreateFile(BaseName);
using (SQLiteConnection connection = new SQLiteConnection("data source=" + BaseName))
{
connection.Open();
using (SQLiteCommand command = new SQLiteCommand(connection))
{
command.CommandText = @"CREATE TABLE [image_info] (
[id] integer PRIMARY KEY AUTOINCREMENT NOT NULL,
[hash] char(32) NOT NULL,
[width] integer NOT NULL,
[height] integer NOT NULL,
[ratio] real NOT NULL
);";
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
}
//hguihuihihiu
using (SQLiteConnection connection = new SQLiteConnection("data source=" + BaseName))
{
int count_file = 0;
int all_files = img_list.Count;
DateTime start = DateTime.Now;
connection.Open();
SQLiteTransaction transact = connection.BeginTransaction();
foreach (img_info img in img_list)
{
count_file++;
using (SQLiteCommand command = new SQLiteCommand(connection))
{
command.CommandText = "INSERT INTO image_info(hash, width, height, ratio) VALUES(@hash, @width, @height, @ratio);";
command.Parameters.AddWithValue("hash", img.hash);
command.Parameters.AddWithValue("width", img.Width);
command.Parameters.AddWithValue("height", img.Height);
command.Parameters.AddWithValue("ratio", img.Ratio);
command.ExecuteNonQuery();
}
Console.WriteLine("Фаил {0} добавлен. [{1}/{2}]", Path.GetFileName(img.hash), count_file, all_files);
}
transact.Commit();
DateTime finish = DateTime.Now;
Console.WriteLine("Файлов проверено: {0} за: {1} секунд ({2} в секунду)", img_list.Count, (finish - start).TotalSeconds.ToString("0.00"), (img_list.Count / (finish - start).TotalSeconds));
}
}
static bool IsImageFile(string s)
{
int t = s.LastIndexOf('.');
if (t >= 0)
{
string ext = s.Substring(t).ToLower();
switch (ext)
{
case ".jpg":
return true;
//break;
case ".jpeg":
return true;
//break;
case ".png":
return true;
//break;
case ".bmp":
return true;
//break;
case ".gif":
return true;
//break;
case ".tif":
return true;
//break;
case ".tiff":
return true;
//break;
}
}
return false;
}
static img_info ParsePhoto(string path)
{
img_info ii = new img_info();
TagLib.File file = null;
try
{
file = TagLib.File.Create(path);
}
catch (TagLib.UnsupportedFormatException)
{
Console.WriteLine("UNSUPPORTED FILE: " + path);
Console.WriteLine(String.Empty);
Console.WriteLine("---------------------------------------");
Console.WriteLine(String.Empty);
return null;
}
var image = file as TagLib.Image.File;
if (file == null)
{
Console.WriteLine("NOT AN IMAGE FILE: " + path);
Console.WriteLine(String.Empty);
Console.WriteLine("---------------------------------------");
Console.WriteLine(String.Empty);
return null;
}
/
Console.WriteLine(String.Empty);
Console.WriteLine(path);
Console.WriteLine(String.Empty);
Console.WriteLine("Tags in object : " + image.TagTypes);
Console.WriteLine(String.Empty);
Console.WriteLine("Comment : " + image.ImageTag.Comment);
Console.Write("Keywords : ");
foreach (var keyword in image.ImageTag.Keywords)
{
Console.Write(keyword + " ");
}
Console.WriteLine();
Console.WriteLine("Rating : " + image.ImageTag.Rating);
Console.WriteLine("DateTime : " + image.ImageTag.DateTime);
Console.WriteLine("Orientation : " + image.ImageTag.Orientation);
Console.WriteLine("Software : " + image.ImageTag.Software);
Console.WriteLine("ExposureTime : " + image.ImageTag.ExposureTime);
Console.WriteLine("FNumber : " + image.ImageTag.FNumber);
Console.WriteLine("ISOSpeedRatings : " + image.ImageTag.ISOSpeedRatings);
Console.WriteLine("FocalLength : " + image.ImageTag.FocalLength);
Console.WriteLine("FocalLength35mm : " + image.ImageTag.FocalLengthIn35mmFilm);
Console.WriteLine("Make : " + image.ImageTag.Make);
Console.WriteLine("Model : " + image.ImageTag.Model);
/
if (image.Properties != null)
{
//Console.WriteLine("Width : " + image.Properties.PhotoWidth);
//Console.WriteLine("Height : " + image.Properties.PhotoHeight);
//Console.WriteLine("Type : " + image.Properties.Description);
ii.Height = image.Properties.PhotoHeight;
ii.Width = image.Properties.PhotoWidth;
}
//Console.WriteLine();
//Console.WriteLine("Writable? : " + image.Writeable.ToString());
//Console.WriteLine("Corrupt? : " + image.PossiblyCorrupt.ToString());
/
if (image.PossiblyCorrupt)
{
foreach (string reason in image.CorruptionReasons)
{
Console.WriteLine(" " + reason);
}
}
Console.WriteLine("---------------------------------------");*/
return null;
}
}
class img_info
{
public string hash;
public int Width;
public int Height;
public float Ratio;
}
}
Я поймал это исключение только тогда, когда прочитав твой пост запустил код по директории, где 2000+ картинок, что ты там загружать пытаешься? Ты в любом случае быстрее не сделаешь, работая с bitmap на 1000+ изображений, как вариант оставь в покое Image и используй FileInfo, пикрилейтед.
Thread.Sleep(0) relinquishes the thread’s current time slice immediately, voluntarily handing over the CPU to other threads.
Это объяснение не совсем понятно.
Что значит передает обработку другим потокам?
Когда он не во сне другие потоки и так работают. Зачем потоку передавать тому, что и так работает.
Инженеры Интел думают, как бы тебе ядер побольше сделать, а у него все потоки работают.
> Инженеры Интел думают, как бы тебе ядер побольше сделать, а у него все потоки работают.
Первая глава по многопточности
http://www.albahari.com/threading/
Тебе лишь бы выебнуться :(
Спасибо за нихуя.
Чет тоже в голосину с этого.
их много. в vs2015 при установке предлагают андроид кит установить. также, можешь на юнити писать
Один хуй, ты в своей андроид программке даже в синтаксисе не увидишь разницы. Пиши в андроид студио шарп код и исправляй места где подчеркивает красным вслед за подсказками.
Ну ты сразу не загорайся, если процессор занят тредом - то процессор скорее всего занят тредом, и ему до пизды есть у тебя там потоки или нет, он же занят тредом.
Вот смотри виртуалки с виндой не было один процессор с одним ядром, первый пик - без Thread.Sleep, но если его добавить то процессор сможет переключиться к другим тредам (пик 2). В принципе, ThreadScheduler должен этим заниматься, но все зависит от его реализации, ну и от количества ядер конечно же.
думаю, тут дело в том, как устроена многопоточность в современных ОС: во время работы ОС функционирует большое количество потоков, ограниченное, кажется количеством ядер*1022. каждый тред имеет приоритет, и одновременно одно логическое ядро занято только одним тредом. на всё-провсё в зависимости приоритета ему выделяется различное время, пропорция приоритет-время прямопропорциональная, но всё же выделяемое треду время исчисляется микросекундами. дак вот, вероятно, за несколько десятков мкс ядро успевает за один заход обработать все 500 итераций в треде, НО! если ты после каждой итерации вызываешь тред.слип(), то ты "аварийно" завершаешь работу ядра с тредом раньше времени, и ядро переходит к другому треду. возможно, дальше в контексте приложения процессор возьмётся за тред с выводом Х, а возможно снова за тред с выводом У
Xamarin
блжад, я же разрядности считал. но все-равно много
float занимает 4
а со string я не уверен, что получится 32. как так-то?
vs 2015 community. Там есть волшебный Xamarin
Чувак, не открывай картинки целиком. Это сжирает оче дохуя памяти.
Юзай другой подход.
Например тут: http://stackoverflow.com/questions/111345/getting-image-dimensions-without-reading-the-entire-file
Ну если в ооп ты можешь, то особо не долго. Просто тут нету работы с указателями, адресами и прочим. на самом деле есть, но тебе не понадобится скорее всего
Пробуй, язык простой. Тем более, ты уже умеешь плюсы.
Особо не смотрел.
Глянул один файл LinqExtension
Братан, ты чего?
последние 5 записей берутся просто:
.Skip(count-5).Take(5);
Всё.
Нахуя какие-то очереди?
Не усложняй, братан.
Если освободится время - гляну по максимуму, но не уверен.
Братишка всегда пишет зеленым маркером, дело все в том, что на втором релиз кандидате не работал MoreLinq, а решения с Skip(), Take(), Reverse() не самые эффективные, вот я и взял оттуда решение с очередью, потом когда проапдейтился до RTM, решил оставить, не подключая лишние ссылки в class library.
Почему студия всячески охраняет от меня этот класс?
Ведь любой новичок из-за этого не знает откуда начинается программа, и не понимает, что окна можно создавать как угодно, а не только главное с модальными. И именно по этой причине начинают программировать в кнопках превращая программу в однородный бульон без деления программы на слои гуя, данных и бизнес-логики.
С доступным Program.Main, Я ПОВЕЛЕВАЛ: что, когда, и как будет инициализироваться и настраиваться. И какие действия нужно выполнить до начала программы и после. Каждый класс создавался и вкладывался в более сложную структуру (как часы, создающиеся не из отдельных винтиков а из блоков, состоящих из винтиков). Формы мог организовать как угодно.
А тут вам — пишите в главной форме, а о program.Main() забудте. (MVVM лишь способ взаимодействия формы с источником данных, а не способ создания архитектуры программы)
Как теперь жить? Может я что-то не правильно понял?
Ну не совсем же так радужно все. Вот взять даже конструкцию Switch / Case оператора. Это же привет из прошлого века. Сейчас, как очень хорошая альтернатива свичу предлагается паттерн матчинг (Rust к примеру).
Или же модификаторы доступа к методам и свойствам класса. Почему их нельзя группировать, как это сделано в C++ ? Постоянно вынужден к каждому члену класса приписывать свой модификатор.
В WPF окна не очень принято создавать. Там есть страницы, которые ты можешь загружать во фрейм на главном окне приложения.
- Convert.Int32() математически округляет в то время как (int) берет целую часть
- При обработке null (int) выдаст исключение, Convert.Int32() вернет 0
Что еще и когда какой способ приведения лучше применять?
Если ты говоришь о дробях и тебе нужна точность, то можно реализовать это в стиле Smalltalk. Делаешь небольшой тип данных, который раздельно хранить в double числитель и знаменатель. И делаешь метод, который делит с заданной точностью, возвращая результат.
Не, я говорю о различиях в использовании, когда что лучше использовать и почему. Пару различий которые я нашел я привел
Можно взять Jetbrains Dotpeek и посмотреть, как устроен метод Int32() в классе Convert.
>Уведомление отправляется как HTTP-запрос на адрес, указанный в настройках счета, в следующем формате:
> метод — POST;
> каждый параметр уведомления указывается парой ключ/значение в виде параметра POST-запроса;
> MIME-тип — application/x-www-form-urlencoded;
> кодировка символов — UTF-8.
Как мне на С# сервере принять этот запрос? Чем его слушать надо?
я не совсем корректно сформулировал вопрос. в каких ситуациях мне придётся или крайне рекомендуется делать установщик для программы? когда невозможно предоставить программу пользователю без соответствующего установщика? или в установщик запихивают всякие .нет фреймворки и прочее, необходимое для работы?
Меня не так поняли. Яндекс предлагает отправить мне уведомление с деталями платежа. Мне надо его получить и распарсить. Вот как мне этот HTTP (а лучше HTTPS) получить?
>>831516
Но всё таки. Если нужно создать подключение к базе перед работой программы или сохранение при выключении/поломке программы или в зависимости от ОС создать платформенно-зависимые классы, то где это всё писать? Учить этому главную форму точно не правильное решение. Или может выделать рабочую часть в «серверную" программу, а в другую гуй с WPF?
предположу, что перегруженность кодом и привязанность бизнес-серверного слоя к оболочке пользователя больше, ежели у отдельной программы для бизнес-сервера
SOLID говорит, что должна быть одна причина для изменения. Считаю что главная форма пусть отвечает за загрузку страниц.
Он только для баз данных? Или это каркас, который в процессе загрузки, может запустить событие, в котором я смогу исходя из настроек создать классы использующиеся в задача-ориентированном коде?
Плюс позволит импортировать формочки?
Формочки делать самому придется, но он создает полный домен и репозитории для каждой таблицы. Затем его можно очень хорошо использовать в WPF с привязками данных [https://msdn.microsoft.com/en-us/data/jj574514.aspx] (очень важная штука).
И вообще там есть три основных способа работы:
1. Code First - пишешь C# код для Entity Framework и он генерирует DSL для создания схемы данных;
2. Model First - пилишь модель данных (как схема классов) в конструкторе EF и он генерирует DSL для создания схемы данных.
3. Database First - генерирует весь программный код на основе схемы данных из базы данных.
*DSL - это SQL скрипты для создания схемы данных (базы данных).
> самом sql-сервере на таблицы ограничения типа первичный/внешний ключ, null\not null, check и прочие?
Настраиваешь сам при создании датасета в соответствии с твоими таблицами в бд.
>Ну не совсем же так радужно все. Вот взять даже конструкцию Switch / Case оператора. Это же привет из прошлого века. Сейчас, как очень хорошая альтернатива свичу предлагается паттерн матчинг (Rust к примеру).
Паттерн матчинг завезут в C# 7, уже скоро, есть превью https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/
Даже если посчитать по максимуму то на вряд ли будет больше 100 мегабайт.
>модификаторы доступа ... Постоянно вынужден к каждому члену класса приписывать свой модификатор.
Можешь для приватных полей/методов не прописывать, он и так по умолчанию стоит.
Потом, в c++ удобно это тк там определение метода отдельно прописывается, а в c# все вместе.
Было бы жутко неудобно постоянно проматывать экран, что бы понять область видимости текущего метода.
В чем преимущество кортежа перед экземпляром класса?
Минус, который вижу я - читаемость кода хуже. Понять, что там нахуевертил джун, прочитавший про тьюплы - дорогого стоит.
Джун нахуячит в любом случае.
Для этого их сажают на правку багов и код их ревьювят.
А у людей с опытом будет больше возможностей (хотя тюплы >3 это хреновая практика).
Это значит что ты пидор, хаха расширение файлов результатов тестов совпало с расширением исходников 1с: Кровавый энтерпрайз
А при чем тут джуны вообще ? Не отвергать же все инновации только из-за того, что «раньше было лучше».
Тому що причин использовать ТЬЮПЛ немного и делать это джуну точно причин нет.
Но он об этом не знает, находит инструмент, подходящий под его задачу и бездумно использует его. А что с кодом будет потом - его не волнует.
Лел, уже вижу как мам, смотри, я без классов пишу!.
Хотя dynamic сделали, вроде его бездумно не пихают хотя иногда проскакивает, но там терминальный случай, может и тут нормально будет.
Ну кортеж - это ж просто набор объектов.
А класс - это ещё и поведение.
Элементарно, ватсон ёпта
Если инструмент подходит под задачу, то это уже априори не бездумное использование. Но я согласен, что сначала желательно все взвесить.
Так и есть. Один такой написал огромный класс с кучей статик методов, которые возвращали кортежи. То есть представления об ООП в хоть немного сложном реальном проекте куда-то деваются и начинает лезть говнокод.
Ну ничего, уволился и пошел куда-то архитектором.
Кстати, отстал от жизни - не знал про dinamyc. Главное, теперь не проболтаться о нем джунам.
Сталкивался кто с таким?
Можно как-то исправить это?
ну и соответственно переход между этими страницами.
требуется реализовать это на wpf, в стиле MaterialDesign.
Сколько берут за выполнение задачи такой?
Нахуя тебе это тормозяещее говно? У меня после апдейта оно стало валить студию на оном проекте. Криворукие дебилы бля.
Алсо есть вопрос ко всем. GetHashCode должен выдавать уникальные значения или нет? Я правильно понял что он нужен только для оптимизации, т.е. некоторые агрегаты при сравнении могут сначала запросить хешкод что бы отбросить из рассмотрения объекты с разными кодами, но при установлений эквивалентности все равно последнее слово за вызовом Equal?
Взял средние исходя из твоего ТЗ. Если брать максимум, то ваттсап или телеграм можно подогнать под категорию "чатика".
{
if (number == 1) { return 1; }
if (number == 2) { return 1; }
return Fibonacci(number - 1) + Fibonacci(number - 2);
}
Глохнет уже на попытке определить 45ю позицию я ряду. Как это можно оптимизировать улучшить?
// Хвостовая рекурсия
public static ulong FibR(uint n)
=> n > 1 ? FibR(n - 1) + Fib(n - 2) : n;
// Арифметика
public static ulong Fib(uint n)
{
ulong[] f = new ulong[3];
f[1] = 1;
for (int i = 2; i <= n; i++)
f[i % 3] = f[(i + 1) % 3] + f[(i + 2) % 3];
return f[n % 3];
}
Второй способ существенно быстрее.
Посмотри на хабре статью по вычислению чисел Фибоначчи, там все подводные камни расписаны.
а что за чат внутри?
Мне кажется - именно чат самая большая проблема, а не переходы по страничкам.
где ты видишь стремление к оптимизации в сравнении двух величин вместо одной, дятел?
>>831990
аналогичная фигня. причем бывает (бывало), что настроенные горячие клавиши на разных установленных версиях студии не оч совмещаются друг с другом (работают то в одной версии, то в другой, но не в обеих сразу)
такшто бамп вопросу
Алсо вызов GetData("FileContents") возвращает null. Не знаю может быть так и должно быть. Было бы заебись если б в нем было содержимое файла, но похоже не судьба.
Еще какая хохма - GetData("Format17") возвращает null, но если перед ним разместить вызов GetFormats() - то уже не null. Хвала скрытому стейту.
Можно было бы вычленять ссылку на файл и скачивать его самому, но меня это не устраивает.
В общем разработчики FF - пидорасы.
не, конкретно в ту задачу что я описал, разработка чатика не входит. просто страница с чатиком. типа реализация макета, с минимум функционала
такая же хуйня с хоткеями была. само как то прошло=)
Антон, посоветуй хорошую русскоязычную книгу по MSBuild. Молю.
Ну англоязычную хоть
а баксах же.
Это патерн какой-то?
> вместо генерика поставить название интерфейса который реализует класс
ты всем так объясняешь, что ни хрена не понятно?
типа так:
public static T Get<T>(string interfaceName = null)
{
if (interfaceName != null)
{
return (T) Activator.CreateInstance(ListOfClasses.FindType(interfaceName))?
}
...
}
судя по всему, это какая-то ущербная версия Service Locator, хотя, может, в вашем случае, она довольно-таки имеет смысл
Жизнь налаживается.
Итак, чтобы снова стать хозяином программы, идём в App.xaml и стираем StartupUri="MainForm.xaml" чтобы само без спросу не грузилось.
Далее в App.xaml.cs создаём обработчик события protected override void OnStartup(StartupEventArgs e) в котором и указываем программе как ей себя вести.
Как это сделано у Джона Смита https://msdn.microsoft.com/ru-ru/magazine/dd419663.aspx
И оказывается класс Application из WPF > Application из WinForms. Поэтому и не понял по началу как найти место старта программы.
Файлы сортируются по размеру, затем, если у соседних файлов одинаковый размер, сравниваются первые 10 байтов и, если они одинаковые, один из файлов удаляется. Но идентичные, сука, массивы никак не могут пройти сраный иф. Что делать?
>>833219
Говорят это ебически медленно, можно с винапи
http://stackoverflow.com/a/1445405/1250699
http://rgho.st/6BMdZF4YD
Вот что получилось. Работает вроде нормально. Из 1500 вебмок секунд за 15 отсеяло 93 повторяющихся.
>Ты предлагаешь удалять файлы с одинаковым хешем?
Это хоть как-то выглядит по научному.
В отличие от сравнения 10 байт, при том что первые 4 всегда константы.
Ну если так создается довольно простой класс, то почему нет?
я так окна в впф создаю, например
тут есть несколько "но". ну, наконец, что мешает использовать new()-constraint в методе?
Это фича: код должен быть индустриальным.
Я новичек в .net, в данный момент изучаю c# всеми возможными способами, в том числе декомпилирую и смотрю код различного софта.
Столкнулся с тем, что полученный код при вставке в студию выдает определенное количество синтаксических ошибок.
И назрел у меня один вопрос. А могут ли во время декомпиляции в коде образовываться ошибки (сам файл не обфусцирован)? Или это я просто не добавил в проект какие-то ссылки?
синтаксические ошибки - это некорректно расставленные скобки блока/условия оператора/метода, некорректно поставленные знаки препинания, студия также ругается, когда при записи строки в стринг исползуют энтер не закончив строку (имею ввиду что то типа
string x = "dadadadadadadada
dadassss";
)
а если бы нехватало каких либо библиотек (что наиболее вероятно, учитывая, что неймспейсы кажись не присутствуют в декомпилированном приложении, а ты просто вставляешь голый код в ИДЕ), то ИДЕ указывала бы ошибку типа cannot find namespace xxx/ cannot resolve xxx и т.д.
ну и алсо в синтаксические ошибки можно занести неправильное использование ключевых слов типа if while new int x = 5-6; и всё такое
Ну в общем-то да, все так и есть.
Все ошибки, связанные с подключением чего-либо, я исправил добавлением в проект соответствующих ссылок.
Остались ошибки вида:
-Синтаксические
-"метод имеет несколько недопустимых аргументов"
-"преобразование int в byte невозможно"
-"обнаружен недостижимый код"
- и т.п
Вот я и гадаю, откуда все это?
Ведь тут даже декомпиляции нет как таковой, фактически просто открытие .net .exe файла.
насчёт "обнаружен недостижимый код" - ну, в ILSpy такое и не будет подсвечиваться, да и ошибкой, влияющей на корректность работы программы, не является. недостижимый код может быть написан либо индусским программистом, либо, насколько я знаю, обфускаторы могут добавлять недостижимые иф-блоки наряду с заменой имён переменных, чтобы запутать хацкера, пиздящего исходный код коммерческого ПО.
насчёт "преобразование int в byte невозможно", ты уверен, что в этом месте рабочий код, а не мусор, напиханный обфускатором для отвода глаз?
Но почему он тогда добавляется в массив снаружи, если внутрь в функцию передается только значение, которому и прибавляется новый элемент?
каким образом добавится? через arr = new AzazaType[4]? тогда нет, если ты не используешь ref/out параметры. если ты имеешь дело с List/Collection/etc... и используешь Add(new()), то добавится, конечно
Хорошая информация для размышления, спасибо.
Только что для интереса декомпилил и запустил на студии программку Expresso. После удаления ссылок на картинке все (о чудо!) запустилось.
Значит, такая декомпиляция в принципе возможна, и все дело в рассматриваемом мной софте.
Насчет обфускации - хз, посмотрим. Обычно ее сразу видно на глаз, а тут я такого не заметил.
N тредов назад тут был крендель, брызгающий слюной по поводу суперовости и уберклассности этого высера. вероятно, он снова появится тут и будет расхваливать это говно, но я бы советовал тебе прочесть более адекватные источники
Проект древний, есть свои классы для выполнение всех базовых операций через ADO.NET(создание конекшона, выборки, вставки, транзакции и т. д.)
>List<List<int>>
Или это считается говнокодом?
ССЫЛКА НА ССЫЛКУ
А там есть какие-то отличая?
>-"метод имеет несколько недопустимых аргументов"
>-"преобразование int в byte невозможно"
Не те библиотеки или их версии скорее всего подключил.
АААХАХААААХААХАХААААХААХААХАХААХАХАХАХААХАхАХААХАХАХАХААахаахахааааахахахахахахахаааАХАХааааахахахахаххааххааАХАХАааааАХАХАААахахахаа
спасибо)
если на один раз, можно сделать обычный SFX архив в винраре или любом другом архиваторе
если хочется поддержка встроенных обновлений с минимально работой, ClickOnce
если хочется обеспечить дополнительные проверки на целостность бинарников, если хочется каких нибудь нестандартных пресетов развертывания конфигурации и других специфичных вещей, можно сделать кастомное решение, например, с помощью WiX toolset, или вообще как кастомный виндовый проект
Тебя как кодера должен интересовать вопрос КАК. Или только в хеллоуворды можешь?
могу в хеллоуворды. Тебе сколько надо?
)))
ну так бы и сказал, хули. берешь, значит, ollydbg, запускаешь в нём свою тулзу (.ехе). последовательно выполняешь все шаги до того момента, когда возникнет проблема с лицензией. ищешь байт(ы), который нужно подправить, чтобы продолжить (либо убрать байты). сохраняешь "пропатченный" .ехе. всё.
Это слишком сложно для меня. Для меня твоя инструкция это шаманство. Сделай это и выложи пропатченный .exe. С меня лучи добра.
алсо, что вообще скажете про рефлексию - когда её лучше использовать и стоит ли, или её используют в исключительных случаях и в целом её использование нужно избегать?
Забыл добавить, что неважно на русском или на английском. Я буду рад любому подобному каналу, который проверен тобой, анон.
>её использование нужно избегать?
Прежде, чем изучать языки программирования, изучи русский язык.
Хули ты вообще делаешь проект на формах не зная основ?
Если есть Троэлсон то Шилдт не нужен
Гугли курсы ITVD. Все что тебе нужно есть на торрентах
бамп вопроса
bump
можно подробнее, пожалуйста
У меня в ASP.NET сайте (но это не важно) есть вьюмодель (vm) и модель (m). Нужно маппить вьюмодель в модель.
Часть атрибутов мапится всегда:
m.Attr1 = vm.Attr1
m.Attr2 = vm.Attr2
m.Attr3 = vm.Attr3
Но остальные атрибуты нужно маппить не всегда по условию.
Сейчас решил в лоб, завёл на каждый такой атрибут по флагу:
if (vm.MapAttr1)
m.Attr1 = vm.Attr1
if (vm.MapAttr2)
m.Attr2 = vm.Attr2
if (vm.MapAttr3)
m.Attr3 = vm.Attr3
Может есть какое-то более изящное решение? Желательно без рефлексии.
спасибо бро, добра тебе
Аноны, как правильно настроить проекты для юнит-тестирования приложения? Есть проект, состоящий из трёх "подпроектов" MyApp (shared code, MVVM), MyApp.iOS и MyApp.Android.
По идее, чтобы всё это дело можно было протестировать, нужно создавать отдельные тестовые подпроекты это ж надо было такую хуйню сделать, а?. Типа так: MyApp.Test, MyApp.iOS.Test и MyApp.Android.Test.
Только что-то не работает нихрена. Постоянно разные ошибки, код из shared-части не находится, или не инициализируются сервисы. Версии NUnita нужны разные у разных подпроектов (NUnit, NUnit Lite и NUnit Xamarin Runner), тоже не совмещаются вместе..
Есть тут кто-то, кто смог сконфигурировать всю эту хуиту вместе? Или хотя бы, есть какой-нибудь пример? На гитхабе пусто. Есть только две куцые статьи, которые не сильно помогают
https://developer.xamarin.com/guides/ios/deployment,_testing,_and_metrics/touch.unit/
https://github.com/nunit/nunit.xamarin
Ненавижу это говно
А мне норм.
Бизнес логику в shared-project покрыл юнит-тестами (сейчас там работает последний nunit).
Для интеграционных тестов у меня UITests.
Сорри, я думал это у меня в Android треде пост не пропечатался :)
Друзья, помогите. Пилю первый учебный проект. Он разбит на три уровня:уровень доступа к данным, бизнес-логика и уровень представления на asp.net mvc. Итак у нас есть пользователи, которые могут подписываться на других пользователей как в твиттере и инстаграме. Очевидно, что пользователь не должен подписываться сам на себя. Где мне оставить это ограничение? В бизнес логике при такой попытке выбрасывать исключение, в конроллере, или в представлении просто не показать кнопку "подписаться" на своей странице?
И да, казалось бы, что для своей страницы должен быть другой шаблон, с настройками, моими же подписками и без кнопки "подписаться" в частности. Тогда бы у тебя даже вопроса не возникло.
Нигде не написано об этом официально
Тоже самое что утверждать что C++ официальный язык борды.
Короче, в итоге мы имеем толстоту х2.
Пытаюсь создать таблицу в базе данных mysql через студию (пик 1), но выскакивает ошибка (пик 2).
Как можно исправить?
А есть ли бесплатные хостинги для погонять asp .net mvc?
localhost
Dev Essentials год бесплатно
чистатеретически, попробуй проверь, может быть, отключена какая-нибудь служба май скуля?
кококо
.....
кудах
тах
тах
.....
и так через каждый абзац это примеры сферических коней в вакууме не говоря про их излюбленные шутки писать на ~30 странице сноску и мол в 25 главе это разбирается. Да я забуду к 25 главе что вообще блядь такая сноска была.
В изучении в таком виде нет никакого смысла, первый день я еще что-то писал в студии но следующие я просто лежу на диване и читаю потому что писать нечего, это рассказ ебучий. ???????????
Сделал своё второе уже приложение на этом чудесно-эльфийском наречии. Однако, возникла проблема. Если первую однооконную быдлообработку я просто забирал из папки release, то со второй, которая писана с использованием EF CodeFirst я таким же макаром запустить не могу. Немного покопался в детских воспоминаниях о VS2008 UltraHardCoreEditionCrackedWithActivaziya сообразил, что нужен какой-то сборщик установщика. А ИНСТАЛЛШЫЛД-то оказывается платный! и для VS2015 community не подходит. Так вот, вопрос, а чем вообще можно собирать без лишнего красноглазия и консолек, ну и чтобы туда всякие компоненты типа sqllocaldb можно было запиливать в режиме некст-некст-некст-ок?
можно, вот тебе ссылка, ты парень способный, должно быть, разберешься http://wixtoolset.org/
Поправлюсь, ибо мне кажется что будет проще вбить через
<ComboBoxItem Name="Item_name">
<StackPanel Orientation="Horizontal">
<TextBlock>Ярдов</TextBlock>
</StackPanel>
</ComboBoxItem>
И по этому Item_name уже передавать дальше.
ероха, у комбобокса есть событие на изменение SelectedItem, в обработчике уже делаешь, что хочешь. Если ты труЪ MVVM парень, то через interactions привязываешь команду из вьюмодели, в качестве параметра как раз прилетит твой SelectedItem. Или во вьюмодели делаешь SelectedItem биндишь его на selectedItem своего комбобокса и по OnPropertyChanged в сеттере делаешь вызов своего кода
На уровне IL у байта вообще арифметики нет, i++ выльется в int tmp = i; tmp = tmp +1; i = (byte) tmp
А арифметики у байта нету потому что эффективнее с интами на процессоре работать было. В шарпе для похожести с джавой по сему поводу решили все приводить к инту (в том же vb.net приведения нет, но генерится в итоге код с кастами)
Бамп
делаешь класс/структуру, внутри которого массив определённой длины (например, по умолчанию 2. можешь перегрузить конструктор с первоначальной длиной массива). потом, по мере заполнения массива, создаешь новый в 2 раза больше (или больше на какую то константу), копируешь всё из предыдущего массива все объекты в новый массив. в классе для массива делаешь индексатор. добавляешь IEnumerator по вкусу
Спасибо, видел этот продукт в поисковых выдачах, более-менее понял в чем смысл. Однако в ходе освоения еще один вопрос больно ударил по яйцам. Разрабатывал с использованием SQL Server 2016 LocalDB, а что клиенту в сборку включать на голую Windows 10? Весь этот стапитсотмегабайтный пакет или есть какие-то компакт-варианты? Что-то я яндексу вопрос неправильно формулирую, ибо не нашел.
Если что интересно и на asp.net Core, то пиши, могу у себя на впс закинуть, там как раз асп и нода крутятся
SQLite не?
Failed to create prime the NuGet cache. restore failed with: 1
Telemetry is: Disabled
log : Restoring packages for /home/sparin/.vscode/extensions/ms-vscode.csharp-1.4.1/coreclr-debug/project.json...
error: Unable to load the service index for source https://api.nuget.org/v3/index.json.
error: Unable to obtain lock file access on '/tmp/NuGetScratch/lock/0fe55cca3e8a8fb7b26a7002bf1dc05f2d5faf41' for operations on '/tmp/NuGet/TempCache/ff77a80e-987b-4406-9956-ac4260dcb8ec/n50dr154.rqm'. This may mean that a different user or administator is holding this lock and that this process does not have permission to access it. If no other process is currently performing an operation on this file it may mean that an earlier NuGet process crashed and left an inaccessible lock file, in this case removing the file '/tmp/NuGetScratch/lock/0fe55cca3e8a8fb7b26a7002bf1dc05f2d5faf41' will allow NuGet to continue.
dotnet exited with error code 1
Пишу rm /tmp/NuGetScratch/lock/0fe55cca3e8a8fb7b26a7002bf1dc05f2d5faf41, а мне в ответ rm: невозможно удалить «/tmp/NuGetScratch/lock/0fe55cca3e8a8fb7b26a7002bf1dc05f2d5faf41»: Нет такого файла или каталога. Открываю nautilus, а его все равно нет.
Короче, я не понял как навернуть дебагер на Visual Stuidio Code. Что я делаю не так?
если вкратце, то нет
а вообще непонятно, что делают в одном предложении рефлектор, передача данных и работа алгоритмов шифрования (известная в 2016м любому дворнику васе благодаря интернетам и педивикиям)
нет - значит несправедливо
Возможно, проще пример привести:
Исходник:
newRecord любой текст /r/n(любое количество строк) wundkcn newRecord любой текст93487dfjvndknfvkn !Ъ\.
Должно найти:
newRecord любой текст /r/n(любое количество строк) wundkcn
newRecord любой текст93487dfjvndknfvkn !Ъ\.
Проблема в том, что если напишу regexp вот так @«newRecord [\s\S]*» парсер не видит когда остановиться и выдаёт всю исходную строку целиком.
НИКОГДА, СЛЫШИШЬ, ПИДР, НИКОГДА НЕ ПАРСИ ТЕКСТ С ПОМОЩЬЮ РЕГЭКСПОВ.
Итак, я выспался и нашёл отет.
string pattern = @"newRecord[\s\S]?(?=newRecord)"; //работает как надо
string pattern = @"newRecord[\s\S](?=newRecord)"; // не работает
(да, последнюю newRecord в строке не считает, но этого и не требую)
Но не понятно что даёт вопрос.
В документации https://msdn.microsoft.com/ru-ru/library/az24scfc(v=vs.110).aspx сказано:
Соответствует предыдущему элементу ноль или более раз.
? Соответствует предыдущему элементу ноль или один раз.
Как-бы на первый взгляд, и должна была бы брать любой текст. Но увы, берёт не останавливаясь.
>>839282
Благодарю за поиск конечного newRecord
>>839323
Ого сколько БОЛИ! Почему ты избегаешь регэкспов?
И в чем разница VS Community и платной версии, я на комьюнити же смогу писать платные приложухи и выкладывать их в магазин?
> подписка
Какая?
> аккаунт разработчика
600р.
> что вообще нужно, чтобы выложить свое платное приложение
Само приложение и заполнение простенькой налоговой декларации.
> на комьюнити же смогу писать платные приложухи и выкладывать их в магазин?
Да.
600 рублей один раз заплатил и можно выкладывать всю жизнь сколько угодно приложений? И без разницы, какая прибыль?
Налоговая декларация США чтобы им уплачивать налоги? Никаких подводных камней?
Так зачем все-таки существует платная версия, если на бесплатной можно писать те же приложения?
> 600 рублей один раз заплатил и можно выкладывать всю жизнь сколько угодно приложений? И без разницы, какая прибыль?
Йеп.
> Налоговая декларация США чтобы им уплачивать налоги?
Для нас не СШАшная, а сильно упрощенная.
> Никаких подводных камней?
Вроде как.
> Так зачем все-таки существует платная версия
Для ентерпрайза.
Спасибо.
>Для нас не СШАшная, а сильно упрощенная.
Для кого нас? Там для каждой страны своя декларация, например, для беларашки, или имеется ввиду все кто не в США?
две машины - два разных доступа к вычислительным ресурсам. правильней всего было бы оценить работу алгоритма на всех шагах выполнения на обеих машинах и посмотреть все, что происходит в округе. также учитывать I/O операции и возможности каждого из хардов. какой-нибудь болеет профайлер тебе в помощь
Проблему уже определили, так что
this
>I/O операции
Сервер, как оказалось, есть виртуалка, и у него нет физического харда. Потому он и тупит.
Регэкспы не предназначены для парсинга. Ты закладываешь бомбу замедленного действия в свой код.
Для поиска соответствий, что не есть парсинг.
В этом операторе нет ничего плохого, если ты понимаешь как им пользоваться. C# - компилятор, например, владеет им в совершенстве.
Да, каждое измерение [] - вещь в себе. Вообще гугли msdn-документацию, там про такие массивы подробно расписано.
Понял, спасибо.
>код на .net языках
Код на этих языках - де-факто open-source. Тебя не спасёт даже самый навороченный обфускатор потому что он элементарно снимается утилитой с github, код можно декомпилировать и подменить на любой другой.
>ведь приложения .net вскрываются рефлекторами на раз два, и можно узнать, как работают все алгоритмы шифрования?
От этого нельзя защититься ни на каком языке программирования. C/C++ просто сильно замедлят процесс взлома, но никак не предотвратят его.
Да нет, сударь. Просто про кванторы либо хуево читал, либо не читал. Логично тебя послать изучать конструкции по группировке и условным кванторам. В общем, мы тебя должны были ткнуть в ссылку ниже
https://msdn.microsoft.com/ru-ru/library/az24scfc(v=vs.110).aspx
Доклад с dot next со смехуечками про особенности double и прочего подобного. Чуток похоже на знаменитый ролик Wat про javascript и ruby, только на полчаса и с ненужным советским квном. Но все равно интересно было посмотреть.
Мне все его доклады доставляют, топовый чел. Алсо у него еще бложик классный, вот одна из последних статей, такая ведь даже на миникнигу потянуть может: http://aakinshin.net/en/blog/dotnet/stopwatch/
Через консольку нормально комплирует, а через VS Code копротивляется. Пикрелейтед.
Как заставить его нормально компилить?
Так. Как чувак, который месяца 2 назад пытался разобраться с VS Code, и все таки разобрался, могу предположить, что ты неправильно создаешь проект. Т.е. в батник прописываешь то что написано на сайте справа: https://www.microsoft.com/net/core#windows
может ещё ошибка из-за того, что ты пытаешься .нет подогнать под .нет коре.
>в батник прописываешь
Что за батник?
>то что написано на сайте справа: https://www.microsoft.com/net/core#windows
Это я в консольке пишу. И он собирает. А вот по ф5 в VS Code нет.
>может ещё ошибка из-за того, что ты пытаешься .нет подогнать под .нет коре.
Да вроде нет. Пикрелейтед.
Можешь по шагам расписать как настроить?
>батник
Это я так под винду делал. Если у тебя Мак, то терминал.
>>839938
>Это я в консольке пишу.
У тебя проект создается?
>Это я так под винду делал. Если у тебя Мак, то терминал.
Я под виндой.
>У тебя проект создается?
После dotnet new, dotnet restore создаются 3 файлика:
Program.cs project.json project.lock.json
И запускаю по dotnet run.
По ф5 не хочет. Пикрелейтед
Как видишь, у меня была такая же проблема, но я её пофиксил тем, как написал в ответе тут >>839958 . Дерзай, всё что можно было расписал. Я эту проблему VS CODE долбил несколько суток. Такие дела.
Изменил значение поля program в файле launch.json (пикрелейтед). По ф5 выдаёт такую же ошибку "build завершено с кодом выхода 1".
Правда при нажатии "принудительная отладка" запускает (не компилирует) старую версию программы. Код был изменён, но dotnet run не выполнен.
В БД связываю вот так: CONSTRAINT [FK_Clients_ToMain] FOREIGN KEY ([ID техники]) REFERENCES [dbo].[Main] ([Id])
и по аналогии 2 других к главной, которая должна заполнятся. Всем IDам присваиваю uniqueidentifier. Что делать дальше не понимаю, заранее спасибо за помощь
>"${workspaceRoot}\bin\Debug\netcoreapp1.0\VSCODE_PROSTO.dll"
я без понятия. у меня была такая же ошибка, я её пофиксил тем, что описал на стаковерфлове. ты что-то делаешь не так, скорее всего.
что что?
Пересоздал папки и получилось. Он даже сам прописал путь.
Но вот что напрягает:
Через файл/открыть папку он открывает текущую рабочую папку (одна папка на проект).
И чтобы сменить рабочую нужно лезть в меню. Можно как-то добавить все рабочие папки (все проекты)?
Winforms
Речь про EF Code First?
>а используется ли шарп в бэкэнде, но не с asp.net?
Да, задачи-то могут быть совсем разные. Например, фоновая служба, которая что-то там ковыряет в БД.
>Есть фреймворки какие-то типа Django/Flask?
Это и есть asp.net / webapi, только на других языках. Asp.net / webapi - основа web'а в .net. К ним ты можешь прикрутить любую хрень, типа React, например.
>inaccessible due to protection level
Ну очевидное сообщение об ошибке же.Ты где-то обосрался с доступностью полей, свойств или методов. Перепроверь весь код.
Да, ты прав. Сделал, но теперь выдает:
an object reference is required for the nonstatic field
Думаю что так. Просто ебанина, я понял в чем трабл, я не могу обратиться к переменной корпуса, пока не создастся объект корпуса, а он создается в конструкторе машины и я вот хз как теперь быть.
Создать экземпляр машины?
>я не могу обратиться к переменной корпуса, пока не создастся объект корпуса
Ты где-то нарушил принцип инкапсуляции. Создавай объект "копрус" и пусть уже он инициализирует все свои поля или свойства.
>это английский, наверное О_о
Конечно, это он. Без него сразу нахуй из треда. С одним языком будешь всегда иметь языковой барьер в команде.
Спасибо, переписал - все заработало!
лол
За какой проход, дибил? Объекты уничтожаются либо в конце scope ( {} ) либо когда ты их уничтожаешь руками. И если не сам, то обычно группами. Вот и всё.
еси не знаешь, о чем речь, не забивай людям мозги хуйней
>>840660
в момент очистки определенного поколения далеко не каждый из объектов может быть удален (ты ведь знаешь, на основании чего сборщик принимает решение об удалении объекта?).
ну а почему поколения - как правило считается, что наиболее "свежие" экземпляры менее всего нужны приложению в дальнейшем. ну не даты же фиксировать создания объекта, в самом же деле
>ты ведь знаешь, на основании чего сборщик принимает решение об удалении объекта?
нет. на основании того, существуют ли ссылки на этот объект?
мимокрокодил
ну расскажи тогда, как оно на самом деле.
Ведь не проще ли использовать для каких-то действий обычные методы?
В общем, помогите пожалуйста
Ну вот у тебя файл загрузился асинхронно например, какой метод вызывать будешь?
Гугли "Наблюдатель (шаблон проектирования)". В кратце - это позволяет разрывать сильную связь между объектами.
К примеру - есть у тебя кнопка.
Если делать без событий, то кнопка привязывается к твоей логике, из-за этого появляется сильная связность.
В коде кнопки ты определяешь момент нажатия на неё:
var isPressed = / magic /
if(isPressed)
{
Make(barrel);
Suck(dick);
}
Обрати внимание, в этом случае кнопка будет знать, что ты хочешь соснуть хуйца и сделать бочку. Чтобы это реализовать, тебе придётся наследоваться от кнопки, чтобы изменить обработчик нажатия.
В случае использования событий, код будет выглядеть так:
var isPressed = / magic /
if(isPressed)
{
Invoke.Pressed(this, huita);
}
В этом случае кнопке будет похуй на что ты там её будешь подвязывать. Она абсолютна никак не связана с тем, что ты будешь делать. Поэтому, где-то в другом месте ты сделаешь так:
button1.Pressed += (sender, e) =>
{
Make(barrel);
Suck(dick);
}
Ты можешь динамически менять обработчики:
if(youAreFaggot)
{
button1.Pressed +=Suck(dick);
}
else
{
button1.Pressed +=Suck(chupaChups);
}
При этом код кнопки не будет меняться.
Гугли "Наблюдатель (шаблон проектирования)". В кратце - это позволяет разрывать сильную связь между объектами.
К примеру - есть у тебя кнопка.
Если делать без событий, то кнопка привязывается к твоей логике, из-за этого появляется сильная связность.
В коде кнопки ты определяешь момент нажатия на неё:
var isPressed = / magic /
if(isPressed)
{
Make(barrel);
Suck(dick);
}
Обрати внимание, в этом случае кнопка будет знать, что ты хочешь соснуть хуйца и сделать бочку. Чтобы это реализовать, тебе придётся наследоваться от кнопки, чтобы изменить обработчик нажатия.
В случае использования событий, код будет выглядеть так:
var isPressed = / magic /
if(isPressed)
{
Invoke.Pressed(this, huita);
}
В этом случае кнопке будет похуй на что ты там её будешь подвязывать. Она абсолютна никак не связана с тем, что ты будешь делать. Поэтому, где-то в другом месте ты сделаешь так:
button1.Pressed += (sender, e) =>
{
Make(barrel);
Suck(dick);
}
Ты можешь динамически менять обработчики:
if(youAreFaggot)
{
button1.Pressed +=Suck(dick);
}
else
{
button1.Pressed +=Suck(chupaChups);
}
При этом код кнопки не будет меняться.
>>840909
Спасибо, я вроде понял.
Просто для меня в обычном консольном приложения уровня laba 1 использование евентов было не слишком очевидно
Ну вот напиши для laba2 консольное же приложение которое логгирует действия пользователя с файлами в определенной папке с помощью FileSystemWatcher.
И чем эта хуйня отличается от создания классов в css и подвешивания потом классов через addeventlistener?
Тем что ты пидор)))0
Но ведь asp.net так легко не развернешь, как приложения на python например, так ведь? Почему хостинг днем с огнем не сыщешь бесплатный?
поставил шарпдевелоп и билдтулс, попробовал собрать и пожрал говна с ошибками.
как это собрать без студии? https://github.com/martinmine/Shikashi-Uploader
в релизе старое говно
Родина им студию дала, охуенную, бесплатную, юзай, юзай студию! Нет, не хотим, хотим из говна и палок собирать велосипед, засирать систему не меньше и страдать. И это разрабы?
Нахуй мне это говно размером с ос? тем более, что я не пишу на шарпе.
наверное потому, что хостинг на дотнет - это традиционно винда, за которую надо заплатить. а вообще, что ты подразумеваешь под бесплатностью хостинга? тоталфри аля народ.ру когда-то? ну это жирновато. а хостингов с триалом не так уж прям многомного, но хватает. некоторые триалы даже супер круты по условиям, однако там не работает нихуя нормально, но это побочный уже эффект
а это я забыл еще про этот мертвый тред мертвого языка, в топане полтора вкатывальщика что ждут по пол дня в ЛУЧШЕМ случае помощи а потом уходят дублировать вопрос в QA в шапке /pr в том же жабаториуме и то в разы лучше. Пиздец у меня бомбит сегодня.
Дак заебался я уже смотреть на эту парашу блядь, книги все что купил, люмия блядь офис который блядь я запускал пару раз, винда купленая нахуй всё это какой в этом блядь смысл? Я мог поставить какую нибудь ебунту и дрочить яву и имел бы в своём регионе гораздо больше вакансий для трудоустройства но блядь даже среди тех что есть по net это 50% асп 25 допиливание чужих костылей оставшиеся 25 это упоминание в вакансии на позицию java что ты с нет платформой (синтаксисом) знаком. Мобилки мертвы, ентерпрайз мертвый, асп только еще более менее держится на плаву за счёт внутренних ERP систем ну и юнити подогнали что бы мс спасти, хоть какой-то прирост в шарп активности но даже блядь при этом в 2015 когда java упала сильнее всего за всё время она всё равно стала языком года а ебаный шарп как не попал в тройку так и нахуй идет до сих пор.
А нахуя тебе ассортимент вакансий если нужна тебе одна? Я когда выбирал язык запариаался на эту тему, а по факту сейчас заебываюсь футболить эйчаров с моего круга и хх.
попробуй почитать про stackalloc в контексте блоков unsafe, это альтернатива оператору new(), который выделяет последовательно расположенную память в стеке вместо кучи.
В джава треде писал не я, но я поддерживаю пост и мне неприятно, что на дотнете легаси говнище, а не проекты.
Ну энтерпрайз проекты вообще очень живучи
Странный вопрос какой-то, продвигаются в следующее поколение живые объекты, мусор с деструкторами (которые на самом деле нихера не деструкторы, а финализаторы) не в поколение перемещается, а в специальную очередь финализации. В этой очереди обработка происходит не на потоке сборщика, а на другом (чтобы нахер не повесить финализатором сборку/выделение памяти), из этого состояния объект может воскреснуть (корректно написать код такой очень тяжело, но иногда требуется, например для поддержки пула соединений: в финализаторе происходит подчистка всякого говна, которое юзер забыл очистить, а соединение возвращается в пул), кроме того объект может оказаться собран в тот момент когда происходит интенсивная работа, поэтому финализация откладывается до более спокойного времени/острой недостатки памяти.
То бишь можно было бы сразу, но не выгодно. (По примерно той же логике несколько поколений у сборщика, а не одно)
>везде предлагают веслать кривое наследие хуй знает сколько летней давности
Добро пожаловать в Энтерпрайз, сынок!
Замени в rsdn.ru... ru на org
С помощью чего можно мониторить подключение и отключение?
Чому бы тебе не погуглить? Можешь дергать DriveInfo.GetDrives() периодически, а можешь попердолиться в win api.
>Чому бы тебе не погуглить?
Ну я нагуглил вот эту статейку
http://mycsharp.ru/post/21/2013_06_12_rabota_s_fajlami_v_si-sharp_klassy_streamreader_i_streamwriter.html
Но это все же не мониторинг.
>периодически
Думал, но это как-то слишком топорно на мой взгляд? Запись-то должна быть только при смене конфигурации.
Есть же какие-то события в винде при обнаружении/удалении устройства, я думал может подскажут как их использовать?
Ты на кокаом языке гуглишь?
http://www.codeproject.com/Articles/18062/Detecting-USB-Drive-Removal-in-a-C-Program
Не надо так гуглить.
А что пишет? Да и как ты запускаешь? На линуксе стоит mono? Он console или winform?
Шо в терминале то показывается? И что за версия mono?
>mono ./kolobok.exe
Запустилось! Спасибо!
Оно по двойному клику не стартовало, вот я и решил, что не работает.
inb4: кроссплатформеность
зачем ты акцентируешь внимание на свой трип код? всем ведь похуй, а ты лишь обращаешь на него внимание своим "я случайно". может, и не случайно вовсе?
> поля сериализованного класса (ровно как и все поля его базовых классов), как известно, обфускации не подлежат.
почему?
тебе сложно ответить на вопрос? в принципе, если рассуждать как ты, то и тебе отвечать не должны, ведь раз ты не знаешь сам ответа на свой вопрос, то ты ламер.
ну пожжи. ты отказался давать мне ответ на вопрос просто под предлогом того, что я не знаю ответ на вопрос. отсюда можно предположить, что ты считаешь себя выше того, чтобы отвечать людям на вопросы, ответы на которые они не знают, а ты знаешь. почему тогда тебе должны отвечать люди на вопрос, ответ на который они знают, а ты не знаешь? я не ответил на твой вопрос, потому что не знаю на него ответ, но в то же время один аспект формулировки твоего вопроса меня заинтересовал. если тебя оскорбило, что я, незнающий ответа на вопрос, обратился напрямую к тебе, потому что, похоже ты знаешь на него ответ, то, во первых, иди нахуй, пидорас ЧСВшный, а во вторых, задам тогда вопрос абстрактно, всем участникам треда: почему поля сериализованного класса (ровно как и все поля его базовых классов) обфускации не подлежат?
что смешного?
почему высеры?
С отдельными мелкими классами проблем нет, но я не понимаю как разобраться с большой кодовой базой в целом.
Разобраться в целом = знать какие классы есть в проекте, какие у них интерфейсы, как классы связаны между собой. Глубокое знание реализации пока не интересует.
Пробовал Code Map, легче не стало. :(
Не обфусцируй / не сохраняй / настрой свой обфускатор / используй сериализацию, которая не сипользует имаена классов и полей при сериализации
Работает пошустрей
Вы видите копию треда, сохраненную 3 октября 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.