Tag Archives: dev

Projekt Sun SPOT – Java pro elektrobastlíře a robotiky

Úspěch Lego Mindstorms NXT a snaha podporovat Javu dovedla Sun k tomu, že připravil projekt Sun SPOT (Small Programmable Object Technology). Není to jen Javová verze NXT, je to trochu jiný koncept. Je lepší či horší? Jak na co.

Lego Mindstorms asi každý zná. Jde o rozšíření klasického lega o možnost stavby a programování robotů. NXT se skládá z centrální „krabičky“ s procesorem, displejem, tlačítky a konektory, a z připojitelných periférií – ve standardní dodávce jsou tři servomotorky, ultrazvukový dálkoměr, detektor světla, dotykový senzor a zvukový senzor. Lego Mindstorms je hitovka, pro roboty z Lega se pořádají olympiády a vůbec jde o „mainstream“ produkt.

Lego Mindstorm se programuje buď v grafickém „tahátku“, které ale mnoho nefunguje, nebo v C#. A to je ta správná cesta. Komunikace mezi počítačem a Lego NXT je pomocí USB kabelu nebo Bluetooth.

Periférie jsou drahé a připojují se speciálním kabelem. Celé je to taková školní hračka – pokud ti stačí dodané součástky, užiješ si, ale reálný vývoj s tím neuděláš.

SUN se k problému postavil z druhé strany. Dodávka Sun SPOT se skládá z jednoho řídícího modulu a dvou senzorových.

Každý senzorový modul má

  • tříosý akcelerometr s rozsahem 2G nebo 6G (nastavitelné)
  • teploměr
  • světelný senzor
  • osm tříbarevných LED diod
  • šest analogových vstupů 0-3 V (v některých verzích firmware jsou dostupné jen čtyři)
  • dva DIP přepínače
  • pět logických I/O
  • čtyři vysokovýkonné (čti „100 mA“) výstupy

Každý modul je vybaven rychlým procesorem a velkou pamětí (180 MHz 32 bit ARM920T core, 512K RAM, 4M Flash), rádiovým modulem standardu IEEE 802.15.4 (2.4 GHz; s integrovanou anténou dosah cca 80-100 metrů), nabíjitelnou LiIon baterií a USB portem.

Kde je tedy ten rozdíl?

Sun SPOT nemá v základní výbavě žádná serva ani efektní čidla. Ale je možné na něj připojit COKOLI – standardní servo s PWM řízením, jakýkoli snímač s rozumným analogovým nebo digitálním výstupem, jakékoli výstupní zařízení ovladatelné čtyřmi 100 mA porty. V dodávce máte ne jeden, ale dva autonomní moduly, které si mezi sebou a se základnovou stanicí mohou povídat pomocí bezdrátového linku s rozumným dosahem. Modul sice nemá hezký rastrový displej … ale je něco špatného na LED diodách?

Pro bastlíře je SUN SPOT daleko zajímavější. Umožňuje mu strašně rychle postavit „chytré“ zařízení bez složitého rogramování jednočipových procesorů v assembleru. V Sun SPOTu bije rychlý ARM procesor a standardní Java ME runtime, takže programování jde rychle od ruky a výpočetní výkon je překvapivý.

Sun SPOT má z mého pohledu jedinou chybu – stojí dvakrát tolik než Lego NXT.

Porovnání základních rysů:

V dodávce
Lego NXT: 1 CPU modul
Sun SPOT: 1 CPu modul připojitelný k PC a 2 autonomní CPU moduly se senzorovou deskou

Senzory, zařízení, vstupy a výstupy
Lego NXT: 3 serva se zpětnou vazbou (hlášení polohy), zvukový senzor s rozpoznáváním příkazů a zvuků,
ultrazvukový dálkoměr do 250 cm, dotykový senzor, světelné čidlo, černobílý displej 
100×64 bodů
Sun SPOT: tříosý akcelerometr s rozsahem 2G nebo 6G, teploměr, světelný senzor, osm tříbarevných LED diod,
šest analogových vstupů 0-3 V, dva DIP přepínače, pět logických I/O, čtyři vysokovýkonné (čti „100 mA“) výstupy

Komunikace s PC
Lego NXT: USB, Bluetooth
Sun SPOT: USB

Bezdrátová komunikace
Lego NXT: Bluetooth, dosah jednotky metrů
Sun SPOT: IEEE 802.15.4; dosah až 100 metrů; spojení nejen mezi PC a CPU ale i mezi jednotlivými CPU navzájem; podpora MESH sítí

Hardware
Lego NXT: 32-bit AT91SAM7S256 main microprocessor (256 KB flash memory, 64 KB RAM), rychlost neudána + 8-bit ATmega48 microcontroller @ 4 MHz (4 KB flash memory, 512 Bytes RAM) 
Sun SPOT: 180 MHz 32 bit ARM920T core – 512K RAM – 4M Flash

Programování:
Lego NXT: GUI tahátko krabiček, C#, díky tomuto projektu http://lejos.sourceforge.net/p_technologies/nxt/nxj/nxj.php i Java
Sun SPOT: Standardní Java ME

U mne tedy Sun SPOT vyhrává.

Ale uznávám že jako „hračka“ pro malého (myšleno tím věkem) programátora je lepší Lego NXT – zasunout do sebe legovské kostky je jednodušší a tím, že v dodávce NXT jsou i „legovská“ serva, dá se out-of-the-box postavit spoustu zajímavých věcí.

Odkazy

http://www.sunspotworld.com/ – homepage projektu + obchod
https://spots.dev.java.net/ – development stránka u SUNu
https://spots.dev.java.net/FAQ.html – velmi pěkné FAQ, popis HW
http://parleys.com/display/PARLEYS/Sun+SPOTs+In+Action?showComments=true – prezentace, popis jak připojit různý zajímavý HW

 

Reklamy

Napsat komentář

Filed under Počítače, vývoj HW a SW

Oracle si nevšimne rozpadu TCP spojení a jak z toho ven

Pokud se aplikace připojuje na Oracle v rámci lokálního počítače, vše funguje tak, jak má. Pokud ale přistupuje přes síť, používá zámky a někdo přetrhne spojení (vypne klientský počítač „natvrdo“, vytáhne síťový kabel), Oracle si nevšimne, že se spojení rozpadlo – a zámky zůstanou zamčené, dokud s tím DBA něco neudělá. Co s tím?

 

Existují dvě možnosti, jak to vyřešit.

 

Na „soft“ úrovni je to možné pomocí „resource profilů“ – konkrétně nastavením „IDLE_TIME“.

1) Nejprve povolíme profily v dané instanci Oracle:

alter system set resource_limit=true;

2) Pak uděláme profil s limitací IDLE_TIME na 3 minuty:

CREATE PROFILE LIMPROFILE LIMIT IDLE_TIME 3;

3) A nakonec tento profil přiřadíme k uživateli:

alter user appuser profile LIMPROFILE;

Co to udělá? Pokud v rámci spojení po zadanou dobu nepřijde žádný příkaz, spojení je přerušeno. Do „idle“ time se nepočítá čas, kdy databáze něco dělá – tj. pokud mi SELECT poběží 10 minut, je to v pořádku.

Tj. nekontrolujeme rozpad spojení, ale to, že se na něm nic neděje= budeme muset do aplikace dodělat nějaké „void“ akce typu SELECT * FROM DUAL, aby spojení nikdy nebylo neaktivní déle než zadaný čas.

Pozor! Spojení ukončené pro IDLE TIME se sice uzavře, transakce rollbacknou a zámky odemknou, ale spojení zůstane v tabulce SESSIONS ve stavu „SNIPED“. DBA jej musí smazat ručně (!!!).

 

Druhé řešení je lepší. V souboru network/admin/SQLNET.ORA na serveru je třeba založit novou konfigurační hodnotu:

SQLNET.EXPIRE_TIME=3

Tato hodnota říká, že pokud v TCP spojení na server více než 3 minuty neprojde žádný příkaz, server do něj pošle testovací paket, na který klientská Oracle knihovna odpoví. A pokud neodpoví, Oracle vezme spojení za mrtvé, korektně ukončí session (žádné „SNIPED“ stavy), rollbackne transakce a odemkne zámky.

Vedlejším efektem je malý nárůst síťového provozu (posílání testovacích paketů), ale za odstranění problémů se zamčenými a nedostupnými záznamy to stojí, ne?

 

Keywords: Oracle, DBA, locked record, session timeout

 

 

Napsat komentář

Filed under Počítače, vývoj HW a SW

CS-Script (C#script) – nejlepší skriptovací prostředí pro Windows

Microsoftí framework .NET nepovažuji za nejlepší možnou implementaci podobné věci. JVM je prostě lepší. Ale .NET obsahuje jednu kouzelnou funkci – zabudovaný kompilátor.

Na každém počítači, kde je .NET, je možné kompilovat objekty v C#. (Když je nainstalované i MS Visual Studio, je možné kompilovat i C++/CLR, ale to není pro širokou bázi zákazníků použitelné).

Co z toho plyne? Je možno napsat malou aplikaci, která dostane jako vstup textový soubor se skriptem v syntaxi C#, zkompiluje ho a spustí. Získáme tím silný skriptovací nástroj – oproti ve WSH zabudovanému VBScriptu či JScriptu v podstatě neomezený.

Tímto způsobem uvažovalo mnoho lidí a podobných nástrojů se dá stáhnout mnoho. Pan Programátor Oleg Shilo ovšem přemýšlel i dál a stvořil CS-Script. Kromě vlastního „interpretu“ C# skriptu (vím – není to interpret, ale kompilátror+spouštěč) udělal i sadu velmi silných knihoven a nástrojů… a vše to dal k dispozici pod licencí, která umožňuje i komerční použití.

Co to tedy umí?

Skriptování v C#, tak jak by člověk čekal. Ale taky kompilaci skriptu do EXE souboru, takže pak není potřeba žádný skriptovací systém. Nebo do DLL, takže se dá použít z dalších aplikací.

Tisk ze skriptu. Vytváření WinForms dialogů. Práce s webem(stahování URL včetně prostupu přes proxy, parsování XML, …). Použití.NET remotingu – jako klient i jako server.

Použití COM objektů – bez složitých nastavování. Následujcí kus kódu použije COM objekt pro zjištění režimu napájení. Jde to udělat jednodušeji?

//css_prescript com(SYSINFO.SysInfo.1, SisInfoLib);
using System;
using SisInfoLib;

 

class Script
{

 

[STAThread]
static public void Main(string[] args)
{

SysInfoClass sysInfo = new SysInfoClass();

switch (sysInfo.ACStatus)

{
case 0:

Console.WriteLine(„Not using AC power“);
break;

case 1:

Console.WriteLine(„Using AC power“);
break;

default:

Console.WriteLine(„Unknown AC power status“);
break;

}

if (sysInfo.BatteryLifePercent != 255)

Console.WriteLine(„Battery life „+sysInfo.BatteryLifePercent+“%“);

else

Console.WriteLine(„Battery charge status not known“);

}

 

}

Na tom prvním řádku (//css_prescript) je schováno to kouzlo – pomocí tohoto rozšíření jazyka se dělají věci, které by z „prostého“ C# skriptu šly dělat dost těžko.

On-fly použití WebServices, tj. v rámci skriptu se stáhne WSDL soubor, vygeneruje WebServices klient a je možno ho použít. Asi takto jednoduše:

//css_prescript wsdl(http://localhost/hello/hello.asmx?WSDL, HelloService);
//css_import HelloService;
using System;
using System.Xml;

 

class Program
{

 

static void Main(string[] args)
{

Console.WriteLine(new HelloWorld().SayHello());

}

 

}

Statické použití WebServices – přiloženým nástrojem se z WSDL vygeneruje objekt klienta. A ten se používá. Snadno, rychle.

Vytvoření WebServices serveru …

using System;
using System.Web;
using System.Web.Services;

 

public class HelloWorld : System.Web.Services.WebService
{

 

[WebMethod]
public string SayHello()
{

return „Hello World (WebService)“;

}

 

}

… a jeho deploy do MS IIS:

cscs css2ws Hello.cs HelloWorld

a tak dále.

Prostě: moc hezké prostředí, doporučuji vyzkoušet.

[Home page projektu]

 

Napsat komentář

Filed under Počítače, vývoj HW a SW