tag:blogger.com,1999:blog-78402919502422033022024-02-10T08:01:33.136+01:00Graphic DNAIñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.comBlogger304125tag:blogger.com,1999:blog-7840291950242203302.post-58556501255570870012019-10-07T20:18:00.004+01:002019-10-10T13:53:52.713+01:00Las probabilidades de la lotería<br />
<div class="MsoNormal">
De vez en cuando compro un boleto de lotería, lo reconozco. ¿Por qué? Pues no lo sé. Supongo que como todos, por aquello de... "y si toca"... Supongo que todos caemos en la
(falsa) idea de que a alguien le tiene que tocar. Y lo cierto, es que eso no es
cierto. <span style="font-family: "segoe ui emoji" , sans-serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-char-type: symbol-ext; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-symbol-font-family: "Segoe UI Emoji";">😊</span><o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Mucha gente nos hemos tomado la molestia de entender cómo
funciona la lotería. Vas a la web y lees los datos, las probabilidades, y
listo. En un juego como el de los Euromillones, por ejemplo, la probabilidad de
ganar un premio de primera categoría es de 1 entre 139,838,160 (<a href="https://www.euro-millions.com/prizes">más info aqui</a>)</div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
¿Pero, qué quiere decir eso exactamente? Si jugaras una apuesta en todos y cada uno de los sorteos de Euromillones, ¿cuánto tiempo crees que te costaría ganarlo? <a href="https://www.microsiervos.com/archivo/azar/probabilidades-euromillones.html">Hay quien dice que ni en un millon de años...</a></div>
<br />
<br />
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVlB-pNVZviBK5B8TA_wSsGW3QbNAy9JfIZpZ3S2eGNS4y78LVx2RSJlFh6mmAvUtdLZnj_n5xKckYuCyBKV5r4XQCJATlexMTen87EYMY3dYzS_1-FhK1HCwsX9e9-utreF5giFjO5OY/s1600/2019-10-07+20_52_55-Euromillones_+Ni+en+un+mill%25C3%25B3n+de+a%25C3%25B1os+_+Microsiervos+%2528Azar%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="354" data-original-width="741" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVlB-pNVZviBK5B8TA_wSsGW3QbNAy9JfIZpZ3S2eGNS4y78LVx2RSJlFh6mmAvUtdLZnj_n5xKckYuCyBKV5r4XQCJATlexMTen87EYMY3dYzS_1-FhK1HCwsX9e9-utreF5giFjO5OY/s320/2019-10-07+20_52_55-Euromillones_+Ni+en+un+mill%25C3%25B3n+de+a%25C3%25B1os+_+Microsiervos+%2528Azar%2529.png" width="320" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Qué exagerados, ¿no? ¿Cuánto tiempo dirías tu? Es evidente que no esperas ganar después de 1 año jugando, sería un chollo. Pero... ¿Y si estás 10 años jugando? ¿Y si son 50 años, toda una vida, jugando sin excepción dos veces todas las semanas? ¿Dirías que tienes una probabilidad aceptable de que te toque?</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Ni remotamente.</div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/mGR5oNYetSQ/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/mGR5oNYetSQ?feature=player_embedded" width="320"></iframe></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Los que entienden algo de mates, saben que no. Que puedes estar una vida, y dos, y tres, jugando, y que no te va a tocar. Pero yo quería verlo. Experimentarlo. Quería tener
una idea real de cómo de difícil es que te toque. Evidentemente, el azar es el azar y puedes
ganarlos en la primera apuesta, pero también no ganarlos nunca. </div>
<div class="MsoNormal">
<!--[if !supportLineBreakNewLine]--><br style="mso-special-character: line-break;" />
<!--[endif]--><o:p></o:p></div>
<div class="MsoNormal">
Decidí investigar, y encontré <a href="https://www.cuandomevaatocar.com/">simuladores</a> que permitían hacer eso: simular apuestas una y otra vez. Lamentablemente, en
cuanto empecé a probarlos me di cuenta de que eran demasiado lentos. La cosa iba para
largo, y su baja velocidad iba a hacer la prueba inviable. Así que hice lo único que
se hacer: programé un simulador de Euromillones más rápido que los que había
por ahí. <br />
<br />
Es una aplicación que simula el proceso de tener 50 bolas en un bombo, y sacar
5 al azar para los números normales. Luego repite el proceso después, sacando 2
de entre 12 bolas más (para las estrellas). Además, hace esto dos veces por sorteo, una para
sacar la combinación ganadora, y otra para sacar una apuesta distinta cada vez. Todo ello, 17.000 veces por segundo.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Programé la aplicación para simular <b>1 apuesta simple por sorteo, 2 veces por semana,</b> con el <b>bote máximo </b>(190 Millones de Euros de premio). Añadí
además una estimación de las cantidades que recibes en los premios (cuando
resulta que hay premio) para poder tener un balance del dinero que llevas
gastado y ganado. <o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
El resultado, como podéis ver en el vídeo de más arriba, es desalentador. </div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="text-align: center;">
<b><span style="font-size: large;">1.383.899 años jugando</span></b></div>
<div class="MsoNormal" style="text-align: center;">
<b><span style="font-size: large;">Más de 78 millones de euros perdidos</span></b></div>
<div class="MsoNormal" style="text-align: center;">
<br /></div>
<div class="MsoNormal" style="text-align: left;">
Y eso a pesar de haber ganado un bote de 190 millones de euros. Lo cierto es que en el vídeo se ve claramente que, <b>cuanto más juegas, más pierdes</b>.<br />
<br />
<b>¿Es más probable ganar con apuestas aleatorias, o siempre la misma?</b><br />
<b><br /></b>
La teoría nos dice que la probabilidad de ganar es la misma (si no fuera la misma, tened bien claro que su precio no sería el mismo tampoco), pero gracias a este simulador, podemos comprobarlo.<br />
<br />
He ejecutado la simulación desmarcando la opción de que regenera la apuesta cada vez, para que siempre sea la misma. ¿El resultado? Pues igual. En este caso en 1500 millones de años ni siquiera ha logrado ganar el primer premio. Cuando llevaba un número de años similar a la simulación anterior, los resultados eran muy muy parecidos:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-6LlKLpgdxFU/XZ8LskJZbtI/AAAAAAAAhBY/of20BcnrArkOkNww9VFSf3urqrEhr0zPACLcBGAsYHQ/s1600/misma.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="360" src="https://1.bp.blogspot.com/-6LlKLpgdxFU/XZ8LskJZbtI/AAAAAAAAhBY/of20BcnrArkOkNww9VFSf3urqrEhr0zPACLcBGAsYHQ/s640/misma.png" width="640" /></a></div>
<b><br /></b>
<br />
<br />
Dado que ha tardado más en ganar el primer premio, ¿quiere decir que una apuesta fija tiene una probabilidad más baja de ganar? No, tiene la misma. Dado que solo esperamos a que se gane el primer premio 1 vez (el número de muestras de ese evento es bajo), hay bastante variabilidad acerca del momento en el que se consigue. Sin embargo, si esperáramos a que la simulación gane el primer premio muchas veces, las cifras tenderían a igualarse.</div>
<div class="MsoNormal">
<br />
<b>¿Y qué sucede con las apuestas múltiples?</b><br />
<b><br /></b>
Las apuestas múltiples sí tienen más probabilidad, evidentemente. Por eso cuestan más, mucho más.<br />
<br />
El juego de los Euromillones, por ejemplo, permite hacer apuestas en las que no escoges 5 números y 2 estrellas, sino más. Hasta un máximo de 10 números y 5 estrellas. Evidentemente, la probabilidad de ganar con una apuesta así es mucho mayor, teóricamente equivalente a hacer <b>2520 apuestas </b>sencillas. Por eso, su precio es 2520 veces mayor, nada menos que <b>6300 € por apuesta múltiple.</b><br />
<br />
Ahora bien, ¿merece la pena? ¿cómo de probable es ganar con una apuesta así de fuerte (y de cara)? Veámoslo:<br />
<b><br /></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/SjIMDbeLPAU/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/SjIMDbeLPAU?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
Como podemos comprobar, el resultado es igual de desalentador. En los primeros 100 años, la inversión en apuestas es de 66 millones de euros, y apenas se ha ganado más de medio millón.<br />
<br />
El primer premio de primera categoría se obtiene tras 600 años jugando, y aunque hay varios puntos de la simulación en los que el balance es positivo (a los 1200, 1400, 1700, 2200 y 2700 años jugando) la tendencia a la larga es exactamente la misma. <b>Cuanto más juegas, más pierdes</b>. Así que no, no merece la pena.<br />
<b><br /></b>
<b>Y si es tan improbable, ¿por qué toca tan a menudo? </b><br />
<br />
Pues porque juega muchísima gente (se prueban muchísimas combinaciones
distintas cada día), normalmente entre 20 y 60 millones por sorteo,
dependiendo del bote que haya. Así que la
probabilidad de que le toque a alguien es razonablemente alta. Pero
lamentablemente, la probabilidad de que ese “alguien” seas tú sigue siendo
bajísima.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b>¿Como diseñan estos sorteos?</b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Está claro que si tocara muy a menudo, el bote no crecería
(y no despertaría demasiado interés), y si tocara muy poco, la consecuencia
sería la misma (la gente no se interesaría por el sorteo). <br />
<br />
Así que si os fijáis, dado que juegan 20-60 millones de personas cada día, y hay un número de combinaciones de 139 millones, el juego está perfectamente diseñado para que toque el
gordo cada pocos sorteos. Por supuesto, el azar es el azar, y a veces tarda más, o menos, pero
por regla general, la probabilidad se cumple.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b>¿Realmente se cumplen las probabilidades?<o:p></o:p></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Si, a rajatabla.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Veamos la tabla de probabilidades oficial de los
Euromillones:<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNM6RaZr-Jc5m7quQJC-1GqzKSYt1_SJzMnz1DpZ7ECEDKUeaPBj4sBsLjXZc7RMrBTXZ79WRiOiuPKLpicCR8-A-bSyhnZUEKy7IAw2bwFVfjOy9N0t1s-X_321Dvwska4ov6Ak2wwgQ/s1600/2019-10-07+21_01_55-EuroMillions+Prizes+_+Prize+Fund+Distribution.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="646" data-original-width="870" height="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNM6RaZr-Jc5m7quQJC-1GqzKSYt1_SJzMnz1DpZ7ECEDKUeaPBj4sBsLjXZc7RMrBTXZ79WRiOiuPKLpicCR8-A-bSyhnZUEKy7IAw2bwFVfjOy9N0t1s-X_321Dvwska4ov6Ak2wwgQ/s640/2019-10-07+21_01_55-EuroMillions+Prizes+_+Prize+Fund+Distribution.png" width="640" /></a><br />
<div>
<div style="text-align: center;">
Fuente: <a href="https://www.euro-millions.com/prizes">https://www.euro-millions.com/prizes</a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Si os fijáis en el número de veces que ha tocado cada tipo de premio en el siguiente pantallazo, sacado del final del video:</div>
<div class="MsoNormal">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_ToEIOmu3NQmie3ulhIHbfCwPCfWWBP0hJAenviSPweXNbEM-G63ejBtT1pVP6x6ERBaZPtpLn30wcMeb6b11I7ZSoWxjrZoLxJaXaBnHlVL7CB7H_anOlIT7S8i3xRYIrMe6pIsHjtU/s1600/fin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_ToEIOmu3NQmie3ulhIHbfCwPCfWWBP0hJAenviSPweXNbEM-G63ejBtT1pVP6x6ERBaZPtpLn30wcMeb6b11I7ZSoWxjrZoLxJaXaBnHlVL7CB7H_anOlIT7S8i3xRYIrMe6pIsHjtU/s640/fin.png" width="640" /></a></div>
<o:p></o:p><br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<o:p> En nuestra simulación se han hecho más de 144 millones de sorteos. Veréis que las probabilidades teóricas se cumplen a rajatabla (especialmente en los premios de abajo, con mayor número de muestras):</o:p></div>
<div class="MsoNormal">
<o:p><br /></o:p></div>
<div class="MsoNormal">
- El premio 2 + 0 ha tocado 1 vez de cada 21.9 veces</div>
<div class="MsoNormal">
- El premio 2 + 1 ha tocado 1 vez de cada 49.23 veces</div>
<div class="MsoNormal">
- El premio 1 + 2 ha tocado 1 vez de cada 187.9 veces</div>
<div class="MsoNormal">
- El premio 3 + 0 ha tocado 1 vez de cada 313.6 veces</div>
<div class="MsoNormal">
...</div>
<div class="MsoNormal">
Y así sucesivamente. Los números son muy muy aproximados a los de la tabla de arriba, proviniente de la página oficial de los Euromillones.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<o:p>Eso muestra que mi programa está bien hecho, y que las probabilidades que ofrecen en la web del sorteo son 100% reales. </o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="mso-fareast-font-family: "Times New Roman"; mso-fareast-language: ES; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;">Aun así, ya ves que ganar es muy, muy, muy poco probable. Podrías estar mil vidas jugando, y ni aproximarte a ganar...<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="mso-fareast-font-family: "Times New Roman"; mso-fareast-language: ES; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;"><br /></span></div>
<div class="MsoNormal">
<span style="mso-fareast-font-family: "Times New Roman"; mso-fareast-language: ES; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes;">Suerte!</span></div>
<span style="mso-bookmark: _MailAutoSig;"></span>
<br />
<div class="MsoNormal">
<br /></div>
<br /></div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-44847735270215469382019-04-16T09:18:00.000+01:002019-04-16T09:18:13.957+01:00Azure IoT Device Client SDK v 1.2.0 doesn't work with Xamarin Android appsSeveral hours lost trying to deal with a connectivity issue between our Android app and a test Azure IoT server, just to find out that the problem was just having update the Client SDK nuget package (<a href="https://github.com/Azure/azure-iot-sdk-csharp">https://github.com/Azure/azure-iot-sdk-csharp</a>)<br />
<br />
The SendEventAsync seemed to never finish the task when using MQTT, and it threw an exception when AMQP (something related to Amqp constructor could not intialize the Configuration System).<br />
<br />
After several hours assuming it was a fault in my code, or in the Azure setup, I checked the SDK release notes ( <a href="https://github.com/Azure/azure-iot-sdk-csharp/releases">https://github.com/Azure/azure-iot-sdk-csharp/releases</a> ), to find that last version was released a few days ago, with a major AMQP redesign.<br />
<br />
Downgrading to version 1.19 simply did the trick...Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-10914336914125043932017-07-14T09:57:00.000+01:002019-02-01T15:10:58.588+01:00World Enduro RallyI'm happy to share the result of the work I've been doing in the last months: yesterday, <a href="http://www.worldendurorally.com/">World Enduro Rally</a> came to light.<br />
<br />
<center>
<iframe allowfullscreen="" frameborder="0" height="320" src="https://www.youtube.com/embed/gZvoqKHBdAI" width="569"></iframe>
</center>
<br />
<br />
The game is available for XBoxOne, Steam, Android and Windows. You can get all the details at its <a href="https://www.facebook.com/worldEnduroRally/">Facebook page</a>, or download directly here:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-iP_dqElbJBg/XFRTNmhsKLI/AAAAAAAAZpE/qANHsRkdUyQlZgacdws1WryfVMrOWJ3xQCLcBGAs/s1600/XboxOne.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="212" data-original-width="620" height="68" src="https://1.bp.blogspot.com/-iP_dqElbJBg/XFRTNmhsKLI/AAAAAAAAZpE/qANHsRkdUyQlZgacdws1WryfVMrOWJ3xQCLcBGAs/s200/XboxOne.png" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-LV5LDu3t-yA/XFRTae-kFqI/AAAAAAAAZpI/r0AEpPAoAOYJuJoKBttw5anTlhjpcL4JQCLcBGAs/s1600/store_steam.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="212" data-original-width="620" height="68" src="https://4.bp.blogspot.com/-LV5LDu3t-yA/XFRTae-kFqI/AAAAAAAAZpI/r0AEpPAoAOYJuJoKBttw5anTlhjpcL4JQCLcBGAs/s200/store_steam.png" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://play.google.com/store/apps/details?id=com.GraphicDNA.WorldEnduroRally"><img border="0" data-original-height="250" data-original-width="646" height="76" src="https://1.bp.blogspot.com/-JpSjpo_3xE0/WWiGxm_5dMI/AAAAAAAAGlI/34UuH7u0UN4PyZJ3gaLKktdbD9CdvGgxwCLcBGAs/s200/en_badge_web_generic.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.microsoft.com/store/apps/9nrn0g8kjpsl"><img border="0" data-original-height="250" data-original-width="646" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDT11ZaXUYbW7pW7Zdkh3UNtMTclIUxio5bdrZ50q6qqVwYnKjsIfOM0ILu-YVo2y2ZYMxW-mu81RB5Ebb7AJCHsJ6dbXkzhDb9EtGKmE3YBsJG7Emu-JEMHeP_9Www5MyfLL23bcLOcc/s200/windowsstore.png" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Hope you like it!Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com1tag:blogger.com,1999:blog-7840291950242203302.post-31231466721874855782017-06-28T10:06:00.004+01:002017-06-28T10:06:55.416+01:00Como mejorar tu protección contra ciberataques como WannaCry, en 3 sencillos pasos<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-f9Yizp5RTE8/WVNw4JGmWxI/AAAAAAAAF2g/SCFZjfUqBSQr-5GuACozycwVRmrJZTh8QCLcBGAs/s1600/Ransomwre_Wannacry.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="616" data-original-width="1384" height="284" src="https://4.bp.blogspot.com/-f9Yizp5RTE8/WVNw4JGmWxI/AAAAAAAAF2g/SCFZjfUqBSQr-5GuACozycwVRmrJZTh8QCLcBGAs/s640/Ransomwre_Wannacry.jpg" width="640" /></a></div>
<br />
<b>Nota: </b><i>Consejos genéricos para Windows 8 y 10. Podría no aplicar a versiones anteriores de Windows. Esto es solo un consejo que ayuda a mejorar la seguridad, y no garantiza ningún tipo de invulnerabilidad a éste u otro tipo de ataques. El autor de este blog no es experto en seguridad y no ofrece ninguna garantía en absoluto. Use it at your own risk. </i>Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-23522280569198702392017-06-26T14:47:00.002+01:002017-06-26T15:06:52.375+01:00Manually copying Unity's APK and OBB files to an Android device for testingWhen developing an Android game that is meant to be published through the <a href="https://play.google.com/store">PlayStore</a>, there's a limitation regarding the maximum file size of the APK. It currently can't exceed 100 MB.<br />
<br />
The thing is that games usually go beyond that limit. To deal with that, Google offers the so called <a href="https://developer.android.com/google/play/expansion-files.html">APK Expansion Files</a>. Every application can include up to 2 of them, with a maximum size of 2 GB each.<br />
<br />
If your game goes beyond 100 MB, you can easily instruct Unity to split the game in two by checking the "Split Application Binary" in <i>Edit->Project Settings->Player->Android->Publishing Settings</i>.<br />
<br />
<div style="text-align: center;">
<img alt="Image result for unity split application binary" height="227" src="https://docs.unity3d.com/uploads/Main/android-OBB-0.png" width="400" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
That will generate two files instead of one:</div>
<div style="text-align: left;">
</div>
<ul>
<li><b>APK:</b> the usual APK file with all the binaries, scripts etc, and the <b>first scene included </b>in the build settings (the scene with build index 0). You need to take care that the first scene is small enough so this APK doesn't go beyond 100 MB. In general, this scene is usually just a loading icon, or a game logo that is displayed while loading. </li>
<li><b>OBB: </b>A second Expansion File with the OBB, holding everything else. </li>
</ul>
<div>
Some time ago, it was necessary to use a <a href="https://www.assetstore.unity3d.com/en/#!/content/3189">Unity plugin</a> to deal with OBB loading, but this is no longer necessary. So, first of all, <b>DO NOT USE</b> that plugin. In fact, it hasn't been updated for years, and won't work in current versions of Unity. </div>
<div>
<br /></div>
<div>
Current versions of Google PlayStore natively support the distribution of OBB files, so you won't need to do anything special besides providing the OBBs along with the APK when you upload your game.<br />
<br />
<i><b>Note: </b>usually, the first time you upload your game to Google Play, it won't ask you for OBB expansion files (I guess that's a bug in the system). If that's your case, simply generate a second version of your game, and re-upload your APK. Then it will ask for Expansion Files properly. </i></div>
<h3>
<b>How to install the game locally, in a test device? </b></h3>
<div>
In normal circumstances, you just create one big APK, copy it manually to the SD-Card of your phone, and install the game by tapping on the APK file. If you do that now, the game will install fine but it won't be able to find the Expansion OBB files, so the first scene will load fine, but it will probably get stuck there. </div>
<div>
<br /></div>
<div>
In order to let the game find the OBB files, you need to:</div>
<h4>
1.- Rename the OBB so it follows the convention:</h4>
<div>
Unity creates valid OBB files, but their names don't follow the convention Android expects. Your OBB file should have a name like the following: </div>
<div>
<br /></div>
<div style="text-align: center;">
main.[VERSION_NUMBER].[PACKAGE_NAME].obb</div>
<div>
<br />
Where [VERSION_NUMBER] is the <b>highest digit</b> of the version number you can find in the Player Settings:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-n2i9grogiVA/WVEO3-KpdBI/AAAAAAAAFws/zzrOnFSaO_4auSrQPKdr9wgazTVhIBp6QCLcBGAs/s1600/VersionNumber.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="125" data-original-width="424" height="117" src="https://3.bp.blogspot.com/-n2i9grogiVA/WVEO3-KpdBI/AAAAAAAAFws/zzrOnFSaO_4auSrQPKdr9wgazTVhIBp6QCLcBGAs/s400/VersionNumber.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
And [PACKAGE_NAME] is the package name specified in the same screen, right above the version number:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-GrfWdRR80dM/WVEPBjYiXbI/AAAAAAAAFww/TQv0zMyr1kMvRl5mShulBZRr6HSXH5-iwCLcBGAs/s1600/PackageNumber.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="125" data-original-width="424" height="117" src="https://4.bp.blogspot.com/-GrfWdRR80dM/WVEPBjYiXbI/AAAAAAAAFww/TQv0zMyr1kMvRl5mShulBZRr6HSXH5-iwCLcBGAs/s400/PackageNumber.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
So, in the example depicted in the images, the name of the OBB file would be:</div>
<div>
<br /></div>
<div style="text-align: center;">
<b>main.1.com.iayucar.TestGame1.obb</b></div>
<h4>
2.- Copy the renamed OBB file to an specific location</h4>
<div>
The game will expect to find that OBB file in a location like:</div>
<div>
<br /></div>
<div style="text-align: center;">
<b>[INSTALL_LOCATION]\Android\obb\[PACKAGE_NAME]</b><br />
<b><br /></b></div>
<div>
</div>
<div>
Where [PACKAGE_NAME] is the same value described above, and INSTALL_LOCATION refers to whether the game is installed in the internal memory or the external SD-Card (this depends on your own settings). </div>
<div>
<br /></div>
<div>
As our game is configured to be installed in an external SD-Card preferably, the folder where we need to paste the OBB file is:</div>
<div>
<br /></div>
<div style="text-align: center;">
<b>\\SDCard\Android\obb\com.iayucar.TestGame1\</b></div>
<div>
<br /></div>
<div>
And that's it. Now you can launch the game, and it will properly find the additional contents included in the OBB Expansion File. </div>
<div>
<br /></div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-19597066191043144672017-01-11T09:25:00.002+01:002017-01-11T09:25:54.871+01:00Happy 10th Birthday, GraphicDNA !Last week this blog turned 10!!<br />
<br />
<div style="text-align: center;">
<img alt="Image result for 10th birthday" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ3cel1aVzYbA5ARV3mX57YSK-rwK5pnu-s8b_VyuIX2-BtWr7V" /></div>
<br />
Can't believe how fast time goes by.<br />
<br />
During this period, I founded my company, I had the honor to be awarded as DirectX MVP (4 years in a row), I became part of Microsoft / RARE team, and then I spent some of the best years I had in the industry, working as Associate Technical Director at Electronic Arts. It's been an amazing adventure being part of the development teams of all these games:<br />
<br />
<div style="text-align: center;">
<img alt="Credited on..." height="162" src="https://image-store.slidesharecdn.com/35bcc302-c84b-4f18-93f2-69094cc7bbaf-large.png" width="320" /></div>
<br />
Now that I´m back to teaching, writing, developing and R&D projects, I'm certain that the best is yet to come.<br />
<br />
It's been a wonderful time to be a developer all along, so let's see what the next 10 years bring :)<br />
<br />
Cheers!Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-6936095455932193002017-01-10T13:06:00.003+01:002017-01-10T13:28:51.193+01:00Custom MainLoop in C# / UWP applications with DirectX (SharpDX) with unlocked frame rates (beyond 60 Hz)When you want to write a game or a 3D application in C# using SharpDX, and you want it to be UWP, there is little information about how to correctly handle the basics of the main loop.<br />
<br />
All examples I found were based on the interop between XAML and DirectX, but if you go that path, you´ll need to rely on the <i>CompositingTarget.Rendering</i> event to handle your updates and renders, which lets all the inner processing to Windows.UI.XAML and limits the frame rate to 60 Hz.<br />
<br />
So, how to create your own, unlocked-framerate-ready, main loop?<br />
<br />
First things first:<br />
<h2>
Dude, where's my Main entry point?</h2>
Typically, a C# application has a <i>Program </i>static class where the "main" entry point is defined.<br />
<br />
When you create a WPF, UWP or Windows Store application though, aparently that code is missing, and the application is started magically by the system.<br />
<br />
The truth is that the main entry point is hidden in automatically-generated source code files under the obj\platform\debug folder. If you look there for a file called <i>App.g.i.cs, </i>you'll find something like this:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #557799;">#if !DISABLE_XAML_GENERATED_MAIN</span>
<span style="color: #888888;">/// <summary></span>
<span style="color: #888888;">/// Program class</span>
<span style="color: #888888;">/// </summary></span>
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">Program</span>
{
<span style="color: #0000cc;"> [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 14.0.0.0")]</span>
<span style="color: #0000cc;"> [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]</span>
<span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Main</span>(<span style="color: #333399; font-weight: bold;">string</span>[] args)
{
<span style="color: #008800; font-weight: bold;">global</span>::Windows.UI.Xaml.Application.Start((p) => <span style="color: #008800; font-weight: bold;">new</span> App());
}
}
<span style="color: #557799;">#endif</span>
</pre>
</div>
<br />
Et'voila... There's your entry point.<br />
<br />
So first thing is to define the <b>DISABLE_XAML_GENERATED_MAIN </b>conditional compilation symbol to prevent Visual Studio from generating the entry point for you. <br />
<br />
Next, is to add your own Program class and main entry points, as always, so you have control on the application start procedure. You can simply copy-paste that code anywhere in your project.<br />
<h2>
The Main Loop</h2>
<i><b>Please note: </b></i>this implementation is inspired by the C++ equivalent described <a href="https://msdn.microsoft.com/en-us/library/windows/apps/hh465033.aspx">here</a>.<br />
<br />
Now that you have a main entry point, you can replace the invokation of <i>Windows.UI.Xaml.Application.Start</i> (which internally deals with its own main loop) with your own code.<br />
<br />
What we want to use instead is: <i>Windows.ApplicationModel.Core.CoreApplication.Run</i>, which is not bound to XAML and allows you to define your own <i>IFrameworkView </i>class, with your custom Run method.<br />
<br />
Something like:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">Program</span>
{
<span style="color: #008800; font-weight: bold;">static</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Main</span>(<span style="color: #333399; font-weight: bold;">string</span>[] args)
{
MyApp sample = <span style="color: #008800; font-weight: bold;">new</span> MyApp();
<span style="color: #333399; font-weight: bold;">var</span> viewProvider = <span style="color: #008800; font-weight: bold;">new</span> ViewProvider(sample);</pre>
<pre style="line-height: 125%; margin: 0;"> Windows.ApplicationModel.Core.CoreApplication.Run(viewProvider);
}
}
</pre>
</div>
<br />
<h3>
The ViewProvider class</h3>
<div>
The main purpose of the view provider is to create a <i>IFrameworkView</i> when required, so it could be something like this:</div>
<div>
<br /></div>
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">class</span> <span style="color: #bb0066; font-weight: bold;">ViewProvider</span> : IFrameworkViewSource
{
MyApp mSample;
<span style="color: #008800; font-weight: bold;">public</span> <span style="color: #0066bb; font-weight: bold;">ViewProvider</span>(MyApp pSample)
{
mSample = pSample;
}
<span style="color: #888888;">//</span>
<span style="color: #888888;">// Summary:</span>
<span style="color: #888888;">// A method that returns a view provider object.</span>
<span style="color: #888888;">//</span>
<span style="color: #888888;">// Returns:</span>
<span style="color: #888888;">// An object that implements a view provider.</span>
<span style="color: #008800; font-weight: bold;">public</span> IFrameworkView <span style="color: #0066bb; font-weight: bold;">CreateView</span>()
{
<span style="color: #008800; font-weight: bold;">return</span> <span style="color: #008800; font-weight: bold;">new</span> <span style="color: #0066bb; font-weight: bold;">View</span>(mSample);
}
}
</pre>
</div>
<br />
<h3>
The View Class</h3>
<div>
The view class implements the <i>IFrameworkView</i> interface, which defines most of the logic we want to implement.</div>
<div>
<br /></div>
<div>
The framework will invoke interface's methods to perform the initialization, uninitialization, resource loading, etc, and will also report us when the application window changes through the SetWindow method.</div>
<div>
<br /></div>
<div>
For the purpose of this article, the most interesting part is the Run method, which we can write to include our own, shiny, new Main Loop:</div>
<div>
<br /></div>
<div>
<br /></div>
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #008800; font-weight: bold;">public</span> <span style="color: #008800; font-weight: bold;">void</span> <span style="color: #0066bb; font-weight: bold;">Run</span>()
{
<span style="color: #333399; font-weight: bold;">var</span> applicationView = ApplicationView.GetForCurrentView();
applicationView.Title = mApp.Title;
mApp.Initialize();
<span style="color: #008800; font-weight: bold;">while</span> (!mWindowClosed)
{
CoreWindow.GetForCurrentThread().Dispatcher.ProcessEvents(</pre>
<pre style="line-height: 125%; margin: 0;"> CoreProcessEventsOption.ProcessAllIfPresent);
mApp.OnFrameMove();
mApp.OnRender();
}</pre>
<pre style="line-height: 125%; margin: 0;"> mApp.Dispose();
}
</pre>
</div>
<br />
This removes the need to rely on XAML stuff in your game (and its overhead), gives you more control about how the mainloop behaves, and unleashes the possibility of rendering with a variable frame rate in C#.<br />
<br />
Please refer to <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/mt742104(v=vs.85).aspx">this page</a> for further info about how to initialize a swap chain suitable for unlocked frame rates.<br />
<br />
Hope it helps!Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-19649480303134101072017-01-09T15:48:00.001+01:002017-01-09T15:49:26.030+01:00[UWP] Unable to activate Windows Store app - The app didn't start<br />
Today, I've been struggling with a Visual Studio 2015 deploy error for a while.<br />
<br />
When trying to debug a C# - UWP application, I kept receiving the following error upon application activation:<br />
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-WYpuVhWTpuw/WHOhE5n4YeI/AAAAAAAACW4/061OnNoL66UHm4dDpk1sQXtGpvUDXgMAACK4B/s1600/2017-01-09%2B15_34_42-Microsoft%2BVisual%2BStudio.png" imageanchor="1"><img border="0" height="185" src="https://1.bp.blogspot.com/-WYpuVhWTpuw/WHOhE5n4YeI/AAAAAAAACW4/061OnNoL66UHm4dDpk1sQXtGpvUDXgMAACK4B/s400/2017-01-09%2B15_34_42-Microsoft%2BVisual%2BStudio.png" width="400" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Places like <a href="https://social.msdn.microsoft.com/Forums/en-US/e6a4b58c-dac9-4db7-9bab-fad46a0a90f3/uwp-unable-to-activate-windows-stoe-app-the-app-didnt-start-windows-10-universal-apps?forum=wpdevelop">this</a> have information about other people finding the same error. Some of them even re-installed Windows 10 from scratch with no luck.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In my case, the cause (and solution) was much simpler than that:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I have my all my projects in an external SSD drive. Yesterday I was working in my laptop, and the last compilation I did there was in Release mode. When I brought the external disk back to my main PC today and tried to deploy directly as Debug, the activation failed for some reason.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
So, going back to Release mode, rebuild, launch and let Windows activate the app did the trick. After that, I've been able to go back to Debug mode normally. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Hope it helps.</div>
<div style="text-align: left;">
<br /></div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-27931019504691998192016-09-07T14:30:00.001+01:002017-01-09T15:50:18.511+01:00Using RacingWheels and other kind of devices in Windows.Gaming.InputNow that <a href="https://msdn.microsoft.com/en-us/windows/uwp/layout/design-and-ui-intro">UWP (Universal Windows Platform)</a> is out (and apparently the way to go for video games), a decent Input API was more than needed, to be able to use controllers like racing wheels. And that API is <a href="https://msdn.microsoft.com/library/windows/apps/windows.gaming.input.aspx">Windows.Gaming.Input</a>.<br />
<br />
I <a href="http://graphicdna.blogspot.com.es/2016/08/steering-wheel-support-in-forza.html">already talked about this topic last month</a>, but no matter how hard I tried to make my Logitech G27 be recognized by the API, it simply didn't work. And it was hard to do something wrong in the code, as reading the controller is as simple and straightforward as checking the contents of a collection.<br />
<br />
I simply assumed that the API, or the Logitech Driver, or Windows, had problems with certain controllers somehow. And provided that the G27 is a bit old, and that Logitech hasn't updated the drivers since last March, that sounded realistic.<br />
<br />
But yesterday, <a href="https://www.microsoft.com/en-us/store/p/forza-motorsport-6-apex-beta/9nblggh3shm7">Forza 6 Apex</a> was updated (and taken out of BETA), and finally announced steering wheel support, so I quickly updated it, just to check (to my surprise) that my G27 worked perfectly.<br />
<br />
And it's a UWP too, so it was clearly not due to a bug in the API or the driver, but a problem in my application. Provided that the code is so simple, it had to be some configuration issue, and yes, it was...<br />
<br />
I checked a thousand times the Capabilities section of the AppxManifest, but I never saw anything that seemed related. But thanks to Mark Thompson (and to the XBox Developer Forums), now I found out what should be added to the AppxManifest in order to make it work.<br />
<br />
Simply add the following to the Capabilities section:<br />
<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <DeviceCapability Name="humaninterfacedevice">
<Device Id="any">
<Function Type="usage:0001 0004"/>
<Function Type="usage:0001 0005"/>
</Device>
</DeviceCapability>
</code></pre>
<br />
Et voilá. Now the G27 is properly recognized by the app. I still don't understand why this is needed for racing wheel, but not for gamepads.<br />
<br />
However, you can find more info here:<br />
<ul>
<li>More information about device capabilities in the AppxManifest: <a href="https://msdn.microsoft.com/en-us/library/windows/apps/dn263092.aspx">https://msdn.microsoft.com/en-us/library/windows/apps/dn263092.aspx</a></li>
<li>More information about HID-specific device capabilities: <a href="https://msdn.microsoft.com/en-us/library/windows/apps/dn263091.aspx">https://msdn.microsoft.com/en-us/library/windows/apps/dn263091.aspx</a></li>
</ul>
<br />
Microsoft guys told us that this will be added to the docs soon, but for now, it's not there.<br />
<br />
Hope it helps!Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-85912049666950528482016-08-24T14:07:00.001+01:002016-08-24T14:24:08.885+01:00Quiero trabajar haciendo videojuegos ¿Qué tengo que hacer?<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Hace algún tiempo, un buen amigo me pidió si podía asesorar a una alumna suya, que quería orientar su carrera profesional hacia el sector de la creación de Videojuegos. </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Más concretamente, le gustaría trabajar desarrollando software (ingeniería) en alguno de los estudios realmente grandes de la industria (casi siempre situados en el extranjero). </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Dado que es una industria bastante particular y algunos ya hemos pasado por ello unas cuantas veces, me pareció útil publicar aquí la carta que le escribí. Espero que ayude a otros estudiantes que quieran seguir los mismos pasos. </span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Ahí va! </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">---</span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Hola XXXXX. Encantado de saludarte.</span><br />
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span>
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">He escrito el siguiente texto, describiendo todos los aspectos que me parecen relevantes a la hora de acceder a esta industria. Espero que te sirva...</span><br />
<h3>
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: large;">Estudios y formación previa</span></h3>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Sobre departamentos de arte no puedo opinar mucho, pero s</span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">i lo que te interesa es la parte de ingeniería, lo mejor es estudiar Ingeniería Informática o alguna otra carrera especializada. </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">En cuanto a los másters que suelen ofrecer las universidades, cuidado... porque hay de todo. Muy a menudo (y más en este país) </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">la gente que imparte los masters tiene poca (o ninguna)
experiencia en estudios de desarrollo reales (y menos aún en estudios de primera fila). Casi toda la experiencia que hay en este país es en estudios muy pequeños, generalmente de desarrollo para móviles. Y aunque puede ser muy buena, hay algunas diferencias entre trabajar ahí, y trabajar en DICE. </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Así que lo que yo te recomendaría, si te decantas por
esta opción, es que te fijes no solo en los contenidos que se imparten, sino también en quienes son los profesores del master y
si tienen experiencia real en la industria. Eso es lo más importante, porque así no solo
aprenderás la parte teórica/práctica, sino también las
particularidades que tiene el día a día del trabajo en un estudio (que no son
pocas).</span><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"> </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"> </span></div>
<h3>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: large;">El proceso de selección</span></b></h3>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Una vez hayas completado tu formación, y quieras aplicar a un trabajo, el proceso de selección en </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 14.6667px;">los estudios grandes o <i>TripleA</i> (Visceral, Rockstar, DICE, Ubisoft, Valve, Rare, etc),</span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 14.6667px;"> </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">suele ser como sigue (evidentemente varía en función del puesto, pero suele ser asi):</span><br />
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div>
</div>
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">1.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;"> </span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Filtro inicial</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">:
se aplica un filtro de corte y a los que no lo pasan ni siquiera le devuelven
el email (si, son así de crueles). Se trata de comprobar algunos requisitos <b>mínimos,
</b>que son absolutamente indispensables y normalmente lo hace un empleado de
RRHH. Es decir, si no pasas ese filtro, el verdadero reclutador (responsable
del departamento que ha abierto la plaza), ni siquiera ve tu candidatura (luego
te hablaré más de RRHH):</span><span lang="ES"><o:p></o:p></span><br />
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">a.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Nivel de inglés muy alto</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"> (indispensable). No importa cómo de bien creas que
hablas inglés, cuando llegues a un estudio así, los primeros meses los pasarás
fatal en las reuniones (te lo digo por experiencia…</span><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">). El resto de idiomas que hables, importa
más bien poco. Da igual a qué país vayas… Da igual que no hables el idioma
local. Vas a trabajar en inglés, y cualquier estudio serio es el único idioma
que te va a exigir.</span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">c.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Permiso de trabajo</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"> en el país donde está el estudio. Hay muchas ofertas en
USA en las que no quieren ni oír hablar de candidatos que no tienen permiso de
trabajo allí. Para ellos es un lío gestionar eso, así que es muy frecuente que
te rechacen por esto. Empresas grandes como EA o Microsoft sí suelen gestionar
el visado, pero aún así es complicado.</span><span lang="ES"><o:p></o:p></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">2.</span></b><b><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span></b><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Filtro secundario: </span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">este ya tiene que ver con necesidades adicionales para el
puesto, y dependiendo de casos pueden ser irrenunciables también. En
ocasiones, y si el personal de RRHH está especializado, este segundo filtro lo
aplican ellos también, por lo que seguirás sin llegar a la persona que sería tu jefe en caso de ser aceptado:</span><span lang="ES"><o:p></o:p></span><br />
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span>
<br />
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">a.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Experiencia en la industria</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">: Esto suele ser muy habitual. A no ser que busquen gente
muy muy junior (recién salida de la uni), la experiencia en otros títulos suele
ser algo exigido con mucha frecuencia. Y aunque no sea un requisito
indispensable, suele ser de las cosas que más valoran. Sobre todo si has estado
ya en un estudio considerado “de los grandes”, suele ser de las cosas que más
pesan en el CV. Por encima de másters, formación, etc.</span><span lang="ES"><o:p></o:p></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div style="margin-left: 1.0in;">
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">b.</span></b><b><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span></b><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Muestras de trabajo: </span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Hoy en día, el CV se utiliza más como un filtro de corte
para rechazar candidatos, pero como te decía no es lo más importante a la hora
de valorar un candidato. Si pasas el primer corte y, aunque no tengas
experiencia, aportas muestras de trabajo (o de proyectos en los que hayas
trabajado) que impresionen a los reclutadores, ganarás muchos puntos. Eso si,
asegúrate de presentar solo lo verdaderamente bueno. El nivel en los estudios
es altísimo, y si presentas algo que les parezca mediocre, puede ser contraproducente.</span><span lang="ES"><o:p></o:p></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">3.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;"> </span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Entrevistas: </span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Si has pasado los 2 primeros filtros, eso quiere decir
que el de RRHH no te ha descartado, y ha hecho que tu candidatura llegue a la persona que realmente ha abierto el puesto. Probablemente la persona que será tu jefe en caso de ser aceptado. Dicha persona puede aplicar su propio filtro y descartar más
candidatos, pero si contactan contigo, lo siguiente que querrán será tener una
entrevista contigo por Skype. </span><br />
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span>
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Yo he hecho muchas, y me he encontrado de todo.
Lo normal es que todo el mundo sea muy amable, pero como te digo, te puedes encontrar de
todo. Recuerdo una vez, en una entrevista para Blizzard (en Los
Angeles), el tío fue tan borde que fui yo el que a mitad de la entrevista le
corté y le dije que no me interesaba el puesto. </span><br />
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span>
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Deberías haber visto su cara,
pero sinceramente, si ya en la entrevista son tan estresantes y bruscos es
probable que luego el día a día allí sea un infierno. Nunca se sabe,
probablemente el tipo tenía un mal día, pero es un mal modo de empezar, y
estudios hay muchos. </span><span lang="ES"><o:p></o:p></span><br />
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span>
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Las entrevistas suelen ser varias:</span><br />
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span>
<br />
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">a.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Primera entrevista:</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"> en la primera entrevista, probablemente solo querrán
conocerte. Ver qué tipo de persona eres. Esta entrevista a veces la hace RRHH
también, y va más orientada a asegurarse de que vas a encajar en la filosofía
del estudio (que como verás más adelante, suele ser especial de narices).</span><span lang="ES"><o:p></o:p></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">b.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Segunda entrevista:</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"> esta entrevista seguramente será mucho más técnica o
enfocada al puesto para el que aplicas, y seguramente la hagas con la
persona que sería tu manager si fueras admitida. </span><span lang="ES"><o:p></o:p></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">c.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Prueba técnica:</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"> Es muy frecuente que, después de esta entrevista, te hagan
una especie de examen técnico. Suele ser una prueba de programación, que a
veces va acompañada de un examen teórico. Y suele ser muy, muy exigente. Lo
normal es que la prueba esté a un nivel exigente incluso para ellos, porque una
de las cosas que quieren ver es cómo reaccionas ante algo que no sabes
resolver. Ahora que soy yo el que prepara los procesos de selección, te aseguro
que a veces preguntamos cosas que nosotros mismos tendríamos que consultar.</span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "wingdings"; font-size: 11.0pt;"><br /></span></div>
<div style="margin-left: 1.0in;">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">d.</span><span lang="ES" style="color: #1f497d; font-size: 7.0pt;">
</span><b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Entrevista en persona:</span></b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"> esto es algo inevitable. Si pasas todos los filtros
anteriores, tarde o temprano te querrán ver en persona. Da igual si el estudio está en
Inglaterra, Estados Unidos o Australia. Lo normal es que hagan una entrevista
personal, y lo normal es que ellos corran con todos los gastos también (viaje,
hotel, etc).</span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"> </span></div>
<h3>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: large;">Si todo el mundo pide experiencia en el sector, ¿cómo demonios voy a lograr entrar en el?</span></b></h3>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Como te decía, lo que más va a pesar una vez pasas el
filtro básico, es la experiencia. </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Aquí es donde uno se pregunta lo de siempre…
¿cómo demonios voy a ganar experiencia, si todo el mundo exige experiencia para
contratarme? Es un círculo vicioso, si, pero hay formas de poder salir de el.</span></div>
<br />
<ul>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Opción 1</b>: tener experiencia en otros sectores que, aunque
no sean de videojuegos, pueden ser muy similares. Por ejemplo, el sector de la
simulación.</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Opción 2</b>: tener experiencia en
estudios mucho más modestos que no suelen ser tan exigentes. El típico ejemplo
son los estudios de juegos para móviles pequeños, y de eso hay unos cuantos en España.</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Opción 3</b>: no tener experiencia en estudios, pero haber
publicado tus propios juegos a título personal. Hoy en día, en el mercado móvil
es muy asequible hacer esto y es una muy buena forma de demostrar lo que sabes</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Opción 4: </b>no tener experiencia alguna, pero deslumbrar
con muestras de trabajo de otro tipo. Como te decía, pueden ser un buen
sustituto y en temas de programación es fácil demostrar lo que sabes.
Proyectos en los que hayas colaborado, tener tu propio blog técnico, proyectos
en GitHub o CodePlex, etc. Todo ayuda.</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Opción 5:</b> Internships: Es el equivalente extranjero a los
becarios o a las prácticas de empresa, y ahí si que es mucho más fácil que acepten a recién graduados. Y es
una experiencia que sirve. Quiero decir, que otros estudios sí lo valorarán a
la hora de evaluarte, así que es una forma muy buena de conseguir experiencia.</span></li>
</ul>
<h3>
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: large;"><b>¿Cuando aplicar?</b></span></h3>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Si tu objetivo es trabajar en un estudio,
empieza a aplicar en cuanto acabes la carrera. Se ambicioso, que nunca se sabe.
Tiempo tienes para que te digan que no. Y no te preocupes, que no pasa nada
porque no te cojan. </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">No vas a entrar en una lista negra en la que ya no volverán
a considerarte. Al contrario. Los estudios tienen cierto puntito de “religión”
y les suele gustar la perseverancia. Hay mucha pasión en este mundillo, y que
les digas que uno de tus sueños era trabajar con ellos, les pone. </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Si ven que
has aplicado 4 veces, y que has ido mejorando tu candidatura por el camino, va
a ser algo positivo, no negativo.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Y lo que te decía, si consigues entrar, aunque sea como
<i>internship, </i>eso va a pesar mucho más en tu CV para futuras aplicaciones que
cualquier Máster que hayas podido hacer. Eso si, mientras no consigas entrar en
ningún sitio, estudia mucho, haz todos los máster que puedas y prepara un buen
portfolio de muestras de trabajo.</span></div>
<h4>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Referencias</span></b></h4>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">En esta industria es bastante frecuente que consulten tus
referencias. Sobre todo si aportas algo de experiencia en otros estudios, les
van a llamar para preguntar por ti. </span><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Es algo importante a tener en cuenta.
Incluye referencias en tu CV. </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"> </span></div>
<h3>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: large;">Recursos Humanos</span></b></h3>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">El tema de RRHH merece mención aparte, ya que su
comportamiento es muy curioso: e</span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">l personal de RRHH está centrado en lo suyo.
EXCLUSIVAMENTE. A veces, incluso son “contractors”, y van por objetivos. Su
trabajo es conseguir candidatos que terminen encajando en el puesto y son
evaluados por ello. Punto. </span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 14.6667px;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 14.6667px;">No es el caso de Electronic Arts (ya que aquí el personal de RRHH es parte de la plantilla fija), pero a veces si pasa en otras empresas grandes como Microsoft, Google, Apple, etc. </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Y cuando eso pasa, </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">la cosa funciona así: algún manager
necesita cubrir una vacante, así que informa a RRHH y les pasa una descripción
del puesto y de requisitos. A partir de ahí, RRHH toma las riendas de todo, y
el reclutador se limita a valorar los candidatos que pasan los primeros
filtros.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">¿Qué quiere decir todo esto? Pues que aunque parezca
sorprendente, a veces RRHH y ese mánager están increíblemente des-alineados. Y
lamentablemente, muchas veces la gente de RRHH funciona como comerciales. Si
tienes pinta de ser un buen candidato para el puesto, intentan “vendértelo” por
todos los medios. </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">No es algo que pase en EA, pero en otras empresas si puede suceder. Así que mi consejo: TODO lo que te digan los de RRHH debes
contrastarlo con el que vaya a ser tu mánager. </span><span lang="ES"><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Y otra cosa, los de RRHH son perros viejos. Y como saben
de qué va el juego, nunca te van a confirmar nada por escrito. Verás que,
aunque tu les mandes un email, ellos te contestan por teléfono la mayoría de
las veces. </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Tienen alergia a dejar las cosas por escrito, así que NUNCA
consideres nada como cerrado hasta que no te manden “la carta”. </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Cuando las
cosas ya están confirmadas, te mandan una oferta formal por escrito que
oficializa todo. En estudios grandes, esto se hace siempre y es una carta en la
que se especifican todas las condiciones. Hasta que no te han mandado esa
carta, y tu la aceptas oficialmente, no hay nada comprometido. </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Puede que para
internships la cosa sea menos formal, pero para puestos fijos (regular, o full-time) es así.</span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"> </span></div>
<h4>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Regular/Full-time employees</span></b></h4>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Esto probablemente aplique para cuando tengas más años,
pero conviene tenerlo en cuenta: todas estas empresas tienen siempre dos tipos
de empleados: permanentes y temporales. Y solo los full-time suelen gozar de
todos los beneficios asociados al puesto.</span><span lang="ES"> </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">A veces, no queda otra que entrar como temporal. Pero
ojo, pasar a ser un empleado permanente a veces no es sencillo. Si tienes que escoger entre dos estudios, y en uno eres fijo y en el otro no, tenlo en cuenta.</span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"> </span></div>
<h3>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: large;">Los estudios de desarrollo</span></b></h3>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Los estudios de desarrollo suelen componerse de </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">artistas (modeladores 3D, sonido,
texturas, etc), que suelen ser mayoría en todos los estudios, e ingenieros (que suelen ser un 20-40% del total de empleados). </span><br />
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span>
<span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Estos últimos, suelen dividirse en los siguientes equipos:</span></div>
<ul>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Tools&Pipelines: </b>creación y mantenimiento de
herramientas para la gestión de assets y procedimientos, editores 3D, etc.</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>UI: </b>creación y mantenimiento de la tecnología de user
interface</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Gameplay: </b>ingenieros que trabajan en la tecnología para
gestionar el juego y hacer que sea fluido, divertido, etc.</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><b>Core Tech: </b>Rendering, animation, audio, A.I., Physics</span></li>
<li><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">…</span></li>
</ul>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">A mucha gente le suele llamar la parte de Core
Tech, pero ya te aviso: es donde más bichos raros hay. Gente que duerme en el
estudio, y a veces incluso gente que huele mal (literalmente). </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Te vas a
encontrar freaks de un nivel que nunca nunca nunca hubieras imaginado. Pero
claro, ese nivel de frikismo es por un motivo: CoreTech es lo más complicada
de todo y la que requiere más talento. Vas a conocer gente con un talento que
te va a dejar alucinado. Literalmente. Y vas a aprender muchísimo. Así que tiene
su lado malo y su lado bueno… </span><span lang="ES" style="color: #1f497d; font-size: 11pt;"><span style="font-family: "wingdings";">:)</span></span><br />
<h4>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Las dinámicas de trabajo</span></b></h4>
<span lang="ES" style="color: #1f497d; font-size: 11pt;"><span style="font-family: "wingdings";"></span></span><br />
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">En los estudios actuales, normalmente se trabaja siguiendo dinámicas SCRUM. Con equipos no muy grandes en los que un mánager gestiona a su equipo, tanto a nivel personal como profesional. Luego suelen estar los Project o Product Managers, que se encargan de comunicar a unos equipos con otros: transmitir necesidades, priorizar temas, etc. Todo lo que te puedas familiarizar con éstas formas de trabajo, mejor.</span></div>
</div>
<h4>
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">El nivel en los estudios</span></h4>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Si eres un buen ingeniero, conviene no asustarse demasiado. En casi
todos los estudios están los 3-4 típicos cracks que son DIOS. Las personas a
las que todo el mundo pregunta cuando tiene dudas. Y luego hay una masa de
ingenieros, que simplemente son muy buenos. Pero no DIOS. </span><span lang="ES" style="color: #1f497d; font-size: 11pt;"><span style="font-family: "wingdings";">:)</span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Y otra cosa, todo el mundo asume que una persona nueva
tiene que aprender. Nadie te va a pedir que llegues y seas productivo el primer
día. No agobiarse con eso. </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Solo aprender la terminología y los acrónimos
propios del estudio ya te llevará semanas… </span><span lang="ES" style="color: #1f497d; font-size: 11pt;"><span style="font-family: "wingdings";">:)</span></span></div>
<h3>
<b><span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: large;">Tecnología</span></b></h3>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Hay algunas tecnologías que se han adoptado como estándar
en la industria. Por ejemplo Perforce. No es más que un sistema de repositorio
y de control de versiones y código fuente, que se usa para almacenar y
gestionar el acceso a todo el código de los juegos (y de los assets). Si tienes
experiencia con Perforce, mini-punto para ti. </span><span lang="ES" style="color: #1f497d; font-size: 11pt;"><span style="font-family: "wingdings";">:)</span></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">En cuanto a herramientas típicas para otras gestiones, tienes Jira, Confluence, DevTrack, etc... Si te suenan, mini-punto para ti... :)</span></div>
<h4>
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Lenguages de Programación</span></h4>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Normalmente, el lenguaje de programación estándar es C++. </span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;"><br /></span></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">A no ser que apliques a un estudio exclusivamente móvil, en el que últimamente
se ha estandarizado mucho Unity (con C#). Pero si es un estudio que publica para
consolas y PC, casi seguro tu lenguaje será C++. </span><span lang="ES"><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Hay otra excepción: si aplicas a un equipo de
Tools&Pipelines, éstos suelen trabajar en C#, por una cuestión de
eficiencia y rapidez. </span><span style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11pt;">Puesto que sus herramientas suelen ser internas y no
necesitan ser cross-platform (solo se usan en PC, de forma interna al estudio),
casi todos los estudios escogen este lenguaje para esa parte.</span></div>
<div class="MsoNormal">
<br /></div>
<br />
<div class="MsoNormal">
<span lang="ES" style="color: #1f497d; font-family: "calibri" , sans-serif; font-size: 11.0pt;">Espero que os sirva! </span><span lang="ES"><o:p></o:p></span></div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-91187020481152355352016-08-03T17:59:00.000+01:002017-01-09T15:50:45.166+01:00Steering Wheel Support in Forza Motorsport 6: Apex (and any other UWP application)Since <i>Turn10 </i>released the <a href="http://www.forzamotorsport.net/en-us/games/fm6" target="_blank">Forza Motorsport 6: Apex</a> demo, there has been quite a lot of noise, rumors, and opinions about the lack of support for steering wheels like Logitech G27, G29, Fanatec, and so on.<br />
<br />
Sites like <a href="https://www.reddit.com/r/simracing/comments/4i2we1/forza_motorsport_6_apex_pc_wheel_support/" target="_blank">this</a> or even the <a href="http://forums.forzamotorsport.net/turn10_postst59437p3_Wheel-support.aspx" target="_blank">official Forza forums</a> have tough debates about the issue. Some users complain about Microsoft not caring about PC gamers, or even talking about a conspiracy to force us to renew our controllers (or to buy XBox Certified devices). Leaving conspiracies aside, most people wonder why a PC game has no support for steering wheels, when the controller is perfectly detected and configured in Windows.<br />
<br />
Truth is there is no conspiracy... The answer is simple: UWP<br />
<h4>
What is UWP and why should I care? </h4>
UWP stands for <a href="https://msdn.microsoft.com/en-us/windows/uwp/layout/design-and-ui-intro" target="_blank">Universal Windows Platform</a>.<br />
<br />
Apps developed as UWP can run in any device (PCs, XBox, Phones, ...) and can be published in the consolidated Windows Store. You know, the famous convergence:one OS, one Store... So, it has its advantages (big advantages, to be honest).<br />
<br />
Why does that affect to Forza? Guess... Forza 6: Apex has been developed as an UWP. Probably as part of a marketing campaign to push the platform forward, or maybe because Turn10 really saw the benefits of UWP. Who knows.<br />
<br />
The thing is that UWP-compatible APIs currently offer no single way to do proper controller input, besides Gamepads. And that's probably the main reason why Forza 6 has been released as BETA until now. Because they knew they didn't have a chance to offer support for steering wheels.<br />
<br />
See? No conspiracy. It's just a technical limitation.<br />
<h4>
So, will it be fixed?</h4>
<b>Short answer:</b> yes.<br />
<br />
<b>Long answer:</b> a bit of history first...<br />
<br />
To make your apps compliant with UWP, you cannot use certain old technologies that don't follow some of the current standards. One example of those technologies that are no longer valid is <b><a href="https://en.wikipedia.org/wiki/DirectInput" target="_blank">DirectInput</a></b>.<br />
<br />
DirectInput is a quite old piece of technology that hasn't received updates for many many years. And yet it has been the only way to get decent access to certain types of controllers, until now.<br />
<br />
Even the <a href="http://gaming.logitech.com/en-us/developers" target="_blank">Logitech Developer Labs</a> has been using DirectInput to build their SteeringWheel SDK up to date (this screenshot has been taken today):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-tqi6fzenPxo/V6IcHGMj2RI/AAAAAAAACPU/6n7_ifLTmGg5PZ_yjUrH0-YPCfl2EJjDQCK4B/s1600/2016-08-03%2B18_29_38-LOGITECH%2BG%2BDEVELOPER%2BLAB.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="204" src="https://4.bp.blogspot.com/-tqi6fzenPxo/V6IcHGMj2RI/AAAAAAAACPU/6n7_ifLTmGg5PZ_yjUrH0-YPCfl2EJjDQCK4B/s320/2016-08-03%2B18_29_38-LOGITECH%2BG%2BDEVELOPER%2BLAB.png" width="320" /></a></div>
<br />
As a developer that has been working with DirectInput for more than a decade, I have to say that it had its charms: it was extremely open to literally ANY kind of device. But it had its drawbacks too (like a quite difficult learning curve). So I agree it needed a replacement that complies with current development standards.<br />
<br />
That's what Microsoft has been trying in the last few years: to find a decent replacement for DirectInput. With no luck, I have to say. They created <a href="https://en.wikipedia.org/wiki/DirectInput" target="_blank">XInput</a>, which was meant to be that replacement. Or at least that's what they promised, but the truth is that it never received enough attention to become that. It never got any kind of support for game controllers besides Gamepads. So, it never was an option for Joysticks or RacingWheels.<br />
<br />
Some time ago, we heard about a new API called Windows.Gaming.Input. And again, it was described as the way to go now.<br />
<br />
We (developers) were a bit skeptical about that, because it sounded too familiar after the XInput promises. And things got only worse when we could start testing it out, and again it only offered support for Gamepads.<br />
<br />
That has changed now with the release of the <a href="https://www.microsoft.com/en-us/windows/features" target="_blank">Windows 10 Anniversary Update</a>. and the corresponding <a href="https://blogs.windows.com/buildingapps/2016/08/02/windows-10-anniversary-update-sdk-14393/" target="_blank">Windows 10 SDK - build 14393</a>. Both publicly released today.<br />
<h4>
So, is it fixed yet?</h4>
No, but at least the tech bits needed are there.<br />
<br />
The <a href="https://msdn.microsoft.com/library/windows/apps/windows.gaming.input">Windows.Gaming.Input</a> namespace now includes all the classes necessary to read from a wider selection of devices, including ArcadeSticks, Gamepads, HeadSets and RacingWheels (surprisingly no Joysticks by now).<br />
<br />
I´m sure that now that the update has been released, and UWP apps can read from Steering Wheels, Turn10 will release an update to Forza 6 soon. Maybe it even exits the BETA stage, who knows.<br />
<h4>
What Steering Wheels will Forza Support?</h4>
As far as I know, Forza should support the same range of devices supported by the API. And according to the <a href="https://msdn.microsoft.com/en-us/library/windows/apps/windows.gaming.input.racingwheel.aspx">API documentation</a>, the currently supported list of steering wheels is:<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div id="mainSection" style="clear: both; color: #454545; font-family: "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 20.006px;">
<h3 style="font-family: "Segoe UI bold", "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 1em !important; line-height: 1.45em !important; margin: 0px 0px 5px -1px !important; padding: 0px !important;">
<a href="https://www.blogger.com/null" id="Supported_Devices" style="color: #1e75bb; font-family: "Segoe UI Semibold", "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 1em; line-height: 1.429em;"></a><a href="https://www.blogger.com/null" id="supported_devices" style="color: #1e75bb; font-family: "Segoe UI Semibold", "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 1em; line-height: 1.429em;"></a><a href="https://www.blogger.com/null" id="SUPPORTED_DEVICES" style="color: #1e75bb; font-family: "Segoe UI Semibold", "Segoe UI", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; font-size: 1em; line-height: 1.429em;"></a>Supported Devices</h3>
<div style="line-height: 1.429em !important; padding-bottom: 15px;">
<strong>RacingWheel</strong> supports any Xbox One certified or Xbox 360 compatible racing wheel without force feedback support.</div>
<div style="line-height: 1.429em !important; padding-bottom: 15px;">
Force feedback is supported on the following device models:</div>
<div class="contentTableWrapper" style="overflow-x: auto;">
<table responsive="true" style="border-collapse: collapse; border: 1px solid rgb(187, 187, 187); margin-bottom: 20px; margin-top: 20px; word-break: break-word;"><tbody>
<tr responsive="true"><th style="border: 1px solid rgb(187, 187, 187); color: #636363; padding: 10px 8px;">Manufacturer</th><th style="border: 1px solid rgb(187, 187, 187); color: #636363; padding: 10px 8px;">Model</th></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">Logitech</td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">G25</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">G27</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">G29</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">G920</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">MOMO Force Feedback Racing Wheel</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">Thrustmaster</td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">T300RS</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">T500RS</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">RGT Force Feedback</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">T150</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">TX</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">TMX</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">Fanatec</td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">CSR</td></tr>
<tr><td data-th="Manufacturer" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;"></td><td data-th="Model" style="border: 1px solid rgb(187, 187, 187); color: #2a2a2a; min-width: 80px; padding: 10px 8px; vertical-align: top;">HID-mode for the Xbox One</td></tr>
</tbody></table>
</div>
</div>
<div style="text-align: left;">
So, the wait should be over soon! </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Be patient, and wait for the Forza update... </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Cheers, </div>
<div style="text-align: center;">
<br /></div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com1tag:blogger.com,1999:blog-7840291950242203302.post-83179017302518257522016-05-25T16:49:00.000+01:002016-05-25T16:49:14.745+01:00Cannot find type System.MarshalByRefObject error in UWP appPlaying and learning with UWPs today, I found a strange error when compiling with VS 2015:<br />
<br />
<div style="text-align: center;">
<span style="color: red;">Xaml Internal Error error WMC9999: Cannot find type System.MarshalByRefObject</span></div>
<div style="text-align: left;">
<span style="color: red;"><br /></span></div>
<div style="text-align: left;">
It's a bit misleading, but one can easily see that it's related to DLL references. After dealing with it for a while, I realized some of my Nuget packages were not up to date. Updating them fixed the issue.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
More precisely, updating Microsoft.NETCore.UniversalWindowsPlatform to version 5.1.0 fixed the issue.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Hope it helps! </div>
<div style="text-align: left;">
<br /></div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-81034797372792670242016-05-06T14:19:00.001+01:002016-05-06T14:22:05.874+01:00DirectInput, XInput, Windows.Gaming.Input, y ahora qué? Forza Motor Sport 6<div class="" data-block="true" data-editor="e4lvv" data-offset-key="cp3jv-0-0">
<div class="_1mf _1mj" data-offset-key="cp3jv-0-0" style="direction: ltr; position: relative;">
Desde que supe que Forza Motorsport 6 iba a ser una UWP (app universal), y por tanto iba a tener una versión Windows 10, estaba muy expectante para ver qué pasaba con un tema muy concreto: DirectInput. </div>
<div class="_1mf _1mj" data-offset-key="cp3jv-0-0" style="direction: ltr; position: relative;">
<br /></div>
<div class="_1mf _1mj" data-offset-key="cp3jv-0-0" style="direction: ltr; position: relative;">
Microsoft lleva años dando bandazos con determinadas tecnologías de juegos (todos recordamos el bizarro caso de XNA). Y DirectInput es un caso parecido, aún más extremo si cabe. Para los que no lo sepáis, DirectInput es un módulo dentro de DirectX que se encarga(ba) de acceder a dispositivos como Joysticks, volantes, gamepads, etc. </div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="6gilq-0-0">
<div class="_1mf _1mj" data-offset-key="6gilq-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="6gilq-0-0"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="nn3a-0-0">
<div class="_1mf _1mj" data-offset-key="nn3a-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="nn3a-0-0">Cuando salió Windows 8, lanzaron el que (se suponía) iba a ser su sucesor: XInput. Pero inexplicablemetne hicieron una chapuza que solo soportaba gamepads, nada de dispositivos de entrada genéricos ni Force Feedback. </span></div>
<div class="_1mf _1mj" data-offset-key="nn3a-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="nn3a-0-0"><br /></span></div>
<div class="_1mf _1mj" data-offset-key="nn3a-0-0" style="direction: ltr; position: relative;">
En applicaciones Windows Desktop, uno puede seguir usando la librería, por muy deprecada que esté. De hecho, si vais a la web de Developers de Logitech y os bajáis su SDK, veréis que aún está basado en DirectInput: <a href="http://gaming.logitech.com/en-us/developers">http://gaming.logitech.com/en-us/developers</a></div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="bchcv-0-0">
<div class="_1mf _1mj" data-offset-key="bchcv-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="bchcv-0-0"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="4kinm-0-0">
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="4kinm-0-0">El problema, es que las Apps Universales no son aplicaciones desktop, sino aplicaciones del AppStore, y por tanto no pueden referenciar DLLs antiguas. Y ahí está la movida: no existe actualmente un sustituto válido para DirectInput.</span></div>
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="4kinm-0-0"><br /></span></div>
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="4kinm-0-0">Si uno va a la MSDN, para consultar qué tecnologías de juegos pueden usarse en UWP (<a href="https://msdn.microsoft.com/en-us/library/windows/apps/mt282476.aspx">https://msdn.microsoft.com/en-us/library/windows/apps/mt282476.aspx</a>), verá una sección específica para Input, en la que pone esto:</span></div>
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="4kinm-0-0"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpNK3h8YOndqHLj7uQ4yXDpoQv1K6Cvt_JShpmQB8bT8Um516Dnt5OxkprI3w34guHVXLRZB3TERkhbZH3lm4Wi-9MBsGjN30v-qdUGFFk2t2qPYOXKuAPTI6NpyLyOEY898t2_TZFyBg/s1600/Input.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="507" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpNK3h8YOndqHLj7uQ4yXDpoQv1K6Cvt_JShpmQB8bT8Um516Dnt5OxkprI3w34guHVXLRZB3TERkhbZH3lm4Wi-9MBsGjN30v-qdUGFFk2t2qPYOXKuAPTI6NpyLyOEY898t2_TZFyBg/s640/Input.png" width="640" /></a></div>
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="4kinm-0-0"><br /></span></div>
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
Hay un API nuevo rondando desde hace tiempo: Windows.Gaming.Input, pero nuevamente no es, ni de lejos, un sustituto a DirectInput. De nuevo, ni Force Feedback ni soporte para dispositivos de entrada genéricos HID. Solo gamepads. </div>
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
<br /></div>
<div class="_1mf _1mj" data-offset-key="4kinm-0-0" style="direction: ltr; position: relative;">
Así que cuando vi que Forza iba a ser una UWP, enseguida me pregunté cómo se lo iban a montar para dar soporte a los volantes y pedales de alta gama que los aficionados a este tipo de juegos suelen tener en casa. Sistemas que, en algunos casos, se acercan a los 1000 euros.</div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="daeu9-0-0">
<div class="_1mf _1mj" data-offset-key="daeu9-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="daeu9-0-0"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="c4br4-0-0">
<div class="_1mf _1mj" data-offset-key="c4br4-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="c4br4-0-0">Y hoy que se ha publicado la BETA, se ha desvelado el misterio: no lo hace. No soporta volantes. At all... </span></div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="4lnu6-0-0" >
<div class="_1mf _1mj" data-offset-key="4lnu6-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="4lnu6-0-0"><br data-text="true" /></span></div>
</div>
<div class="" data-block="true" data-editor="e4lvv" data-offset-key="5eeo5-0-0" >
<div class="_1mf _1mj" data-offset-key="5eeo5-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="5eeo5-0-0">Y claro, la gente está que trina... Los comentarios en la appstore son de risa... </span></div>
<div class="_1mf _1mj" data-offset-key="5eeo5-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="5eeo5-0-0"><br /></span></div>
<div class="_1mf _1mj" data-offset-key="5eeo5-0-0" style="direction: ltr; position: relative;">
<span data-offset-key="5eeo5-0-0">Supongo que en Microsoft estarán trabajando a destajo para convertir Windows.Gaming.Input en lo que siempre debió ser, pero con Microsoft nunca se sabe... :D</span></div>
</div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com1tag:blogger.com,1999:blog-7840291950242203302.post-72437525419197371382016-03-10T19:44:00.001+01:002016-03-10T19:44:59.914+01:00Advanced text replacements in Visual Studio using RegEx This is just a quick tip about making advanced text replaments in Visual Studio.<br />
<br />
You are probably used to the "Replace in Files" tool accessible through the Ctrl+Shift+H shortcut (see below). As you already know, you can make text replacements in multiple files, entire solutions, etc.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-BpblW2F0J0c/VuG9RxzmklI/AAAAAAAACNA/0Fe_JzNG0io/s1600/Replace.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-BpblW2F0J0c/VuG9RxzmklI/AAAAAAAACNA/0Fe_JzNG0io/s1600/Replace.jpg" /></a></div>
<br />
Using Regular Expressions (you can test them first using <a href="http://regexr.com/" target="_blank">this site</a>), you can make quite complex replacements that are really handy when refactoring code. Especially when those changes appear in many different places.<br />
<br />
For instance, let's say you were accessing attributes of a class all around your code. Something like:<br />
<br />
<div style="text-align: center;">
nd.Attributes[<span style="color: red;">"ATTRIB_NAME"</span>].Value = <span style="color: red;">"ATTRIB_VALUE"</span>; </div>
<div style="text-align: center;">
<br /></div>
<div>
And that you want to change that, replacing with a call to a method. Something like:</div>
<div>
<br /></div>
<div style="text-align: center;">
nd.SetAttributeValue(<span style="color: red;">"ATTRIB_NAME"</span>, <span style="color: red;">"ATTRIB_VALUE"</span>);</div>
<div>
<br /></div>
<div>
First, you need a way to find all appearances of something similar, no matter what's inside those strings (ATTRIB_NAME, ATTRIB_VALUE). That can be easily achieved with the following "Find What" argument:</div>
<div>
<br /></div>
<div style="text-align: center;">
<b>.Attributes\["(.*)"\].InnerText = (.*);</b></div>
<div>
<br /></div>
<div>
It includes the (.*) RegEx, which basically matches any string. By using the brackets (), it will also instruct Visual Studio to tag whatever it matches the RegEx in each find-and-replace operation. That way, we can use that values in the "Replace With" argument:</div>
<div>
<br /></div>
<div style="text-align: center;">
<b>.SetAttributeValue("$1", $2);</b></div>
<div>
<br /></div>
<div>
By using $1..$n, we specify found strings tagged in the "Find What" parameter. That way, the resulting replacement will include what we want, and re-use whatever was found in the original string. </div>
<div>
<br /></div>
<div>
<a href="https://msdn.microsoft.com/en-us/library/2k3te2cs.aspx?f=255&MSPPError=-2147217396" target="_blank">This page </a>includes more information about using RegEx in Visual Studio.</div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-82772808120370953132016-02-04T14:41:00.000+01:002016-02-04T14:41:18.342+01:00C# Intellisense making wrong suggestions inside foreach statements<div class="MsoNormal">
<span lang="EN-US">There’s a
bug in Visual Studio that has been annoying me for quite a long time: sometimes,
Intellisense doesn’t work well inside “foreach” statements in C#. It makes
suggestions, but the wrong ones. <o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US">For example, if I start writing “<span style="color: #2e75b6; mso-style-textfill-fill-alpha: 100.0%; mso-style-textfill-fill-color: #2E75B6; mso-style-textfill-fill-colortransforms: lumm=75000; mso-style-textfill-fill-themecolor: accent1; mso-themecolor: accent1; mso-themeshade: 191;">foreach</span> (System.Xm….)” with the intention to write “System.Xml.XmlNode”,
Intellisense only offers stupid options like System.FromXml that make no sense.
<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US">I’ve realized
that this only happens if the parenthesis are closed. So, if you delete the
closing parenthesis before start typing, Intellisense works as expected. <o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<br />
<div class="MsoNormal">
<span lang="EN-US">I´m sure
there are other ways to fix this, but for now unchecking the “Automatic brace
completion” option (see below) will suffice. </span></div>
<div class="MsoNormal">
<span lang="EN-US"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US">In fact, it’s an option I never liked,
so two birds with one stone… </span><span lang="EN-US" style="font-family: Wingdings; mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-char-type: symbol; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-symbol-font-family: Wingdings;">J</span><span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Wingdings; mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-char-type: symbol; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-symbol-font-family: Wingdings;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-2ZGRae0Yt-s/VrNUtU_qURI/AAAAAAAACMA/7qZtM7LfYEU/s1600/intell.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="371" src="https://1.bp.blogspot.com/-2ZGRae0Yt-s/VrNUtU_qURI/AAAAAAAACMA/7qZtM7LfYEU/s640/intell.png" width="640" /></a></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Wingdings; mso-ansi-language: EN-US; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-char-type: symbol; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-symbol-font-family: Wingdings;"><br /></span></div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-73326896938905809472015-12-16T00:26:00.003+01:002015-12-16T00:26:52.361+01:00Changing UI Language in Visual Studio 2015For some reason, I usually make the same mistake, over and over again: I
install Visual Studio 2015 Community Edition using the web link provided by
Microsoft. The problem with that is that the web automatically detects your
system’s language, and downloads the corresponding version of VS. In my case, my
PCs are usually in Spanish, so VS is downloaded and installed in Spanish. And I
usually don’t realize until it’s too late…<br />
<br />
I hate using certain apps in Spanish, and VS is one of those. I prefer using
it in English, and as the installation takes ages, I decided to switch the UI
language instead of uninstalling and installing all over again (which would be
cleaner, I guess).<br />
<br />
<strong>First problem </strong>is that VS only comes with one language: the
one you chose when downloading. So, no English available…<br />
<br />
<br />
So, I decided to search for a language pack, which is quite easy. The
<strong>second problem </strong>is that the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=48157">official
MS link for that</a> always seems to download the Spanish language pack. No
matter what. Please note the installer says “<i>Paquede de idioma 2015 – ESN</i>”
instead of “<i>2015 Language Pack – ENU</i>”:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhebPl3izK4MiPu0bBBDPEighcOxNrfcNR8FzvwpO9Bngg7_HQP7dAMOQ4SXeofkCvTM6h32nEPe04qL73dUss5faHxwKgcOt0dExiFT4B4-eGObodtlix1NagxH5N3wX1B_eycR90IPZg/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhebPl3izK4MiPu0bBBDPEighcOxNrfcNR8FzvwpO9Bngg7_HQP7dAMOQ4SXeofkCvTM6h32nEPe04qL73dUss5faHxwKgcOt0dExiFT4B4-eGObodtlix1NagxH5N3wX1B_eycR90IPZg/s400/11.jpg" width="285" /></a></div>
<br />
<br />
<strong>Third problem </strong>is that if you try to install the Spanish
language pack, it won’t detect that VS already includes that language, and will
go through the whole installation process (and wasting hard drive space, I
assume). It’s completely useless, as VS already has that language, and as a
result VS Internationalization Options will remain the same. <br />
<br />
So, if you want to download the proper lang pack, use <a href="https://www.visualstudio.com/downloads/download-visual-studio-vs">this
other link instead</a>. It will provide you with the correct installer. After using it, now everything is working as expected, and it's installing the proper
<strong>Language Pack – ENU.</strong><br />
<strong><br /></strong>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-6JTgyqKo8mQ/VnChQgT0r-I/AAAAAAAACKo/XAVE1BCYB0k/s1600/22.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://2.bp.blogspot.com/-6JTgyqKo8mQ/VnChQgT0r-I/AAAAAAAACKo/XAVE1BCYB0k/s400/22.jpg" width="271" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-5ofMjdIwtmg/VnChaVU0dkI/AAAAAAAACKw/LEUSOHZ8IDY/s1600/33.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="http://2.bp.blogspot.com/-5ofMjdIwtmg/VnChaVU0dkI/AAAAAAAACKw/LEUSOHZ8IDY/s400/33.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
After English UI is properly up and running, you can proceed to uninstall the
previous Spanish language pack, if you want to.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-36151383919241680252015-10-02T10:01:00.001+01:002015-10-02T13:15:47.257+01:00eDreams–Europ Assistance: Que no te engañen con el seguro de viaje<p>Hace poco nos tocó cancelar nuestras vacaciones por motivos médicos. </p> <p>Gracias a Dios, cuando contraté todo escogí siempre las opciones reembolsables, y para los vuelos contraté un seguro de cancelación en la confianza de que ante cualquier contratiempo, te devolverían el dinero fácilmente. Iluso de mi… </p> <p>La realidad ha sido bien diferente, con un proceso tortuoso y complejo. Muy complejo. Se nota a la perfección que está diseñado para que el cliente se canse, se de por vencido o simplemente no sepa o no pueda terminar la solicitud a tiempo. </p> <p>Aquí algunos consejos para tener éxito a la hora de hacer la reclamación…</p> <h3><font size="4">Contratación del seguro</font></h3> <p>Multitud de empresas te ofrecen contratar un seguro de cancelación. Como siempre pasa con los seguros, contratarlos es tan sencillo como marcar una casilla. Pero a la hora de reclamar algo, la cosa cambia.</p> <p>En mi caso, compré los vuelos a través de <a href="http://www.edreams.es/">eDreams</a>, como he hecho muchas veces. Y como siempre, contraté el seguro de anulación por 45 euros (esta es la primera vez que me toca utilizarlo):</p> <p><a href="http://lh3.googleusercontent.com/-KgtbJgTyLmY/Vg5HvQPl2gI/AAAAAAAACFc/E-Rwtf2yG_E/s1600-h/image%25255B7%25255D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="http://lh3.googleusercontent.com/-znkcpK53tOM/Vg5Hv9DWlgI/AAAAAAAACFg/D0g79XZo7AY/image_thumb%25255B5%25255D.png?imgmax=800" width="685" height="247" /></a></p> <p>En este caso, el seguro lo proporciona la empresa <a href="http://www.europ-assistance.es/">Europ Assistance</a> (especializada en seguros de viaje), y aquí empiezan a llegar las trampas:</p> <p><em><strong>Nota</strong>: cuando digo “trampas”, no quiero decir que la empresa haga algo ilegal. Al contrario, se aseguran de que todo lo que hacen es perfectamente legal, con legiones de abogados para diseñar estos procedimientos. Los hacen lo suficientemente complicados para dificultar la comprensión del cliente, pero sin pasarse para que nadie les pueda acusar de fraude. </em></p> <h3><font size="4">1ª Trampa: la página de contratación</font></h3> <p>Como siempre, la página donde tu escoges añadir un seguro de cancelación es de lo más simple: un click de ratón basta para añadir el seguro a tu compra. </p> <p>Lamentablemente, también es muy desinformativa… Lo que te dicen es, básicamente: </p> <p><em>“Añade tranquilidad absoluta con tu seguro de cancelación: si anulas el viaje, o incluso si pierdes tu vuelo, te reembolsamos el importe (haz clic aquí para ver condiciones)”.</em></p> <p>Nada más lejos de la realidad...</p> <h3><font size="4">2ª Trampa: el resumen del condicionado</font></h3> <p>Como es habitual, el condicionado del seguro viene en un link a parte (donde decía “haz clic aqui para ver condiciones”). En este caso, ese enlace te lleva a <a href="http://www.taeds.com/aonseguros/PDF/ECCNXAST152EDSPESES.pdf">esta página</a>. <em><strong></strong></em></p> <p>Pero cuidado!! que ese <strong>no es el condicionado de la póliza real</strong>, sino un resumen. Si os fijáis, nada más empezar a leer, te encuentras con un nuevo disclaimer: “Para más información acerca de las condiciones generales de su seguro, acceda a este link”. </p> <p><a href="http://lh3.googleusercontent.com/-Wzv9tyKHVlc/Vg5HwSiaAKI/AAAAAAAACFo/6nuaAH8jBQ0/s1600-h/image%25255B15%25255D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="http://lh3.googleusercontent.com/-OCfyVV4hKsc/Vg5Hw6MnzCI/AAAAAAAACFw/vZE_EFdIvNI/image_thumb%25255B8%25255D.png?imgmax=800" width="665" height="161" /></a></p> <p>Y es ése segundo link el que cuenta. Este primero está diseñado única y exclusivamente para confundirte aún más, haciéndote creer que has leído las condiciones, cuando no es así. Es un simple panfleto.</p> <p>Si pincháis en ese <a href="http://www.taeds.com/aonseguros/PDF/CGCNXAST152EDSPESES.pdf">segundo link</a>, accederéis a un contrato legal de 18 páginas, donde se especifica todo el condicionado real, por supuesto en idioma de abogados, lo más rebuscado posible para dificultar su comprensión y aburrir al lector para que desista. </p> <p>¿Diferencias entre el contrato y el resumen? Pues unas cuantas…</p> <h4>Ejemplo 1 – pérdida del vuelo</h4> <p>En el resumen se indica que el seguro te cubre en caso de que pierdas el vuelo, con el siguiente texto:</p> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLqmdFT3j0LCe1nhpzhTziKV_RLtetuFsCbp6QxdfzXI2zCc9uWnlTD2bto71z2j26PGrtk1mZGoDLqv8G0UuBDRq09Emwmyerh0QWL8FmYifwAGk1aphr8fkfJPi1LEwqy10ss-Rfo_8/s1600-h/image%25255B22%25255D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMehL00vG9wSVKuJFxIQPKB43YB7J2B5VXZl_81Sx556m_bmrN82WMi97l4KAL3TLmDoEfgcfaSA-YTwJ1e-2gEbXK0mTiPlsYmedpm4IuOTyX8LdxGkkl9oF-eVVHEsiPnqck6_1n464/?imgmax=800" width="500" height="90" /></a> <p>Si ahora leéis el contrato, en la página 2 encontraréis exactamente lo mismo (un pelín más explicado, pero lo mismo). Sin embargo, <strong>en la página 14 se añaden condiciones adicionales</strong>:</p> <p><a href="http://lh3.googleusercontent.com/-6w6dyJ1-Y50/Vg5HyIBi4kI/AAAAAAAACGI/JkJayWYLr9o/s1600-h/image%25255B38%25255D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="http://lh3.googleusercontent.com/-xNwE4fmk-QU/Vg5HykUlNiI/AAAAAAAACGQ/MJeupj7J5rc/image_thumb%25255B21%25255D.png?imgmax=800" width="743" height="148" /></a></p> <p>Es decir, el seguro SOLO te va a cubrir la pérdida de vuelo si:</p> <ul> <li><strong>Si puedes justificar por escrito que has perdido el vuelo por causa ajena a tu voluntad</strong>. Por ejemplo: si un autobús llega tarde y has perdido el vuelo por eso, tendrás que ponerte en contacto con la empresa de transportes para que te de un justificante oficial que certifique que dicho autobús llegó tarde. También tendrás que aportar el billete que justifica que tú ibas en ese autobús, y probablemente un justificante de que la empresa no te ofreció alternativa para llegar a tiempo al aeropuerto. Algo que es muy poco probable que consigas. Y eso si la causa del retraso es una de las que el seguro estipula, que si no, olvídate. </li> <li><strong>Si además has comprado otro vuelo al mismo destino en las 48 horas siguientes al vuelo inicial</strong>, y aportar factura de la compra. Si al perder el vuelo decides cancelar las vacaciones, si no encuentras otro vuelo disponible, o si no te puedes permitir pagar el precio (no me imagino cuanto puede costar un vuelo comprado con 1 solo día de antelación), despídete. El seguro no te cubrirá. </li> </ul> <p>Y si finalmente consigues justificar todo, solo te van a pagar el 50% del billete (esto si estaba en el resumen inicial). Lo que no decían en el resumen inicial es que te pagan el 50% del importe <strong>sin tasas</strong>. Así que aunque consigas que te devuelvan algo, será mucho menos de lo que creías.</p> <h4>Ejemplo 2 - Cancelación del viaje</h4> <p>Este es nuestro caso. Y si ingenuamente (como yo) crees que simplemente vas a poder llamar y decir que quieres cancelar el vuelo (como te prometen cuando lo contratas), vas listo… </p> <p>Esto es lo que dice el resumen:</p> <p><a href="http://lh3.googleusercontent.com/--PTPKudLZgI/Vg5J4Y-VflI/AAAAAAAACG4/uiSupbKBOng/s1600-h/image%25255B47%25255D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGrdSb4oKICjLJTfeW22ythum0zTgK3xfEHnQrAnoRxGFVQDAOmaaNACkxWY9qLgh52M03w9du-X70_EDIaj9znhbcQQvw1qXzoEHbA0rgiYTEbJvOj3Ino14pvicsRMCrhvP-N7Bw4ls/?imgmax=800" width="528" height="125" /></a></p> <p>Sin embargo, cuando empiezas a leer las condiciones del contrato, te das cuenta de que el seguro solo te cubrirá en un periodo muy concreto de tiempo, y si la cancelación es por un motivo “razonable y necesario”. Pero claro… ¿qué es eso? Pues te ponen ejemplos, como “fallecimiento, enfermedad o accidente grave del asegurado” etc.</p> <p>El problema es que, alegues lo que alegues, debes justificarlo con un informe médico o de una autoridad competente, que certifique que no puedes realizar el viaje. Y si te diagnostican una enfermedad, o cualquier cosa, tienes que compartir tus miserias con el tipo del seguro, y el unilateralmente decidirá si lo que te ha pasado es lo suficientemente grave. Algo bastante desagradable, la verdad.</p> <p>Y por supuesto, si finalmente eres de los pocos que consiguen su devolución, en la página “mil” del contrato se detallan las penalizaciones y franquicias que te aplicarán, así que nuevamente no te van a devolver la cuantía completa (ni el porcentaje que se indica en el resumen).</p> <h3><font size="4">3ª Trampa: el proceso de reclamación</font></h3> <p>Lo más probable es que tu caso quede descartado nada más empezar y no veas ni un duro. Bien porque no reclamas a tiempo, bien porque no puedes conseguir la documentación que te piden, o simplemente porque no entras en uno de los casos contemplados.</p> <p>En nuestro caso, tuvimos suerte porque era por motivo médico. Así que decidí no rendirme, y seguir adelante con todo el proceso. No tanto por el dinero (que también), si no por un tema de dignidad… ESTOS TIPEJOS NO ME IBAN A GANAR CON TRUCOS TAN CUTRES. </p> <p>Así que me puse manos a la obra:</p> <ul> <li>En primer lugar, nadie te explica cómo iniciar un proceso de reclamación de reembolso. En mi caso, tuve que llamar por teléfono al número de contacto eDreams, donde me dijeron que debía reclamar a la compañía de seguros (me enteré de su existencia en ese momento), no a ellos. Me dieron el teléfono, y al llamar: primer problema… solo atienden de lunes a viernes en horario de oficina. Así que si estás en fin de semana, no podrás hacer nada hasta el lunes. </li> <li>Por supuesto, cada llamada es a uno de esos números que cuestan un ojo de la cara. Y cada vez que llamas tienes que pasar por una interminable lista de preguntas tipo: “Si desea que le atendamos en inglés, pulse 3…” “Si desea comunicar un siniestro, pulse 1..”. Para cuando consigues hablar con alguien, ya llevas 2 o 3 minutos al teléfono, con los consiguientes 2 o 3 euros de factura. Habré llamado unas 10 o 12 veces, así que imaginad… </li> </ul> <p>Cuando por fin consigues empezar el trámite, no te ayudan demasiado. Te dan un link, y te remiten a su web, donde hay unas instrucciones mínimas indicando PARTE de la documentación que debes aportar. </p> <p>Y digo “parte”, porque terminan pidiéndote mucha más documentación de la que ahí te indican. Además, te la piden paulatinamente, con un email por semana aproximadamente. Supongo que para ver si pierdes tiempo y se te pasa el plazo de la reclamación, o símplemente te cansas.</p> <p>En nuestro caso, nos terminaron pidiendo la siguiente documentación:</p> <ul> <li>Confirmación de reserva de los vuelos </li> <li>Copia de las tarjetas de embarque </li> <li><strong>ATENCION: </strong>Certificado médico que indica el motivo por el que no puedes hacer el viaje. En nuestro caso, a las semanas de enviarlo nos dijeron que no era lo suficientemente detallado. Llamé por teléfono a preguntar qué era lo que le faltaba al informe, y después de hablar con un asesor, me reconoció que no le faltaba nada y que estaba bien. Pero por de pronto lo intentaron, a ver si colaba. </li> <li><strong>ATENCION</strong>: Certificado oficial de parentesco de mi mujer!!: A pesar de que el seguro estaba a nombre de los dos, y los billetes iban a nombre de los dos, dado que el problema médico solo afectaba a uno (ya sería mala suerte que afectara a ambos…), te piden que certifiques por qué el otro pasajero (el que está sano) no puede viajar. En este caso, justificando que somos cónyuges… Alucina!!! Así que tuve que mandar una copia del libro de familia. Increíble… </li> <li><strong>ATENCION: </strong>Certificado de las dos compañías aéreas (en mi caso Vueling y Ryanair) de que efectivamente no te presentaste al vuelo. Esto se llama No-Show Letter, y hay que solicitarlo a cada compañía. En mi caso tardaron más de una semana en enviármela. </li> <li><strong>ATENCION</strong>: Factura oficial de los vuelos, no las tarjetas de embarque, ni la reserva… facturas. Y hay que solicitarlas a las compañías aéreas. Nuevamente, tardan días en proporcionártelas… En ellas, debe indicarse el nombre de los pasajeros y el importe exacto de los billetes. También es necesaria cualquier otra factura de gastos adicionales que queramso reclamar (reserva de asientos, sobrecoste por equipaje, etc).<!--EndFragment--> </li> </ul> <p>Y como decía todo esto te lo van pidiendo paso a paso. Semana tras semana, para que te desesperes y te rindas. Además, nunca te dejan claro como debes proporcionar la documentación: en teoría, tienen una web donde debes ir subiéndola, pero cuando llamaba después de hacerlo al operador de turno, no le constaba haberla recibido. Lo único que funcionó en mi caso fue responder a los emails que me enviaban, adjuntando la documentación ahí.</p> <p>Además, si pasan más de X días sin noticias tuyas desde la última comunicación, cierran el caso y listo. En fin, que a no ser que te empeñes mucho mucho mucho, como yo, no lo consigues ni de coña. El ratio de reclamaciones de reembolso aprobadas por esta gente debe de ser de risa…</p> <h3><font size="4">4ª Trampa: morir matando</font></h3> <p>Cuando ya han claudicado, cuando ya crees que vas a poder gritar VICTORIA!!! Cuando no les queda más remedio que admitir que te tienen que devolver la pasta, te mandan un email como éste:</p> <p><a href="http://lh3.googleusercontent.com/-BlBm0U0qc7I/Vg5HzIVdxjI/AAAAAAAACGc/JJHTbELgXIg/s1600-h/image%25255B42%25255D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6ay-LHX1GG9h77KqOpD-aG7xuYW7LC_634sdOpOpnWwqC3m67enNEWHqgOIQzOpjO9A1OVKQnhlwZoru8ijfR1ukyctue4NLoXkNfq37QDEWuHCLox0NGdVlfo7jmNubHNazQsiii6Ms/?imgmax=800" width="669" height="370" /></a></p> <p>Pero por supuesto intentan colarte algo de última hora: en nuestro caso, la cancelación era por motivo médico justificado, lo cual según su contrato implica una penalización (en forma de franquicia) del 10%. Pero según el email de arriba, nos han aplicado una penalización del 20%. Sin explicación ni motivo aparente… </p> <p>Y como a cabezón no me gana nadie, también les he reclamado eso… Nuevamente no es por el dinero, sino por una cuestión de que no se salgan con la suya… Y ¿cual ha sido la respuesta? Que la franquicia del 10% solo se aplica en caso de “enfermedad grave”, y que según la documentación aportada, el asesor del seguro ha decidido que lo nuestro no es suficientemente grave. Acojonante… </p> <h3><font size="4">5º: Los números de esta gente</font></h3> <p>En nuestro caso, el coste de los vuelos era alrededor de 500€. Pero ese no es el importe real que ellos arriesgan, ni lo que vas a recibir si completas la reclamación con éxito. Estas son las cuentas del proceso:</p> <blockquote> <p>500 € <br />- 45€ del precio del seguro <br />- 60 € de deducción por asegurado (a saber qué es esto) <br />- 36€ de factura de teléfono que les dejas en llamadas <br />- 100€ de penalización en concepto de franquicia (20%)</p> </blockquote> <blockquote> <p><strong>Total: 259 Euros</strong></p> </blockquote> <p>Esa es la cantidad que le vas a sacar al seguro, en el mejor de los casos. Y por supuesto, te pagan a N días, para sacarle rédito a ese dinerito mientras tanto.</p> <p>Así que si contamos como es el proceso de reclamación, y que muy muy poca gente logrará completarlo con éxito… Realmente tienen un negocio <strong>REDONDO</strong>.</p> <p>En fin. La imagen que mejor describe cómo me he sentido a lo largo del proceso es esta:</p> <p><img style="float: none; margin-left: auto; display: block; margin-right: auto" src="http://quedivertidos.com/uploads/images/10/esto-es-esparta-5426fbddeace0.jpg" width="379" height="259" /></p> <p><img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Smile" src="http://lh3.googleusercontent.com/--mALsNHkcro/Vg5H0fLA9zI/AAAAAAAACGo/mnR76XvyEq4/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /></p> Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com1tag:blogger.com,1999:blog-7840291950242203302.post-44802002389879367362015-08-27T10:53:00.001+01:002015-08-27T10:53:20.662+01:00Cómo utilizan la estadística para engañarte<p>Estadística… Esa ciencia que dice que si tu te comiste un pollo y yo no comí nada, cada uno de los dos nos comimos medio pollo. Tan falsa y tan cierta, tan inútil y tan necesaria. Todo depende de quién la use y para qué. Desde un científico que necesita analizar la veracidad de sus resultados, hasta un político que busca un argumento convincente para su propuesta, sea cierto o no.</p> <p>Un ejemplo: últimamente se ha hecho viral esta foto:</p> <p><a href="http://lh3.googleusercontent.com/-89rqzMIEI_I/Vd7eAD6SVdI/AAAAAAAACEY/pB3aQ3wnZo4/s1600-h/precios%25255B5%25255D.jpg"><img title="precios" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="precios" src="http://lh3.googleusercontent.com/-crhtLVv0iDQ/Vd7eAv3hZoI/AAAAAAAACEc/p1j1WJKOBYw/precios_thumb%25255B2%25255D.jpg?imgmax=800" width="378" height="392" /></a></p> <p>En ese papel se comparan precios de 1999 y 2011, y afirma que son 4 veces más caros. Lo cierto es que si uno hace el cálculo, el incremento no es de 4 veces más sino “solo” 2.5 veces más. Pero da igual… es bastante cierto todo lo que pone, y un incremento de 2.5x sigue siendo un escándalo. Así que si, ¡oye! tiene su punto. Y cuando uno lo lee, y repasa mentalmente los precios que recuerda de aquellos años, enseguida dice: <strong>“¡tiene más razón que un santo!, con el Euro, efectivamente nos la han metido doblada”. </strong>Bueno, puede que sí, y puede que no…</p> <p>La gente no suele pararse a pensar en un “error” básico que se comete casi siempre: utilizar un conjunto de muestras demasiado pequeño y desviado. En otras palabras: de los miles y miles de productos que consumimos, ahí solo menciona 8 o 9. </p> <p>Es evidente que la validez de una estadística depende del conjunto de muestras utilizadas, y de lo bien (o mal) que representa a la población general. Pongamos otro ejemplo: me he tomado unos minutos para buscar anuncios en Youtube de los años 1999-2001, para poder comparar otros precios con los actuales, y he obtenido estos resultados:</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-WLoOmoGVprAKa6UcvLuopSBMQWgBWjgeiSvd8euVf3MoX5VM3B7bO67Dpe0EoHDBLdfV8lbqm_J0PVjxCQf-69baP8fYpvlfAjJnqrMhETjq3TuShyphenhyphenIeGnkT1J6XA19Znwm-nmqCqJ8/s1600-h/image%25255B4%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://lh3.googleusercontent.com/-QNJDSTTUY5Q/Vd7eBuGY8zI/AAAAAAAACEw/zeK_Hj5IPf8/image_thumb%25255B2%25255D.png?imgmax=800" width="647" height="275" /></a></p> <p>Si calculáis la media del incremento (o decremento) de precios en esos casos, ¿sabéis que sale?</p> <p align="center"><font size="4"><strong>1.0x</strong></font></p> <p>Es decir, según esa tabla, los precios no han subido absolutamente nada en los últimos 15 años, algo que sabemos es <strong>rotundamente falso</strong>. </p> <p>Si ahora combinamos ambas tablas, extendiendo el espacio de muestras para que incluya todos los productos, obtenemos lo siguiente:</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSfLvRR8uQszIf2XYfNo24HQUITfx2YT1wBamA3ppQIQFCwW8HdHNLDoIdsIJnxauFjQdcisp3KzcP-FEx7s_nhbXAl0kGc2UXGpRGLfCVuW3thUlNl0ZKQOdoFdi85TuYpUbz_4MrRx0/s1600-h/image%25255B8%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlYcIQKYcn6WdUsU1Rpmrb9ktG7SMpzpQ-D4fxoTQJr9HpIIuaCitSBFv2oow6aI0u55hXPfvwfLZ3-hk8CNiWays1v0r0opVYjJ5tZkvysMv7ds0gtw76a2J8sckhdfc86fTXILW-aSI/?imgmax=800" width="665" height="425" /></a></p> <p>Si de nuevo calculamos la media del incremento de precios, esta vez obtenemos: <strong><font size="4">1.6x. </font></strong>Bastante alejado del 1.0x, pero más aún del 4x que mencionaba el papel de la foto. </p> <p>Es evidente que la fiabilidad y precisión de una estadística va creciendo conforme se aumenta el espacio de muestras. El problema es: ¿a partir de qué punto se considera que el espacio de muestras representa con suficiente fiabilidad al conjunto de la población? La estadística ofrece herramientas para medir estas desviaciones, pero el problema es que nadie las utiliza. Más aún, cuando se ofrece una estadística, ni siquiera nos informan de cómo era el espacio de muestras… </p> <p>Otro ejemplo: las predecibles encuestas de determinados canales de Tv, que siempre obtienen resultados que se alinean con su ideología:</p> <p><img style="float: none; margin-left: auto; display: block; margin-right: auto" src="http://oi47.tinypic.com/t87oep.jpg" width="449" height="287" /></p> <p>Lo que no nos dicen es que quizá en esa encuesta hayan votado 14 personas (que ya de por sí están sesgadas por el mero hecho de ver ese canal). Es otro ejemplo de un espacio de muestras ridículamente sesgado, cuyos resultados no sirven para nada (más allá de para intentar manipular). </p> <p>El problema es que estamos tan acostumbrados a esto, que ni siquiera nos preocupamos de informarnos como es debido. Cuando oímos una estadística, el único filtro por el que la pasamos es nuestra propia ideología: si es algo que se alinea con nuestra forma de ver la vida, nos lo creemos sin vacilar. Si no, simplemente lo ignoramos o (entonces sí) decidimos que probablemente ese periodicucho es parcial o partidista. </p> <p>Así que si… <strong>somos extremadamente fáciles de manipular</strong>. Y esto lo hacen absolutamente todos los medios y partidos. De derecha, de izquierda, de centro y de dentro… </p> <p>De igual forma que los alimentos deben incluir información nutricional, o los medicamentos informar sobre sus efectos secundarios, <strong><em>deberíamos exigir que los medios, los políticos, todo el mundo… estuvieran obligados a informar sobre el tamaño y la representatividad de las muestras que ha utilizado al obtener una estadística</em></strong>. </p> <p>Así, la próxima vez que nos la intenten colar algo como “no se qué problema está mejorando (o empeorando)” y tengan que reconocer que solo han preguntado a 200 personas, no solo sabremos que no debemos hacer caso a ese dato, sino que la persona en cuestión quedará en ridículo y en el futuro se verá obligada a realizar estadísticas más realistas. </p> <p>He hecho una encuesta en mi oficina, y el 85% de la gente está de acuerdo conmigo en esto… <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Smile" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCsmjjEHqjeO_ctbpEnBfYc9yoPTZhyphenhyphenPd_2RJ-jE3EGhgnnJybT-PAfvF_zfk-qDUa5eb42UnfUqL28ad7939eXMQaweLLHS_0qWrLS3fCk6-uaae6n3lF-AsCXA4LtmyfbDayNdaz9cw/?imgmax=800" /></p> Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-68673484722210822772015-05-29T12:19:00.001+01:002015-05-29T12:19:27.279+01:00Tu carrera profesionalMucha gente sale de la universidad sin tener ni idea de qué puede esperar de
los años siguientes. El otro día me topé con una imagen que describe muy muy bien la progresión profesional en corporaciones, casi sin importar el sector concreto en el que se muevan.<br />
<br />
Ahí va...<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-5zA99f4Hs-c/VWhKr4FH_cI/AAAAAAAACEE/J2bHb1raxCk/s1600/STAGES.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="293" src="http://1.bp.blogspot.com/-5zA99f4Hs-c/VWhKr4FH_cI/AAAAAAAACEE/J2bHb1raxCk/s640/STAGES.jpg" width="640" /></a></div>
<br />
<br />
Cuando sales de la universidad, eres un <strong>JUNIOR</strong>. No importa
cuánto sepas. No importa lo bueno que seas. Eres JUNIOR porque no tienes
experiencia. No tienes ni idea de cómo se trabaja en un entorno profesional y
si, vas a necesitar ayuda para todo.<br />
<br />
Cuando han pasado unos años, normalmente 5, o 6, puedes considerarte
<strong>SENIOR, </strong>y si has hecho las cosas bien, tu empresa debería
reconocerlo así. Eres capaz de contribuir de forma independiente. La mayor parte
de las veces no necesitas ayuda de nadie, sino que serás tu quien ayude a los
JUNIORS.<br />
<br />
Tras otros 4 o 5 años, estarás listo para dar el siguiente salto, y podrás
pasar a ser <strong>MANAGER, </strong>contribuyendo a la empresa a través de los
demás. Ésta es la fase en la que diriges tu propio equipo y delegas en miembros
SENIOR y JUNIOR para implementar algunas tareas.<br />
<br />
Y nuevamente, si sigues haciendo las cosas muy muy bien, cuando tengas 14 o
15 años de experiencia podrás aspirar a ser <strong>DIRECTOR, </strong>y hacer
contribuciones estratégicas a la empresa. Decisiones que definen el rumbo de la
misma. <br />
<br />
Esto es lo que hay, y ese es el tiempo que lleva. <br />
<br />
<br />
Ánimo!! :)Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-20035880713899130002014-12-13T11:17:00.001+01:002014-12-13T11:17:43.627+01:00Imagen del día…<p>O más bien del jueves pasado… jajajaa….</p> <p><a href="http://lh3.ggpht.com/-55tTuWfYmmU/VIwSQvNYzXI/AAAAAAAACCA/itAADTvji7Y/s1600-h/Alonso%25255B4%25255D.jpg"><img title="Alonso" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="Alonso" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIYOrG41LBZcc4Wpj8sFI_e63BvAOufBNJC1l0LLoXLsAgGtYDn8LxEy1GXGOJVP3_wClwW8z55a9uVGio3HhVsY8nnlG3gVIklmhwvKY4bS6tNPXCSx5U2XAKHzNCPdmpZz9umEV9W5M/?imgmax=800" width="570" height="395" /></a></p> Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-33918060916270631462014-12-09T20:06:00.000+01:002014-12-13T11:18:16.891+01:00Imagen del dia<div style="text-align: center;">
<a href="https://lh3.googleusercontent.com/-TUIHIb3Qz4Q/VIdIsGNzQUI/AAAAAAAACBw/KQ2kzgtdtDU/s1024/%25255BUNSET%25255D.jpg"><img height="360" src="https://lh3.googleusercontent.com/-TUIHIb3Qz4Q/VIdIsGNzQUI/AAAAAAAACBw/KQ2kzgtdtDU/s640/%25255BUNSET%25255D.jpg" width="640" /></a></div>
<div style="text-align: center;">
Impresionante las cosas que se pueden hacer con la cámara del Lumia 930!!</div>
Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-31478243080738349832014-08-26T14:40:00.001+01:002014-08-26T14:40:26.768+01:00Inyectando TypeEditors dinámicamente<p>Muchas aplicaciones de edición todavía utilizan Windows Forms. Y muchas de ellas (sobre todo si son prototipos rápidos o herramientas internas) utilizan el PropertyGrid como método rápido y eficiente para editar propiedades de objetos.</p> <p>Una de las funcionalidades más utiles de los PropertyGrids, es la posibilidad de definir TypeEditors para las propiedades de un objeto, de forma que el sistema escogerá automáticamente un interfaz de usuario específico para editar su valor. .Net incluye por defecto algunos de ellos, como el ColorPicker o el DateTimePicker:</p> <p><img style="float: none; margin-left: auto; display: block; margin-right: auto" src="http://forums.codeguru.com/attachment.php?attachmentid=3019&stc=1&d=1053415135" /></p> <p>Cuando los TypeEditors por defecto no son suficiente, es una gran idea desarrollar tus propios editores, para hacer tus editores lo más eficientes posible. Por ejemplo, el selector de colores por defecto de .Net no permite escoger valores para el canal Alpha (transparencia). La solución es sencilla y fácil: podemos implementar nuestro propio editor que sí lo permita. </p> <p>Ahora bien, <strong>¿qué ocurre si queremos aplicar ese TypeEditor a todas las propiedades de un tipo definido en otra DLL? </strong></p> <p>Es un caso bastante frecuente. En mi entorno, por ejemplo, tengo mi propia clase para almacenar colores, llamada Color4, pero está definida en una DLL específica para operaciones matemáticas. Es una DLL muy básica que quiero mantener con el menor número de referencias posible, para evitar dependencias todo lo que pueda. Por este motivo, es imposible definir el TypeEditor en dicha DLL, ya que eso implicaría referenciar System.Windows.Forms, System.Drawing, y unas cuantas cosas más que no tienen que estar ahí. A fin de cuentas, es mi editor visual el que debe depender de Windows Forms, y no mi DLL de operaciones matemáticas. ¿La solución?</p> <h3>Inyección dinámica de editores de tipo</h3> <p>La solución es asignar el <em>TypeEditor</em> dinámicamente, programaticamente, o como queráis decirlo. En lugar de incluirlo en tiempo de compilación, con clásico código…</p> <p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; text-autospace: ; mso-layout-grid-align: none" align="center"><font face="Consolas"><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt"> </font></span><font style="font-size: 9.5pt">[</font></span><font style="font-size: 9.5pt"><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#2b91af">EditorAttribute</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">(</span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#a31515">"Color4Editor"</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">, </span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#0000ff">typeof</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">(System.Drawing.Design.</span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#2b91af">UITypeEditor</font></span></font><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font style="font-size: 9.5pt">))]</font></span></font></p> <p align="left"><span lang="EN-US" style="font-size: 9.5pt; font-family: consolas; background: white; color: black; mso-highlight: white; mso-ansi-language: en-us"> </span>…lo añadiremos en tiempo de ejecución, algo posible gracias a la clase <code><font color="#000000"><em>TypeDescriptor</em> y su método <em>AddAttributes.</em></font></code></p> <p align="left"><code><font color="#000000" face="Verdana">Basta con invocar algo como lo siguiente el el inicio del programa:</font></code></p> <p align="left"><code><font color="#000000" face="Verdana"></font></code></p> <p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal" align="center"><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#2b91af">TypeDescriptor</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">.AddAttributes(</span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#0000ff">typeof</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">(</span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#2b91af">Color4</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">), </span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#0000ff">new</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"> </span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#2b91af">EditorAttribute</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">(</span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#0000ff">typeof</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">(</span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#2b91af">Color4Editor</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">), </span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#0000ff">typeof</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">(</span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><font color="#2b91af">UITypeEditor</font></span><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us">)));</span><span lang="EN-US" style="mso-ansi-language: en-us"></span></p> <font face="Consolas"><span lang="EN-US" style="font-family: ; background-image: none; background-repeat: repeat; background-attachment: scroll; background-position: 0% 0%; color: ; mso-highlight: white; mso-ansi-language: en-us"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt"></font></span></span></font> <p align="left"><code><font color="#000000" face="Verdana">De esta forma, mantenemos las DLLs limpias de referencias innecesarias, y solo dependeremos de Windows Forms y similares donde realmente se necesita: en el editor.</font></code></p> <p align="left"><code><font color="#000000" face="Verdana">Listo ! <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Smile" src="http://lh4.ggpht.com/-WdA2fJSlztE/U_yOR-kAnaI/AAAAAAAACAo/cOuswinml04/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /></font></code></p> Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-45697301043789037732014-07-29T23:04:00.001+01:002014-07-29T23:04:14.248+01:00Imagen del día…<p>Con cariño para todos los ingenieros y arquitectos… <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Sonrisa" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq_oZM1A3BMfU5l4-sxRzcOhCsq1yb_ELglxhY3gI2mEzVvnG9Hdtn7Vb5xthMCf_OrbmArxihsHa_oirpft_xJQ0R_Lq67u90SHoTe2IBANLatNXDa0ISuYllADUwCBPv1xw6f-O9C8w/?imgmax=800" /></p> <p><a href="http://lh4.ggpht.com/-WhOxbYPLmZA/U9gaVEnP6HI/AAAAAAAAB9w/BYJcGmxnG2g/s1600-h/Riesgos%25255B6%25255D.jpg"><img title="Riesgos" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="Riesgos" src="http://lh5.ggpht.com/-SYNo6KUIQ7Y/U9gaV7dBcRI/AAAAAAAAB90/NYRzohfHUCo/Riesgos_thumb%25255B3%25255D.jpg?imgmax=800" width="790" height="464" /></a></p> Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-69500898350795869402014-07-15T18:21:00.001+01:002014-07-15T18:21:51.431+01:00NSU / Nokia Software Updater for Retail doesn’t detect the device<p>Today, I was updating my phone to Lumia Cyan, and for a while I had an issue: the NSU For Retail didn’t detect my device. No matter how many times I tried to connect in different USB ports and using different cables, the NSU was always like this:</p> <p><a href="http://lh4.ggpht.com/-wQaXbw-4-Ks/U8VjIhPUNJI/AAAAAAAAB2M/qaXq1c7UuYw/s1600-h/image%25255B3%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggPHE3pHGgi-G07chn9013y3vHMRhUePNXWiOKipkPLq-RUHOravzXvz8riiX4oCsJxq6E7GWBBTD53tp7Ga1xwysZlUZFMRQborU2MyvPofihMl4kOmUGnL1ODr4Qj4Ep7SKwyIUVh5g/?imgmax=800" width="476" height="370" /></a></p> <p>If it’s your case, go to Control Panel->Device Manager, and under “Universal Serial Bus Devices”, you’ll find two entries:</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-e-VjLVJePZm0VEZuDBC9q0pEQmzxg2phjFQWE172dNwZYUVlFY8qRfiDi7HI5kLDX8D1Fu6P0yUxOXLAMvIBgNeHdf4_so-ZmJ6AfzBNj9DZFihKkJn29asJGWfFPqGVIjJw3dkVnls/s1600-h/image%25255B9%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="image" src="http://lh4.ggpht.com/-P1XOXcZdDUo/U8VjLBYWrNI/AAAAAAAAB2g/syjEyHw-Qcw/image_thumb%25255B11%25255D.png?imgmax=800" width="311" height="98" /></a></p> <p>To fix the issue, just:</p> <ul> <li>1 - Unplug your phone</li> <li>2 – Right-click on both devices and select “Uninstall”.</li> <li>3 – Replug your device again</li> </ul> <p>NSU should detect the device again.</p> <p>Hope it helps !!</p> Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0tag:blogger.com,1999:blog-7840291950242203302.post-17374323434532855962014-06-29T15:41:00.001+01:002014-06-29T15:42:23.819+01:00Mesa redonda–Intrograph II (Jornadas Nacionales de Informática Gráfica)<p>Se acaba de publicar un vídeo grabado por uno de los asistentes a <a href="http://intrograph.es/">Intrograph II, las Jornadas Nacionales de Informática Gráfica</a> celebradas en Mayo en la Universidad Rey Juan Carlos. </p> <p>Participé como ponente y también en la mesa redonda que clausuraba el evento. El vídeo se corresponde con ésta última sesión:</p> <p align="center"><iframe height="315" src="//www.youtube.com/embed/6udSkD8K2Ro" frameborder="0" width="560" align="center" allowfullscreen="allowfullscreen"></iframe></p> <p>Un pequeño índice dentro del vídeo, con los temas sobre los que los ponentes respondíamos preguntas o debatíamos:</p> <p><a href="https://www.youtube.com/watch?v=6udSkD8K2Ro&feature=youtu.be#">2:16</a> ¿Indie o triple A? <br /><a href="https://www.youtube.com/watch?v=6udSkD8K2Ro&feature=youtu.be#">20:31</a> ¿PC o Consola? <br /><a href="https://www.youtube.com/watch?v=6udSkD8K2Ro&feature=youtu.be#">49:00</a> Videojuegos ¿Son mas fáciles ahora? <br /><a href="https://www.youtube.com/watch?v=6udSkD8K2Ro&feature=youtu.be#">59:55</a> Fecha optima del lanzamiento de videojuegos <br /><a href="https://www.youtube.com/watch?v=6udSkD8K2Ro&feature=youtu.be#">1:13:39</a> Desarrollo de videjuegos ¿Por donde ir?</p> Iñaki Ayucarhttp://www.blogger.com/profile/16347699878953872956noreply@blogger.com0