terça-feira, 20 de setembro de 2016

Resolvendo o problema da haste regulável do aspirador de pó

Recentemente tive um problema com a haste do aspirador, ela deixou de travar. O jeito que resolví foi usando grafite em pó, o mesmo que usa para lubrificar fechadura, etc. Não usem óleos nessas coisas, pois vai grudar muito pó.

sexta-feira, 12 de agosto de 2016

Putting hypergeometric function in gnuplot with GSL (patching)

My gnuplot version with hypergeometric function using GNU Scientific Library
hyperg_2F1.patch

--- ./src/eval.c.orig    2016-08-12 17:06:35.250145505 -0300
+++ ./src/eval.c    2016-05-03 12:34:08.000000000 -0300
@@ -191,6 +191,7 @@
     {"lambertw",  f_lambertw}, /* HBB, from G.Kuhnle 20001107 */
     {"airy",  f_airy},         /* janert, 20090905 */
     {"expint",  f_expint},     /* Jim Van Zandt, 20101010 */
+    {"hyperg_2F1",f_hyperg_2F1},

 #ifdef HAVE_LIBCERF
     {"cerf", f_cerf},        /* complex error function */
--- ./src/specfun.c.orig    2016-08-12 17:06:35.248145450 -0300
+++ ./src/specfun.c    2016-05-03 12:20:14.000000000 -0300
@@ -49,6 +49,7 @@
 #include "specfun.h"
 #include "stdfn.h"
 #include "util.h"
+#include "gsl/gsl_sf_hyperg.h"

 #define ITMAX   200

@@ -3031,9 +3032,11 @@
 extern double p1evl ( double, void *, int );
 extern double sin ( double );
 extern double cos ( double );
+extern double gsl_sf_hyperg_2F1( double , double, double, double);
 #else
 double fabs(), exp(), sqrt();
 double polevl(), p1evl(), sin(), cos();
+double gsl_sf_hyperg_2F1();
 #endif

 int
--- ./src/standard.c.orig    2016-08-12 17:06:35.255145644 -0300
+++ ./src/standard.c    2016-05-03 14:40:24.741731493 -0300
@@ -39,6 +39,7 @@
 #include "gadgets.h"        /* for 'ang2rad' and 'zero' */
 #include "gp_time.h"        /* needed by f_tmsec() and friendsa */
 #include "util.h"        /* for int_error() */
+#include "gsl/gsl_sf_hyperg.h"

 static double carlson_elliptic_rc(double x,double y);
 static double carlson_elliptic_rf(double x,double y,double z);
@@ -57,7 +58,7 @@
 static double yone __PROTO((double x));
 static double rj1 __PROTO((double x));
 static double ry1 __PROTO((double x));
-
+extern double gsl_sf_hyperg_2F1(double,double,double,double);
 /* The bessel function approximations here are from
  * "Computer Approximations"
  * by Hart, Cheney et al.
@@ -841,6 +842,30 @@
     }
 }

+void
+f_hyperg_2F1(union argument *arg)
+{
+    struct value a1;
+    double    aa,bb,cc,zz;
+
+    (void) arg;            /* avoid -Wunused warning */
+    zz=real(pop(&a1));
+    cc=real(pop(&a1));
+    bb=real(pop(&a1));
+    aa=real(pop(&a1));
+//    if (fabs(imag(&a1)) > zero || fabs(imag(&a2)) > zero)
+//    int_error(NO_CARET, "can only do elliptic integrals of reals");
+
+    if (zz < 1.0 && zz > 0)
+    push(Gcomplex(&a1, gsl_sf_hyperg_2F1(aa,bb,cc,zz), 0.0));
+    else if (zz < 0) {
+    push(Gcomplex(&a1, pow(1-zz,-aa)*gsl_sf_hyperg_2F1(aa,cc-bb,cc,zz/(zz-1)), 0.0));
+    } else {
+    undefined=TRUE;
+    push(&a1);
+    }
+
+}
 /* Terminate the autoconversion from string to numeric values */
 #undef pop

--- ./src/standard.h.orig    2016-08-12 17:06:35.252145560 -0300
+++ ./src/standard.h    2016-05-03 12:37:23.000000000 -0300
@@ -93,5 +93,6 @@
 void f_tmyear __PROTO((union argument *x));
 void f_tmwday __PROTO((union argument *x));
 void f_tmyday __PROTO((union argument *x));
+void f_hyperg_2F1 __PROTO((union argument *x));

 #endif /* GNUPLOT_STANDARD_H */

sexta-feira, 5 de agosto de 2016

Edamame soja verde cozida ainda na vajem

A soja não é ruim, a proteina texturizada de soja que é horrivel. A forma gostosa de comer seria ela ainda verde, cozida na água com sal. Quase como se faz com o amendoin cru na casca muito comum na Bahia.
Mas é muito mais fácil para comer a soja, que é só precionar com os dedos a vagem da soja próximo a boca que os grãos voam. hehehe

As primeiras cervejas que fiz

junho de 2012
+/-Pilsen  08/2012
Primeira cerveja, receita Pilsen só que fermentada a frio com fermento Ale, a foto ao lado esquerdo depois da fermentação. Como não sabia ainda carbonatar direito, nem tinha tampador, esterilizei as garrafas como fazia com as conservas. Reutilizei as tampas que não estavam tortas e fechei com alicate, improvisação total. Ficou muito muito boa para uma primeira cerveja. Resultado final à direita. Depois vieram as IPAs, todas ainda sujas, aprendendo a clarificar ainda. Não fiz nenhum curso, só lendo material na internet. Errando que se aprende. Todas fermentadas a frio, coisas que está virando moda atualmente, as caracteristicas obtidas pelo malte e lúpulo sem muita interferências do fermento.
Primeira IPA 10/2012
Segunda IPA 12/2012
Todas com um excesso de carbonatação, parece até chantilly hahaha.



Essa usei malte melanoidina, essa é a foto melhor que tenho dela, depois que envelheci e todo aquele fermento decantou no fundo e não sujou. Foto de Maio de 2013. Em abril ainda estava suja.



sexta-feira, 3 de junho de 2016

Homebrew Calc v.3 (SG, SRM, IBU, alcohol, CO2)


Potential SG and SRM beer color
 
Volume: liter          Efficiency: %
QT(kg) Malte Pot.SG SRM %mass
                                                                       
SG: g/cm³       Brix: %       SRM: °L


Brix: SG: g/cm³     Real Efficiency: %

IBU (International Biterness Unit)
QT(g) Hops Alfa(%) T(min) IBU
                Total:      


Calculate Alcohol
Select Yeast
  Attenuation:%
Estimate Final SG:g/cm³
Final Brix:%
  Final SG:g/cm³   ABW:%   ABV:%


Calculate Carbonation Pressure/Priming Sugar
Typical CO2 (in volumes)
Volumes CO2:   Temperature:
  Pressure:kgf/cm²
Final Volume:liter
  Table Sugar:g  or Corn Sugar:g

Com essa calculadora você poderá estimar quanto brix e a cor da cerveja vai obter, estimar também a amargura, calcular o grau alcoólico usando apenas o refratômetro em brix, e por fim, a pressão de carbonatação. O refratômetro é bem mais fácil de se usar e não desperdiça a sua breja, pois só precisa de algumas gotas.
Lembrar que é apenas uma estimação, se precisar de valores exatos vai precisar mandar para algum laboratório especializado.

Como usar:
  1. Coloque o volume que deseja produzir, e a eficiencia que acha que vai obter, coloque a quantidade de malte e selecione o malte, poderá modificar os valores se achar que estiverem errados, (Clique em Add para por mais linhas/ Remove para tirar linhas) ponha quantos maltes que desejar e por fim calculate, assim terá uma estimativa do SG/Brix/Cor do seu mosto.
  2. Ponha o valor do Brix/SG que obteve e veja qual foi a eficiencia real.
  3. Coloque a quantidade do lúpulo e selecione o lúpulo, se o valor do ácido alfa estiver errado, o corrija, ponha o tempo. Se tiver mais lúpulo, clique em Add, e clique em Remove para tirar. Clique  em Calculate IBU para obter uma estimativa da amargura.
  4. Depois de fermentado poderá por o Brix final e calcular o alcool da sua cerveja. Se quiser só usar a calculadora do álcool, basta por o valor do Brix : e Final Brix:
  5. Carbonatação: Calcula a pressão de carbonatação para o estilo de cerveja que esteja preparando, não está interligado com as demais calculadoras. Coloque a temperatura que vai carbonatar e escolha o estilo, se quiser mude o volume de CO2. Para o priming com açúcar coloque o volume final e calcule.
Algumas coisas estão interligados, no cálculo da amargura, vai precisar do Volume e o SG obtido, no cáculo do álcool precisa Brix obtido e o Brix final.

Usei os dados do mate e do lúpulo extraidos do  EZ Brew 1.95 e de vários sites, andei modificando alguns valores que achei muito baixos, e as formulas para estimar grau alcoolico do site:
http://www.primetab.com/formulas.html
Para o primiming usei a formula do artigo: http://www.homebrewersassociation.org/attachments/0000/2497/Math_in_Mash_SummerZym95.pdf
A formula do cálculo da amargura é a mesma que postei no post anterior.
A formula do cálculo da pressão é a mesma que postei no post anterior que calcula o volume de CO2, só que a modifiquei para calcular a pressão a partir da temperatura e volume do estilo desejado.

sexta-feira, 29 de abril de 2016

Patch for qtiplot 0.9.8.9 ImageWidget error

icons/../src/plot2D/ImageWidget.h:73:7: error: 'virtual void ImageWidget::paintEvent(QPaintEvent*)' is private
  void paintEvent(QPaintEvent *e);

patch link qwidget.patch