[WT] [Архив]  [Поиск] Главная Управление
[Совместно с Ычаном]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 19666)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, XCF, ZIP размером до 5000 кБ.
  • Ныне 3152 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
15241877094.png-(426.24KB, 720×720, junior_developer_popukko.png)
19666
No. 19666 Закреплено watch    
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

Не знаете, какой язык и библиотеки взять для вашей задачи? Вам сюда.
Не знаете, где клиент, а где сервер? Вам сюда.
Не понимаете, что такое ООП? Вам сюда.
Написали код, и не понимаете, почему не работает? Вам сюда.
Обнаружили кусок кода, и не понимаете, как оно вообще могло работать? Вам тоже сюда.
Не знаете, как подступиться к проблеме? Вам обязательно сюда.

Другие тематические нити (периодически обновляется): https://pastebin.com/psy43ibG

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

Аноним будет стараться дать максимально точный ответ на ваш вопрос и не пытаться предложить вам поменять весь стек технологий только потому что не знает, как решить проблему с тем что у вас есть. Впрочем, если вы забиваете гвоздь микроскопом, аноним постарается вас об этом предупредить.

Чтобы не сбивать новичков с толку, а также не разбавлять полезную информацию мусором, беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше" здесь запрещены.

Если здесь поселится достаточное количество программистов на одном языке / одной сферы, можно будет их выделить в отдельную нить, а в этой оставить на неё ссылку.
По мере поступления вопросов можно составлять FAQ и базу знаний.

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html
http://410chan.org/dev/arch/res/17424.html

Прошлая нить пока тонет тут: >>/dev/17424
187 сообщений пропущено. Показаны 50 последних сообщений Развернуть все изображения
No. 20733    
Скажите мне, какой из этих вариантов лучше и почему?

Вариант 1:
if(cond) {

   expr1;
   expr2;
   expr3;
} else {
   expr2;
}

Вариант 2:
if(cond) expr1;

expr2;
if(cond) expr3;

Мне не нравятся оба, в первом дублируется expr2, во втором — if(cond). Возможно, есть третий?
No. 20734    
>>20733
expr_2;

if cond then
expr_1;
expr_3;
end if;

-- Ты про порядок ничего не говорил :o)
--
-- Ну а иначе, it depends... Что это за выражения?
-- Они сложные?
No. 20735    
>>20734
>Ты про порядок ничего не говорил
Не, порядок важен. Если бы так было можно — вопрос бы не стоял ^_^

>Они сложные?
Скажем так, если какое-либо из них вынести в отдельную функцию, то один только ее вызов займёт больше места, чем занимает само это выражение.
Для определенности можешь считать, что cond — это что-то уровня А > B, а expr2 — уровня foo += bar.
Но мне всё равно не нравится, что одно из них приходится повторять дважды.
No. 20736    
>>20735
Тогда для чукчи-читателя предпочтительней первый вариант, где весь экшн для каждой ветки собран в одном месте — так понимать, что делает код, легче. Да и вообще, как-то не приветствуется дробление условия, потому что уже автоматом начинаешь искать, где изменилось cond с первого раза.

>Но мне всё равно не нравится, что одно из них приходится повторять дважды.
Ну а что делать... Вообще, чтобы не думать над такими вещами (ибо это всегда малопродуктивно), лучше взять какие-нибудь Style and Quality Guidelines и делать всё по ним.
No. 20737    
>>20733
С какой точки зрения лучше? Если вычисление
cond
не может иметь побочных эффектов или зависеть от expr1 или expr2, то оптимизирующий по скорости компилятор скомпилирует оба варианта в примерно одинаковый машинный код, который, вероятно, будет близок к варианту 1, чтобы было меньше ветвлений и cond не вычислялось дважды. Если тебе больше нравится то, как выглядит код в варианте 2, и не нравится повторение cond, то можешь сохранить его значение в булеву переменную и во втором if использовать её.
No. 20738    
>>20737
1. Условие всегда должно быть идемпотентным.
2. Человек, который пишет нечитабельное гумно, в команде не нужен.
3. Компилятору всё-равно, ещё ни один не жаловался.

Т.е. всегда предпочтительней взять человека, код которого легко могут понять остальные, чем старого клоуна, который делает булевы функции с побочными эффектами, дробит conditional blocks без веской на то причины и оптимизирует код для компилятора руководствуясь представлениями 20-и летней давности.

Другой точки зрения тут быть не может.
No. 20739    
>>20738
> оптимизирует код для компилятора руководствуясь представлениями 20-и летней давности
Мне как-то на лабе оценку снизили за то, что не перемножил на калькуляторе две константы перед присвоением переменной. Не int x = 5 * 8, а int x = 40;
No. 20740    
>>20739
Ну, это проблема образовательной системы в этой стране, т.е. сидит старый чудак на букву «м» и учит тому, что было лет 10-20-30 назад. Хотя даже если взять довольно древний “Ada 95 Quality & Style”, там особо написано, что даже не выдумайте заниматься подобной хѣрнёй — вы код для людей пишете, а компилятор один хрен константы сам перемножит, к нужному типу приведёт и вас спрашивать не будет.
No. 20741    
Ну что же, вывод ясен. Победителем объявляется первый вариант, как более человекочитабельный и требующий меньше вычислений.

>>20733-кун
No. 20742    
>>20736
>Style and Quality Guidelines
Хм…
Большинство документов такого рода, которые мне попадались, отражают, в основном, сторону, которую их автор занимает холиварах "пробел vs. таб", "перевод строки перед {" и тому подобная мишура, решаемая у нормальных людей одним запуском чего-нибудь типа Artistic Style.

Таких, в которых подробно расписывались, скажем, вопросы допустимости дублирования кода, сайд-эффектов у функций и другие подобные темы, понимание которых действительно позволяет писать хороший код, мне что-то не встречалось…
No. 20743    
153842571182.png-(70.54KB, 1024×768, Clipboard01.png)
20743
>>20742
Я вообще больше подобных гайдов не видел, которые бы не кончались на “Code formatting”. Так что используешь то, что есть, даже невзирая на то, что здесь больше упирают на фишки языка (хотя большинство их присутствует и в современных). Но интернет — это помойка, здесь очень много мусора и мало чего ценного.

>сайд-эффектов у функций
У функций вообще не должно быть побочных эффектов. Просто в C сделали подпрограммы, которые могут возвращать значения — это технически просто и облегчало процесс преподавания студентам. Так далее и повелось — мы имеем процедуру Remove, производящую деструктивную модификацию контейнера, и функцию Find, которая только возвращает значение, и обе они называются функциями.
No. 20748    
>>20738
Океаны жёлчи в ответе твоём. Возьми это проще. Команды какие-то, "предпочтительней взять человека", серьёзный бизнес. Тот пост, на который ты отвечал, ни в коей мере не защищает вариант 2, который тебе не нравится.
No. 20749    
Почему в Перле
print unpack('H4', hex('1234'));
выдаёт 3436?
Что я делаю не так?
No. 20750    
153870961434.jpg-(84.38KB, 1280×720, Xj9V7PS_.jpg)
20750
>>20749
hex ()
зачем-то прибавляет тройку к старшей кварте каждого октета, т.е. твой код должен выдать
10#3436_3630#
при шаблоне
q(H*)
. Иными словами, тебе никто совместимости между внутренними и внешними форматами представления данных не обещал. Используй
pack ()
.

>>20748
Океаны желчи я в том посте поскипал. Проблемы?
No. 20751    
>>20750
А вот
print unpack('N', pack('b9', '001001001'));
ничего не выдаёт. Хотя тут распакованы упакованные данные. Что не так?
No. 20752    
>>20751
Размерность разная. Читай мануал по pack ().
No. 20753    
>>20752
Можешь на место ткнуть? Или оно не здесь?
https://perldoc.perl.org/functions/pack.html
No. 20754    
>>20753
N — 32 bit, ты только 16 передаёшь. Оно само остальные биты не допишет.
No. 20756    
>>20754
Я думал, что допишет, нулями забьёт.
No. 20757    
153873438766.jpg-(143.13KB, 600×600, 7c40e7e44fdd1064d35d2eb7f1d8c7fe1e4ffb19c6300ea65e.jpg)
20757
>>20756
Лучше бы ты чем-нибудь полезным занялся, дитя, чем теребить биты у старой рабочей лошади cgi-bin; интерпретатор там какого-нибудь паскаля написал, например. А то геронтрофилия какая-то получается; станешь как тот поехавший араб из comp.lang.ada.
No. 20758    
>>20757
Вы что имеете в виду, дядь?
Мне для линукса нужен перл, а с питоном я работал, больше не хочу.
No. 20759    
153874222961.jpg-(188.56KB, 902×1059, 2c6d760c6df49819ebd92f73e3104a72c10a188fe4fa40c55d.jpg)
20759
>>20758
Имею в виду, что студент выбрал тупиковое направление, потому что:
1) эти фичи в Perl-е были запилены для C-шников, т.е. людей, хорошо знающих работу ОС на низком уровне и отлично представляющих работу (сейчас уже устаревшего) железа и проблемы, которое оно с собой несёт;
2) nowadays Perl stays for legacy cgi-bin systems и скоро околеет, ботать особенности его работы с низкоуровневыми системными вызовами и машинозависимыми типами бесперспективно.
>Мне для линукса нужен перл
Судя по вашим вопросам, он вам не нужен от слова «совсем».
No. 20760    
>>20759
>Судя по вашим вопросам, он вам не нужен от слова «совсем».
Я вместо баш-скриптов использую. Я и не о них спрашивал.
Дядь, я хочу написать парсилку гифок, которая выдавала бы полный алфавит файла.
Так как в гифках на каждый символ обычно некруглое число бит, да ещё они и расположены наоборот, а в перле есть pack, который умеет и то, и другое - почему бы его и не использовать? За тем я вас и спрашиваю.
No. 20763    
>>20749
Аргуметом unpack должна быть строка, поэтому hex('1234'), то есть десятичное значение 0x1234 = 4660, интерпретируется как строка "4660", то есть "\x34\x36\x36\x30" в кодировке ASCII. После этого unpack 'H4' вернёт первые четыре шестнадцатеричные цифры из этого упакованного значения, то есть 3436.
>>20756
В конце описания функции unpack сказано, что если для формата требуется больше бит, чем остаётся во входной строке, то результат не определён.
No. 20765    
>>20759
> ботать особенности его работы с низкоуровневыми системными вызовами и машинозависимыми типами бесперспективно
Во-первых, он не спрашивал ни о каких машинозависимых типах, у него вполне переносимый 32-битный беззнаковый big-endian целочисленный тип. Во-вторых, в Ruby эти особенности практически такие же, как в Perl, то есть эти знания применимы и при использовании отличных от Perl языков программирования.
No. 20766    
15387493358.jpg-(53.69KB, 636×356, [SIG56de28aa51ea27296f34007f5049a57aa0006475e1aa61.jpg)
20766
>>20760
Тогда могу лишь пожелать удачи в ботаньи системного программирования под UNIX. Она тебе потребуется.

>>20765
>Ruby
Это умертвие в отличии от Perl-а и не жило толком. Легаси на нём опять же web-only, это Рельсы. Там системщины ещё меньше, чем в перле.
No. 20767    
>>20766
> Легаси на нём опять же web-only
А как же Metasploit, например?
Только ALGOL 68 по-настоящему мёртв. В Python в модуле struct методы pack/unpack тоже не так уж сильно отличаются от этих функций в Perl и Ruby.
No. 20769    
Бывают ли программы, которые "переводят" код с одного языка на другой?
No. 20770    
>>20769
Транспилеры, сэр.
No. 20777    
Анончег, если с помощью python paramiko скачиваю файл с sftp сервера, методом get, он меняет дату модификации у файла назначения в локальном пути? Возможности проверить сейчас нет, а ответ важен для понимания.
No. 20778    
>>20777
Датой модификации будет текущая локальная дата.
No. 20779    
>>20778
Спасибо, теперь все стало понятно.
Получается из стандартной библиотеки функции os.rename, os.getmtime, shutil.copy2, они каким-то чудом сохраняют время модификации файла.
А paramiko get наоборот меняет на текущую дату. Моя ошибка была в том что я думал что он работает как из стандартной библиотеки.
No. 20780    
>>20779
Можешь сам устанавливать полученную с сервера дату модификации файла после скачивания или воспользоваться модулем scp, который использует paramiko и в котором есть возможность указать аргументом методу скачивания необходимость сохранять серверную дату.
No. 20781    
153919250987.jpg-(42.97KB, 600×336, Карыч.jpg)
20781
Здравствуйте, дорогіе анонимы! Собственно, меня къ вамъ привелъ интереснѣйшій вопросъ... Для чего нужна "Ren'Py", если ​подобныя​ ​визуальныя​ новеллы я могу и въ "Delphi/Lazarus" сдѣлать? Даже на V.B.A. в "Excel", забавно.
No. 20786    
Вопрос по джваскрипту.
Насколько актуальны Server Side Events?
No. 20787    
>>20786

Настолько, насколько по адресу https://caniuse.com/#feat=eventsource сказано.

(Главная проблема: не поддерживаются во браузерах Корпорации Microsoft, требуют в них подпорки-костыля https://github.com/Yaffle/EventSource или аналогичного.)
No. 20788    
>>20787
О, Великий, какова же область применения серверных событий, ведь есть вебсокеты?
No. 20789    
>>20788

На сайте запрещённой в Российской Федерации¹ террористической² спецификации HTML5 по адресу https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events сказано, что серверные события генерируются обычным серверным скриптом поверх HTTP, и притом в одном направлении (от сервера во браузер), тогда как по адресу https://html.spec.whatwg.org/multipage/web-sockets.html#network сказано, что вебсокеты действуют поверх специального (по адресу https://tools.ietf.org/html/rfc6455 описанного) протокола, и притом в двух направлениях.

Соответственно, область для применения серверных событий возникает главным образом тогда, когда большой необходимости передачи сообщений в обратном направлении (из браузера на сервер) нѣтъ, а делать WS-сервер либо сложно, либо вообще нельзя (на виртуальном хостинге со строгими правилами, например).

____________

¹ Блокировку можно по адресу https://isitblockedinrussia.com/?host=html.spec.whatwg.org проверить. Лично мне для доступа к странице https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events потребовалось запустить TOR.

² Упомянутое по адресу https://isitblockedinrussia.com/?host=html.spec.whatwg.org решение 27-31-2018/Ид2971-18, принятое 2018-04-16 Генпрокуратурою — это, по-видимому, часть борьбы с мессенджером Telegram, «которым пользуются террористы», как известно.
No. 20790    
153921761986.jpg-(65.69KB, 603×602, 14454326388420.jpg)
20790
>>20789
Чрезвычайно доходчиво, вот тебе дева с котом.
No. 20796    
Можно ещё один вопрос?
Почему вот так

newXHR.open('GET', 'something.json');

всё работает, а вот так вот

fetch('something.json', {method: 'GET'})

нет? Я что-то не понял в синтаксисе фетча, но что?
No. 20797    
>>20796
Что значит не работает? Не отправляет реквест? fetch возвращает промис.
No. 20798    
153937518721.jpg-(19.58KB, 430×304, 1286342971381.jpg)
20798
>>20797
Я немного херню написали доволен был, а сейчас понял, что всё хуже и непонятней, чем я думал.
Так вот. Ситуация. Я поднял сервер на своём компевсё по гайду, чтобы чуть-чуть попрактиковаться в запросах. Код сервера - не мой, что там происходит я представляю слабо. Я шлю туда GET-запросы(и xhr'ом, и фетчем) и хочу получить json. И, к примеру, лисьи(собственно лиса лохматой версии и луна свежей) браузеры просто берут и грузят фал напрямую, минуя серверна сервере стоит специальная задержка перед ответом. А хромовые - просто отклоняют запрос, потому что он кросс-ориджиновый. И я не знаю, что делать, чтобы работало.
No. 20803    
153945012991.jpg-(20.72KB, 441×440, 263623114_2.jpg)
20803
>>20798
Всё оказалось просто, надо было нормально заходить через ip/порт/юри, а непросто вбивать путь к файлу.
No. 20824    
читаю "clr via c#" Рихтера и у меня есть вопрос по перегрузке операторов.
вот он пишет, что не все .net-совместимые языки программирования поддерживают синтаксис перегрузки операторов. пишет, что microsoft рекомендует вместе с перегруженными операторами создавать методы с "дружественными именами", вызывающие "методы перегруженных операторов", типа вот так пример из самой книги:
public sealed class Complex {
 public static Complex operator+(Complex c1, Complex c2) { ... }
 public static Complex Add(Complex c1, Complex c2) { return(c1 + c2); }
}

меня смущает return(c1 + c2);
если язык не поддерживает синтаксис перегруженных операторов, то как он сможет выполнить операцию c1 + c2? или я что-то не так понял? просветите меня
No. 20827    
>>20824
> как он сможет выполнить операцию c1 + c2?
Язык не выполняет операции. Компилятор языка транслирует текст программы в байт-код, который потом, когда пользователь запустит программу, исполняет среда выполнения CLR (Common Language Runtime). Обрати внимание на слово "common" — оно значит, что среда выполнения у всех .NET-языков общая. Класс Complex компилируется компилятором C#, он понимает перегруженный оператор +. Вызывающий метод Add этого класса код, написанный на другом языке, просто передаёт управление на откомпилированный компилятором C# код метода Add.
No. 20828    
>>20827
спасибочки что объяснил!
до меня это дошло вчера ночью, когда уснуть не мог, ха-ха
No. 20829    
Чио-чан, чем поля отличаются от свойств с геттерами и сеттерами по умолчанию в C#? Разве есть разница в использовании?
No. 20830    
Сколько нужно лет чтобы с нуля изучить HTML?
No. 20831    
>>20830
Мне кажется, что ты всё же хочешь изучить не только HTML, но хотя бы связку HTML+CSS, а к ней еще и Javascript, в контексте какого-либо популярного фронтенд фреймворка. Т.е. вещи необходимые и используемые сейчас для создания интерфейса современных веб и околовеб приложений.

Это всё из категории easy to learn, difficult to master. Ты быстро поймешь, как вещи делаются в принципе, но может уйти много времени на то чтобы понять как делать вещи конкретно тебе необходимые. На то чтобы понять как вещи делать в принципе, и начать их делать, никакие годы не нужны, базовый навык ты приобретешь буквально за пару месяцев. На то чтобы научиться с наскоку делать вещи конкретно необходимые, и делать их оптимально, уходит столько времени, сколько ты будешь готов на это потратить. Это уже чисто профессиональный опыт.

В контексте изучения конкретно верстки может пригодится вот эта запись из нашей базы знаний:
>>Хочу верстать
http://410chan.org/dev/arch/res/15681.html#17404
>>Пополняемая база знаний
https://pastebin.com/AGhLZppH
No. 20832    
15398098946.jpg-(789.54KB, 827×1169, __welrod_mk2_girls_frontline_drawn_by_fu_ta__7b0fc.jpg)
20832
>>20829
> Чио-чан, чем поля отличаются от свойств с геттерами и сеттерами по умолчанию в C#? Разве есть разница в использовании?

Окей. Начнём с того, что MS в оформлении кода рекомендует всё публичное делать свойствами, а приватное — полями. И все проекты соблюдают такой подход.

// По сути, здесь разницы никакой нет: 
    public int Age {get; set;}
    private int _age;

А ещё благодаря свойствам можно творить всякую полезную хуйню.

Типа управления доступом:

    public int Age 
    {
        get; 
        private set; //присвоить можно будет только внутри этого класса
    }


Типа инкапсуляции:

    public int Age 
    {
        get { return CalcAge(); }
        set { ReInitializeNpc(value); }
    }


Типа ебли с MVVM:

    private int _age;
    public int Age 
    {
        get { return _age; }
        set 
        {
            _age = value;
            
            //Уведомить, что изменилось свойство Age
            OnPropertyChanged("Age");
        }
    }

Удалить сообщение []
Пароль  
[Mod]