Teve uma outra situação parecida, mas aí a solução foi bem menos elaborada, pq era uma empresa pequena, daquelas que o dono acha que é familiar, mas na verdade é "caseira". Nessa foi só um script pra eliminar senhas. Quem fazia login no servidor era um pequeno executável. O usuário não tinha senha da rede. Ele usava a credencial local do win, mas não tinha a senha do servidor.
@Bacco Muito estranha essa "chateação "- se o AD foi substituído por algo mais simples... Aqui nós usamos o AD só para controle de usuário e nunca deu problema.
@Bacco Se precisamos de compartilhamento de pasta, funciona também sem incomodação. Acesso via terminal de tudo que é computador também rola sempre.
@DanielGomes sem acesso às senhas. Ele logava local, com o usuário dele, e o executavel logava remoto. Ele nao poderia usar a senha dele pra logar direto no servidor, por exemplo, e nem acessar o servidor do PC errado.
@Bacco Deixa eu te contar da minha outra idéia - não vale acabar com os meus sonhos/delírios, plz.
@Bacco Um programa que fica de olho em tudo quanto é pasta na rede. Quando alguém cria um .txt com "backup" escrito dentro dele, esse programa faz backup do que tem na pasta.
eu acho problematico o programa ficar no servidor acessando um monte de pasta compartilhada. Ou as pessoas fariam isso na pasta do servidor remotamente?
@Bacco Todos os dias os editores importam gigas e gigas de material. Eu pediria que cada editor criasse um .txt escrito backup dentro dele quando terminassem de importar a mídia. Assim a máquina de backup já retira aquele material e libera o espaço...
@Bacco Eu queria um .txt pq. a idéia era um pouco mais complexa... Era o cara escrever "backup usuario:daniel senha:minhasupersenha" - para impedir quem não pode fazer backup de fazer backup... xD
@Bacco Eu pensei nisso - é uma... vulnerabilidade... Pensei em fazer o programa apagar assim que ele visse, mas acho que sempre dá para outra pessoa ver no meio do caminho... xD
@Bacco Tendi - Não é tão terrível... Deixar um atalho pra ele no quick launch - pedir para arrastar a pasta pra cima dele - ele pede usuário e senha e começa seus trabalhos...
Na verdade tudo que depende de "rede dos outros" tem uma tendência a ser chato.
@DanielGomes se vc tiver o acesso às máquinas, ou algum parça do laboratório (suponho que seja um lab) pra repor nas maquinas quando formatar, é uma boa. O programa não precisa ser complexo, é só pra autenticar o .txt e/ou fazer algum procedimento básico.
@DanielGomes a unica coisa que me faz sentir falta de um Mac em rarissimas ocasiões na vida é a curiosidade de testar minhas aplicações, se um dia precisar liberar uma versão pra Mac. O que eu duvido um pouco.
Em teoria as coisas que eu uso funcionam nos OSes principais, mas não testei em Mac.
@DanielGomes instalei pra ver a cara dele, brinquei um pouco e tou pra desinstalar e reinstalar numa VM, que é o que eu devia ter feito desde o principio. Como está longe de ser algo que eu pretenda usar intensivamente, a VM é o melhor lugar.
@Bacco Quando eu coloquei um for ( ; ; ) { } com um break lá dentro, ele atualizava a porcentagem - trocando por aquele while ele fica quietinho até chegar no 100%.
@DanielGomes suponho que vc esteja sufocando a thread responsavel pelo redesenho de tela.
Bota um sleep dentro, senao inclusive eu acho que vc vai ficar com um core da CPU colado no 100% se largar como está. O sleep provavelmente vai liberar a thread pra fazer outras tarefas.
@DanielGomes bom, nem sei se deveria ter alguma, como eu disse, só vendo o código pra ver. Pode ser alguma bobeira qq. Independente disso, o que eu falei de sleep vale, normalmente nunca se larga loop infinito sem algum tipo de respiro no meio (a nao ser que vc esteja de fato processando algo no loop).
@Bacco Ah sim - entendi. Bom, não era essa a intenção - esse é meu rascunho de programa - inclusive eu pretendia colocar uma maneira de interromper o processo, já que as vezes o usuário pode mandar ler o HD errado...
@DanielGomes eu nao sei dizer detalhes do C#, mas em vários sistemas de GUI vc tem função pra intercalar no loop e manter a GUI funcionando em paralelo. Nao que vc nao possa usar a thread, claro. De qq forma precisa ver como sincronizar a variável da thread com o loop principal.
como eu disse, nao tenho experiencia com C# pra isso.
@DanielGomes eu nao sei como funciona o lock de variável entre threads no C#, pra vc poder usar a mesma nas 2. Em principio não deve precisar de nada, só atualizar de um lado e consultar do outro. Mas eu poria o sleep no loop de qq forma. nem que fosse de uns 30 microsegundos
@DanielGomes não faço idéia, só dei uma pesquisada rápida, baixei, "folheei" por cima e me pareceu ter os conceitos fundamentais, ai te repassei, sem análise mais profunda.
@Bacco Ele foi atualizado sim - o nome do livro é C# 4.0 in a Nutshell - essa é só a parte de threading que o autor deve disponibilizar de graça. O último é o C# 6.0 in a Nutshell...
@diegofm Eu sei man, tudo bem... Se na sua opinião não há necessidade de aprovar a boa ação do usuário em querer melhorar pequenos detalhes, por mim tudo bem... Eu continuo o respeitando... Eu gosto desses detalhes melhorados...
@diegofm Por que eu não acho que seu argumento, torna dispensável pequenas melhorias mesmo em perguntas antigas, mas o fato não são as questões antigas para mim, mas a boa vontade do usuário, mesmo que seja pra ganhar 2 conto...
@diegofm mas eu me pergunto, por que rejeitar, pequenas melhorias ?
Posso dar votos em série em repostas ou perguntas de um mesmo usuário ?
Existe algum limite para votos ? Por exemplo vez ou outra eu entro no perfil de algum usuário, por acreditar que as perguntas e respostas são boas, e as que gosto voto positivo, existe algum limite ?
@MagicHat me desculpe se pareci rude, realmente não precisava te responder como respondi, é o stress do convívio social, a gente acaba refletindo até na internet. :/
@diegofm relaxa man... sei que vc faz bastante por aqui... e só quer o melhor... Fica tranquilex que não existe 1 pessoa que as vezes num solta um farpa...
@diegofm mas sempre que quiser trocar umas ideias off-topic, para esvaziar o "cache", tamo ai...(sei que não é o lugar ideal), mas agente faz umas analogias com nosso mundo da programação..; já dá pra dar uma aliviada... as vezes é bom agente por pra fora de uma forma ou de outra... Se não fizer se vai acumular e por bem ou por mau vai sair...
@bigown me tira uma dúvida(caso saiba). Quando passo um ArrayList como parâmetro, está sendo passada sua referência de mémoria ao inves de ser feita uma nova cópia?
@bigown é porque vi num site que em java toda passagem é por valor, fiquei meio confuso já que o arraylist passado é alterado também. Então na verdade a "passagem por valor" é o endereço de memória e não um clone do objeto ne
@Bacco pior que já fiz um teste, respondi uma pergunta recente aqui no site e notei o comportamento, até citei na pergunta algo sobre "passagem por referencia" mas estou em duvida se a informação não está errada
@diegofm e está correto, ele passou por valor. Qual é o valor de um ArrayList? É a sua referência, então é isso que é passado. Não é o objeto que é referenciado. Java não possui passagem por referência, mas possui valores que sejam referências.
se for cópia rasa mesmo, a alteração afeta fora (pq mexeu no item que ta nas 2 listas) mas a remoção nao (pq mexeu na nova lista e nao no item, nem na lista original)
Da forma como o código estava, seria complicado qualquer adaptação. Separei os paineis em classes diferentes e para resolver o problema do combo sem alterar a estrutura do seu código, implementei um listener no Painel onde o combo se encontrava, de forma que ele vai ser invocado sempre que o pain...
@Bacco olha o gif da resposta, são 3 telas diferentes e eu só passava o arraylist como parametro, mas ao adicionar um item fora da classe onde ele se originou, a lista era alterada em todas as telas com o item adicionado
@Bacco o @bigown confirmou ali em cima isso mesmo, a passagem é por valor, mas um arraylist não tem uma definicao certa, dai o valor passado é seu endereço de memoria, por isso altera em todas as telas
@Bacco como eram 3 classes diferentes, eu adicionei breakpoints nas 3 em linhas estrategicas, de forma que eu poderia ver o tamanho do arraylist antes e depois de adicionar um item. De fato, o tamanho e o objeto adicionado era refletido nas 3 classes
Lembro de ter lido numa resposta aqui que para evitar isso teria que clonar o objeto, só não achei a resposta para usar de referencia na resposta(caso o OP quisesse mais detalhes)
Na programação em C++ para copiar uma classe, para outra, basta fazer o seguinte:
minhaClasse* class_1 = new minhaClasse();
minhaClasse* class_2 = new minhaClasse();
*class_2 = *class_1; // Faz a atribução membro-a-membro da classe
ou ainda
minhaClasse class_1; // declara a classe diretamente...
No PHP temos o método mágico __clone. Ele serve para definir um comportamento quando você clona um objeto, através da palavra chave clone.
Até aí tudo bem. Porém não entendi muito bem por que ter esse método mágico, já que a palavra clone por se só já clona um objeto.
Exemplo 1:
$a = new Arra...
Em C# há uma diferença entre a forma que a memória é alocada pelo CLR para tipos referência (classes) e tipos valor (estruturas). A diferença, pelo que sempre ouvi falar, seria o fato de tipos valor serem armazenados na pilha e tipos referência no heap. Ocorre, porém, que tipos valor também podem...
@Bacco de tipo valor, sim. Se for tipo referência, nem isso é feito, o que é copiado é a referência apenas
o método clone() é usado para clonar objetos, se vai ser raso ou profundo é decisão da classe implementar
Se precisa clonar precisa implementar a IClonable e fazer o que quiser ali. O Object possui um método utilitário que faz a rasa, mas ele foi feito p/ a sua classe usar, ñ p/ uso externo: msdn.microsoft.com/en-us/library/… Se quiser fazer a profunda, o problema é seu se virar. Ele provavelmente será chamado dentro do Clone() da sua classe.
Em C# existe passagem por referência e será ampliado no C# 7
Take a look at the following program:
class Test
{
List<int> myList = new List<int>();
public void TestMethod()
{
myList.Add(100);
myList.Add(50);
myList.Add(10);
ChangeList(myList);
foreach (int i in myList)
{
Console.W...