Kas vyko ar įvyko? Ankstyvosios kompiuterių istorijos Lietuvoje epizodai

Ankstesni istorijos epizodai: skiemenuoklis SKIE-MUO
Tvarkyklė BaCoPage DOS terpei

Pirmasis „Java“ įskiepis Lietuvoje

Situacija ir prielaidos

1996 m. sausio 23 d. „Sun“ išleido pirmąją „Java“ versiją (JDK 1.0), o vasario 19 d. ją patikslino (JDK 1.1). Netrukus pagrindinės naršyklės įtraukė galimybę vykdyti „Java“ įskliepius („apletus“).

Tuo metu populiaresnėmis naršyklėmis buvo „Netscape Navigator“ (pilna 1.0 versija pasirodė 1994 m. gruodį „Mosaic“ pavadinimu) ir „Internet Explorer“ (pasirodęs 1995 m.), stoję į „naršyklių karą“. Komercinis NN 2.0 (pasirodęs 1996 m. vasario 5 d.; 8 MB apimties) jau tapo „normalia“naršykle, pirmąja įtraukusia „JavaScript“ (tada vadintą „LiveScript“), o taip pat el. pašto klientą. „Java“ pasirodė NN 2.02 versijoje (1996 m. gegužė; jo ekrano kopiją žr. priede 3). Tuo tarpu NN 3.0 jau turėjo „applet“ tagą (1996 m. rugpjūtis).

Ir štai esant tokiai situacijai, nusprendžiau „Vartiklį“ (įkurtą 1996 m. vasario 23 d.), iki tol platintą BBS stotyse bei el.paštu, perkelti ir į WWW. Jį priėmė „Elneta“, kur jis ir iki šiol reziduoja – ir pirmoji „internetinė“ Vartiklio versija buvo nr. 7, pasirodžiusi 1996 m. gegužės 1 d..

Pirmoji žinutė apie „Java“ Vartiklyje pateikta jau nr. 6 (1996 m. balandžio 12 d., žr. >>>>>). Taigi, ši tema jau tada man nedavė ramybės, nors „Java“ ateitis tuo metu buvo dar visai neaiški.

Ir pagaliau 1996 m. spalio mėn., sužinojęs, kad „Java“ pradėjo bandyti Gediminas Rūkas, paklausiau, ar jis negalėtų „Vartikliui“ sukurti „teksto sukimo“ įskiepį („apletą“). Tiesa, turiu nukrypti, paminėdamas, kad tuo metu mudu su Gediminu dirbome skirtingoms kompanijoms kurdami ar palaikydami tų pačių sričių produktus (turiu pabrėžti, kad Gedimino sukurta lietuvybės palaikymo tvarkyklė „Windows“ terpei „WinLika“ turėjo labai pažangių elementų). Ir likimo ironija – po 25 metų mes abu dirbame tame pačiame projekte kurdami produktą „Java“ pagrindu (tik dabar naudojant jau „Java 8”, ruošiantis pereiti prie „Java 11”).

ScrollText pasirodymas

Į „Vartiklį“ ScrollText buvo patalpinta 1996 m. spalio 29 d. Jo getAppletInfo esančiame Įskiepio aprašyme "ScrollText - new by gr" gr reiškia Gediminas Rūkas (žr. įskiepio kodą priede 2).

Taigi, matome, kad įskiepis buvo sukurtas pačioje „Java“ kūdikystėje, tad tikriausiai tai pirmasis Lietuvoje sukurtas ir realiai naudotas „Java“ įskiepis (jo panaudojimo pavyzdys priede 1).

Jei turite kokios nors papildomos informacijos apie ankstyvąjį „Java“ naudojimą, prašau pranešti.

Pasižiūrėjimas

Nuo 2013 m. dauguma naršyklių ėmėsi riboti „Java“ įskiepių palaikymą, o 2015-17 m. praktiškai jie jau buvo visai pašalinti (nepalaikomi). Todėl „Vartiklyje“ ScrollText įskiepį išjungiau. Tačiau jis liko svetainėje, ir gali būti išbandytas.

Originalus įskiepis yra adresu http://www.vartiklis.lt/rukas/bega.htm
O naujai sukompiliuotas - adresu http://www.vartiklis.lt/rukas/java8/bega.htm

Vis tik peržiūrėti įskiepio veikimą naršyklėje šiuo metu yra problematiška (Pastaba: naršyklėms, turinčioms suderinamumo (compatibility) nustatymus, galima pabandyti įjungti suderinamumą su seniausia leidžiama versija ir nustatyti žemiausią saugumo lygį – kaip tai atliekama priklauso nuo konkrečios naršyklės). Tačiau tam liko ir kitų galimybių.

Paprastesnis būdas yra panaudoti „AppletView“ programą (žr. >>>>>), esančią „Sun“ JDK pakete. Jį naudojant galite vykdyti komandas:
appletviewer http://www.vartiklis.lt/rukas/bega.htm
arba
appletviewer http://www.vartiklis.lt/rukas/java8/bega.htm
appletviewer

Priede 2 pateiktas pilnas įskiepio pradinis tekstas. Tad galite bandyti jį įvykdyti, pvz., vykdant iš „Eclipse“, jos konfigūracijoje nustačius parametrui ScrollText „sukamo“ teksto eilutę, kaip nurodyta pavyzdyje:
Eclipse konfiguracija

(C)2019, Vartiklis. Draudžiama bet kokiu būdu naudoti visą ar atskirą šio teksto dalį be atskiro leidimo ir nenurodžius šaltinio.


Priedas 1. „ScrollText“ įskiepio panaudojimas

<HTML><HEAD>
<TITLE>Running Vartiklis</TITLE>
</HEAD><BODY>
<APPLET code="ScrollText.class"
    width = 540
    height = 21>
<param name="ScrollText" value="Vartiklis. Redaktorius J.Skendelis. Puikiausias elektroninis laikrastis">
</APPLET>
</BODY></HTML>

Priedas 2. Įskiepio „ScrollText“ kodas

Pastaba: Čia pateikiamas tekstas nežymiai modifikuotas, kad būtų kompiliuojamas su „Java 8”.

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;

public class ScrollText
  extends Applet
  implements Runnable
{
  Thread scrollThread;
  int bannerHeight = 20;
  int maxWidth;
  int maxHeight;
  int off_x = 2;
  int off_y = 2;
  public static String message = "Vartiklis";
  int messageX;
  int messageY;
  int messageW;
  int scrollUnit = 10;
  int sleepTime = 150;
  public Dimension lastS;
  public Font messageF;
  Image textImage;
  Graphics textGC;
  static boolean loaded;
  Image bannerImage;
  Graphics bannerGraphic;
  
  public void init()
  {
    Dimension localDimension = size();
    maxWidth = localDimension.width;
    bannerHeight = (this.maxHeight = localDimension.height);
    bannerImage = createImage(maxWidth, bannerHeight);
    bannerGraphic = bannerImage.getGraphics();
    lastS = new Dimension(1, 1);
    setBackground(Color.lightGray);
    message = readText();
    message = (message == null) ? "Vartiklis" : message;
    createBannerParams();
    setLayout(new BorderLayout());
  }
  
  public void start()
  {
    if (scrollThread == null)
    {
      scrollThread = new Thread(this);
      scrollThread.start();
      loaded = true;
    }
  }
  
  public void stop()
  {
    if ((scrollThread != null) && (scrollThread.isAlive())) {
      scrollThread.stop();
    }
    loaded = false;
    messageX = maxWidth;
    scrollThread = null;
  }
  
  public void run()
  {
    Thread localThread = Thread.currentThread();
    localThread.setPriority(1);
    textImage = createImage(maxWidth, bannerHeight);
    textGC = textImage.getGraphics();
    repaint();
    while (scrollThread == localThread) {
      while (loaded)
      {
        nextPos();
        try
        {
          Thread.sleep(sleepTime);
        }
        catch (InterruptedException localInterruptedException) {}
      }
    }
  }
  
  public String readText()
  {
    String str = null;
    try
    {
      str = getParameter("ScrollText");
    }
    catch (Exception localException)
    {
      str = "Info Info Info Info";
    }
    return str;
  }
  
  public void create3D(Graphics paramGraphics)
  {
    paramGraphics.setColor(Color.white);
    paramGraphics.drawLine(0, 0, 0, bannerHeight);
    paramGraphics.drawLine(0, 0, maxWidth, 0);
    paramGraphics.setColor(Color.black);
    paramGraphics.drawLine(maxWidth + 1, bannerHeight + 1, maxWidth + 1, 0);
    paramGraphics.drawLine(maxWidth + 1, bannerHeight + 1, 0, bannerHeight + 1);
  }
  
  public void paint(Graphics paramGraphics) {}
  
  public synchronized void update(Graphics paramGraphics)
  {
    if (loaded)
    {
      textGC.setColor(Color.gray);
      textGC.fillRect(1, 1, maxWidth - 1, bannerHeight - 1);
      textGC.setColor(Color.black);
      textGC.drawString(message, messageX + off_x, messageY + off_y);
      textGC.setColor(Color.lightGray);
      textGC.setFont(messageF);
      textGC.drawString(message, messageX, messageY);
      paramGraphics.drawImage(textImage, 0, 0, this);
      create3D(paramGraphics);
    }
  }
  
  public synchronized void nextPos()
  {
    messageX -= scrollUnit;
    if (messageX + messageW < 0) {
      messageX = lastS.width;
    }
    repaint();
  }
  
  public void createBannerParams()
  {
    int i = maxWidth;
    int j = bannerHeight;
    lastS.width = i;
    lastS.height = j;
    int k = bannerHeight;
    Font localFont = new Font("TimesRoman", 1, k);
    setFont(localFont);
    FontMetrics localFontMetrics1 = getFontMetrics(localFont);
    int m = localFontMetrics1.getHeight();
    m = k * (j - 2) / m;
    messageF = new Font("TimesRoman", 1, m);
    FontMetrics localFontMetrics2 = getFontMetrics(messageF);
    m = localFontMetrics2.getHeight();
    messageX = i;
    messageY = ((j - m >> 1) + localFontMetrics2.getAscent());
    messageW = localFontMetrics2.stringWidth(message);
    off_x = (m / 15);
    if (off_x < 2) {
      off_x = 2;
    }
    off_y = (m / 20);
    if (off_y < 2) {
      off_y = 2;
    }
  }
  
  public String getAppletInfo()
  {
    return "ScrollText - new by gr";
  }
  
  public ScrollText() {}
}

Priedas 3. Netscape 2.02 „Windows 95” terpėje

Netscape Navigator 2.02


Matematikos skiltis
Advanced HTML skyrius
HOT.lt
Vartiklis

 

(C)2019, Vartiklis. Draudžiama bet kokiu būdu naudoti visą ar atskirą šio teksto dalį be atskiro leidimo ir nenurodžius šaltinio.