Dell Venue 10 7000, se convierte en un Laptop Android

La nueva Dell Venue 10 7000 cuenta con un procesador Intel Atom Z3580 y una memoria RAM de 2GB. Además contamos con una cámara trasera de 8MP con la tecnología RealSense 3D. También encontramos cambios en su batería, que al contar con una mayor pantalla es algo más que previsible. Pasaremos de l0s 5.900mAh de batería a los 7.000 mAh.

dell-venue-10-7000-small-e1428551063688

Este hardware lo encontramos tras una pantalla de 10.5 pulgadas con una resolución QuadHD de 2560×1600 píxeles. Pero una peculiaridad la encontramos en uno de los laterales de la tablet, tiene una especie de cilindro con altavoces que también servirá de apoyo para el teclado externo (no incluido por defecto). El teclado nos ayudará a mantener la tablet erguida en la posición que queramos y poder trabajar con ella.

dell-venue-10-7000-tablet-only-small

Teclado externo extraíble y con utilidad de soporte

En total tenemos un diseño muy fino, exceptuando el cilindro con el altavoz y la batería, de tan sólo 6,2 milímetros. Un grosor muy reducido y que convierte esta tablet en una buena opción si queremos algo que sea fácil de transportar.

dell-venue-10-7000-

 

Notebook Premiado GT80 2QC Titan SLI

  • Windows 8.1
  • The 4th generation Intel® Core™ i7 Processor
  • 18.4″ WLED FHD (1920 x 1080) Anti-Glare Display
  • Embedded NVIDIA® GeForce GTX 965M with ultra performance
  • Ultimate performance: SLI Graphics
  • Pioneer in Gaming, 1st mechanical backlit Keyboard on Notebook
  • Keyboard switch by Cheery MX
  • All new design, the slimmest 18.4″ gaming notebook
  • One touch switch between touchpad & numeric keypad
  • Exclusive SHIFT technology for system’s performance and balance
  • Exclusive Super RAID 3 with 4 SSD
  • Cooler Boost 3: Higher efficiency dual cooling system
  • Killer Double Shot Pro (Killer Gb LAN + Killer 802.11 a/c WiFi)
  • Audio Boost 2 with 3 independent amps for best sound experience
  • SteelSeries Engine 3 to personalize your play style
  • XsplitGamcaster for broadcasting, recording and sharing
  • Sound by Dynaudio 4+1 speaker system
  • Matrix display support up to 4 displays
  • Keyboard by SteelSeries with LED back light
  • Wide Viewing Angle Display

2015-04-09_132721

  • CPU                                  The 4th generation Intel® Core™ i7 Processor
  • OS                                    Windows 8.1
  • Chipset                             Intel HM87
  • Memory                            DDR3L,up to 1600 MHz, slot *4, max 32GB
  • LCD Size                          4″ WLED FHD (1920 x 1080) Anti-Glare Display
  • Graphics                           GeForce GTX 965M SLI
  • Graphics VRAM               GDDR5 4GB
  • Storage                            Up to 1024GB Super RAID 3 +                                                                       1TB HDD 7200rpm
  • Optical Drive                    BD Writer / DVD Super Multi
  • Audio                               4+1 Speaker System, 2 speakers for each channel                                         Support 7.1 channel SPDIF output                                                                  Exclusive Audio Boost 2 technology                                                                Creative Sound Blaster Cinema 2
  • Webcam                          Full FHD type ([email protected])
  • Card Reader                   SD (XC/HC)
  • LAN                                 Killer DoubleShot Pro Gb LAN
  • Wireless LAN                  Killer DoubleShot Pro 11ac
  • Bluetooth                        Bluetooth v4.1
  • HDMI                              1(v1.4)
  • USB 2.0 port                   0
  • USB 3.0 port                   5
  • Mini-DisplayPort             2(v1.2)
  • Mic-in/Headphone-out   1/1
  • SPDIF-Out                     1
  • Keyboard                       Single-color backlight (Red) SteelSeries keyboard
  • AC Adapter                    230W
  • Battery                           8-Cell Lithium Ion
  • Dimension                      6 x 33 x 4.9 cm
  • Weight (KG)                   5Kg (w/ Battery)

GPUS Aceleradoras Tesla Para Servidor

Multiplica la velocidad de las aplicaciones de análisis de datos y cálculo científico más complejas con las GPUs aceleradoras NVIDIA® Tesla®. Están basadas en la arquitectura NVIDIA Kepler™ y diseñadas para proporcionar más velocidad de cálculo con más eficiencia.

Con las GPUs aceleradoras Tesla, los analistas y científicos de disciplinas como la exploración energética o el aprendizaje automático pueden manejar petabytes de datos hasta 10 veces más rápido que con las CPUs. Tesla les proporciona la potencia que necesitan para ejecutar simulaciones más grandes a mayor velocidad que nunca.

 tesla-k80-3qtr

ELIGE LA GPU TESLA ADECUADA PARA TI

GPU aceleradora Tesla K80
Tarjeta de doble GPU que combina 24 GB de memoria, un extraordinario ancho de banda de memoria y hasta 2,7 TFlops de capacidad de cálculo de doble precisión con la función NVIDIA GPU Boost™. Está diseñada para las aplicaciones computacionales más exigentes. Es perfecta para operaciones de precisión simple y doble precisión que no solo necesitan gran capacidad de cálculo, sino también alta velocidad de transmisión de los datos. Prueba hoy mismo una GPU Tesla K80 gratis.

GPU aceleradora Tesla K40
Tarjeta equipada con 12 GB de memoria que proporciona una velocidad de cálculo de 1,43 TFlops con precisión doble. Es una solución flexible y altamente eficiente para aplicaciones de alta computación (HPC) y análisis de datos.

 k80-accelerator-performace-es

 ELECCIÓN DE LA TARJETA GRÁFICA TESLA ADECUADA

Características Tesla K801 Tesla K40
Rendimiento de la GPU 2x Kepler GK210 1 Kepler GK110B
Pico de rendimiento de operaciones en coma flotante de doble precisión 2.91 Tflops (frecuencias con GPU Boost)
1.87 Tflops (frecuencias normales)
1.66 TFlops (frecuencias con GPU Boost)
1.43 Tflops (frecuencias normales)
Pico de rendimiento de operaciones en coma flotante de precisión simple 8.74 Tflops (frecuencias con GPU Boost)
5.6 Tflops (frecuencias normales)
5 Tflops (frecuencias con GPU Boost)
4.29 Tflops (frecuencias normales)
Ancho de banda de memoria (ECC desactivada)2 480 GB/s (240 GB/s por GPU) 288 GB/s
Cantidad de memoria (GDDR5) 24 GB (12 GB por GPU) 12 GB
Núcleos CUDA 4992 ( 2496 por GPU) 2880
en Video | 353 Palabras

Poderoso HTC One M9+ Anunciado para China

HTC_One_M9-_PerRight_GunMetalGray

HTC ha lanzado recientemente el HTC One M9, pero al parecer, la compañía quiere seguir la estrategia de Apple y suelte un modelo más grande también. HTC lanzará el mayor de HTC One M9 + en China por ahora, pero la empresa no tiene planes para lanzarlo en Europa o América del Norte.

Lo que es diferente entre el HTC One M9 y el HTC One M9 +? Por un lado, la M9 + viene con un poco más grande 5.2 “pantalla, a diferencia de la 5” pantalla de la M9. Si pensabas que la resolución de 1080p ya era demasiado bajo para un 5 “pantalla insignia en 2015, entonces usted no será decepcionado al saber que el HTC One M9 5,2” pantalla tiene una resolución de 2560 x 1440 (el mismo que el Galaxy S6 y el LG G3).

HTC_One_M9-_PerBack_Gold_w_600

Existen muchos informes de que el Snapdragon 810 en el HTC One M9 y otros dispositivos se sobrecalienta, por lo que parece HTC fue con el último chip insignia de Mediatek, el Helio X10 (Mediatek MT6795T). Este chip se basa en la arquitectura ARMv8 64 bits y viene con ocho núcleos Cortex-A53 con una frecuencia de 2,2 GHz.

El chip debe ser más o menos tan poderoso como el Snapdragon 810, pero también debe ser mucho más eficiente. Eso significa que el Mediatek MT6795T debe procesar mucho menos, así, lo que permite un mayor rendimiento sostenido. Dos de sus características únicas son el apoyo a 480 fps grabación de vídeo a cámara lenta y 120 Hz la frecuencia de refresco de la pantalla, que es dos veces más que lo que otros chips del mercado en la actualidad.

Por supuesto, HTC también ha cargado este con sus altavoces “BoomSound” que están vinculados con el sistema Dolby de audio para la simulación de sonido envolvente de calidad.

m9-camera_w_600

En la parte posterior, el HTC One M9 + tiene un 20 MP “Cámara Duo” para dar esa profundidad extra en las imágenes (la segunda cámara es 2.1MP), mientras que en la parte delantera viene con una cámara de 4 MP “UltraPixel” que funciona bien incluso en entornos de poca luz.

Un aspecto decepcionante sobre el HTC One M9 era que no tenía un sensor de huellas digitales, a pesar de que sus principales competidores, el Galaxy S6 y el iPhone 6, lo hacen. Aunque la autenticación de huellas digitales no es perfecto, si se hace bien y si las huellas digitales (o hashes de las huellas dactilares) que no deje su dispositivo, debe ser una alternativa mucho más segura de usar ninguna contraseña en absoluto o usando los débiles “1234” PIN.

Afortunadamente, el HTC One M9 + parece que vienen con un lector de huellas digitales, aunque, por supuesto, queda por ver lo bien que funciona. La mayoría de los lectores de huellas digitales hasta el momento no han tenido una gran precisión, lo que ha dado lugar a malas experiencias de los usuarios y, por tanto, baja adopción entre los usuarios.

HTC_One_M9-_w_600

El dispositivo vendrá con Android Lollipop (probablemente la versión 5.0.2, al igual que el M9) a bordo junto con HTC’s Sense 7 customizations, que incluyen temas de HTC y la característica Blinkfeed (noticias y mensajes de redes sociales). HTC no ha anunciado una fecha de lanzamiento o el costo que tendrá cuando llegue a China.

HTC One M9+ Full Options Announced For China

HTC recently launched the HTC One M9, but apparently, the company wants to follow Apple’s strategy and release a bigger model as well. HTC will release the larger HTC One M9+ in China for now, but the company doesn’t plan to launch it in Europe or North America.

What’s different between the HTC One M9 and the HTC One M9+? For one, the M9+ comes with a slightly larger 5.2″ screen, as opposed to the 5″ screen from the M9. If you thought the 1080p resolution was already too low for a 5″ flagship screen in 2015, then you won’t be disappointed to hear that the HTC One M9’s 5.2″ screen has a 2560 x 1440 resolution (the same as the Galaxy S6 and the LG G3).

HTC_One_M9-_PerRight_GunMetalGray

 

There have been many reports that the Snapdragon 810 in the HTC One M9 and other devices overheats, which is why it seems HTC went with Mediatek’s latest flagship chip, the Helio X10 (Mediatek MT6795T). This chip is based on the 64-bit ARMv8 architecture and comes with eight Cortex-A53 cores with a frequency of 2.2 GHz.

The chip should be roughly as powerful as the Snapdragon 810, but it should also be much more efficient. That means the Mediatek MT6795T should throttle much less as well, allowing for higher sustained performance. Two of its unique features are support for 480 fps slow-motion video recording and 120 Hz screen refresh rates, which is twice as much as what other chips on the market support currently.

Of course, HTC also loaded this with its “BoomSound” speakers that are paired with Dolby Audio for quality surround sound simulation.

HTC_One_M9-_PerBack_Gold_w_600

 

 

On the back, the HTC One M9+ has a 20 MP “Duo Camera” to give that extra depth in pictures (the second camera is 2.1MP), while on the front it comes with a 4MP “UltraPixel” camera that performs well even in low-light environments.

One disappointing aspect about the HTC One M9 was that it didn’t have a fingerprint sensor, even though its main competitors, the Galaxy S6 and the iPhone 6, do. Although fingerprint authentication is not perfect, if done right and if the fingerprints (or hashes of the fingerprints) never leave your device, it should be a much more secure alternative to using no password at all or using weak “1234” PINs.

Fortunately, the HTC One M9+ does seem to come with a fingerprint reader, although of course it remains to be seen just how well it will work. Most fingerprint readers so far haven’t had great accuracy, which has led to bad user experiences and therefore low adoption among users.

 

HTC_One_M9-_w_600

 

The device will come with Android Lollipop (likely version 5.0.2, just like the M9) on board along with HTC’s Sense 7 customizations, which include HTC Themes and the Blinkfeed feature (news and social media posts). HTC hasn’t announced a launch date or what it will cost when it arrives in China.

Ver contenido de las variables (Display Memory)

2015-04-04_122820

 

#include "oohg.ch"

Function DispMem()

    Save to MigMem All
    ReadMem( "MigMem.mem" )
    cArquivo := "MigMemory.txt"
    Editor   := "Notepad"

    EXECUTE FILE Editor PARAMETERS cArquivo

Return Nil

Procedure READMEM( cFileName )
    local x
    local aMemVars  := {}
    local nLine     := 0

    SET PRINTER TO MigMemory.txt
    SET DEVICE TO PRINTER

    @  1, 1 say PADC( "Display Memory", 79 )

    Do while .T.
        aMemVars := GETVARFROM( cFileName )
        @  3,  5 say "Name"
        @  3, 18 say "Type"
        @  3, 23 say "Value"
        @  3, 60 say "File: MigMemory.txt"
        nLine := 4
        For x := 1 to len( aMemVars )
            ++ nLine
            @ nLine,  5 say aMemVars[ x, 1 ]
            @ nLine, 18 say aMemVars[ x, 2 ]
            @ nLine, 23 say aMemVars[ x, 3 ]
        Next
        Exit
    Enddo

    SET PRINTER TO
    SET DEVICE TO SCREEN

Return


Function GETVARFROM( cMemFile )

    local xVarValue    := NIL
    local nHandle
    local nFilePoint
    local cMemBuff
    local cVarName
    local cID
    local nSize
    local nLen
    local cBuffer
    local cData
    local nHi
    local nLo
    local lFlag
    local nB1
    local nB2
    local nB3
    local nB4
    local nTotal
    local nOutput
    local nValue
    local aMemVar
    local aMemVarArray := {}

    if valtype( cMemFile ) = "C" .and. file( cMemFile )
        nHandle    := fopen( cMemFile )
        nFilePoint := fseek( nHandle, 0, 2 )
        fseek( nHandle, 0 )
        if nFilePoint > 1
            xVarValue := ""
            do while fseek( nHandle, 0, 1 ) + 1 < nFilePoint .and. !FEOF( nHandle )
                cMemBuff := space( 18 )
                fread( nHandle, @cMemBuff, 18 )
                cVarName := left( cMemBuff, at( chr( 0 ), cMemBuff ) - 1 )
                cID      := substr( cMemBuff, 12, 1 )
                nSize    := bin2w( right( cMemBuff, 2 ) )
                nLen     := if( cID $ "ÃÌ", 14 + nSize, 22 )
                cBuffer  := space( nLen )
                fread( nHandle, @cBuffer, nLen )
                cData := substr( cBuffer, 15 )
                if cID == chr( 195 )                // character
                    aMemVar   := { cVarName, "C", cData }
                    xVarValue := cData
                elseif cID == chr( 204 )            // logic
                    aMemVar   := { cVarName, "L", asc( cData ) == 1 }
                    xVarValue := asc( cData ) == 1
                elseif cID == chr( 206 )            // Numeric
                    cBuffer   := substr( cBuffer, 15 )
                    nHi       := MODULUS( asc( substr( cBuffer, 8, 1 ) ), 128 ) * 16
                    nLo       := int( asc( substr( cBuffer, 7, 1 ) ) / 16 )
                    nValue    := nHi + nLo - 1023
                    lFlag     := int( asc( substr( cBuffer, 8, 1 ) ) / 16 ) >= 8
                    nB1       := MODULUS( asc( substr( cBuffer, 7, 1 ) ), 16 ) / 16
                    nB2       := bin2w( substr( cBuffer, 5, 2 ) ) / ( 65536 * 16 )
                    nB3       := bin2w( substr( cBuffer, 3, 2 ) ) / ( 65536 * 65536 * 16 )
                    nB4       := bin2w( substr( cBuffer, 1, 2 ) ) / ;
                                   ( 65536 * 65536 * 65536 * 16 )
                    nTotal    := nB1 + nB2 + nB3 + nB4
                    nOutput   := if( lFlag, - ( 1 + nTotal ) * 2 ^ nValue, ;
                                   ( 1 + nTotal ) * 2 ^ nValue )
                    xVarValue := val( transform( nOutput, "@B" ) )
                    aMemVar := { cVarName, "N", xVarValue }
                elseif cID == chr( 196 )            // Date
                    cBuffer   := substr( cBuffer, 15 )
                    nHi       := MODULUS( asc( substr( cBuffer, 8, 1 ) ), 128 ) * 16
                    nLo       := int( asc( substr( cBuffer, 7, 1 ) ) / 16 )
                    nValue    := nHi + nLo - 1023
                    lFlag     := int( asc( substr( cBuffer, 8, 1 ) ) / 16 ) >= 8
                    nB1       := MODULUS( asc( substr( cBuffer, 7, 1 ) ), 16 ) / 16
                    nB2       := bin2w( substr( cBuffer, 5, 2 ) ) / ( 65536 * 16 )
                    nB3       := bin2w( substr( cBuffer, 3, 2 ) ) / ( 65536 * 65536 * 16 )
                    nB4       := bin2w( substr( cBuffer, 1, 2 ) ) / ;
                                   ( 65536 * 65536 * 65536 * 16 )
                    nTotal    := nB1 + nB2 + nB3 + nB4
                    nOutput   := if( lFlag, - ( 1 + nTotal ) * 2 ^ nValue, ;
                                   ( 1 + nTotal ) * 2 ^ nValue )
                    xVarValue := dtoc( ctod( "01/01/0100" ) + nOutput - 1757585 )
                    aMemVar := { cVarName, "D", xVarValue }
                endif
                aadd( aMemVarArray, aMemVar )
            enddo
        endif
        fclose( nHandle )
    endif

Return aMemVarArray


Function FEOF( nHandle )

    local nCurrPos
    local nFileSize

    nCurrPos  := fseek( nHandle, 0, 1 )
    nFileSize := fseek( nHandle, 0, 2 )
    fseek( nHandle, nCurrPos, 0 )

Return nFileSize < nCurrPos


Function MODULUS( nParm1, nParm2 )

    local x
    local nRetVal := 0

    if valtype( nParm1 ) = "N" .and. valtype( nParm2 ) = "N"
        if nParm2 = 0
            nRetVal := nParm1
        else
            x       := nParm1 % nParm2
            nRetVal := if( x * nParm2 < 0, x + nParm2, x )
        endif
    endif

Return nRetVal

hdcalcul.prg

#include "hbmemvar.ch"
#include "hdroidgui.ch"

#define HISTORY_SIZE_MAX   32

Memvar aHistory, nHistLen, nHistCurr

FUNCTION HDroidMain( lFirst )

   LOCAL oActivity, oFont, oLayV, oLayH1, oEdit1, oText0, oBtn10, oBtn11
   LOCAL oBtn1, oBtn2, oBtn3, oBtn4, oBtn5, oBtn6, oBtn7, oBtn8, oBtn9
   LOCAL oStyleN, oStyleP, oStyleText, oStyleEdi, cWhite := "#FFFFFF"
   PUBLIC aHistory, nHistLen, nHistCurr

   IF lFirst
      aHistory := Array( HISTORY_SIZE_MAX )
      nHistLen := 0
      nHistCurr := 1
   ENDIF

   PREPARE FONT oFont HEIGHT 12
   INIT STYLE oStyleN COLORS 0xff255779,0xff3e7492,0xffa6c0cd ;
              ORIENT 1 CORNERS 8
   INIT STYLE oStyleP COLORS 0xff255779,0xff3e7492,0xffa6c0cd ;
              ORIENT 6 CORNERS 8
   INIT STYLE oStyleText COLORS 0xff3e7492,0xffa6c0cd ORIENT 1

   INIT WINDOW oActivity TITLE "Calculator" //"$$name1"
   //oActivity:oStyleHead := oStyleText

   MENU
      MENUITEM "Version" ACTION Version()
      MENUITEM "Help" ACTION FHelp()
      MENUITEM "Exit" ACTION hd_MsgYesNo( "Really exit?", {|o|FExit(o)} )
   ENDMENU

   BEGIN LAYOUT oLayV BACKCOLOR 10928333 ;
         SIZE MATCH_PARENT,MATCH_PARENT

      EDITBOX oEdit1 HINT "Input an expression" BACKCOLOR 10928333 ;
              ON KEYDOWN {|n|onKey(n,oEdit1,oText0)}

      BEGIN LAYOUT oLayH1 HORIZONTAL SIZE MATCH_PARENT,28

      BUTTON oBtn2 TEXT "<<" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnHist(.T.,oEdit1)}
      BUTTON oBtn4 TEXT "+" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb("+",oEdit1)}
      BUTTON oBtn5 TEXT "-" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb("-",oEdit1)}
      BUTTON oBtn6 TEXT "*" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb("*",oEdit1)}
      BUTTON oBtn7 TEXT "/" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb("/",oEdit1)}
      BUTTON oBtn1 TEXT "=" TEXTCOLOR cWhite ;
             SIZE 0,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnCalc(oEdit1,oText0)}
      BUTTON oBtn8 TEXT "(" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb("(",oEdit1)}
      BUTTON oBtn9 TEXT ")" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb(")",oEdit1)}
      BUTTON oBtn10 TEXT "[" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb("[",oEdit1)}
      BUTTON oBtn11 TEXT "]" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnSymb("]",oEdit1)}
      BUTTON oBtn3 TEXT ">>" TEXTCOLOR cWhite ;
             SIZE WRAP_CONTENT,MATCH_PARENT FONT oFont ;
             ON CLICK {||onBtnHist(.F.,oEdit1)}

      oBtn2:oStyle := oBtn4:oStyle := oBtn5:oStyle := ;
      oBtn6:oStyle := oBtn7:oStyle := oBtn1:oStyle := ;
      oBtn8:oStyle := oBtn9:oStyle := oBtn10:oStyle := ;
      oBtn11:oStyle := oBtn3:oStyle := { oStyleN,,oStyleP }
      oBtn2:nMarginL := oBtn2:nMarginR := oBtn4:nMarginL := ;
      oBtn4:nMarginR := oBtn5:nMarginL := oBtn5:nMarginR := ;
      oBtn6:nMarginL := oBtn6:nMarginR := oBtn7:nMarginL := ;
      oBtn7:nMarginR := oBtn1:nMarginL := oBtn1:nMarginR := ;
      oBtn8:nMarginL := oBtn8:nMarginR := oBtn19nMarginL := ;
      oBtn9:nMarginR := oBtn10:nMarginL := oBtn10:nMarginR := ;
      oBtn11:nMarginL := oBtn11:nMarginR := oBtn3:nMarginL := ;
      oBtn3:nMarginR := 1

      hd_setPadding( oBtn2, 8,2 ) ; hd_setPadding( oBtn4, 8,2 ) ;
      hd_setPadding( oBtn5, 8,2 ) ; hd_setPadding( oBtn6, 8,2 ) ;
      hd_setPadding( oBtn7, 8,2 ) ; hd_setPadding( oBtn1, 8,2 ) ;
      hd_setPadding( oBtn8, 8,2 ) ; hd_setPadding( oBtn9, 8,2 ) ;
      hd_setPadding( oBtn10, 8,2 ); hd_setPadding( oBtn11, 8,2 ) ;
      hd_setPadding( oBtn3, 8,2 )

      END LAYOUT oLayH1

      TEXTVIEW oText0 TEXTCOLOR 0 ;
      SIZE MATCH_PARENT,MATCH_PARENT VSCROLL ;
      oText0:oStyle := oStyleText

   END LAYOUT oLayV

   ACTIVATE WINDOW oActivity

   RETURN Nil

STATIC Function OnBtnHist( lBack, oEdit1 )

   IF lBack
      IF nHistCurr >= 2
         oEdit1:SetText( aHistory[--nHistCurr] )
      ENDIF
   ELSE
      IF nHistCurr < nHistLen
         oEdit1:SetText( aHistory[++nHistCurr] )
      ELSE
         nHistCurr := nHistLen + 1
         oEdit1:SetText( "" )
      ENDIF
   ENDIF

   RETURN "1"

STATIC Function OnBtnSymb( cSymb, oEdit1 )

   LOCAL nPos := oEdit1:GetCursorPos(), cText := oEdit1:GetText()

   oEdit1:SetText( hb_utf8Left( cText,nPos ) ;
     + cSymb + hb_utf8Substr( cText,nPos+1 ) )

   oEdit1:SetCursorPos( nPos+1 )

   RETURN "1"

STATIC Function OnBtnCalc( oEdit1, oText1 )
   LOCAL s, xRez, bOldError, lRes := .T., n, i, cname, cType
   STATIC aVars := Nil

   IF !Empty( aVars )
      FOR i := 1 to Len( aVars )
         __mvPublic( aVars[i,1] )
         __mvPut( aVars[i,1], aVars[i,2] )
      NEXT
      aVars := Nil
   ENDIF

   s := Alltrim( oEdit1:GetText() )
   IF Empty( s )
      RETURN "0"
   ENDIF

   bOldError := ErrorBlock( { |e|break( e ) } )
   BEGIN SEQUENCE
      xRez := &s
   RECOVER
      xRez := "Error..."
      lRes := .F.
   END SEQUENCE
   ErrorBlock( bOldError )

   oText1:SetText( Iif( xRez == Nil, "Nil", ;
         Iif( (cType:=Valtype(xRez))=="A", "Array", ;
         Iif( cType == "O", "Object", ;
         Transform( xRez, "@B" ) ) + Chr(10)+Chr(13) + ;
         oText1:GetText() ) ) )

   IF lRes
      IF nHistLen < HISTORY_SIZE_MAX
         aHistory[++nHistLen] := s
      ELSE
         Adel( aHistory, 1 )
         aHistory[nHistLen] := s
      ENDIF
      nHistCurr := nHistLen + 1
      IF ( n := __mvDbgInfo( HB_MV_PRIVATE_LOCAL ) ) > 0
         aVars := {}
         FOR i := 1 to n
            xRez := __mvDbgInfo( HB_MV_PRIVATE_LOCAL, i, @cname )
            Aadd( aVars, { cname, xRez } )
         NEXT
      ENDIF
   ENDIF

   RETURN "1"

STATIC Function OnKey( nKey, oEdit1, oText1 )

   IF nKey == 66
      RETURN OnBtnCalc( oEdit1, oText1 )
   ENDIF

   RETURN "0"

STATIC Function FHelp()
   Local oWnd, oLayV, oText1, oNote
   Local s := "Calculator help" + Chr(10) + Chr(10) + ;
      "Use '<' and '>' buttons to navigate via "   +;
      "calculations history." + Chr(10) + Chr(10)  +;
      "You may create variables, assigning values" +;
      " to them, and then use in expressions:"+ Chr(10) + ;
      "   arr := Directory()" + Chr(10) + ;
      "   Len(arr)"

   // INIT NOTIFICATION oNote TITLE "Test" TEXT "Notification test"
   // oNote:Run()

   INIT WINDOW oWnd TITLE "Help" ON INIT {||oText1:SetText(s)}

   MENU
      MENUITEM "Test" ACTION FHelp2()
      MENUITEM "Exit" ACTION hd_calljava_s_v( "exit:")
   ENDMENU

   BEGIN LAYOUT oLayV BACKCOLOR "#FFFFFF" ;
         SIZE MATCH_PARENT,MATCH_PARENT

      TEXTVIEW oText1 TEXTCOLOR 10485760 BACKCOLOR "#FFFFFF" ;
               SIZE MATCH_PARENT,MATCH_PARENT VSCROLL

   END LAYOUT oLayV

   ACTIVATE WINDOW oWnd

   RETURN "1"

STATIC Function FHelp2()
   Local oWnd, oLayV, oText1
   Local s := "Just a test!"

   INIT WINDOW oWnd TITLE "Test"

   BEGIN LAYOUT oLayV BACKCOLOR 8706030 ;
         SIZE MATCH_PARENT,MATCH_PARENT

      TEXTVIEW oText1 TEXT s TEXTCOLOR 0 BACKCOLOR 8706030 ;
               SIZE MATCH_PARENT,MATCH_PARENT

   END LAYOUT oLayV

   ACTIVATE WINDOW oWnd

   RETURN "1"

STATIC Function FExit( o )

   IF o:nres == 1
      hd_calljava_s_v( "exit:")
   ENDIF
   RETURN "1"

STATIC FUNCTION VERSION()

   LOCAL oTimer

   SET TIMER oTimer VALUE 1000 ACTION {||Ftm()}
   hd_MsgInfo(hd_Version()+Chr(10)+hb_Version(),{||oTimer:End()})

   RETURN Nil

STATIC FUNCTION Ftm()
   hd_wrlog( str(seconds()) )
   RETURN Nil