threerings / getdown Goto Github PK
View Code? Open in Web Editor NEWDownload, Install, Update
License: Other
Download, Install, Update
License: Other
Pack200, specified in JSR 200, is a compacting archive format developed by Sun, reducing JAR file sizes by a factor of 7 to 9.
It would be nice if getdown supports pack200 files and unpacks them after downloading.
This will reduce the download time of big jar files.
I've noticed that the cache gets overwritten during updates and causes already running instances to have faults. To duplicate:
The new code will be pulled down and overwrite the locally running (cached) version. This will cause anything from lockups to random behaviors in the instances that were running before the update.
Is it possible to configure the appbase as a parameter of the java command?
Maybe like this...
java -jar myapp/getdown-X.Y.jar myapp http://myapplication.com/myapp/
or
java -jar myapp/getdown-X.Y.jar myapp appbase=http://myapplication.com/myapp/
We want to use getdown from a network path to install our application on the clients. Our appbase should located on a http- or file-server. Otherwise we think we had to install getdown and the config getdown.txt on every client. Is there another solution?
The french translation needs corrections.
I will make a pull request.
Hi,
I would like to know if it is normal that we still have validation files after the application (code) startup.
If so, can we consider to remove them ?
According the doc (https://github.com/threerings/getdown/wiki/Design#validation-path) those files tells Getdown that the tracked file has been checked.
So once the application is launch we don't need them anymore, right ?
Seems like the 'clearValidationMarkers' can do the work but i'm not sure about the consequences.
I want to profile with Java Flight Recorder / Java Mission Control, so I put the appropiate jvmargs in the getdown.txt. When I open the recording file, I keep getting the a message that says that there are no recording events.
Strangely when I start my progam without GetDown, I do get a working recording.
Any idea why this is (not) happening?
Edit: Added jmvargs
BTW I'm using the latest which has the %ENV.XXX% feature.
From getdown.txt
# Java VM Args
jvmarg = -Xms512m
jvmarg = -Xmx512m
jvmarg = -Dsun.java2d.d3d=false
jvmarg = -Dsun.java2d.ddoffscreen=true
jvmarg = -Dsun.java2d.noddraw=true
jvmarg = -XX:+UnlockCommercialFeatures
jvmarg = -XX:+FlightRecorder
jvmarg = -XX:FlightRecorderOptions=disk=true,repository=<path>\%ENV.USERNAME%,dumponexit=true,dumponexitpath=<path>\%ENV.USERNAME%
jvmarg = -XX:StartFlightRecording=defaultrecording=true,settings=profile
From launcher.log
-Xms512m
-Xmx512m
-Dsun.java2d.d3d=false
-Dsun.java2d.ddoffscreen=true
-Dsun.java2d.noddraw=true
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:FlightRecorderOptions=disk=true,repository=<path>\%ENV.USERNAME%,dumponexit=true,dumponexitpath=<path>\%ENV.USERNAME%
-XX:StartFlightRecording=defaultrecording=true,settings=profile
Looks pretty the same to me...
Hi,
It would be nice to allow to force the usage of the custom JVM regardless of the computer's installed JVMs.
Hi Sir
Usually on Windows we install software in the Programs Folder.
Getdown.jar as all other java applications can't write to that folder (because they don't have any writing permission from the os) and so Getdown doesn't work.
Do you have any advice ?
We try to use Launch4j with a UAC elevation manifest. This is a fine solution but the system ask everytime to the user to elevate his rights. This is a little annoying.
There is any other solution ?
Regards
Andrea
Is it possible to show the GUI, but not launch the application?
In a worst-case scenario I guess I can import getdown.jar
into my classpath, and extend the StatusPanel
to create my own GUI, but that sounds like a lot of work ...
If application is version based, then the request is made to http server to read updated getdown.txt file. And then response result is parsed to read the version config from there (i.e. version=xxx line).
However, a server can reply with any non-OK response (e.g. 301, moved permanently). In this case the body will contain some error text and getdown will try to find version=xxx line there, which obviously won't be there. So it will skip version check.
I think such case can be treated as an exception and at least warning could be logged.
My getdown.txt looks like this:
appbase = http://localhost:8081/test
code = helloworld.jar
class = HelloWorld
java_min_version = 9999999
java_location = [linux] /jvm/java_linux.jar
When running getdown with an absolute appdir (e.g. java -jar test/getdown.jar /path/to/test
) it works, but when running with a relative appdir (e.g. java -jar test/getdown.jar test
) it doesn't.
Excerpt from launcher.log:
2015/03/24 17:22:37:937 WARNING m.a: launch() failed.
java.io.IOException: Cannot run program "test/java_vm/bin/java" (in directory "test"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at java.lang.Runtime.exec(Runtime.java:617)
at com.threerings.getdown.data.Application.createProcess(Unknown Source)
at com.threerings.getdown.launcher.Getdown.launch(Unknown Source)
at com.threerings.getdown.launcher.Getdown.getdown(Unknown Source)
at com.threerings.getdown.launcher.Getdown.run(Unknown Source)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 5 more
The problem is that (at least on my Linux system) the program path should be relative to the working dir of the subprocess, which is the appdir (see
), but currently the appdir is also prepended to the program path ( ).I just wrote my first installer for Getdown.
I bundled my icon with my installer and included it in the getdown.txt file, yet no corner icon is shown.
I thought maybe I had done something wrong, but when I checked something well-done like Spiral Knights, I noticed the same thing.
On the initial install, no icon.
However on subsequent launches the corner icon does show.
The content of <license>
tag of the pom.xml
states that Getdown is LGPL licensed:
<licenses>
<license>
<name>GNU Lesser General Public License (LGPL), Version 2.1</name>
<url>http://www.fsf.org/licensing/licenses/lgpl.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
Whereas Github and the licence file states that it's the BSD-2 licence.
What's correct?
When getdown downloads updated java_vm.jar file, it makes all the files in the bin folder executable.
For Solaris this is not enough - there is a file lib/amd64/jspawnhelper, which should also be marked as executable (it's used for spawning new processes in solaris).
PS I would recommend to refactor comments and logging in com.threerings.getdown.launcher.Getdown#updateJava to make them more serious
We're using Java Web Start currently to deploy our application. I'd like to bundle a JRE with the application and so I'm evaluating getdown
as a replacement for the Web Start solution. So, first of all, thanks for this nice library. It works quite well.
Is the getdown
project still active and accepts pull requests?
It seems to not break functionality; only irritating / wrong metadata
TL;DR
The Resource.computeDigest() Line 241 ignores the META-INF.
This might work well for most users, but i encountered an issue while working with my project:
Have a Maven project, distributing sometimes some snapshot jars (for testers).
In gui, i display the JAR manifest impl version, to get a clue what is deployed in what version.
When i now release that jar, so that ONLY the metadata changes (but not a class file; compared to last snapshot update), the digest is the same, and never downloaded/updated the release version! (still displaying snapshot in gui)
(Would be the same, if you always release unchanged jars, to have them all on same version)
What is/was the need for skipping the meta-inf?
How could i change that w/o breaking live instances (aka GD self update)?
It gives me a slightly bad feeling, that not the jar i deploy is downloaded and checked 1:1...
Would it be possible to have a little documentation, and maybe some configuration options in the Maven pom.xml
, to be able to release a fork in an internal Maven repo while waiting for pull-requests or official release to comes out?
Today some plugin prevent a standard Maven release to take place out-of-the-box, and if removed some of the jar content is obviously missing
Exception in thread "main" java.lang.NoClassDefFoundError: com/samskivert/util/StringUtil
at com.threerings.getdown.launcher.GetdownApp.main(GetdownApp.java:44)
Caused by: java.lang.ClassNotFoundException: com.samskivert.util.StringUtil
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Using get down 1.6 on an empty appdir with -Dappbase=xxx
or an appdir with just a getdown.txt
with appase=xxx
fails because it can't find digest2.txt
Eg, in empty directory:
java -Dappbase=http://xxx/yyy -jar /lib/getdown-1.6.jar .
popup error saying:
The application has failed to launch due to missing resource:
http://xxx/yyy/digest.txt
As I'm using getdown 1.6, the digest is version 2 and so the digest file is digest2.txt
not digest.txt
and I don't think this should be an error.
Is this possible? It's great the source is available, but without the line numbers debugging in an IDE becomes painful.
My app suffers from having a very long classpath (16k characters at last count). Because of this I create a custom-classpath.jar containing the classpath in the manifest. I then put this classpath.jar as the classpath when launching my app. I can't see a way to configure this in the getdown.txt
The end result is that the app cannot launch because it the command line is too long (Windows limits to 8192 chars)
I've threaded Application.verifyResources and removed the 'static' from Resource.computeDigest. With a threadpool of 20 (arbitrary number) I reduce the verification check from 17 seconds to 7 seconds for an app with 250mb of jars.
Seems like a no-brainer but could do with some testing from other users. I've hacked it in up here so you can see what I mean: https://github.com/beirtipol/getdown/tree/threaded-digestcomputation
Hello
we have developped a multi-platform app and we have a problem configuring java option on the getdown.txt file, because java options have different syntax on different operating systems
For example on windows the path separator is the semicolon char (;) while on Linux is the colon char (:)
So on Windows our getdonw.txt configuration contains
jvmarg = -Djava.library.path=folder1**;folder2
while on Linux
jvmarg = -Djava.library.path=folder1:**folder2
(please read carefully, the above statements are different, the first contains a semicolon and the second a colon)
Future versions of the program should take this into account.
It would be interesting to provide different java configurations, in relation to the user operating system.
What about that ?
Regards from Italy
Andrea
The System.out prints are getting swallowed by the getdown app. I can see that my application is launching successfully and writing a test file to the filesystem but can't see any stdout in either the launcher.log or in the console I launch the app from. I guess it's something to do with log4j config?
It is not parsed correctly by getdown, resulting in a null string.
I just changed our application delivery so that getdown
is responsible to install the application and keep it up-to-date. Now, I have the following situation:
getdown
. It opens and everything is fine.getdown
is now running an update because I changed a jar file (by intention).ClassNotFoundException
.As far as I know this is the expected result if a jar file is being replaced while an application is running. What can be done in order to prevent such situations? I'm on Windows 8.1 if that helps.
I'm still new to getdown
, so bear with me if that's a configuration issue or this question has already been asked.
Regards,
-- Thomas
Hello,
It seems that condition for creating Default or Cached ClassPath is reverted. With non or false parameter use_code_cache is created .cache directory and Cached ClassPath for launching:
public static ClassPath buildClassPath (Application app) throws IOException
{
return app.useCodeCache() ? buildDefaultClassPath(app) : buildCachedClassPath(app);
}
Best regards
Jan Olsansky
If you set use_code_cache
to true
in getdown.txt you get an exception when trying to create the Application
Looking at
If use_code_cache
is true it then tries to parse it a second time as an Integer
which obviously fails with a NumberFormatException.
_useCodeCache = Boolean.parseBoolean((String) cdata.get("use_code_cache"));
_codeCacheRetentionDays = cdata.containsKey("code_cache_retention_days") ?
Integer.parseInt((String) cdata.get("use_code_cache")) : 7;
I suspect the parseInt
is supposed to be on code_cache_retention_days
.
What is the digest2.txt file ? What are the differences with the digest.txt file ? When I have to use it and when the digest.txt ?
Thank you in advance
Hi,
Thanks for sharing getdown.
When do you plan to release 1.4 ? or a mislestone ?
I create a gradle-getdown-plugin, mainly to be able to package app (with jre). App that could be run online, offline of without deployement on an http server. And the fix to be able to run app offline or without http server defined is in 1.4.
I have a application that uses resources (jars) on a server (in our maintenance). These jars are updated every 3 months or so. I don't want to download these jars and update the getdown app every time.
Is it possible to let getdown download these resources and put it on the classpath?
I believe it worked with Java Web Start.
Other approaches I can use to fix this problem?
Hello,
When there is no more disk space while getdown is downloading app components, we end up with the following kind of stack trace:
2015/11/24 12:15:16:605 INFOS n.a: Downloading resource [url=http://localhost:9000/my-lib.jar.pack.gz, size=85085]
2015/11/24 12:15:16:621 AVERTISSEMENT n.a: Download failed [rsrc=null]
java.io.FileNotFoundException: .\lib\my-lib.jar.pack.gz (Espace insuffisant sur le disque)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at com.threerings.getdown.net.HTTPDownloader.doDownload(Unknown Source)
at com.threerings.getdown.net.Downloader.download(Unknown Source)
at com.threerings.getdown.net.Downloader.download(Unknown Source)
at com.threerings.getdown.launcher.Getdown.download(Unknown Source)
at com.threerings.getdown.launcher.Getdown.getdown(Unknown Source)
at com.threerings.getdown.launcher.Getdown.run(Unknown Source)
Would it be possible, on FileNotFoundException catch, to check for the disk space and display an accurate message to the final user?
Or maybe we could just display the technical error which is sufficiently understadable?
In any case, I think the exception should be catched and not trigger a Getdown crash.
Hi,
I am willing to launch the application through getdown as a jar file.
e.g: 'java -jar foo.jar'
However the current behavior of getdown is to launch the application by specifying the classpath.
'java -classpath foo.jar'
In the case the jar represents a web app that relies on dependencies packaged inside the same jar, we have exception such as NoClassDefFound.
On the contrary, launching 'java -jar foo.jar' perfectly works.
So here my questions:
Thx for your help
I am trying to hide the decorations from the launch window by using ui.hide_decorations=true
. However, my window is still decorated, showing the name and icons.
I can't find out what I am doing wrong.
Please find below my configuration:
ui configuration
ui.name = Skybridge
ui.background = FFFFFF
ui.background_image = images/skybridge_splashscreen.jpg
ui.progress = 0, 388, 650, 30
ui.progress_bar = EBB80F
ui.progress_text = 004E72
ui.status = 16, 366, 300, 8
ui.status_text = 004E72
ui.icon = icons/unifly_color_icon16.png
ui.hide_decorations = true
Some applications require a system environment variable to be passed in as a command line argument. Since these are specific to the client launching the app, they can't be pre-configured in the getdown.txt.
Hi
First of all, thank you very much for a great project. We are targeting it as a replacement of current web start solution.
Our "boxed" app is distributed as an all-in-one server app. Then it runs some HTTP server hosting JNLP file and all jars from that JNLP file. Then on workstations the client for the server app is installed through web start with dynamic set up of the application base depending on the current server's IP address/hostname. Please let me know how this can be achieved with getdown?
Hi,
Using getdown, I observe the creation of the file proxy.txt.
Is it mandatory ? Can we condition this creation on the content of getdown.txt ?
Thx
Is there a way I can use getdown connect to a SFTP? What I need do?
Whenever I am releasing any update, most of the clients are getting NoClassDefFound exception. I want to know are you deleting main resource file then start downloading, or you download file in temp folder then update original files ?
Is there any intention of providing Sandbox support through Java's Security Manager? Part of the theoretical (though often times more questionable) value of WebStart was the Sandbox.
Today, digest computation considers the whole packed jar to compute its checksum.
It's problematic because rebuilding the jar with the same content and packing results in a new checksum.
The packed 200 jar should be unpacked and checksum should only process jar entries by excluding the manifest.
The second phase is already done for a standalone jar, unpack phase should be executed before computing the checksum.
Hi,
I'm running into an issue where getdown 1.6 can't seem to unpack a downloaded JVM.
I've traced through the getdown code and it looks to me like a "bug" in the Resource.unpack() method.
I say "bug" because the code looks ok to me, just the behaviour seems to not be the intention.
I am piecing this together through the log and working through the code as it is a bit tricky for me to break into the running JVM.
I think I am reaching Getdown.updateJava() line 645 before an exception is thrown. I can see that the HttpDownloader is pulling down the JVM package into a local file named java_vm.jar_new, yet the Resource.unpack() method is trying to unpack java_vm.jar
It looks like the Resource.unpack() line 262 is (part of) the problem. Which is currently:
return FileUtil.unpackJar(new JarFile(_local), _unpacked);
With any downloaded resource I was expecting something like:
return FileUtil.unpackJar(new JarFile(_localNew), _unpacked);
Unfortunately I don't have easy access to Maven to rebuild a custom .jar right now.
Am I on the right track?
The launcher.log is as follows:
2017/01/19 12:44:22:342 INFO n.a: ------------------ VM Info ------------------
2017/01/19 12:44:22:345 INFO n.a: -- OS Name: Windows 7
2017/01/19 12:44:22:345 INFO n.a: -- OS Arch: amd64
2017/01/19 12:44:22:345 INFO n.a: -- OS Vers: 6.1
2017/01/19 12:44:22:345 INFO n.a: -- Java Vers: 1.8.0_92
2017/01/19 12:44:22:345 INFO n.a: -- Java Home: C:\Program Files\Java\jre1.8.0_92
2017/01/19 12:44:22:346 INFO n.a: -- User Name:
2017/01/19 12:44:22:346 INFO n.a: -- User Home: C:\Users<userid>
2017/01/19 12:44:22:346 INFO n.a: -- Cur dir: C:\Jan\Code\Alice\build\getdown
2017/01/19 12:44:22:346 INFO n.a: ---------------------------------------------
2017/01/19 12:44:22:461 INFO n.a: Failed to find proxy settings in Windows registry [error=java.lang.UnsatisfiedLinkError: no jRegistryKey in java.library.path]
2017/01/19 12:44:22:465 INFO n.a: ---------------- Proxy Info -----------------
2017/01/19 12:44:22:465 INFO n.a: -- Proxy Host: null
2017/01/19 12:44:22:465 INFO n.a: -- Proxy Port: null
2017/01/19 12:44:22:465 INFO n.a: ---------------------------------------------
2017/01/19 12:44:22:496 INFO n.a: Able to lock for updates: true
2017/01/19 12:44:22:498 INFO n.a: Checking Java version [current=1080092, wantMin=1080102, wantMax=0]
2017/01/19 12:44:22:498 INFO n.a: Attempting to update Java VM...
2017/01/19 12:44:23:083 INFO n.a: Downloading 121028811 bytes...
2017/01/19 12:44:23:201 INFO n.a: Downloading resource [url=http://myhostname/.../jres/jre-1.8.0.102-windows-i586.jar, size=121028811]
2017/01/19 12:47:59:333 WARNING n.a: Failed to create JarFile from '.\app\java_vm.jar': java.io.FileNotFoundException: .\app\java_vm.jar (The system cannot find the file specified)
2017/01/19 12:47:59:333 WARNING n.a: getdown() failed.
java.io.IOException: m.java_unpack_failed
at com.threerings.getdown.launcher.Getdown.updateJava(Unknown Source)
at com.threerings.getdown.launcher.Getdown.getdown(Unknown Source)
at com.threerings.getdown.launcher.Getdown.run(Unknown Source)
2017/01/19 12:47:59:335 INFO n.a: Releasing lock`
Note I have obscured some none essential details in the log above.
If I copy a successfully downloaded java_vm.jar_new as java_vm.jar and re-run getdown I do get further (getdown redownloads but uses the renamed file), and it looks like the JVM is unpacked ok. (see below... sadly I run into another issue which is completely unrelated and my fault in not setting up my project very well :))
2017/01/19 16:28:54:353 INFO n.a: Regenerating classes.jsa for .\app\java_vm\bin\javaw.exe... 2017/01/19 16:28:54:401 INFO n.a: Checking Java version [current=1080092, wantMin=1080102, wantMax=0] 2017/01/19 16:28:54:402 INFO n.a: Checking version of unpacked JVM [vers=1080102].Regards,
Jan
Hi, Is there a way how can I configure getdown to allow more than 1 instance of my app ?
We should be able to disable the text on top of the progress bar.
The SysPropsTest is fragile when running on some Java versions.
For example, on the latest JDK 1.8 (1.8.0_152-ea-b01) available at time of posting, we see the following failure when running unit tests.
shouldParseJavaRuntimeVersion(com.threerings.getdown.data.SysPropsTest) Time elapsed: 0.006 sec <<< ERROR!
java.lang.IllegalArgumentException: Regexp '(\d+)\.(\d+)\.(\d+)(_\d+)?(-b\d+)?' does not match '1.8.0_152-ea-b01' (from java.runtime.version)
at com.threerings.getdown.data.SysProps.parseJavaVersion(SysProps.java:127)
at com.threerings.getdown.data.SysPropsTest.shouldParseJavaRuntimeVersion(SysPropsTest.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
The workaround is to use a different JDK or build with overriden properties (e.g. mvn clean install -U -Djava.version=1.8.0_152 -Djava.runtime.version=1.8.0_152
but that kind of makes the test pointless.
Solution, have a test do a number of different version checks rather than rely on whatever happens to be running the test.
Hi, I created a translation file for Brazilian Portuguese and I want add this in your project. As I don't have permission to commit, perhaps someone can commit it :)
You can download the translation here
Hi,
Last version of getdown allows to launch a 'jar' application with the "manifest" keyword. (class = manifest)
However the wiki states that it is not possible to use the flag "-Ddirect=true" with this option.
Launching the app in the same jvm than getdown would be interesting to directly get the application's output in the same console used to launch the update of the said app.(instead of tailing the log file)
Do you think this would be easy to achieve ?
Thx
getdown-1.5
When I use packed200 codebase( ucode=) and abort fist download in a middle getdown cannot start anymore throwing
Error: unpacker: EOF reading band
If I don't interrupt packed download: app starts fine.
If I interrupt not packed200( code=) codebase initial download: I can continue download on second run~~( although progress bar falsely shows 70%)~~
Hello,
It would be nice to let the user close the getdown window on error, even when hideDecorations has been set to true.
Currently, there is no other way than killing the process via the OS task manager.
Hi,
My compliments to your project, it solved me many problems!!!
One tip: what do you think about convert getdown.txt into a more standard and flexible xml???
In this way, you can include an xls/dtd for code-completion&validation!
Thanks a lot again for your fantastic work!
Agharta
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.