:set bomb
:set fileencoding=utf-8
21/3/16
Estructura de directorios en proyecto Meteor.
client ← Solo Clientlib ← colecciones. como shared lo ven los dos. Se ejecuta el código al arrancar el proyecto.server ← Solo servershared ← Metodos19/3/16
Vim. Fijar los espacios de un tab. 8 es mucho.
Hay que poner las dos variables.
:set ts=4
:set sw=4
Siempre el mismo número. Es para el tab y el >>. que por lo visto, no son lo mismo.
:set ts=4
:set sw=4
Siempre el mismo número. Es para el tab y el >>. que por lo visto, no son lo mismo.
Estructura base html a 19/03/2016
- Bajar jQuery 4 ficheros: Los "min" para producción (con el javascript comprimido) y los normales para depuración Para cada uno habría que considerar las versiones 1.X compatibles con Explorers 6,7 y 8 y los de la 2.X que no soportan esos navegadores Download jQuery
- Bajar bootstrap Baja todas las versiones (min y normal) Download Bootstrap
- Página vacía Copiado de: https://openwebinars.net/tutorial-bootstrap-3-introduccion-e-instalacion/
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <!--Con esto garantizamos que se vea bien en dispositivos móviles-->
<title>Pon un título</title>
<link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> <!--Llamamos al archivo CSS --> </head>
<body>
<script src="js/jquery.min.js"></script> <!-- Importante llamar antes a jQuery para que funcione bootstrap.min.js -->
<script src="js/bootstrap.min.js"></script> <!-- Llamamos al JavaScript de Bootstrap -->
</body>
</html>
29/7/14
PsExec de PsTools
Psexec
PsExec.exe \\nombreEquipo -i -d -s "c:\windows\notepad.
exe"
-i para que salga en la pantalla (en alguna prueba con
el notepad salio todo la ventana negra, problemas de repintado)
-d para que no se quede la línea de comandos pillada hasta que se
acabe el proceso. Lo lanza, devuelve el promp y un número de
proceso que usamos para matarlo luego.
-s Usa la cuenta del sistema para lanzar la aplicación. Soluciona
el problema de que no se vea la ventana
La aplicación saca algo como esto
c:\windows\notepad.exe started on nombreEquipo with process ID 7452.
Y lo matamos remotamente (el usuario podría cerrarlo) con:
C:\Users\icrufra\Desktop\PSTools>pskill.exe \\nombreEquipo 7452
Si se quiere entrar en la máquina remota con otro usuario se pondría –u (usuario@dominio) y el programa pide la clave.
15/7/14
Crear un acceso directo (Link) desde C#
(Con .net 4)
Basado en:
http://www.codeproject.com/Articles/3905/Creating-Shell-Links-Shortcuts-in-NET-Programs-Usi
Por debajo usa Windows Scripting Host con lo que hay que importar un com (ocx) para que funcione. Es un poco chapuza pero es lo que hay.
En el proyecto se añade la referencia a ese com:
El código que crea un link al notepad en el escritorio sería:
Type ShellType = Type.GetTypeFromProgID("WScript.Shell");
dynamic Shell = Activator.CreateInstance(ShellType);
dynamic shortcut = Shell.CreateShortcut(@"c:\borrame.lnk");
shortcut.TargetPath = @"c:\Windows\Notepad.exe";
shortcut.WorkingDirectory = @"c:\Windows";
shortcut.Save();
(Esto es antiguo con .net 4 usar el anterior) Basado en:
http://www.codeproject.com/Articles/3905/Creating-Shell-Links-Shortcuts-in-NET-Programs-Usi
Por debajo usa Windows Scripting Host con lo que hay que importar un com (ocx) para que funcione. Es un poco chapuza pero es lo que hay.
En el proyecto se añade la referencia a ese com:
- En el proyecto,
- añadir referencia,
- de tipo com,
- el nombre es: “Windows Script Host Object Model”
using IWshRuntimeLibrary; El código que crea un link al notepad en el escritorio sería:
var shell = new WshShell();
IWshShortcut link = (IWshShortcut)shell.CreateShortcut((Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"borrame.lnk")));
link.TargetPath = @"c:\windows\notepad.exe";
link.Save();
6/3/14
Obtener información de catálogo de Base de datos Access
DataTable t = Ctx.con.GetSchema(OleDbMetaDataCollectionNames.Columns);
StringBuilder sb = new StringBuilder();
foreach(DataRow r in t.Rows){
foreach(DataColumn c in t.Columns){
sb.Append(String.Format("{0}: {1}||",c.ColumnName,r[c.ColumnName]));
}
sb.AppendLine();
}
Clipboard.SetText(sb.ToString());
MessageBox.Show(sb.ToString());
DataRow []dr = t.Select("TABLE_NAME = 'AnoActual' and COLUMN_NAME = 'Ano'");
MessageBox.Show(dr[0]["TABLE_NAME"].ToString() + dr[0]["COLUMN_NAME"].ToString());
29/1/14
Salto de página en html
@media all {
div.saltopagina{
display: none;
}
}
@media print{
div.saltopagina{
display:block;
page-break-before:always;
}
}
<div class="saltopagina"><div>
17/1/14
Compilar proyecto desde línea de comandos
msbuild UILog1.csproj /p:Configuration=Release /t:CleanEl msbuild está en:
C:\Windows\Microsoft.NET\Framework\v4.0.30319Este ejemplo borraría la versión release. Sin el /t:Clean la crearía. También funciona con soluciones. Y es compatible con SharpDevelop.
14/1/14
Nlog a fichero por mes
Crearía un log a un fichero. Cada mes crea un fichero nuevo.
El fichero está, en principio, en la misma carpeta que el ejecutable.
NLog.Targets.FileTarget ft = new NLog.Targets.FileTarget();
ft.FileName ="FicheroDeLog.txt";
ft.ArchiveEvery = FileArchivePeriod.Month;
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(ft, LogLevel.Trace);
LogManager.Configuration.AddTarget("File",ft);
Logger logger = LogManager.GetCurrentClassLogger();
9/7/13
Recabar información del equipo en windows
WMI: Windows Management Instrumentation
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394586(v=vs.85).aspx
static void MostrarTodo(StringBuilder sb, string cad){
ObjectQuery query = new ObjectQuery("Select * from " + cad);
XmlOpen(sb,1,cad);
ManagementObjectSearcher mos = new ManagementObjectSearcher(query);
if(mos!=null){
ManagementObjectCollection moc = mos.Get();
if(moc != null){
foreach (ManagementObject mo in moc) {
PropertyDataCollection pdc = mo.Properties;
if(pdc != null){
foreach (PropertyData pd in pdc) {
AppendProperty(sb, pd);
}
}else{
sb.AppendLine(" ");
}
}
}else{
sb.AppendLine(" ");
}
}else{
sb.AppendLine(" ");
}
XmlClose(sb,1,cad);
}
Se le llamaría con:
MostrarTodo(sb, "Win32_Desktop"); MostrarTodo(sb, "Win32_DesktopMonitor"); MostrarTodo(sb, "Win32_OperatingSystem"); MostrarTodo(sb, "Win32_StartupCommand"); MostrarTodo(sb, "Win32_LogicalDisk"); MostrarTodo(sb, "Win32_MappedLogicalDisk"); MostrarTodo(sb, "Win32_DiskDrive"); MostrarTodo(sb, "Win32_NetworkAdapter"); MostrarTodo(sb, "Win32_NetworkAdapterConfiguration");
12/6/12
Generación de Codigo en C#
Nota: Está el código en hithub https://github.com/IvanCruzFraguela/EjemploGeneracionCodigo
usings necesarios:
using System.CodeDom; using System.CodeDom.Compiler;Suponemos que hay 2 controles de Tipo TextBox llamados:
tbFuenteGenerado tbErroresla función que genera los objectos necesarios para definir el código a generar como ejemplo es:
private CodeCompileUnit GeneraCodigo(){
//Unidad de Compilación (ensamblado)
var cu = new CodeCompileUnit();
cu.ReferencedAssemblies.Add("System.dll");//Ensamblados que enlaza (aunque este debería estar por defecto)
//Espacio de nombres
var n = new CodeNamespace("EjemploGeneracionCodigo1");
cu.Namespaces.Add(n);
n.Imports.Add(new CodeNamespaceImport("System"));//Espacios de nombres que utiliza este namespace para compilar
//Clase
var c = new CodeTypeDeclaration("ClaseGenerada");
n.Types.Add(c);
c.BaseTypes.Add(new CodeTypeReference(typeof(System.Timers.Timer)));//Su clase padre
c.IsPartial = true;
//Atributo de la clase
CodeMemberField mf = new CodeMemberField(typeof(string),"_atributo");
c.Members.Add(mf);
//Propiedad de la clase
CodeMemberProperty cp = new CodeMemberProperty();
c.Members.Add(cp);
cp.Attributes = MemberAttributes.Public | MemberAttributes.Final;//lo de Final para que no sea virtual (por defecto si es público es virtual)
cp.Type = new CodeTypeReference(typeof(string));
cp.Name = "atributo";
CodeFieldReferenceExpression cfre = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_atributo");
CodeMethodReturnStatement mrs = new CodeMethodReturnStatement(cfre);
cp.GetStatements.Add(mrs);
//Metodo de la clase
CodeMemberMethod cmm = new CodeMemberMethod();
c.Members.Add(cmm);
cmm.Attributes = MemberAttributes.Public | MemberAttributes.Final;
cmm.Name = "Metodo1";
cmm.ReturnType = new CodeTypeReference(typeof(int));
CodeParameterDeclarationExpression pde = new CodeParameterDeclarationExpression(typeof(int),"enteroDeEntrada");
cmm.Parameters.Add(pde);
pde = new CodeParameterDeclarationExpression(typeof(string),"cadenaDeEntrada");
cmm.Parameters.Add(pde);
//Declaración de variable
CodeVariableDeclarationStatement vds = new CodeVariableDeclarationStatement(typeof(string),"aux",new CodePrimitiveExpression("Prueba1") );
cmm.Statements.Add(vds);
//Llamar a método arbitrario
//variable a llamar y método
CodeMethodReferenceExpression ctr = new CodeMethodReferenceExpression(new CodeVariableReferenceExpression("Console"),"WriteLine");
//Llamada en sí con sus parámetros
CodeMethodInvokeExpression invoke1 = new CodeMethodInvokeExpression( ctr, new CodeExpression[] {new CodePrimitiveExpression("Hola mundo")} );
cmm.Statements.Add(invoke1);
//Código a pelo. Ojo no se puede generar, por ejemplo, un foreach.
cmm.Statements.Add(new CodeSnippetStatement("foreach(string s in cadenas){"));
cmm.Statements.Add(new CodeSnippetStatement("Console.WriteLine(s);"));
cmm.Statements.Add(new CodeSnippetStatement("}"));
mrs = new CodeMethodReturnStatement(new CodePrimitiveExpression(42));
cmm.Statements.Add(mrs);
return cu;
}
el código para generar el fuente e incluso compilarlo desde aquí es:
CodeCompileUnit cu = GeneraCodigo();
CodeDomProvider dp = CodeDomProvider.CreateProvider("CSharp");
//Imprimir el código
StringWriter sw = new StringWriter();
System.CodeDom.Compiler.IndentedTextWriter itw = new IndentedTextWriter(sw);
CodeGeneratorOptions go = new CodeGeneratorOptions();
go.BlankLinesBetweenMembers = false;
dp.GenerateCodeFromCompileUnit(cu,sw,go);
this.tbFuenteGenerado.Text = sw.ToString();
//Compilar desde dom
CompilerParameters cp = new CompilerParameters(new string[]{},"borrame.dll");
CompilerResults cr = dp.CompileAssemblyFromDom(cp,cu);
tbErrores.Text = "";
foreach(CompilerError ce in cr.Errors){
tbErrores.Text += String.Format("{0}){1} in {2} at line {3} column {4} isWarning{5}",ce.ErrorNumber,ce.ErrorText,ce.FileName,ce.Line,ce.Column,ce.IsWarning);
}
En teoría se podría generar tanto VB con C# pero supongo que con el uso se abusará de CodeSnippetStatement (“pon esto y no preguntes”) dado que hay construcciones importantes de C# (foreach, using) que no se pueden generar como tal con lo que solo se podrá generar C#.Referencias:
- http://msdn.microsoft.com/es-es/library/bb972255.aspx //Hace lo que pienso hacer de generar clases para manejar tablas (y sí, ya sé que esta hecho)
- http://msdn.microsoft.com/en-us/library/f1dfsbhc.aspx //Las clases necesarias para generar código ordenadas por funcionalidad
- http://msdn.microsoft.com/en-us/library/system.codedom.compiler.aspx //Namespace necesario para la generación y compilación de código.
25/4/12
Rebol: Grabar lista de objetos y recuperarla
REBOL[title: "Grabar y recuperar lista de objetos"]
obj1: make object![
id: 1
nomb: "Uno"
]
obj2: make object![
id: 2
nomb: "Dos"
]
lObj: copy []
append/only :lObj to-block obj1 ; only para que inserte como bloque y to-block para que haga un bloque del objeto.
; no mola nada esta forma de hacer las cosas
; ¿Qué diferencia hay entre un bloque y un objeto en realidad?
append/only :lObj to-block obj2
print mold lObj ; para ver lo que rebol grabaría
fich: %ListaObjectos.r
save :fich :lObj
listaRecuperada: load :fich
print :listaRecuperada/1 ; imprimir primer elemento
print :listaRecuperada/2
Mercurial
* hg init <--Para crear el repositorio. Se ejecuta en el directorio a controlar. * hg add <-- Para añadir la primera vez. * hg ci -u ivancruz <-- Para hacer un commit * hg log <-- Para ver las versiones * hg update<-- Para volver a una versión anterior
8/11/11
Test. Marcar clases como conjuntos de pruebas y métodos como métodos de prueba.
Para la clase: atributo de clase
Para cada método: que sea una prueba
[TestFixture]
Para cada método: que sea una prueba
[Test]
12/9/11
Compilando desde bajada de svn
svn co svn://desarrollo.dxx.xudicial.xunta.es/repositorio/csharp/InventarioDHCP_1.10 svn co svn://desarrollo.dxx.xudicial.xunta.es/repositorio/csharp/Util cd InventarioDHCP_1.10 c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild /p:Configuration=ReleaseBaja el código a donde se encuentre el fichero .bat y lo compila.
24/5/11
Envío de teclas a aplicaciones (para pruebas automáticas)
Uno de los problemas se produce cuando se muestra un MessageBox. No hay manera de cerrarlo así que: a enviar teclas.
// Código para enviar las pulsaciones de teclas
Microsoft.VisualBasic.Interaction.AppActivate(f.Text);//Activa la aplicación. f es el formulario creado anteriormente para pruebas
f.Focus();// Hace falta también esto por lo visto.
Util.EnviarTeclas(5000, "{TAB}");//Cuadro de diálogo. Pasar a "no"
Util.EnviarTeclas(6000, "{ENTER}");//Cuadro de diálogo. ENTER.
// Código en Utils
public static void EnviarTeclas(int TiempoEspera, string teclas) {
Thread t = new Thread(new ParameterizedThreadStart(AEjecutarPorEnvioTeclas));
EnvioTeclas et = new EnvioTeclas(TiempoEspera,teclas);
t.Start(et);
}
public static void AEjecutarPorEnvioTeclas(Object EnvTecl) {
EnvioTeclas aux = EnvTecl as EnvioTeclas;
Thread.Sleep(aux.espera);
SendKeys.SendWait(aux.teclas);
}
public class EnvioTeclas {
public int espera;
public string teclas;
public EnvioTeclas(int espera, string teclas) {
this.espera = espera;
this.teclas = teclas;
}
}
16/5/11
Crear filas de prueba
A destacar el tema de que hay que crear una tabla para incluir la fila en ella.
private static DS.AGPROVRow _ProvRow;
public static DS.AGPROVRow ProvRow {
get {
if (_ProvRow == null) {
DS.AGPROVDataTable aux = new DS.AGPROVDataTable();
_ProvRow = aux.NewAGPROVRow();
_ProvRow.ID = 99;
_ProvRow.NOMB = "Prueba Grabar 1";
}
return _ProvRow;
}
}
27/4/11
Comparar el contenido de dos filas
public static bool ContenidoRowsEsIgual<T>(T row1, T row2) where T : DataRow {
bool result = true;
if (!row1.GetType().Equals(row2.GetType())) {
throw new Exception("Las filas no son del mismo tipo");
}
DataRow r1 = row1 as DataRow;
DataRow r2 = row2 as DataRow;
for (int i = 0; i < r1.ItemArray.Length; i++) {
if (!r1[i].Equals(r2[i])) {
result = false;
}
}
return result;
}
24/11/10
Mostrar Fechas en Oracle
Mostrar fecha y hora
Para probarlo:
Más información en:
http://www.oradev.com/oracle_date_format.jsp
to_char(campo_fecha,'DD/MM/YYYY HH24:MI:SS')
Para probarlo:
select to_char(sysdate,'DD/MM/YYYY HH24:MI:SS') from dual;
Más información en:
http://www.oradev.com/oracle_date_format.jsp
Suscribirse a:
Entradas (Atom)