Thank you for visiting! If you liked the site, please add a bookmark, else add a critical comment! Would you like to visit Greece? Traditional Greek flag This real estate site is only available in Greek! The holy mountain

Thursday 14 July 2016

A technical review of Android development using Android Studio 2.1.2

Photo from the Keramikos ancient cemetery, Athens, Greece
This new post describes my findings while developing a small android 
sightseeing application of about 4 MB in size, targeting English 
speaking tourists already visiting, or planning to travel to Athens,
 Attica, Greece using android version 4.3 devices, or newer.

 
On the dark side the development environment is so rapidly changing, 
that after less than six months, half the code of the book I was reading
 was already deprecated!
Moreover one has to daily download hundreds of MB, to update,
 which can be sometimes distracting. The IDE is also too CPU demanding 
 and memory hungry, 8 GB or even more are recommended, when simulators are needed.
Editing the gradle settings for the specific project might save you from overheating
your CPU.  Please read your console output and edit accordingly, here is only an instance: 
 
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users
:# Gradle settings configured through the IDE *will override* 
# any settings specified in this file.
# For more details on how to configure your build environment visit 
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings. 
# Default value: -Xmx10248m -XX:MaxPermSize=256m 
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m
 -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html
#sec:decoupled_projects 
# org.gradle.parallel=true 
 
Furthermore, one has to test each device screen size and android version separately at a time, 
having all handheld devices  available  is rather impossible, which may make development 
cumbersome and expensive. For one cannot upgrade the mobile or tablet OS to a newer version,
 unless one pays the higher (almost double) price of a Nexus device! 
 
On the bright side, the libraries and online services provided are extensive
 and effectively help the programmer to integrate mapping and calculating the distance, 
or route between two places. The documentation offers a basic skeleton of code samples
 to build upon, and naturally one has to search how to fit all pieces of the puzzle together.
 
All in all, the initial target of java seems not to be met, the doctrine write once run 
everywhere, is now not valid, since as far as I know, one cannot run the app on a traditional
 linux java virtual machine, such as Web OS of a  LG smart tv, 
 which I find rather disturbing.
 Such proprietary solutions are successful and bring up to now certainly big corporate 
profits, but I wonder whether and for how much longer in the future will the consumers
 and international organizations tolerate it.

Saturday 4 April 2015

A technical review of LG LB650 smart tv series

The  smart TV menu

This article mentions some technical characteristics and personal experiences of setting up and  using  the LG 3D smart tv series for a limited time. The specific model at hand is 32LB650, which comes with WebOS and also provides a satellite receiver.
On the bright side,  the tv offers trouble free ways of wireless and ethernet connection,USB and HDMI sockets, comes with 2 pairs of 3D glasses, which I have not been able to test, hence 3D content is still rather scarce to find in a reasonable price. The 500Hz refresh rate is good for watching sports, but when the background has stripes of different colours the picture quality deteriorates. The ecological function is wonderful, as the tv LEDs dim automatically while the daylight decreases.
On the dark side, the assembling   and installation procedure is rather poorly described in the manual. Furthermore, the remote control is practically suited only for traditional, non smart tv operation. One has either to buy a magic remote for 50 € by LG, or setup an application for the mobile called LG TV plus almost for  free. This offers a touch pad similar to laptop users, full access to the WebOS menu applications and normal functions of the regular tv use, such as switching off or lowering the volume. However, the application sends all user commands  via the internet and maybe the LG servers, to the tv, meaning that perhaps all user input is captured and analyzed for statistical, business,  or any other reasons. Therefore, an internet connection is required, no Bluetooth option as far as I can tell. On the other hand, Samsung offers an additional remote for smart tv operation at no extra cost.  What is worse is the primitive  web browser, which does not allow neither any downloads, nor acrobat plugin installation. Thus, playing the vast majority of videos or watching live stream tv channels on line is often impossible. Only newest HTML 5 pages are compatible. Having contacted the LG support for offering a solution did not brought back any reply or hint. Moreover, the browser throws often out of memory errors and the bookmarks cannot be organized in folders. I guess that internally a java virtual machine is running, or maybe not?
All in all, the menu and regular or satellite tv operation works well, the sound is crystal clear, but the WebOS seems in my personal opinion, not suitable for smart tv operation, Finally, the browser leaves a great deal  of bug fixes and improvements to be expected in future releases.

Saturday 1 February 2014

JDeveloper 12c to 11g backwards migration

In case you could not wait to migrate your last project to the currently newer version of JDeveloper 12c, you might have been disappointed with several recurring  errors, or an entire EJB 3 application not running at all.
Familiar or not?


In this new post a solution for returning to the older version will be presented, for those who receive an error message that the workspace cannot open any more with JDeveloper 11g . The exact phrasing is: " Unable to load application file. Workspace already migrated to newer version (12.1.2.0.0)".

Migration can still be undone!

One needs to edit the .jws workspace with an editor, first commenting out the lines mentioning the 12.1.2.0.0 version like this:

<?xml version = '1.0' encoding = 'UTF-8'?>
<jws:workspace xmlns:jws="http://xmlns.oracle.com/ide/project">
   <hash n="adrs-workspace-properties">
      <value n="adrs-instance-binding" v="DefaultServer"/>
      <value n="deploy-timeout" v="0"/>
      <value n="runtime-application-name" v="ejb3inaction"/>
   </hash>
   <hash n="adrs-workspace-weblogic-properties">
      <value n="hot-class-reload" v="ide-default"/>
   </hash>
   <value n="application-package-prefix" v="actionbazaar"/>
   <url n="application-source-directory" path="src/"/>
   <value n="appTemplateId" v="#genericApplicationTemplate"/>
   <hash n="appWebServicePolicy">
      <value n="location"/>
      <value n="LOCATION_TYPE" v="policy.config.PolicyOptions.LocationType.FILE_STORE"/>
      <value n="SERVER_LOCATION" v="IntegratedWebLogicServer"/>
   </hash>
   <hash n="component-versions">
      <value n="oracle.adf.share.dt.migration.jps.JaznCredStoreMigratorHelper" v="11.1.1.1.0"/>
      <!--value n="oracle.adf.share.dt.migration.wsm.PolicyAttachmentMigratorHelper" v="12.1.2.0.0"/-->
<value n="oracle.adf.share.dt.migration.wsm.PolicyAttachmentMigratorHelper" v="11.1.2.0.0"/>     
<value n="oracle.adfdt.controller.adfc.source.migration.SavePointDataSourceForWLSMigrator" v="11.1.1.1.0"/>
      <value n="oracle.adfdtinternal.model.ide.security.extension.AdfSecurityMigrator" v="11.1.1.1.0.13"/>
      <value n="oracle.adfdtinternal.model.ide.security.wizard.AdfSecurityMigrator" v="11.1.1.1.0.13"/>
      <value n="oracle.ide.model.Project" v="11.1.1.1.0;11.1.2.0.0"/>
<!--value n="oracle.ide.model.Project" v="11.1.1.1.0;11.1.2.0.0;12.1.2.0.0"/-->     
<value n="oracle.jbo.dt.jdevx.deployment.JbdProjectMigrator" v="11.1.2.0.0"/>
      <value n="oracle.jdevimpl.appresources.ApplicationSrcDirMigrator" v="11.1.2.0.0"/>
      <value n="oracle.jdevimpl.deploy.ear.OarMigratorHelper" v="11.1.1.1.0"/>
      <value n="oracle.jdevimpl.deploy.mar.MarMigratorHelper" v="11.1.1.1.0"/>
      <value n="oracle.jdevimpl.deploy.migrators.JeeDeploymentMigrator" v="11.1.2.0.0"/>
      <value n="oracle.jdevimpl.xml.oc4j.ds.DataSourcesMigratorHelper" v="10.1.3.5.0"/>
      <value n="oracle.jdevimpl.xml.oc4j.jps.JpsConfigMigratorHelper" v="11.1.1.1.0.1"/>
      <value n="oracle.jdevimpl.xml.wl.WeblogicMigratorHelper" v="11.1.1.1.0"/>
      <value n="oracle.mds.internal.dt.deploy.base.MarMigratorHelper" v="11.1.1.1.0"/>
      <value n="oracle.mds.internal.dt.ide.migrator.MDSConfigMigratorHelper" v="11.1.1.0.5313"/>
   </hash>
   <list n="contentSets">
      <string v="oracle.mds.internal.dt.ide.appresources.MDSAppResourceCSProvider/MDSAppContentSet"/>
      <string v="oracle.jdeveloper.model.PathsConfiguration/ADFContentSet"/>
      <string v="oracle.jdeveloper.model.PathsConfiguration/ApplicationSrcContentSet"/>
      <string v="oracle.jdeveloper.model.PathsConfiguration/ApplicationLevelMavenPOMContentSet"/>
      <string v="oracle.jdeveloper.model.PathsConfiguration/ApplicationBuildToolContentSet"/>
      <string v="oracle.jdeveloper.model.PathsConfiguration/ResourceBundlesContentSet"/>
   </list>
   <list n="listOfChildren">
      <hash><url n="URL" path="Model/Model.jpr"/></hash>
      <hash><url n="URL" path="UserInterface/UserInterface.jpr"/></hash>
   </list>
   <hash n="oracle.jdeveloper.deploy.dt.DeploymentProfiles">
      <hash n="profileDefinitions">
         <hash n="ejb3inActionV2">
            <hash n="archiveOptions">
               <value n="compressed" v="true"/>
               <value n="hasManifest" v="true"/>
            </hash>
            <value n="defaultConnection" v="standalone"/>
            <hash n="dependencies">
               <list n="dependencyList">
                  <hash>
                     <value n="adapterClass" v="oracle.jdevimpl.deploy.common.ArchiveProfileDependable"/>
                     <url n="ownerURL" path="Model/Model.jpr"/>
                     <value n="pathInEar" v=""/>
                     <value n="profileName" v="ejb3inactionModel"/>
                  </hash>
                  <hash>
                     <value n="adapterClass" v="oracle.jdevimpl.deploy.common.ArchiveProfileDependable"/>
                     <url n="ownerURL" path="UserInterface/UserInterface.jpr"/>
                     <value n="pathInEar" v=""/>
                     <value n="profileName" v="ejb3inActionV2"/>
                  </hash>
               </list>
            </hash>
            <url n="earURL" path="deploy/ejb3inActionV2.ear"/>
            <value n="enterpriseAppName" v="ejb3inActionV2"/>
            <hash n="fileGroups">
               <list n="groups">
                  <hash>
                     <list n="contributors">
                        <hash>
                           <value n="type" v="9"/>
                        </hash>
                     </list>
                     <value n="displayName" v="Application Descriptors"/>
                     <hash n="filters">
                        <list n="rules">
                           <hash>
                              <value n="pattern" v="**"/>
                              <value n="type" v="0"/>
                           </hash>
                        </list>
                     </hash>
                     <value n="internalName" v="ear-metainf"/>
                     <value n="type" v="1"/>
                  </hash>
                  <hash>
                     <value n="displayName" v="Application Libraries"/>
                     <hash n="filters">
                        <list n="rules">
                           <hash>
                              <value n="pattern" v="xml.jar"/>
                              <value n="type" v="1"/>
                           </hash>
                           <hash>
                              <value n="pattern" v="xmlparserv2.jar"/>
                              <value n="type" v="1"/>
                           </hash>
                           <hash>
                              <value n="pattern" v="adf-controller-rt-common.jar"/>
                              <value n="type" v="1"/>
                           </hash>
                           <hash>
                              <value n="pattern" v="adf-controller-api.jar"/>
                              <value n="type" v="1"/>
                           </hash>
                           <hash>
                              <value n="pattern" v="adf-controller.jar"/>
                              <value n="type" v="1"/>
                           </hash>
                           <hash>
                              <value n="pattern" v="**"/>
                           </hash>
                        </list>
                     </hash>
                     <value n="internalName" v="libraries"/>
                     <list n="selectedLibraries"/>
                     <value n="targetWithinJar" v="lib"/>
                     <value n="type" v="3"/>
                  </hash>
               </list>
            </hash>
            <hash n="libraryDependencies">
               <list n="unselectedLibraries"/>
            </hash>
            <value n="profileClass" v="oracle.jdeveloper.deploy.ear.EarProfile"/>
            <value n="profileName" v="ejb3inActionV2"/>
         </hash>
      </hash>
      <list n="profileList">
         <string v="ejb3inActionV2"/>
      </list>
   </hash>
   <hash n="oracle.jdeveloper.deploy.SecurityDeploymentSettings">
      <value n="Security-Deployment-Migrate-Users-And-Groups-Key" v="true"/>
      <value n="Security-Deployment-Overwrite-Application-Policies-Key" v="true"/>
      <value n="Security-Deployment-Overwrite-Credentials-Key" v="true"/>
   </hash>
   <hash n="oracle.jdeveloper.model.PathsConfiguration">
      <hash n="ApplicationSrcContentSet">
         <list n="pattern-filters">
            <string v="+**"/>
         </list>
         <list n="url-path">
            <url path="src/"/>
         </list>
      </hash>
   </hash>
   <hash n="oracle.mds.internal.dt.ide.CustOptions">
      <list n="customizationLibraries">
         <hash/>
      </list>
   </hash>
   <hash n="Weblogic JDBC">
      <value n="Weblogic-JDBC-Auto-Sync-Key" v="false"/>
   </hash>
</jws:workspace>


Thus, by removing the references to  version 12.1.2.0.0 one can continue development with the older version and postpone the migration, if necessary. Finally, one can find  further migration details as usual here.