thegoodfellas/blogset-br huggingface dataset:
Control:Caso nao estiver com aquele V do lado esquerdo ao Winsock (em outras palavras, caso o Winsock nao estiver marcado), marque-o. Feito isso, clique em Aplicar e Ok.Repare na barra de ferramentas do VB que surgiu um novo controle, de dois monitores, um verde e outro azul, cada um em cima de uma gabinete, e conectados com um fio vermelho:Com isso, coloque uma instancia do novo controle no form (clicando duas vezes no controle). Nomeie-o para "ws". Assim, o controle fora totalmente importado para o projeto e estara disponivel para uso. Abaixo veremos conceitos de protocolos. Protocolos: TCP e UDP. Qual usar?Com a importacao do novo controle, reparamos a propriedade protocol e seus dois valores: TCP e UDP. Nesta secao aprenderemos brevemente sobre cada um e qual e o mais apropriado para o projeto. Para quem nao gosta de textos longos e descritivos ou quem gosta de textos praticos, pule para o quarto paragrafo seguinte a esse. TCP e UDP sao os protocolos mais usados na internet para conexao com outro computador. O TCP (Transmission Control Protocol)e um protocolo sob o qual se assenta o nucleo da internet (Wikipedia: http://pt.wikipedia.org/wiki/Transmission_Control_Protocol). Nele se ha a certeza da integridade dos dados, ou seja, sabe-se que os dados chegarao inteiros ao outro lado, as vezes cortados, mas sempre inteiros. Serve para transmissoes HTTP (HyperText Transfer Protocol), FTP (File Transfer Protocol) e varios outros protocolos de comunicacao. Uma desvantagem do TCP e a latencia, uma vez que primeiro ha de se ter uma confirmacao da integridade dos dados antes de prosseguir, o que torna o fluxo de dados lento. Ja o UDP (User Datagram Protocol) e um protocolo largamente utilizado em compartilhadores P2P famosos como o Ares, eMule e outros do genero (tambem usam TCP). Com ele nao se ha a certeza de que os dados irao chegar do outro lado. E usado para casos em que se admite uma perda de dados. A vantagem do UDP e a simplicidade do cabecalho de comunicacao (Porta de origem, porta de destino, mensagem e checksum) e a rapidez com qual os dados sao transmitidos (pois nao necessita de Acknowledge, ou seja, nao precisa de confirmacao da chegada e integridade dos dados), entretanto, a desvantagem e que a transmissao de arquivos sem um protocolo de comunicacao especifico torna-se perigoso, uma vez que um programa, por exemplo, ira chegar corrompido, devido a nao-integridade dos dados. A maioria das (se nao, todas as) placas de rede tem em seu firmware por padrao o protocolo TCP, o que torna possivel o processamento dele em modo de hardware, assim sendo mais rapido que o processamento em software. Alem do mais, e o protocolo mais confiavel para a camada de internet, com qual temos de ter a certeza da integridade dos dados enviados ou recebidos.No nosso caso do Visual Basic, recomendo usar o protocolo TCP, que ja vem por padrao selecionado no Winsock. Alguns comandos entre TCP e UDP do Winsock sao diferentes. Exemplo: o comando Listen do TCP equivale ao Bind do UDP. Enfim, deixe o protocolo TCP selecionado no winsock. Na proxima
secao veremos sobre o conceito de conexao entre dois computadores ou dois aplicativos de um mesmo computador. Voce pode pular para o paragrafo com parte pratica, em negrito.Conexao entre dois computadores ou dois aplicativosPara uma conexao ocorrer, e necessario abrir portas. Um soquete conectado nao consegue receber outro cliente, pois ja esta conectado a um cliente. Podem existir varias portas locais com um mesmo endereco (exemplo, varias portas com o numero 500) desde que as existentes estejam ja conectadas (com excecao para o Svchost.exe do Windows, que estranhamente tem duas portas locais com mesmo valor mas ambas estao ouvindo). O porque disso e: imagine duas instancias diferentes do Winsock ouvindo na mesma porta. Se um cliente se conecta a essa porta, haveria um conflito: qual deles ira atender aquele cliente, uma vez que os dois estao programados para aceitar um cliente quando este se conectar e uma vez que ambos estao atuando na mesma porta? O mais rapido? Agora imagine uma situacao diferente: uma instancia de soquete esta atuando em uma porta. Quando um cliente se conectar aquela porta, alem dele aceitar a conexao com o cliente, ele ira criar outra instancia, que atuara na mesma porta ouvindo. Pois bem, um cliente se conecta aquela porta, e o soquete ira criar outra porta, com o mesmo numero, e ouvira ali. Assim, se outro cliente fizer o mesmo processo do primeiro cliente, conseguira se conectar, mas em outra instancia do soquete do aplicativo. Esse e basicamente o sistema que um servidor web (Apache, IIS) usa: um site como o Google e amplamente usado e deve receber em media 100 conexoes por segundo. Como citado na segunda frase do primeiro paragrafo, um soquete conectado nao consegue receber outro cliente, assim, o aplicativo de servidor HTTP do Google (que provavelmente nao e terceirizado, ou seja, provavelmente foi desenvolvido pela propria equipe do Google, mas para uso apenas da empresa), a cada conexao nova, cria uma nova instancia do soquete web, atuando na mesma porta (80). Quando um cliente desconecta, aquele soquete e destruido, entretanto, sempre ha de permanecer um para ouvir e atender aquela porta. Mesmo que por um segundo ninguem (e nada) esteja acessando o Google, ainda sim havera de ter um soquete atuando na porta 80 do servidor do Google, prestes a atender uma nova conexao. Na proxima secao, veremos sobre os dados transmitidos pelo Winsock. Tipos de dados no WinsockOs dados, sejam eles no computador ou na rede, sao matrizes de bytes estruturadas. No Winsock, podemos enviar qualquer tipo de dado, e o outro pode receber em qualquer tipo. Serei mais especifico: O soquete pode enviar dados em forma de matriz de bytes, em forma de texto (string), em forma de uma variavel de integer, variavel de byte, variavel de string, variavel de string fixa (Dim Mystring As String * 5). Na recepcao dos dados, pode-se receber em forma de matriz de bytes, em forma de texto (string), enfim, da mesma forma. Recomendo enviar e receber sempre em forma de matriz de bytes.Na proxima secao, criaremos um exemplo pratico utilizando winsock. Enviarei
o outro estiver digitando, exibe tal informacao (Fulano esta digitando)'Senao, exibe "conectado a (ip do cliente ou apelido se tiver)"'Caso nao estiver conectado e nem desconectado (resolvendo host, conectando, etc):'Exibe o status correspondente.tHost.Enabled = Option1.Value And (ws.State = sckClosed)tPorta.Enabled = (ws.State = sckClosed)Option1.Enabled = tPorta.EnabledOption2.Enabled = tPorta.Enabled If ws.State = sckClosing Or ws.State = sckError Then ws.Close End If If ws.State = sckClosed Then OtherApelido = "" lStatus.Caption = "Desconectado" ElseIf ws.State = sckConnected Then If OtherTyping Then lStatus.Caption = IIf(OtherApelido <> "", OtherApelido, ws.RemoteHost) & " esta digitando" Else lStatus.Caption = "Conectado a " & IIf(OtherApelido <> "", OtherApelido, ws.RemoteHost) End If Else lStatus.Caption = STS(ws.State) End IfEnd SubPrivate Sub ws_ConnectionRequest(ByVal requestID As Long)'Resumo: ao receber a nova conexao, fecha o soquete, aceita a conexao e envia um comando que indicara o apelido.ws.Closews.Accept requestIDws.SendData "%%%%REQ&&"End SubPrivate Sub ws_DataArrival(ByVal bytesTotal As Long)'Resumo: recebe os dados recebidos, e de acordo com o que recebeu executa uma acao.OtherTyping = FalseDim comandos() As StringDim receiveddata As Stringws.GetData receiveddata If InStr(1, receiveddata, "%%%%") > 0 Then comandos = Split(receiveddata, "%%%%") For i = 1 To UBound(comandos) If comandos(i) = "REQ&&" Then 'requer apelido ws.SendData "%%%%COM&& " & tApelido.Text If OtherApelido = "" Then ws.SendData "%%%%REQ&&" End If ElseIf InStr(1, comandos(i), "COM&&") > 0 Then 'enviou um apelido OtherApelido = Split(comandos(i), " ")(1) ElseIf comandos(i) = "TYP&&" Then 'DIGITANDO OtherTyping = True Else chathistory.Text = chathistory.Text & OtherApelido & " (" & CStr(Time) & "): " & comandos(i) & vbCrLf chathistory.SelStart = Len(chathistory.Text) chathistory.SelLength = 0 End If Next i Else chathistory.Text = chathistory.Text & OtherApelido & " (" & CStr(Time) & "): " & receiveddata & vbCrLf chathistory.SelStart = Len(chathistory.Text) chathistory.SelLength = 0 End IfEnd SubPara executar o processo sera necessario compila-lo e roda-lo em duas instancias. Entretanto, se tiver dois ou mais computadores, rode o mesmo projeto nos dois computadores. No campo de Host, caso o servidor esteja em outra instancia em seu computador, digite 127.0.0.1 (endereco de ip local). Caso o servidor esteja em outro computador de rede local, digite o ip do mesmo (voce encontra na lista de DHCP do roteador).E isso, pessoal. Duvidas, sugestoes de artigos, so enviar por email (twitter_diegorw@hotmail.com), twitter (@diegojsRW) ou pelos comentarios daqui do blog.Ate o proximo artigo.
o usuario move o mouse dentro do formulario.WM_NCPAINT (&H85): mensagem executada quando o sistema desenha a titlebar e os botoes da janela em questao. Interceptar essa mensagem permite ao programador criar seu proprio titlebar.WM_NCHITTEST (&H84): mensagem executada para determinar se o mouse esta em um determinado ponto da janela (digo, das bordas e do titulo). O CallWindowProc retorna uma das constantes precedidas por "HT" (HTCaption=titulo da janela)WM_CAPTURECHANGED (&h215): mensagem executada quando o formulario perde a captura do mouse (relacionado com SetCapture, ReleaseCapture e GetCapture)Mais constantes de wMsg voce encontra detalhado no site da Microsoft, aqui (em ingles).No proximo artigo veremos um exemplo pronto de subclassing.Ate o proximo artigo.
LenB(SysTimeInfo), 0&) If Ret <> NO_ERROR Then Debug.Print "Error while initializing the system's time!", vbCritical Exit Sub End If Ret = NtQuerySystemInformation(SYSTEM_PERFORMANCEINFORMATION, VarPtr(SysPerfInfo), LenB(SysPerfInfo), ByVal 0&) If Ret <> NO_ERROR Then Debug.Print "Error while initializing the CPU's idle time!", vbCritical Exit Sub End If liOldIdleTime = SysPerfInfo.liIdleTime liOldSystemTime = SysTimeInfo.liKeSystemTimeEnd SubPublic Function Query() As Long Dim SysBaseInfo As SYSTEM_BASIC_INFORMATION Dim SysPerfInfo As SYSTEM_PERFORMANCE_INFORMATION Dim SysTimeInfo As SYSTEM_TIME_INFORMATION Dim dbIdleTime As Currency Dim dbSystemTime As Currency Dim Ret As Long Query = -1 Ret = NtQuerySystemInformation(SYSTEM_BASICINFORMATION, VarPtr(SysBaseInfo), LenB(SysBaseInfo), 0&) If Ret <> NO_ERROR Then Debug.Print "Error while retrieving the number of processors!", vbCritical Exit Function End If Ret = NtQuerySystemInformation(SYSTEM_TIMEINFORMATION, VarPtr(SysTimeInfo), LenB(SysTimeInfo), 0&) If Ret <> NO_ERROR Then Debug.Print "Error while retrieving the system's time!", vbCritical Exit Function End If Ret = NtQuerySystemInformation(SYSTEM_PERFORMANCEINFORMATION, VarPtr(SysPerfInfo), LenB(SysPerfInfo), ByVal 0&) If Ret <> NO_ERROR Then Debug.Print "Error while retrieving the CPU's idle time!", vbCritical Exit Function End If dbIdleTime = LI2Currency(SysPerfInfo.liIdleTime) - LI2Currency(liOldIdleTime) dbSystemTime = LI2Currency(SysTimeInfo.liKeSystemTime) - LI2Currency(liOldSystemTime) If dbSystemTime <> 0 Then dbIdleTime = dbIdleTime / dbSystemTime dbIdleTime = 100 - dbIdleTime * 100 / SysBaseInfo.bKeNumberProcessors + 0.5 Query = Int(dbIdleTime) liOldIdleTime = SysPerfInfo.liIdleTime liOldSystemTime = SysTimeInfo.liKeSystemTimeEnd FunctionPrivate Function LI2Currency(liInput As LARGE_INTEGER) As Currency CopyMemory LI2Currency, liInput, LenB(liInput)End FunctionPublic Sub Terminate()'Nada a fazer.End SubSim, o codigo e realmente extenso. Portanto, explicarei somente o necessario. No modulo que criamos, insira, abaixo da declaracao "GlobalMemoryStatus", o seguinte codigo: Dim cpusage as cCpuSub InitCPU()Set cpusage = new cCpu 'Cria uma nova instancia de cCpuEnd SubSub EndCPU()Set cpusage = Nothing ' Remove a instancia de cCpu da memoriaEnd SubFunction GetCPU() As String GetCPU = CStr(Abs(cpusage.Query)) 'retorna o valor de uso da cpuEnd Function A funcao Query retorna o valor de uso da cpu atraves da classe e de suas APIs internas. Se quiser, pode baixar o exemplo pronto atraves do link https://skydrive.live.com/?cid=B278D5E7A71B5DCA&sc=documents#!/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA!152!cid=B278D5E7A71B5DCA&id=B278D5E7A71B5DCA!152 (pasta do SkyDrive).E isso pessoal.Ate o proximo artigo!
Long)On Error Resume NextDestroyMenu menuHandleEnd SubA classe acima eu irei explicar no proximo artigo, ainda hoje, mas a funcao dele e criar menus e manipula-los.6o: Volte ao form1 criado por padrao pelo VB, e adicione o seguinte codigo no load do form:Private Sub Form_Load()oldproc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WProc)End Sub7o: Execute o programa. Ao clicar com o botao direito do mouse no titulo da janela voce vera que o mesmo ira exibir o nosso menu customizado e nao mais o menu padrao da janela. Isso e util para janelas com BorderStyle 0 (borderless form).Consideracoes finaisO Subclassing tem ilimitadas funcionalidades, seja para criar um titulo customizado sem usar picturebox, seja para, como vimos acima, criar um menu proprio de janela, ou tambem para obter quando o formulario foi abandonado ou foi focalizado pelo usuario (pois o lostfocus e gotfocus nativos dos formularios do VB nao funcionam..).E isso ai, pessoal. No proximo artigo, irei explicar a classe acima, de menus, e disponibiliza-la, seja em cls ou em dll.Ate o proximo artigo.
Ola. Neste artigo irei disponibilizar uma nova classe/livraria que criei, chamada MenuCreator, cuja classe chama-se cMenu. O objetivo principal dele e criar e manipular menus de modo bem simples. O link dele e https://skydrive.live.com/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA%21146# (pasta do SkyDrive). Nele ha cinco metodos, entre eles: Add (menuh as Long, Pos as Long, Text as String, [Flags as long, lpimage as stdpicture]): Adiciona um item a um menu existente. Menuh recebe o endereco handle do menu.Pos recebe um numero que posteriormente sera identificado por sua funcao, numero este maior que 0. Text recebe o texto do item.Flags (opcional) recebe as opcoes do item, listadas abaixo (que podem ser combinadas com o operador binario OR):* MF_DISABLED = &H2& - Desabilita o item (mas nao o torna cinza, veremos isso depois);* MF_GRAYED = &H1& - Torna o item cinza (mas nao o torna desabilitado; para desabilita-lo e torna-lo cinza, use (MF_DISABLED OR MF_GRAYED).);* MF_SEPARATOR = &H800& (NAO COMBINAVEL!) - Torna o item em uma barra horizontal de separacao de itens.* MF_POPUP = &H10& - Inicia um novo menu ao lado.Count (menuh as Long) as Long: Retorna a quantidade de itens em um determinado menu. Menuh recebe o endereco handle do menu.Create () As Long: Cria um novo menu, e retorna seu handle para ser manipulado pelas outras quatro funcoes.Destroy (menuHandle as Long): remove um menu da memoria, menu este determinado pelo endereco handle em menuHandle. Show (menuh as Long, owner as Long, x as Double, y as Double) as Long: Exibe um menu. Menuh recebe o endereco handle do menu, owner recebe o endereco handle do formulario pai (Me.hWnd), x e y recebem a posicao absoluta (em pixels) do menu, na tela.Para o valor de x e y no metodo show, usamos uma das duas APIs seguintes:* ClientToScreen - Transforma uma coordenada local do formulario em uma coordenada absoluta da tela.* GetCursorPos - Obtem a posicao atual do cursor do mouse.Ambos usam a estrutura POINTAPI, cujos elementos sao X, como LONG, e Y, tambem LONG.Abaixo vai um exemplo. Crie um form em um projeto do tipo Standard Exe, adicione um botao no topo esquerdo do form e adicione o seguinte codigo no formulario:Private Type POINTAPI x As Long y As LongEnd TypePrivate Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As LongPrivate Sub Command1_Click()Me.ScaleMode = vbPixelsDim pt As POINTAPIDim r As LongDim h As LongDim m As New cMenuh = m.Create For i = 1 To 20 m.Add h, i, "Meu item " & CStr(i) Next ipt.x = Command1.Leftpt.y = Command1.TopClientToScreen Me.hwnd, ptr = m.Show(h, Me.hwnd, pt.x, pt.y)m.Destroy hSet m = Nothing Select Case r Case 1 To 20 MsgBox "Voce selecionou o item " & CStr(r) Case Else MsgBox "Voce nao selecionou nenhum item" End SelectEnd Sub"h=m.create" cria um novo menu e atribui o endereco do novo menu ao h. m.add adiciona os itens de 1 a 20 no menu criado. pt.x, pt.y, e clienttoscreen transformam a posicao do botao em coordenadas absolutas da tela. "r=m.show" exibe o menu na tela e
retorna o item selecionado, e, caso nenhum item for selecionado, retorna zero. Dai a necessidade dos itens adicionados terem identificacao (Pos as long) maior que 0."m.destroy" e "set m=nothing" sao necessarios para liberar memoria, tanto do menu (destroy h) quanto da classe cMenu (set m=nothing).Para manipulacoes mais complexas como por exemplo, adicao de linhas verticais no menu para dispo-los em colunas, deve-se usar APIs externas a classe, como SetMenuItemInfo e similares. Com essa classe, voce pode criar um menu customizado para um formulario borderless (BorderStyle=0), abaixo do que seria o titulo.Enfim, voce podera usar essa classe para facilitar a programacao com menus. Em breve, nova versao do Multisystem com formularios renovados e com menus, com auxilio dessa nova classe por mim criada.E isso, pessoal.Ate o proximo artigo!
de ser da sua vida e voce mesmo. A sua paz interior deve ser a sua meta de vida; quando sentir um vazio na alma, quando acreditar que ainda falta algo, mesmo tendo tudo, remeta o seu pensamento para os seus desejos mais intimos e busque a divindade que existe dentro de si. Pare de procurar a sua felicidade cada dia mais longe. Nao tenha objetivos longe demais das suas maos, abrace aqueles que estao ao seu alcance hoje. Se esta desesperado devido a problemas financeiros, amorosos ou de relacionamentos familiares, busque no seu interior a resposta para se acalmar, voce e reflexo do que pensa diariamente. Pare de pensar mal de si mesmo, e seja o seu proprio melhor amigo, sempre. Sorrir significa aprovar, aceitar, felicitar. Entao abra um sorriso de aprovacao para o mundo, que tem o melhor para lhe oferecer. Com um sorriso, as pessoas terao melhor impressao sua, e voce estara afirmando para si mesmo, que esta "pronto"para ser feliz. Trabalhe, trabalhe muito a seu favor. Pare de esperar que a felicidade chegue sem trabalho. Pare de exigir das pessoas aquilo que nem voce conquistou ainda. Agradeca tudo aquilo que esta na sua vida, neste momento, incluindo nessa gratidao, a dor. A nossa compreensao do universo ainda e muito pequena, para julgarmos o que quer que seja na nossa vida.
Todos sabem quem se mandou nao o desfez, o queesteve em suas maos e explodiu na cidade. Algo que nao se desmancha com o seusabio piscar de olhos e o que escolheu para transformar virou no terror queinvadiu o teu ser...Entre todos nao posso saber o modo nem me arriscarpara voltar ao que era, mas nao consigo me sentir se eu nao descobrir o oleodos seus olhos... Nao iras sumir na fumaca das queimadas da terra,pois em mim isso e mais forte ainda e nao me deixa que voce escape, o ventoforte que sopra no oxigenio do meu cerebro me transportar para as vias, e umadelas e a sua...O seu agir no fogo dosol vira fumaca, eu voo mais alto, nao se condene, eu volto como comecei e queme fez trazer tudo que tirastes do mundo... Nessa letra fala o eu lirico e oacontecimento ocorrido, se posicionando no lugar de alguem que presenciou abomba atomica de Hiroshima. Deus nao tem defeitos e nao criou o ser humano com defeitos ele e que cria por si,ele criou a lei que rege a vida,o karma,a lei do retorno,entao o ser humano e que tem sempre que procurar melhorar para atingir o gral suficiente da Terra para subir para outros graus e aprender ainda mais,existem muitos livros que provam cientificamente,quimicamente como ocorre cada processo,mais o ser humano tem a capacidade natural de fazer viagem astral vai depender dele resgatar essa capacidade,e diferente um individuo ser consciente e sensitivo, consciencia vem de carater de aprender e usar as virtudes e ser apenas sensitivo pode nao ser usado para o bem ,pois muitos o sao e nao usam,sao verdadeiros obsessores vivos,assim como tem os que ha possuem e sao conscientes,se formos o amor,amor seremos!Nao adianta julgar o proximo,ou critica-lo isso nao vai fazer voce ser melhor que ele,mas devemos amar,um grande exemplo de amor foi Chico Xavier e alguem em que me inspiro,o amor esta livre de preconceitos,preconceitos tem haver com ego e desamor e nao o contrario,devemos amar nossos irmao seja qual for sua circunstancia e nao devemos cobrar que todos tenham o mesmo entendimento consciencial,pois cada um esta no seu nivel de evolucao ,devemos sempre ser humildes e sempre procurar superar e vencer nossos defeitos para que seja proveitosa a nossa breve passagem pela Terra,evolucao tambem nao tem haver com fatores fisicos,jesus era pobre e no entanto pertence ao mais alto grau de aperfeicoamento moral possivel e de dinheiro nao tinha nada!Entao e isso meus irmaos sejamos como a luz que clareia a escuridao com seu imenso amor!Bjus de luz! Eu estava passeando pelo tunel do tempo, daimaginacao de todos os ventos e encontrei no meio do caminho uma onda magneticae dentro dela seus olhos de cristal, seu sorriso distante nessa onda deexplosao nao teve mais jeito... No tunel tive que voltar... Nao esqueci os seusolhos de cristal, presos numa onda de nucleo e ferro... Quero voltar mais umavez nesse tunel de emocoes! Quero te libertar, nao quero te ver mais taodistante... Eu corro e nao consigo te alcancar... Eu quero que voce saia dessetunel