Upgrade Notes
| Key | Summary | Components | Description | Upgrade notes | Impact type | Affects Version/s | Fix Version/s |
|---|---|---|---|---|---|---|---|
| NXP-11566 | Layouts / Widgets | There are several components showing cache issues when switching screens/pages only using ajax actions.
As the states need to be kept when performing ajax actions, a solution would be to define behaviours to reset the cache on some components explicitely, when performing ajax actions that changes the problematic screens. |
JSF action listener #{jsfResetActions.resetComponents} can be used in actions that need to reset all components in the same JSF naming container |
API added
|
5.7-SNAPSHOT | 5.6.0-HF18, 5.7.1 | |
| NXP-11564 | Add version label into the detach action in DocumentModelImpl |
Core | Add version label into the documentModel detach method |
Content model Change
|
5.6.0-HF17 | 5.6.0-HF18, 5.7.1 | |
| NXP-11562 | Core, Core SQL Storage | Allow attaching schemas to proxies:
Note, ACLs already behave this way (except for the query part which doesn't exist). |
To define one or more schemas that should be available on all proxies, use this kind of extension point:
<extension target="org.nuxeo.ecm.core.schema.TypeService" point="doctype"> <proxies> <schema name="myschema1"/> <schema name="myschema2"/> </proxies> </extension> |
Configuration format change
|
5.7.1 | ||
| NXP-11543 | Core SQL Storage | Some customers and even some plugins need to execute additional SQL in the database when it is initialized. This should be configurable in the repository configuration. |
In the repository configuration use <sqlInitFile>myconf.sql.txt</sqlInitFile> to read one or more additional files.
The format of the file is documented at http://doc.nuxeo.com/x/hwQz. |
Configuration format change
|
5.7.1 | ||
| NXP-11536 | Add version label into the Document/JSON Export from Automation Rest Request |
Automation | Add VersionLabel into the JSON export and Add new Getter into the org.nuxeo.ecm.automation.client.model.Document to get this information |
Content model Change
|
5.6.0-HF16 | 5.6.0-HF17, 5.7.1 | |
| NXP-11503 | Automation, Nuxeo Drive | HTTP 401 should only be used to signal authentication issues (lack or invalid credentials, for instance the basic http auth header is lacking or invalid). HTTP 403 should be used to signal authorization issues: for instance when an authenticated client is trying to access a resource without being granted the permissions to do so. Right now org.nuxeo.ecm.automation.server.jaxrs.ExceptionHandler is mapping any authorization exceptions from the core to 401 instead of 403 which makes it impossible for the automation client to know whether there a problem with the credentials (e.g. a password has been changed) or whether the user lacks the permissions on a specific document. |
To preserve backward compat for 5.6 compatible clients, the hotfix will not change the behavior of automation server by default unless explicitly stated in {{nuxeo.conf}} with the following line.
org.nuxeo.ecm.automation.server.permission.httpcode=403 In 5.7, authorization exceptions are mapped by default to 403. |
5.6.0-HF17, 5.7.1 | |||
| NXP-11477 | Move Operation and Script feature from Presales Toolkit into the Nuxeo Platform |
Automation | Importing operations created in the context of the Presales toolkit into the default Nuxeo Operations Registry. |
Add following new Operations :
- AddEntryToMultiValuedProperty - CreateProxyLive - GetLiveDocument - RemoveEntryOfMultiValuedProperty Add the following new functions into the Fn Object: - concatenateIntoList - concatenateValuesAsNewList |
API added
|
5.7.1 | |
| NXP-11463 | Update nuxeo dependency management following automation client changes |
To build automation client osgi compliant, existing libraries of nuxeo used for the client are not in osgi version. Furthermore, Pax Exam has been included for osgi compliance testing. |
To get osgi versions of these dependencies, upgrades have been made:
- javax.mail:mail upgrade from 1.4 to 1.4.5 - org.apache.httpcomponents versions upgrade to 4.2.4 from 4.2.3 Exclusions: - log4j:log4j, avalon-framework:avalon-framework, logkit:logkit exclusions from: javax.persistence:persistence-api - commons-logging:commons-logging, org.apache.httpcomponents:httpclient-cache exclusions from: org.apache.httpcomponents:httpclient |
5.7.1 | |||
| NXP-11440 | Long running transactions might cause Nuxeo Drive to miss some document updates |
Nuxeo Drive | Suppose a user updates 3 documents in a row (e.g. using drag and drop) and that writing documents take 2s each (for instance computing some thumbnails synchronously, a S3BinaryManager blob upload or something similarly costly). Let's call the first document creation / update start start at t0. The CoreSession will fire document created / updated events at t0, t0 + 2, t0 + 4. The event audit logger is an asynchronous event listener that will insert the whole batch of events in the audit table at once at time (t0 + 5). In the mean time let's assume that the client did two non-overlapping range queries: query 1 for the range [t0 - 2 to t0 + 3[ at time (t0 + 3) and query 2 for the range [t0 + 3, t0 + 8[ at time (t0 + 8). The audit event logger is an asynchronous listener will only see the last document update that occurred at (t0 + 4) in the query 2. query 1 will return 0 result as the changed are not yet committed in the audit db at that time. Therefore the range queries made by the client should not rely upon log_event_date but rather use a new log_date generated by the database at insertion time to guarantee a near monotonic behavior. |
A new column {{log_date}} is introduced in the {{nxp_log_date}} column. By default the log_date of the old events will be null which should not be a problem.
It is possible to set the value of the {{log_date = null}} rows to {{log_event_date}} instead. |
5.6.0-HF15 | 5.6.0-HF16, 5.7.1 | |
| NXP-11419 | When restoring a content view from a jsonContentViewState and using a currentPage > 0, we end up with the following stack trace: Caused by: org.nuxeo.ecm.core.api.ClientRuntimeException: org.nuxeo.ecm.core.api.ClientException: Cannot build query of provider 'netflix_dam_faceted_search': no search document model is set at org.nuxeo.ecm.platform.query.nxql.CoreQueryDocumentPageProvider.buildQuery(CoreQueryDocumentPageProvider.java:221) at org.nuxeo.ecm.platform.query.nxql.CoreQueryDocumentPageProvider.getCurrentPage(CoreQueryDocumentPageProvider.java:87) at org.nuxeo.ecm.platform.query.api.AbstractPageProvider.setCurrentPage(AbstractPageProvider.java:171) at org.nuxeo.ecm.platform.query.core.PageProviderServiceImpl.getPageProvider(PageProviderServiceImpl.java:112) at org.nuxeo.ecm.platform.contentview.jsf.ContentViewServiceImpl.getPageProvider(ContentViewServiceImpl.java:260) at org.nuxeo.ecm.platform.contentview.jsf.ContentViewImpl.getPageProvider(ContentViewImpl.java:302) at org.nuxeo.ecm.platform.contentview.jsf.ContentViewImpl.getPageProvider(ContentViewImpl.java:309) at org.nuxeo.ecm.platform.contentview.jsf.ContentViewServiceImpl.restoreContentView(ContentViewServiceImpl.java:360) at org.nuxeo.ecm.platform.contentview.seam.ContentViewRestActions.restoreContentView(ContentViewRestActions.java:85) |
PageProviderService#getPageProvider API now take an additional DocumentModel parameter to represent the search document model |
API added
|
5.7.1 | |||
| NXP-11408 | Comments in the default serial workflow are not displayed in "Past tasks" view |
Workflow | Workflow enablement filter id has been temporarily changed from "filter@SerialDocumentReview" to "filter@wf@SerialDocumentReview", and included in 5.6.0-HF17, but this change will be reverted for 5.6.0-HF18 |
Configuration format change
|
5.6 | 5.6.0-HF17, 5.7.1 | |
| NXP-11403 | org.nuxeo.ecm.automation.OperationException should not be mapped to HTTP 500 |
Automation | Looking at the following stacktrace logged on server side: Apr 11, 2013 6:34:10 PM com.sun.jersey.spi.container.ContainerResponse logException 18:34:10 SEVERE: Mapped exception to response: 500 (Internal Server Error) 18:34:10 javax.ws.rs.WebApplicationException: org.nuxeo.ecm.automation.OperationException: Failed to invoke operation NuxeoDrive.Move 18:34:10 at org.nuxeo.ecm.automation.server.jaxrs.ExceptionHandler.newException(ExceptionHandler.java:50) 18:34:10 at org.nuxeo.ecm.automation.server.jaxrs.ExecutableResource.doPost(ExecutableResource.java:77) 18:34:10 at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source) 18:34:10 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 18:34:10 at java.lang.reflect.Method.invoke(Method.java:597) 18:34:10 at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 18:34:10 at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ObjectOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:258) 18:34:10 at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 18:34:10 at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 18:34:10 at com.sun.jersey.server.impl.uri.rules.SubLocatorRule.accept(SubLocatorRule.java:134) 18:34:10 at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 18:34:10 at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 18:34:10 at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 18:34:10 at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 18:34:10 at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) 18:34:10 at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) 18:34:10 at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) 18:34:10 at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) 18:34:10 at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 18:34:10 at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 18:34:10 at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) 18:34:10 at org.nuxeo.ecm.webengine.app.jersey.WebEngineServlet.containerService(WebEngineServlet.java:60) 18:34:10 at org.nuxeo.ecm.webengine.app.jersey.WebEngineServlet.service(WebEngineServlet.java:44) 18:34:10 at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 18:34:10 at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 18:34:10 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221) 18:34:10 at org.nuxeo.ecm.webengine.jaxrs.context.RequestContextFilter.run(RequestContextFilter.java:42) 18:34:10 at org.nuxeo.ecm.webengine.jaxrs.HttpFilter.doFilter(HttpFilter.java:43) 18:34:10 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 18:34:10 at org.nuxeo.ecm.webengine.jaxrs.session.SessionCleanupFilter.run(SessionCleanupFilter.java:45) 18:34:10 at org.nuxeo.ecm.webengine.jaxrs.HttpFilter.doFilter(HttpFilter.java:43) 18:34:10 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 18:34:10 at org.nuxeo.ecm.webengine.app.WebEngineFilter.doFilter(WebEngineFilter.java:92) 18:34:10 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 18:34:10 at org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.doFilterInternal(NuxeoAuthenticationFilter.java:548) 18:34:10 at org.nuxeo.ecm.platform.ui.web.auth.NuxeoAuthenticationFilter.doFilter(NuxeoAuthenticationFilter.java:345) 18:34:10 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 18:34:10 at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) 18:34:10 at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 18:34:10 at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 18:34:10 at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 18:34:10 at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) 18:34:10 at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 18:34:10 at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 18:34:10 at org.mortbay.jetty.Server.handle(Server.java:322) 18:34:10 at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 18:34:10 at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) 18:34:10 at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) 18:34:10 at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 18:34:10 at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 18:34:10 at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) 18:34:10 at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451) 18:34:10 Caused by: org.nuxeo.ecm.automation.OperationException: Failed to invoke operation NuxeoDrive.Move 18:34:10 at org.nuxeo.ecm.automation.core.impl.InvokableMethod.invoke(InvokableMethod.java:140) 18:34:10 at org.nuxeo.ecm.automation.core.impl.CompiledChainImpl.doInvoke(CompiledChainImpl.java:114) 18:34:10 at org.nuxeo.ecm.automation.core.impl.CompiledChainImpl.invoke(CompiledChainImpl.java:96) 18:34:10 at org.nuxeo.ecm.automation.core.impl.OperationServiceImpl.run(OperationServiceImpl.java:81) 18:34:10 at org.nuxeo.ecm.automation.server.jaxrs.OperationResource.execute(OperationResource.java:42) 18:34:10 at org.nuxeo.ecm.automation.server.jaxrs.ExecutableResource.doPost(ExecutableResource.java:56) 18:34:10 ... 50 more 18:34:10 Caused by: java.lang.UnsupportedOperationException: Cannot move a virtual folder item. 18:34:10 at org.nuxeo.drive.adapter.impl.AbstractVirtualFolderItem.move(AbstractVirtualFolderItem.java:90) 18:34:10 at org.nuxeo.drive.service.impl.FileSystemItemManagerImpl.move(FileSystemItemManagerImpl.java:230) 18:34:10 at org.nuxeo.drive.operations.NuxeoDriveMove.run(NuxeoDriveMove.java:55) 18:34:10 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 18:34:10 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 18:34:10 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 18:34:10 at java.lang.reflect.Method.invoke(Method.java:597) 18:34:10 at org.nuxeo.ecm.automation.core.impl.InvokableMethod.doInvoke(InvokableMethod.java:117) 18:34:10 at org.nuxeo.ecm.automation.core.impl.InvokableMethod.invoke(InvokableMethod.java:132) 18:34:10 ... 55 more The error is known and well managed server side ("Cannot move a virtual folder item"). It is logged at level SEVERE because the HTTP status is 500, which is wrong. => Manage java.lang.UnsupportedOperationException and/or org.nuxeo.ecm.automation.OperationException in org.nuxeo.ecm.automation.server.jaxrs.ExceptionHandler. |
Kept org.nuxeo.ecm.automation.OperationException mapping with HTTP 500 waiting for NXP-11094.
Made Drive wrap java.lang.UnsupportedOperationException into a new org.nuxeo.ecm.automation.InvalidOperationException, itself mapped with HTTP 400. Also, made the org.nuxeo.ecm.automation.server.jaxrs.ExceptionHandler map org.nuxeo.ecm.core.api.ClientException with no root cause to HTTP 400. |
API change
|
5.3.2 | 5.7.1 |
| NXP-11370 | Core, Core SQL Storage | A number of projects have no use for proxies. It would be more cost-effective to have a global flag disabling proxies than having to add "AND ecm:isProxy = 0" to every custom query. When this mode is activated:
Note that this mode is incompatible with the use of features like publishing in sections. |
To disable proxies, add to the repository configuration:
<proxies enabled="false" /> |
Configuration format change
|
5.6.0-HF15, 5.7.1 | ||
| NXP-11335 | Core SQL Storage | Deleting documents by issuing a SQL DELETE on their hierarchy row may cause two kinds of problems in some situations:
To solve this, we introduce soft deletes. In this mode, deleting a document does not immediately cause a DELETE but just marks the row as deleted (hierarchy.isdeleted = true). Later on, cleaning of the soft-deleted rows can be performed. To avoid seeing soft-deleted rows, all queries to the hierarchy table add an additional clause checking that the row is not soft-deleted (hierarchy.isdeleted IS NULL). |
To enable soft-delete, add to the repository configuration:
<softDelete enabled="true" /> |
5.7.1 | |||
| NXP-11217 | NXP-11080 Move widgets and containers styles to a specific css |
Web UI | All the styles concerning widgets and containers are included in the tabs_content.css file. Now that the layouts and widgets systems are thicker and more complex, they deserve a specific css to manage the styles in a more clever way |
style named "grids_and_widgets" should be added to theme pages that need these styles |
Configuration format change
|
5.6 | 5.7.1 |
| NXP-11199 | Make the 'summary_current_document_comments' widget be able to handle its label |
Web Foundations | To display the label, the 'handleLabels' control needs to be added to the widget definition:
<widget name="summary_current_document_comments" type="summary_current_document_comments"> <controls mode="any"> ... <control name="handleLabels">true</control> </controls> </widget> |
5.7.1 | |||
| NXP-11061 | DAM, Faceted Search | Improve the existing tags widget displaying the document tags to make it work correctly in DAM. Add a new widget to be used in search forms to select a list of tags. |
To keep the old behavior about re-rendering on the 'summary_current_document_tagging' widget, the 'ajaxReRender' property need to be defined on the widget instance.
To display the label, the 'handleLabels' control needs to be added to the widget definition. <widget name="summary_current_document_tagging"> ... <controls mode="any"> ... <control name="handleLabels">true</control> </controls> <properties mode="any"> <property name="ajaxReRender">MultiTreeView</property> </properties> ... </widget> |
5.7.1 | |||
| NXP-11056 | NXP-11080 Do not rely anymore on 'HiddenInFacetedSearch' facet |
DAM, Faceted Search | This facet is set on the saved searches documents to not display them in the results. This facet should be replaced by 'HiddenInNavigation' when checking about what we want to display in the faceted search results. Deprecate the 'HiddenInFacetedSearch' facet and remove it from the default search document model. The folder inside the user workspace listing the saved search should now have a custom type and a custom content view to list only the saved search. |
The saved searches are not anymore displayed in the "Saved searches" folder on the Personal workspace of the users.
However they are still inside that folder (now empty in the UI). In Home / Saved searches / Faceted searches, there is a button "Migrate saved searches" to migrate the old saved searches stored inside the "Saved searches" folder. After doing that, the "Saved searches" folder can be safely deleted. |
5.7.1 | ||
| NXP-11045 | NXP-11171 Make restDocumentLink create a link when there is no document |
The is useful when there is no document context (can happen for some users) but navigation is still useful to access a dashboard for instance. An additional "repositoryName" attribute would be useful to build the DocumentView instance (since repository name is currently retrieved from the document) |
By default, the main tabs generate URLs with a document or a repositoryName.
If you want to force your main tab to generate an URL only with a document, you need to specify it in its action properties. It's done for the Document Management tab: <action id="documents" link="view_documents" label="label.main.tab.documents" order="40"> <category>MAIN_TABS</category> <properties> <property name="requireDocument">true</property> </properties> </action> |
5.7.1 | |||
| NXP-10954 | Make the 'summary_current_document_states' widget be able to handle its label |
Web Foundations |
To display the label, the 'handleLabels' control needs to be added to the widget definition: <widget name="summary_current_document_states" type="summary_current_document_states"> <controls mode="any"> ... <control name="handleLabels">true</control> </controls> </widget> |
5.7.1 | |||
| NXP-10948 | Layouts / Widgets |
Problem:
|
To display the label, the 'handleLabels' control needs to be added to the widget definition: <widget name="summary_current_document_single_tasks" type="summary_current_document_single_tasks"> <controls mode="any"> ... <control name="handleLabels">true</control> </controls> </widget> |
5.7.1 | |||
| NXP-10921 | If I drag'n drop a file safari open it and doesn't try to upload it. Drag'n drop zone is not at all enabled. This is the case since the update of OS and upgrade of Safari 6.x. On Safari 5.x it worked. |
Mac OS Mountain Lion 10.8.2
Safari 6.0.2 (8536.26.17) |
5.6.0-HF11, 5.7.1 | ||||
| NXP-10886 | Audit | When a document has two or more pages in its history, it's impossible to navigate to the next pages. Problem is that current code compares parameters already resolved on the page provider, and parameters not only resolved => let the page provider make the comparison itself. |
Need to implement the need method hasChangedParameters(Object[]) from PageProvider interface |
API added
|
5.6 | 5.7.1 | |
| NXP-10793 | If the "-" dash character is used in ajaxified forms, it may generate issues with ajax requests, as this character is badly encoded/decoded by the ajax re-render. Symptom is that an ajax action will work once, but not twice, and the following error is visible in the javascript console: Error: TypeError: this._form is null Source File: http://localhost:8080/nuxeo/a4j/g/3_3_1.GA/org/ajax4jsf/framework.pack.js.xhtml Line: 2792 As ids on client side are usually generated from the layout or widget id, the layout service should strip this character from layout and widget names when generating ids. But other templates generating form names (like content view templates) should be stripping this character too => add a helper JSF function to handle these cases. |
JSF function nxu:jsfTagIdEscape can now be used to sanitize ids fir JSF/Ajax |
API added
|
5.6 | 5.6.0-HF11, 5.7.1 | ||
| NXP-10780 | Core | For modules that store metadata about documents in facet and update it asynchronously, we need a way to save this metadata on a checked-in document without making an auto-checkout occur. For instance the quotas need to update the computed total size even on a checked in document. |
To disable auto-checkout before a document save, do:
doc.putContextData(VersioningService.DISABLE_AUTO_CHECKOUT, Boolean.TRUE); doc = session.saveDocument(doc); Make sure that this is done only for changes that do not correspond to things that the user would like to see versioned. |
API added
|
5.6 | 5.6.0-HF09, 5.7.1 | |
| NXP-10702 | When the http session timeout on a dashboard page, touching one of the gadget will refresh it and will end up displaying the login form in the gadget IFrame.
We should provide a dedicated auth chain for OpenSocial gadget rendering fetching so that in case of un authenticated request it ill return a custom page that can trigger the reload of the hosting page. |
5.6.0-HF08, 5.7.1 | |||||
| NXP-10701 | Importer | Allow FileManager to increment version automatically as soon as a document is created or overwritten. |
Example (default is false):
<extension target="org.nuxeo.ecm.platform.filemanager.service.FileManagerService" point="versioning"> <versioning> <defaultVersioningOption>MAJOR</defaultVersioningOption> <versionAfterAdd>true</versionAfterAdd> </versioning> </extension> |
API added
|
5.6 | 5.6.0-HF09, 5.7.1 | |
| NXP-10694 | Web UI |
|
There are 3 timeouts (expressed in milliseconds) that are configurable server wide using system properties or nuxeo.conf entries:
- org.nuxeo.dnd.extendedmode.timeout (default 2000) defines after how long the drop zone switches to extended import mode with metadata. - org.nuxeo.dnd.upload.timeout (default 30000) defines the timeout for the upload of a single file to the server (into a temporary storage). - org.nuxeo.dnd.exec.timeout (default 30000) defines the timeout for the execution, after all files have been uploaded, of the actual addition of the files to the document and related processing. |
5.6 | 5.6.0-HF08, 5.6.0-HF11, 5.7.1 | ||
| NXP-10679 | WorkManager should allow Work execution to be delayed after the transaction commit |
Core | Many Work instances will need to read data written by the main thread that created the work instance. In order for the work instance to see this data, the main thread must have committed its transaction. This means that submitting Work to the WorkManager must, in most cases, be delayed until after transaction commit. (We should leave the possibility though to execute the Work instance as soon as possible without waiting for transaction commit, in the case where the work instance does not care about it.) |
New WorkManager APIs:
- void schedule(Work work, boolean afterCommit) - void schedule(Work work, Scheduling scheduling, boolean afterCommit) |
API added
|
5.7.1 | |
| NXP-10669 | Wrap LDAP calls to retry the request if LDAP is temporary unavailable |
Directory | Sometimes, the first request to LDAP fails with a ServiceUnavailableException. So we can wrap LDAP calls to retry n times when this exception is detected. |
A new attribute {{retries}} can be set when defining LDAP server to indicates how many times the request is sent to LDAP before considering the service is really unavailable
<server name="foo"> <retries>5</retries> </server> |
Configuration format change
|
5.4.2 | 5.4.2-HF31, 5.5.0-HF18, 5.6.0-HF07, 5.7.1 |
| NXP-10668 | Core | Some Work instances would benefit from being queued according to a priority ordering. An example would be fulltext indexing, which we'd want single-threaded but where the "quick" metadata changes should go before the "slower" fulltext extraction from binaries. |
When specifying the configuration for a Work queue, you can add:
<usePriority>true</usePriority> to make the queue be a PriorityQueue. In this case the Work instances inserted in the queue must be Comparable with each other. |
Configuration format change
|
5.7.1 | ||
| NXP-10643 | Add API to get a diff URL to compare two files indenpendently of the current document. |
New method available: org.nuxeo.ecm.diff.web.DiffActionsBean#getContentDiffURL taking leftDocId and rightDocId |
API added
|
5.7.1 | |||
| NXP-10576 | Provide a new extension point to choose the default increment option for versioning |
Importer | When importing a file that already exists in the target container, Nuxeo is doing a minor increment of the version, but this is not configurable. Add an extension point in the FileManager service to do that. |
New extension point "versioning" for FileManager service. Example (default is MINOR):
<extension target="org.nuxeo.ecm.platform.filemanager.service.FileManagerService" point="versioning"> <versioning> <defaultVersioningOption>MAJOR</defaultVersioningOption> </versioning> </extension> |
API added
|
5.6 | 5.6.0-HF06, 5.7.1 |
| NXP-10551 | Directory | An inverse reference represents a value/property that does not belongs to the entry. Having a property défined on the inverse reference will handle this use case. |
A new attribute is available when defining an InverseReference:
add readOnly="true" to skip any update of the directory defined as a target of the inverse reference. Example : <inverseReference field="parentGroups" directory="groupDirectoryMulti" dualReferenceField="subGroups" readOnly="true"/> |
Configuration format change
|
5.4.2 | 5.4.2-HF30, 5.5.0-HF17, 5.6.0-HF06, 5.7.1 | |
| NXP-10481 | Core | Improve ABOUT_TO_COPY and ABOUT_TO_MOVE event notifications so that they include the requested destination folder. |
Should not impact existing code | 5.6 | 5.6.0-HF06, 5.7.1 | ||
| NXP-10435 | Layouts / Widgets | Following improvements on container widget types (and also layout templates) on widget label management (see The idea is to add a marker on widget instances (boolean to specify whether widget should be surrounded by a form, whether this form should be ajaxified...) and make parents check it (layout template, complex, list, container and also actions widget types) to add the accurate form around the widget. (also need to keep backward compat on current widgets adding forms, like the container and actions widget types) |
Widgets now accept "control" properties by mode to control if a form is displayed around them and if they handle their label | 5.7.1 | |||
| NXP-10380 | Web UI, Workflow | Currently summary widgets are all in the same form, which makes it difficult to handle sub forms (see For instance, if a workflow variable is required, adding a tag without adding it will not be possible as a validation error will occur. |
Summary widgets that need a surrounding form have to specify that they need a surrounding form by adding the following control to their definition:
<controls mode="any"> <control name="addSurroundingForm">true</control> </controls> Old summary layouts defined on document type for mode "summary" will not have a surrounding form. When using the mode "grid_summary", there will be no surrounding form. |
Configuration format change
|
5.7.1 | ||
| NXP-10350 | Make relation graphs use core directly (not Jena) (except annotations) |
Relations | When Core relation graphs were introduced, a compatibility mode was kept so that Core graph mode is used only if no Jena graph is already present an non-empty for each graph. For 5.7, switch to using Core directly. Upgrade notes will list the config to use to keep using Jena if really needed. |
If you wish to keep using Jena for some of the relation graphs, use the following contributions:
<require>org.nuxeo.ecm.platform.relations.default.graph</require> <extension target="org.nuxeo.ecm.platform.relations.services.RelationService" point="graphs"> <graph name="default" type="jena-or-core"> <option name="doctype">DefaultRelation</option> <option name="backend">sql</option> <option name="databaseType"> ${org.nuxeo.ecm.sql.jena.databaseType} </option> <option name="datasource">jdbc/nxrelations-default-jena</option> <option name="databaseDoCompressUri">false</option> <namespaces> <namespace name="rdf"> http://www.w3.org/1999/02/22-rdf-syntax-ns# </namespace> <namespace name="dcterms">http://purl.org/dc/terms/</namespace> <namespace name="nuxeo">http://www.nuxeo.org/document/uid/</namespace> </namespaces> </graph> </extension> <require>org.nuxeo.ecm.platform.comment.service.default.graph</require> <extension target="org.nuxeo.ecm.platform.relations.services.RelationService" point="graphs"> <graph name="documentComments" type="jena-or-core"> <option name="doctype">CommentRelation</option> <option name="backend">sql</option> <option name="databaseType"> ${org.nuxeo.ecm.sql.jena.databaseType} </option> <option name="datasource">jdbc/comment-relations</option> <option name="databaseDoCompressUri">false</option> <namespaces> <namespace name="comment">http://www.nuxeo.org/comments/uid</namespace> <namespace name="isCommentFor"> http://www.nuxeo.org/predicates/isCommentFor </namespace> <namespace name="document">http://www.nuxeo.org/document/uid</namespace> </namespaces> </graph> </extension> <require>org.nuxeo.ecm.platform.publisher.relations.contrib</require> <extension target="org.nuxeo.ecm.platform.relations.services.RelationService" point="graphs"> <graph name="publication" type="jena-or-core"> <option name="doctype">PublicationRelation</option> <option name="backend">sql</option> <option name="databaseType"> ${org.nuxeo.ecm.sql.jena.databaseType} </option> <option name="datasource">java:/nxrelations-default-jena</option> <namespaces> <namespace name="rdf"> http://www.w3.org/1999/02/22-rdf-syntax-ns# </namespace> <namespace name="dcterms">http://purl.org/dc/terms/1.1/</namespace> <namespace name="nuxeo">http://www.nuxeo.org/document/uid/</namespace> <namespace name="pTree">http://www.nuxeo.org/publication/tree/</namespace> </namespaces> </graph> </extension> |
Configuration format change
|
5.7.1 | |
| NXP-10340 | Search / Query | A string literal with a backslash as last character cannot be parsed. This should work but does not: SELECT * FROM Document WHERE dc:title='foo\\' Which has double escaping from Java code: session.query("SELECT * FROM Document WHERE dc:title='foo\\\\'")
Failure: org.nuxeo.ecm.core.query.QueryParseException: org.nuxeo.ecm.core.query.QueryParseException: Syntax error: Invalid token <null> at offset -1 in query: SELECT * FROM Document WHERE dc:title='foo\\' at org.nuxeo.ecm.core.query.sql.SQLQueryParser.parse(SQLQueryParser.java:51) Caused by: org.nuxeo.ecm.core.query.QueryParseException: org.nuxeo.ecm.core.query.QueryParseException: Syntax error: Invalid token <null> at offset -1 at org.nuxeo.ecm.core.query.sql.SQLQueryParser.parse(SQLQueryParser.java:41) at org.nuxeo.ecm.core.query.sql.SQLQueryParser.parse(SQLQueryParser.java:47) ... 23 more Caused by: org.nuxeo.ecm.core.query.QueryParseException: Syntax error: Invalid token <null> at offset -1 at org.nuxeo.ecm.core.query.sql.parser.parser.parseFailed(parser.java:466) at org.nuxeo.ecm.core.query.sql.parser.parser.unrecovered_syntax_error(parser.java:457) at java_cup.runtime.lr_parser.parse(lr_parser.java:601) at org.nuxeo.ecm.core.query.sql.SQLQueryParser.parse(SQLQueryParser.java:39) ... 24 more |
NXQL incompatibility: \\ used to mean \\ but now means \
i.e., two consecutive backslashes inside a strings were previously interpreted as two backslashes. Now they are interpreted as only one backslash. There are two new helper methods to do string escaping: - NXQL.escapeString - NXQL.escapeStringInner |
API change
|
5.6.0-HF08, 5.7.1 | ||
| NXP-10308 | Core, Core SQL Storage, Directory | Using XA has costs:
Change Nuxeo to be able to work in a mode where, in a given thread, only one database connection is used for all resources (VCS, directories, hibernate). This allows for a secure rollback. Symptoms of the Oracle RAC problems may be errors like: ORA-02049: timeout: distributed transaction waiting for lock |
To activate single-datasource mode (which is the default since Nuxeo 5.7.1), define the variable:
nuxeo.db.singleDataSource=jdbc/NuxeoDS By default this is defined from templates/common-base/nuxeo.defaults. To disable it, just use: nuxeo.db.singleDataSource= The datasource name can of course be different than jdbc/NuxeoDS, but it must be a valid datasource already defined elsewhere. In addition, the maximum pool size for the datasource must be enough for all the VCS connections, which means that you must have nuxeo.db.max-pool-size ≥ nuxeo.vcs.max-pool-size + 2 (The + 2 comes from two reserved connections for the VCS lock manager and the cluster node handler.) |
Deployment change
|
5.7.1 | ||
| NXP-10306 | Automation client: add an API to get a session using a token |
Automation | We need to be able to make automation calls using the token based authentication plugin done in
A TokenCallback interface will define the API to gather the token parameters, acquire a remote token, save it locally, read it locally. |
Added:
- AutomationClient#getSession(String token) - AutomationClient#getSession(TokenCallback cb) |
API added
|
5.6.0-HF10, 5.7.1 | |
| NXP-10268 | Security / Rights | This plugin will allow to authenticate a user with a token sent as a request header.
|
Added:
- TokenAuthenticationService - TokenAuthenticator - TokenAuthenticationServlet |
API added
|
5.6.0-HF10, 5.7.1 | ||
| NXP-10255 | Tests | Some helpers could be added to ease up testing + some ids in templates would be useful too |
Added helper classes LayoutElement, WidgetElement... |
API added
|
5.6 | 5.7.1 | |
| NXP-10238 | Use FileManager service to create appropriate document type through WebDAV |
WebDAV / WSS | Currently every new document added via WebDAV are created as File type. We should detect mimetype from imported file and use FileManager service to call the corresponding importer plugin to create the adequate document type. |
If the old behavior is absolutely needed, the following Nuxeo property can be set:
nuxeo.webdav.always-create-file=true |
5.6 | 5.6.0-HF12, 5.7.1 | |
| NXP-10235 | Core SQL Storage | There are missing index on fulltext and nxp_logs that impacts performances CREATE INDEX FULLTEXT_JOBID_ID_IDX ON FULLTEXT(JOBID, ID); CREATE INDEX NXP_LOGS_LOG_DOC_UUID_IDX ON NXP_LOGS(LOG_DOC_UUID); CREATE INDEX NXP_LOGS_LOG_EVENT_DATE_IDX ON NXP_LOGS(LOG_EVENT_DATE); |
For customer that have put an index on fulltext jobid you need to remove it because the name has changed:
DROP INDEX JOBID_ID_IDX; |
5.5.0-HF14, 5.6.0-HF01 | 5.5.0-HF15, 5.6.0-HF02, 5.7.1 | ||
| NXP-10224 | Launcher | It seems there's sometimes an issue in the deployment order. For instance, a custom template depending on common template seems to be deployed before the common-base template! Also add DEBUG information. |
Prior to that fix, configuration templates missing a nuxeo.defaults file may sometimes be included. That's no more the case: in order to be included, a template must have a nuxeo.defaults file. | 5.6 | 5.6.0-HF03, 5.7.1 | ||
| NXP-10219 | Core SQL Storage | There are some changes needed to replace jtds with Microsoft's driver. |
To support XA using the Microsoft JDBC driver, some setup has to be done in the SQL Server itself. It is *NECESSARY* to follow the Configuration Instructions listed at http://msdn.microsoft.com/en-us/library/aa342335(v=sql.105).aspx
In particular, after the configuration, note that you must add your database user ('nuxeo' in this example) to proper role in order for him to execute XA statements: USE master EXEC sp_grantdbaccess 'nuxeo', 'nuxeo' EXEC sp_addrolemember [SqlJDBCXAUser], 'nuxeo' Some screenshots for the first part are visible at http://www.sqlserver-dba.com/2011/12/enable-xa-transactions-for-sql-server.html |
Configuration format change
|
5.6 | 5.6.0-HF02, 5.7.1 | |
| NXP-10210 | Core SQL Storage | The DialectOracle.getInTreeSql with pathOptimizations use an "ancestors" table with a nested table to simulate an array of ancestors for each document. The index on the nested table is not used during ancestors search, the execution plan is doing a full scan on the ancestor table. This does not scales with large amount of documents (>500k). It impacts the move and permanent delete operations. |
When upgrading from 5.6 to 5.7 and using Oralce, you need to drop the ancestors table, see the ticket for more information. | 5.6.0-HF01 | 5.4.2-HF29, 5.5.0-HF16, 5.6.0-HF04, 5.7.1 | ||
| NXP-10209 | Automation - SendMail: allow to not rollback the automation chain in case of an Exception |
Automation | If rollbackOnError is true, any Exception thrown while trying to send the mail will be rethrown, and the whole automation chain rolled back, else the exception will simply be WARNED and the chain will continue. |
New boolean optional parameter: rollbackOnError.
Default value = true to keep the previous behavior. |
5.6 | 5.6.0-HF02, 5.7.1 | |
| NXP-10184 | Layouts / Widgets | There are several issues with user/group suggestion widget types:
|
singleUserSuggestion now displays a link to the user/group by default on view, add property "displayAction" with value "nothing" to get back the old behaviour. It also displays a user/group icon by default, use property "hideIcon" with value "true" to get back the old behaviour. | 5.6 | 5.4.2-HF29, 5.5.0-HF15, 5.6.0-HF02, 5.7.1 | ||
| NXP-10179 | Allow to use "Compatible Classic" mode for Freemarker rendering |
Notifications | If an expression evaluation returns null, Freemarker is raising this exception ERROR [freemarker.runtime] Expression document.dublincore.description is undefined on line 16, column 6 in modif. whereas sometimes we want to get this null value. The solution is to use the "Compatible Classic" mode. |
Classic Compatible mode is now set to true to render freemarker template for notifications |
Configuration format change
|
5.6 | 5.6.0-HF02, 5.7.1 |
| NXP-10155 | Search / Query | As stated in the doc at http://doc.nuxeo.com/x/FQ4z, using a cache size "0" (meaning "no cache") on content views is making selections misbehave. => Need a better solution to handle refresh of content views on rendering, without relying on a complicated (and not distributed) refresh on Seam events. |
When content view cache is set to 0, the content view is cached anyhow with only one instance per user (and a static cache key), when rendering the content view again, the associated page provider is refreshed. | 5.6 | 5.6.0-HF02, 5.7.1 | ||
| NXP-10118 | Small improvements in Nuxeo AutomationClient that should be merged. |
- Added AbstractAutomationClient#setSharedRegistryExpirationDelay(long delay) to update the default delay set to 60 seconds.
- Added HttpConnector#HttpConnector(HttpClient http, long httpConnectionTimeout) and HttpConnector#HttpConnector(HttpClient http, HttpContext ctx, long httpConnectionTimeout) to instantiate a new HttpConnector with an HTTP connection timeout. - Added HttpAutomationClient#HttpAutomationClient(String url, long httpConnectionTimeout) and HttpAutomationClient#HttpAutomationClient(String url, long httpConnectionTimeout, long asyncAwaitTerminationTimeout) to instantiate a new HttpAutomationClient with an HTTP connection timeout and a timeout for the wiat of the asynchronous thread pool execution. - Added AsyncAutomationClient#AsyncAutomationClient(String url, long asyncAwaitTerminationTimeout) and AsyncAutomationClient#AsyncAutomationClient(String url, ExecutorService executor, long asyncAwaitTerminationTimeout) for the same reason. |
5.7.1 | ||||
| NXP-10117 | In some case, when trying to get UserWorkspace in a Computed group resolution for instance, the current API do not let workspace creation without getting user's NuxeoPrincipal. |
org.nuxeo.ecm.platform.userworkspace.api.UserWorkspaceService#getUserPersonalWorkspace |
API added
|
5.6 | 5.7.1 | ||
| NXP-10092 | Automation | Added GetDocumentsFromSelectionList operation. |
API added
|
5.6 | 5.7.1 | ||
| NXP-10060 | Importer: plug a method call on node creation error and allow to continue global import task |
Importer | Currently, when an error occurs while creating a node (GenericThreadedImportTask#doCreateFolderishNode and GenericThreadedImportTask#doCreateLeafNode), the whole import task stops.
|
Added
ImporterDocumentModelFactory#processFolderishNodeCreationError(CoreSession session, DocumentModel parent, SourceNode node) and ImporterDocumentModelFactory#processLeafNodeCreationError(CoreSession session, DocumentModel parent, SourceNode node) + add default implementation in AbstractDocumentModelFactory |
API added
|
5.6 | 5.7.1 |
| NXP-10053 | NXP-10018 Extend usage of XSD maxOccurs attribute to handle List definition |
Core | Typically, this complex type is considered as a sequence of string. <xs:complexType name="stringSequence"> <xs:sequence> <xs:element name="item" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> But, if the sequence contains more that one element the maxOccurs won't be used : <xs:complexType name="complexWithSubList"> <xs:sequence> <xs:element name="fieldA" type="xs:string" /> <xs:element name="items" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="fieldB" type="xs:string" /> <xs:element name="moreitems" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> and then :
|
h3. Background info
Until 5.6 the {{maxOccurs}} attribute of the {{xs:element}} was not parsed correctly in all cases. Normally, an {{xs:element}} with a {{maxoccurs}} >1 should be seen as a List. Until 5.6 it was only true when the {{xs:sequence}} had just one element. The problem is visible for complex types declaring several fields : {code} <xs:complexType name="complexWithSubList"> <xs:sequence> <xs:element name="fieldA" type="xs:string" /> <xs:element name="items" type="xs:string" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> {code} Here in 5.6, the field "items" won't be considered as a List. In 5.7, the parsing will be ok and items will be List<String>. Unfortunately, until 5.6, probably because of bad copy/past a lot of schema were wrongly declared. {code} <xs:complexType name="relatedtextresource"> <xs:sequence> <xs:element name="relatedtextid" type="xs:string" minOccurs="0" maxOccurs="unbound" /> <xs:element name="relatedtext" type="xs:string" minOccurs="0" maxOccurs="unbound" /> </xs:sequence> </xs:complexType> {code} In 5.6 this {{relatedtextresource}} was seen as a Map<String, String> with 2 keys, {{relatedtextid}} and {{relatedtext}}. In 5.7 this same item would be correctly parsed as Map<String, List<String>> with 2 keys, {{relatedtextid}} and {{relatedtext}}. All Nuxeo "built-in" schema where updated, like the relatedText one : https://github.com/nuxeo/nuxeo-core/commit/efadc46527cd06f0cd0ec8cb4f55595016c2a408 h3. What should be checked Inside your XSD schemas, check that the declaration of complex Type that have more than one field don't use maxOccurs="unbound" whithout any reasons. |
Content model Change, API change
|
5.7.1 | |
| NXP-10051 | Importer | Importer: make the kill() method return a String to avoid WARN at JAX-RS Application initialization (and to have the method result message). This is the WARN we get: WARN [com.sun.jersey.spi.inject.Errors] The following warnings have been detected with resource and/or provider classes: WARNING: A HTTP GET method, public void org.nuxeo.ecm.platform.importer.executor.jaxrs.AbstractJaxRSImporterExecutor.kill(), MUST return a non-void type. |
In both AbstractImporterExecutor and AbstractJaxRSImporterExecutor:
public void kill() becomes public String kill() |
API change
|
5.6 | 5.7.1 | |
| NXP-10018 | ProblemsWhen importing existing XSD schemas definition inside Nuxeo, there are some problems when some XSD types are used : org.nuxeo.ecm.core.schema.types.TypeException: Failed to load XSD schema http://XXX.YYY.ZZZ
at org.nuxeo.ecm.core.schema.XSDLoader.loadSchema(XSDLoader.java:190)
at org.nuxeo.ecm.core.schema.XSDLoader.loadSchema(XSDLoader.java:123)
...
Caused by: java.lang.NullPointerException
at org.nuxeo.ecm.core.schema.types.ListTypeImpl.<init>(ListTypeImpl.java:72)
at org.nuxeo.ecm.core.schema.XSDLoader.createListType(XSDLoader.java:393)
at org.nuxeo.ecm.core.schema.XSDLoader.createComplexType(XSDLoader.java:364)
at org.nuxeo.ecm.core.schema.XSDLoader.loadComplexType(XSDLoader.java:266)
at org.nuxeo.ecm.core.schema.XSDLoader.loadType(XSDLoader.java:226)
at org.nuxeo.ecm.core.schema.XSDLoader.loadSchema(XSDLoader.java:177)
... 26 more
Problems are visibles in several cases : one of the field is declared with xs:anyType<xs:complexType name = "UserObject" abstract = "true"> <xs:complexContent> <xs:extension base = "xs:anyType"/> </xs:complexContent> </xs:complexType> The best option is probably to consider this field as a big String (CLOB). one of the field is declared with xs:duration<xs:element name = "interval" type = "xs:duration"/> The best option is probably to consider this field as a String. a simple type is declated as enumeration<xs:simpleType name = "Gender"> <xs:restriction base = "xs:string"> <xs:enumeration value = "Male"/> <xs:enumeration value = "Female"/> <xs:enumeration value = "Unknown"/> </xs:restriction> </xs:simpleType> For now, we have no simple way to support this at Core Level since the values validation is done at Widget level. => The best option is probably to consider this field as a String. a field type uses xs:choice<xs:complexType> <xs:complexContent> <xs:extension base = "types:AbstractExtensibleObject"> <xs:sequence> <xs:element name = "header" type = "ApplicationHeader"> </xs:element> <xs:choice> <xs:element name = "error" type = "Error"> </xs:element> <xs:choice maxOccurs = "unbounded"> <xs:element name = "score" type = "Score"/> <xs:element name = "decisionResults" type = "DecisionResults"/> </xs:choice> </xs:choice> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> This could be added to the Core, but this would require significant work, and so far, not sure to see what would be the real use cases ... xs:attribute elements with embedded xs:simpleType definitions are not supported<xs:attribute name = "Bureau"> <xs:simpleType> <xs:restriction base = "xs:string"> <xs:enumeration value = "EFU"/> </xs:restriction> </xs:simpleType> </xs:attribute> Even if workaround is simple, we should try to fix this. XSD2JSON and XSDLoaderThe problem were actually reported while playing with XSD2JSON that parses XSD files to generate JSON definition for Nuxeo Studio. However, since XSD2JSON uses the XSDLoader of Nuxeo Core the problem reported via XSD2JSON are in fact problems inside Nuxeo Core. A simple workaround would be to tweak the XSD at the time XSD2JSON does the loading, this would allow to generate a usable JSON definition inside Studio, but :
This means that most of the work should be done directly inside the XSDLoader of Nuxeo Core. |
Added support for more XSD types, see https://jira.nuxeo.com/browse/NXP-10053 for more upgrade notes |
API change, API added
|
5.7.1 | |||
| NXP-10006 | importer should use path segment service for naming documents |
Importer | When importing a document, the file component name is renamed according to old rules. ie: foo_A is renamed in foo-a. |
If needed, the older naming rules can be selected by setting the 'nuxeo.importer.compatFilenames' to 'true'. | 5.5 | 5.5.0-HF14, 5.6.0-HF01, 5.7.1 | |
| NXP-9975 | Core SQL Storage | Some tables will benefit from the new UNLOGGED table available since PostgreSQL 9.1, for instances cache tables:
http://www.postgresql.org/docs/9.1/static/sql-createtable.html |
To take effect on existing instance, acl_user, acl_user_map and aclr_modified tables need to be droped. | 5.6-RC3 | 5.7.1 | ||
| NXP-9940 | Launcher | * Server restarting page is available in english only. French labels would be:
** Nuxeo server is restarting -> Redémarrage du serveur en cours. ** You will be automatically redirected to the login page when Nuxeo server is back online. (please, do not refresh this page) -> La page d'authentification sera automatiquement affichée lorsque le serveur aura redémarré / aura fini de redémarrer. Merci de ne pas rafraîchir cette page. |
5.6 | 5.7.1 | |||
| NXP-9564 | don't rely on core session transactionnal wrapper for committing event bundles |
The core implementation is call-backing events service for handling the transaction commit. A better design would be to enlist event bundles in the transaction. This will insure that event bundles will always processed at the moment of the transaction commit. |
Removed from the CoreSession transaction synchronization handles. If needed, upgrade your code in a transaction synchronization listener. |
API change
|
5.4 | 5.7.1 | |
| NXP-8732 | DAM | Drag and drop to and content on repository don't work on DAM domain (asset librairy) work fine in DM domain (default domain) |
upgrade friom nuxeo DM 5.4.2 to nuxeo platform 5.5 with DM and DAM module. | 5.5 | 5.7.1 | ||
| NXP-8630 | Automation | For instance, If we have an expression like !Document.hasFacet("Folderish")
It will execute the event handler only if the document DOES HAVE the facet folderish From org.nuxeo.ecm.automation.core.events.EventHandler:250 if (expression != null) { if (expr == null) { expr = Scripting.newExpression(expression); } if ((Boolean) expr.eval(ctx)) { return false; } } return true; is wrong and should be if (expression != null) { if (expr == null) { expr = Scripting.newExpression(expression); } if (!(Boolean) expr.eval(ctx)) { return false; } } return true; |
Use the new parameter "condition" instead of "expression" when migrating event handlers |
Configuration format change
|
5.5 | 5.7.1 | |
| NXP-7672 | Themes | For instance, the following change was made for the parsing to pass: /*-- =Buttons */ .button, input.button { box-shadow:inset 0px 1px 0px 0px #fff; - background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f5f2f5), color-stop(1, #dfdfdf) ); - background:-moz-linear-gradient( center top, #f5f2f5 5%, #dfdfdf 100% ); - background: linear-gradient( center top, #f5f2f5 5%, #dfdfdf 100% ); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f2f5', endColorstr='#dfdfdf'); background-color:#dfdfdf; border-radius:3px; border:1px solid #c6c6c6; |
The flute CSS parser has now been replaced by phloc-css (https://code.google.com/p/phloc-css/)
The following dependencies have been removed from the dependencyManagement of Nuxeo root pom: <dependency> <groupId>org.milyn</groupId> <artifactId>milyn-magger</artifactId> <version>1.3.1- </dependency> <dependency> <groupId>org.milyn</groupId> <artifactId>milyn-commons</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.milyn</groupId> <artifactId>flute</artifactId> <version>1.3-gg2</version> </dependency> <dependency> <groupId>org.w3c</groupId> <artifactId>sac</artifactId> <version>1.3</version> <groupId>com.phloc</groupId> <artifactId>phloc-css</artifactId> <version>3.3.1</version> </dependency> |
5.7.1 | |||
| NXP-4147 | Core SQL Storage | We need to retrieve and paginate documents that are referenced by the tag service. SELECT * from Document WHERE ecm:tag IN ('photo','movie'); The first and critical need is to be able to evaluate expression using the equal operator SELECT * FROM Document WHERE ecm:tag = 'photo' |
Examples from the doc:
SELECT * FROM Document WHERE ecm:tag = 'tag1' SELECT * FROM Document WHERE ecm:tag IN ('tag1', 'tag2') -- documents with either tag SELECT * FROM Document WHERE ecm:tag/* = 'tag1' AND ecm:tag/* = 'tag2' -- documents with both tags SELECT ecm:tag FROM Document WHERE dc:title = 'something' -- with queryAndFetch SELECT ecm:tag FROM Document WHERE ecm:tag LIKE 'abc%' -- with queryAndFetch SELECT ecm:tag/*1 FROM Document WHERE ecm:tag/*1 LIKE 'abc%' AND ecm:tag/*2 = 'tag1' SELECT ecm:tag FROM Document WHERE ecm:tag LIKE 'abc%' AND ecm:tag/* = 'tag1' -- simpler version of above |
API added
|
5.7.1 |


1st and Pike
Located at the corner of 1st and Pike St.
phone:<PHONE_NUMBER>
Located at the corner of 1st and Pike St.
phone:<PHONE_NUMBER>
Located in concourse B of the SeaTac Airport
phone:<PHONE_NUMBER>
Located just east of the Seattle Center playground
phone:<PHONE_NUMBER>
Located on the 15th St side of Volunteer Park
phone:<PHONE_NUMBER>
Located at Alki Beach Park by 63rd Ave
phone:<PHONE_NUMBER>


We are creating a wearable jacket for arm rehabilitation of stroke patients.
Data: The data folder consists of data sets saved from the IMU. Arduino: All scripts relevant to the jacket are placed here. 3D model: All the IMU enclosure for the jacket are placed in this folder.


{% extends "_base.html" %} {% block content %}
We can't find what you're looking for.
Try going back to the homepage and starting from there.


Quality Is Our Middle Name
Find Out MoreWe are a young and dynamic team specialized in cleaning services, who learned very quickly the best practices in the field. Our clients chose to keep returning back to us because of the satisfaction our team continues to bring to them. We want you to carry pride in your home or business, that's why we pay attention to every detail and bring you the best service at an affordable rate. Our vision is to be the local leaders and industry pioneers by giving you a first-hand experience. Our success is measured by your satisfaction.
Get Started!Keep your property clean and healthy. If you need expert help in cleaning, turn to (numele companiei) a trusted cleaning company in Montreal.
With the use of the state-of-the-art equipment, new technology and traditional know-how, we endeavor to give our customers the best service possible.
We use the latest technologies, biodegradable cleaning products and eco friendly products highly trained technicians to be able to offer the best professional cleaning service.
Our services are as-needed, and available for every budget!
Ready to entrust us with your peace of mind? Give us a call or send us an email and we will get back to you as soon as possible!


--- layout: page title: "Create Delimited Text File (SQL 2005 Stored Procedure)" description: "" --- {% include JB/setup %} Introduction
Over the past 2 years, I’ve primarily worked with importing/exporting data into multiple formats. One product I worked on in particular could import and export data into over 20 different formats while not only staying within a reasonable time limit and memory usage but also giving the user multiple options for specifying the source/destination mappings as well as other elements used in the application. The focus of this application was speed and low memory usage and in the end, it could import a 3GB CSV file to a SQL database in less than an hour while staying below 60 MB of ram usage on the machine.
After moving on, I’ve continued to explore the knowledge of bulk loading data and decided to write a quick and easy script that will handle this on a SQL server in the quickest way possible not only as a testament to myself but also as a useful tool that can be easily implemented by other SQL administrators and programmers when needed. Given how much I’ve learned from the open source community, I wanted to give back with this little stored procedure. In addition to this, I have at least 2 more projects in mind that I hope to release soon that will definitely fill some gaps in the data industry.
If you have any problems, questions, or just comments about this stored procedure, feel free to shoot me an email. Also, if you have any changes/addition you’d like to add, I’ll be happy to take your suggestions and add it in.
For a quick download link, click here.
DescriptionThis stored procedure allows the user to create a delimited text file from a SQL table, SQL view, Microsoft Access Database File, Delimited Text File, Microsoft Excel Spreadsheet File, or a DBase III (DBF) File. It is a fully self-contained stored procedure that needs to no other functions and/or stored procedures to run. It is run directly on the SQL server (only 2005 for now) and makes connections to the source/destination files from the server. It allows SQL-style criteria to be used against any of the supported data sources. It also allows the user to specify the format of the delimited text file that it creates. In addition to this, the user can also specify which columns should be exported to the delimited text files. By default, all columns will be exported.
Supported Source Data Types
Requirements
Parameters
Here is a list of available parameters:
I ran most of my benchmarks against a database without any indexes and only 1 million rows. Anything less than 25 fields and 200,000 rows took less than 5 seconds (the stored procedure took longer to run than the BCP process )
Basically, this stored procedure creates a temporary view and runs the bcp command line tool against the view. After it is finished (or an error occurs), it will delete the temporary view. Also, the temporary view has a unique name so it will not conflict with itself if the stored procedure is run multiple times simultaneously. If an error does occur, it should tell you why. The bcp command line tool is provided by Microsoft and comes with SQL server. As long as the SQL server has access to run the bcp tool (which it should by default) and has access to create a file in the destination folder, it will run fine.
ExampleThe most important bug found so far is that, because numeric field are being converted to varchar, there seems to be a loss of precision for large floats. I believe it lops off the decimal value after the 6th or 7th place AFTER the decimal. Also, it will only read from comma-delimited text files.
I haven’t run this stored procedure through the ringer and made sure every data type works. Other than that, most things can be contributed to user error and, although it’d look a lot prettier if I built a few more try catches to fix invalid parameter values, it’s not like I’m getting paid to write this thing. If time comes along, I might make it a little prettier. I know it can be a bit more optimized (like unnecessarily using varchar(max)) but I was looking for 100% functionality versus memory/speed. Plus, it’s pretty fast as is.
I had a visitor report a problem and when fixing this, I found 2 additional problems that I will work on in the near future. First, it doesn’t seem to like the ntext data type. I haven’t tested if this is true for the text and image data type but since they are the same in the underlying SQL, they may have problems. Secondly, specifying the database name before the table will not work. It is coded in a way where the stored procedure assumes the database which is being used to run the stored procedure contains the table you are wanted to export. I will update this functionality in the future to allow a database name to be specified through the normal way such as “[ExampleDB].dbo.[ExampleTable]” and/or with a parameter. In the meantime, just run the “USE [Example Database]” command before executing the stored procedure if possible.


GUI.CreateTextBoxFull (x, y, width, height : int,
border, fontID : int) : int
A text box is a box used for displaying text. It has scroll bars that activate when text appears outside the border of the text box. The user cannot directly select, edit or modify the text in the text box.
The x and y parameters specify the lower-left corner of the area in which the text will be drawn. The width and height parameters specify the width and height of the text drawing area The text box border is just outside the text drawing area. Because of this, GUI.GetX and GUI.GetY will return a value slightly smaller than x and y and GUI.GetWidth and GUI.GetHeight will return values slightly larger than width and height.
For GUI.CreateTextBox, the border around the text box is always a line. For GUI.CreateTextBoxFull, the type of border is specified by the border parameter. The border parameter is one of 0, GUI.LINE, GUI.INDENT, or GUI.EXDENT. A border of 0 is the default and is the same as GUI.LINE. GUI.INDENT and GUI.EXDENT only display properly if the background colour has been set to gray using GUI.SetBackgroundColor. GUI.INDENT makes the text box appear indented or recessed. GUI.EXDENT makes the text box appear to stand out from the window. The fontID parameter specifies the font ID of the font to be used in the text box. The font ID is received from a Font.New call. Do not call Font.Free for this font ID until the label has been disposed of by calling GUI.Dispose.
By using the fondID parameter, text boxes can have any size or typeface.
import GUI
View.Set ("graphics:300;300")
const fileNameToBeViewed : string := "TextBxs.DEM"
var textBox : int % The Text Field ID.
var title : int % The label for the title.
var f : int % The stream number of the file.
var line : string % Lines to be read from the file.
% Open the file.
open : f, fileNameToBeViewed, get
if f = 0 then
put "Unable to open " + fileNameToBeViewed + " : ", Error.LastMsg
return
end if
% Set background color to gray for indented text box.
GUI.SetBackgroundColor (gray)
% Create the title label and text box.
title := GUI.CreateLabelFull (20, 280, fileNameToBeViewed, 250, 0,
GUI.CENTER, 0)
textBox := GUI.CreateTextBoxFull (10, 10, 280, 265,
GUI.INDENT, 0)
% Read the file and place it in the text box.
loop
exit when eof (f)
get : f, line : *
GUI.AddLine (textBox, line)
end loop
close : f % Close the file.
loop
exit when GUI.ProcessEvent
end loop
A text box widget is a passive widget and cannot be enabled or disabled.
| GUI.Show, GUI.Hide, GUI.Dispose, GUI.GetX, GUI.GetY, GUI.GetWidth, GUI.GetHeight, GUI.SetPosition, GUI.SetSize, GUI.SetPositionAndSize, GUI.AddLine, GUI.AddText, GUI.ClearText, GUI.SetTopLine, GUI.SetScrollOnAdd |
This means that you can only call the function by calling GUI.CreateTextBox, not by calling CreateTextBox.


Simple Dropdown Autocomplete
-
Fruit
Dropdown With Input Expand
-
Fruit
Dropdown With All Values
-
Fruit
Dropdown With Placeholder
-
Fruit
Dropdown With Typeahead
-
Fruit
Dropdown With Ajax-Data
-
Language
Dropdown With Ajax-Data + Typeahead
-
Language
Simple Standalone Autocomplete
Popup Autocomplete
Multiple Values
With Ajax-Data


--- layout: home ---
We are providing already some docker images for the usage in the dockerized linked data infrastructure.
They are available on github and at the docker registry-hub (watch out for the dld-
prefix)
aksw/dld-store-virtuoso7
docker registry-hub, @githubaksw/dld-present-ontowiki
docker registry-hub, @githubaksw/dld-present-pubby
docker registry-hub, @githubaksw/dld-store-fuseki
docker registry-hub, @githubaksw/dld-load-virtuoso
docker registry-hub, @githubaksw/dld-backup-virtuoso
docker registry-hub, @githubaksw/dld-present-snorql
docker registry-hub, @github


Extension: Quality Settings¶
Data and software
This extension follows on from the tutorial on primer removal using the same data and software.
Because primers are a region on our sequence that we have some a priori knowledge about, this is a good opportunity for filtering sequences with errors.
Exercise
- Try running primer trimming with the strictest settings, a 100% match in length and bases
- Is this sensible?
Many metabarcoding pipelines trim primers by just trimming a number of bases equal to the primer length off the beginning of each read. You can do this in cutadapt using the ``-u`` option, which you would need to do for each direction separately (replacing N
with the correct primer length:
cutadapt -u N -o out.fastq -i in.fastq
Exercise
- Try running this command for the forward and reverse reads of sample.
- If you look at the number of reads, this clearly retains more.
- What might be the downsides of doing it this way?


Setting up a custom domain with GitHub Pages
DNS for GitHub Pages
Get Ready with Sub-domain and Apex Domain @ Github. I will get a new Blog Name in the next Days or Weeks. However, i think i will do that right now, when i have more Time to do it. I have always a very nice New name in Mind. I Think it will be .io Domian Name. Maybe i will use a custome Blog Name (Apex-Domian) or a (Sub-Domian). We will see it. -
Sub Domains
A subdomain is configured with a CNAME record through your DNS provider (There where your domain is Registered). We strongly recommend that you use a custom subdomain for these reasons:
It gives your GitHub Pages site the benefit of our Content Delivery Network.Content Delivery Network. -Wikipedia It will not be affected by changes in the underlying IP addresses of GitHub’s servers. Pages will load significantly faster because Denial-of-service Attack protection can be implemented more efficiently.
Apex Domains
An apex domain is usually configured with an A
, ALIAS
, or ANAME
record through your DNS provider and is often assigned to one or more IP addresses.
I will set up my Apex Domain @ Github, because i do host my Stuff and Website on Github. - There also some Points to set up one to your Repositories. So far i have create a User, Organization, and Project Pages. Which one can do everybody, if you have a Github account. You need also One to get Set Up your Github Pages .
So now we use a Apex Domain Name (www.yourdomain.com) or a Sub-Domian Name (www.hello.yourdomain.com). So we have get some Functions of the Cname. About custom domains for GitHub Pages sites
If you’re using a Custom Domain to redirect your GitHub Pages site, you must create and commit a CNAME file to your GitHub Pages repository that contains the custom domain. Adding a CNAME file to your Repository
ps: I give everysite a SSL Certificate to be mostly Safe - Both types of Pages are served over HTTP, not HTTPS. You shouldn’t use them for sensitive transactions, like sending passwords or credit card numbers.  Then set up the DNS
and configuring (IP/ Adress/URL to <IP_ADDRESS>
and the Record Type to A
and TTL 1800)
set the Subdomain @ IP Adress/URL to username.github.io
and the Record Type to CNAME (Alias)
in the Sub-Domian Settings add an @ in the first - field. and add the IP Adress with the end .154
<IP_ADDRESS>
and type Record Type A (Adress) and TTL 1800
Save a ll your Settings !
Do you can see the Web Page Test here
Update to the CloudFlare.
First Sigin in your CLoudFlare Setting up the CNAME
and A
Record.
Add the Nameserver to your Domainpoint!
Set Up your https://
Set your ssl to Flexible inside your Interface @ Cloudflare. Wait for a Moment. If you Stuck, contact they. Awesome Supporters Outhere!
Open your Terminal : See your Changes :
Dig your domian : $ dig yourdomian.com
and curl -I yourdomian.com
After 24 Hours i checked out my Nameservers! Awesome to see the Changes!
To automatically forward HTTP requests to HTTPS
, you can create a Page Rule by:
Open the Page Rules interface.
Entering http://*lucasgatsas.ch/*
as the URL pattern.
Choose "Always use https."
Click "Add rule."
Link: namecheap.com Link: cloudflare.com Link: github.com
This is a SwissWatch! :)


{% extends "base_document_view.html" %} {% block main %} {% if chapter %} {% if chapter.title %}
OPS 2.0 is an open standard ebook format developed by the International Digital Publishing Forum. OPS files can be read with Adobe Digital Editions and, in the near future, portable digital readers such as the Kindle.
TEI is content is encoded in the Text Encoding Initiative Lite P5 schema and is the source format for all threepress content. It is automatically validated using the teilite.xsd schema (included in the threepress distribution).
{{ chapter_preview.render_preview|safe }}[ . . . ]


Labsnamae | The building of a promise
ABSTRACT
Labsnamäe is promoting a new urban model in the district of Lasnamäe in Tallinn. The goal is to use our mikro-rayon Kuristiku, as a pilot project to experiment in order to create a new economic model to fight segregation in Tallinn. We are proposing a design strategy based on circularity to create a new economy and urban model for Lasnamäe.
CHAPTER 0 : INTRODUCTION
The first general plan of the city of Tallinn was made in 1913 by Ariel Saarinen. To accommodate population growth, Saarinen targeted new areas for development outside the center city area. One of these areas was Lasnamäe, and it was divided into smaller areas, the mikro-rayons. Through the next years, Lasnamäe became one of the most populous administrative districts of Tallinn, where mass prefabricated concrete housing blocks were built between 1970-1990.
However, in 1991, the Republic of Estonia became an independent country after 51 years of being part of the Soviet Union. Consequently, this affected the housing and land ownership patterns; indicatively in 1992 public ownership of the housing was 76% while in 2002 it fell to 4%. Today, the area of Lasnamäe that was never fully developed, inhabits almost 120.000 people.
CHAPTER 1: CHALLENGES OF TALLINN & FIRST IDEAS
Based on our collaborative research and our own analysis we mainly focused on 4 challenges on district scale: Segregation, Lack of Job Opportunities, Unhealthy Effects and Lack of Human Scale.
Segregation is based on the distribution of population by age. Lasnamäe is inhabited mostly by elderly people, while the youth of Tallinn are willing to live in more central locations of the city.
Another factor of segregation of the area is the lack of job opportunities. The area was firstly designed as a residential area for people that worked in the Industrial area located south of Lasnamäe. Through the years though, the working model has changed and while the area can have enough space for living, it does not have enough work related infrastructure.
Despite this model of work becoming obsolete, Lasnamae still continues to produce materials with old methods and techniques which has many unhealthy effects in return.
Lastly, what we can see from even a basic figure and ground study is that the area has open wide spaces, however, considering the height of the buildings there is no respect to the human scale. In this way, people are getting lost in this wideness without any objects or urban elements adjusted in human scale around.
Through our research regarding circularity, we realized that we cannot have a socially useful and sustainable 4th Industrial Revolution that comes with Industry 4.0 without achieving circularity in our economic models. And at the same time, we cannot achieve fully circular economical models without the 4th Industrial Revolution.
Thus, we identified our main objectives that are the concepts of Industry 4.0, Fablab/Fabcity and their intersection with Circular Economy. What we want to achieve is to mix the beneficial aspects of FabLabs and Industry 4.0 and create our project based on a circular model. Local Production, New Materials, new Economy models and new Urban models and the connection of citizens are some of the aspects, technologies and benefits that we want to implement in our project.
More specifically, Labsnamäe system will work in 4 levels, that are based on our 4 challenges. We aim to develop a new economic model based on Industry 4.0 that will bring new jobs in the area and consequently will attract younger people. Apart from that, Lasnamäe has a good educational infrastructure which will be the base to create a new educational system that will attract new families and increase integration in our area. We propose the creation of Elderly City labs that will be the connecting place of the generations living in our area. In these labs, young people will have the opportunity to come closer to older populations in order to exchange knowledge. In this way, we aim to reduce the barrier between new technologies and older people.
All these will inevitably lead to a new Urban Model for our area, that will bring resiliency, circularity, efficiency, adaptability and new materials, leading to a more cohesive, trusting and dynamic community.
CHAPTER 2 | OPPORTUNITIES OF LASNAMÄE & STRATEGY
Through our analysis of Lasnamäe we identified 3 big opportunities that the area can offer us: the Unbuilt Areas, the Rehabilitation policies and the Educational Facilities.
One of the biggest problems of Lasmanäe is that the development of the plan was never fully built, however, the land use regulations stayed the same. This has led to many empty lots with no access, a degraded landscape in certain areas and the transformation of many empty lots to parking areas in the infrastructure land use. The greatest example of this is the southern highway and the tram line that was never built and was supposed to connect the eastern and northern part of Lasnamäe while crossing half of the mikro-rayons.
While the highway is not existing, the land use regulations do not allow other uses besides transportation related. However, the unfinished master plan creates a lot of opportunities for new development, as well as knowledge from the past. The infrastructure land use should contemplate more sustainable ways of mobility, the empty plots should create more flexible and less concentrated densities and the green areas should be preserved and understood as an opportunity to create more natural cities.
On the other hand, the existing buildings are very energy inefficient, so in relation to the policies for “new city model”, we know that both Estonian government and European Union encourages sustainable living environments and renovation projects, offering numerous programs and grants.
Lastly, in the area of Lasnamäe we have a great amount of educational units. We believe that if we manage through our proposal to coordinate and correlate them, we will be able to create a great educational network.
So, the question is: How to implement all those proposals spatially?
Our strategy on the district scale, is firstly focusing on the disconnection of the different mikro-rayons and the lack of public accessibility to Lasnamäe. In order to connect the existing residential areas as much as possible while reducing car usage, we want to create a circular tram line. In this way we are promoting a more sustainable way of mobility. On a second level we want to promote a new transversal economical axis, on the trace of the unbuilt highway for our new industries 4.0 to promote new ways of construction and building and a more sustainable construction economy to reformulate segregation. Vertical to this new axis we propose the development of a social axis in every micro-rayon that connects the education facilities that are in the middle of the micro-rayons and concentrates amenities and services. The intersection of these 2 axes will be the “heart” of our new communities.
Finally, we want to renaturalize the degraded area of this corridor in order to use the materials for our construction as well as increase the green areas of Lasnamäe.
At the end we will have a diverse axis connecting the mikrorayons that will promote integration, production, living amenities and services, rehabilitation of public spaces and buildings and bring a more sustainable and circular system in Lasnamäe.
CHAPTER 3 | KURISTIKU
The Labsnamäe strategy offers a proposal for the whole Lasnamäe district. In order to implement our ideas, we worked on the Kuristiku scale, which is one of the micro-rayons. Kuristiku has a population of 10.000 people and is inhabited by mostly elderly and Russian-speaking people. In order to define the proposal we ran different kinds of analysis that drive some of the design decisions, such as solar and wind analysis, weather conditions, land uses and accessibility analysis.
From solar analysis we understood the time of sun exposure through winter and summer and how it affects space. The average range of the sun hours in December is 0,30h/day and in June is 9,34h/day. More specifically, we ran an analysis for 2 days, the longest and shortest day of the year, the 22th of June and the 21st of December respectively to understand better the areas that get more sun so that we can implement them in our design proposal. We use this information to define the location and the orientation of the public spaces to take advantage of solar radiation during the seasons.
We used the wind analysis to understand where we need to protect the public space from the wind. During the year, wind comes mostly from the south and the average speed varies throughout the year. The windier part of the year lasts for 5.7 months, from September 19 to March 10, with average wind speeds of more than 13.8 miles per hour. The calmer time of year lasts for 6.3 months from March 10 to September 19. Through this analysis we were able to locate some strategic points to add different elements as a barrier from the wind. These elements can be different buildings, different trees, forest areas etc.
By understanding the current mobility model we concluded that the public infrastructure is not enough. As a consequence there are a lot of parking spaces in the current environment and of course a significant amount of cars. Thus, we propose a tram line in order to change the mobility model from private to public between the neighborhoods.
In the actual situation current road infrastructure is invading the culture areas and the central space with no structure hierarchy and dead end roads. To solve this issue we removed the roads inside the courtyards and created 3 closed circles without dead ends. To access the residential areas in case of need, service roads of one direction were created connecting them.
Regarding the pedestrians and bicycles, currently, only one bike lane exists that runs outside of the mikro-rayon and the pedestrian paths are not sufficiently connecting the areas and the buildings, and consequently, people don’t use the courtyards as a space of interaction. So we propose new bike paths for the inclusion axis as well as in the south part.
For the pedestrians, we propose continuous pedestrian paths by making perforations in the ground floors of the existing buildings in order to ensure connectivity, transversality and continuity.
Regarding the climate, since Estonia is located in northern Europe, it has a lot of low temperatures throughout the year. We concluded that the maximum temperature of Tallinn is around 21°C throughout the year, meaning that especially during the winter people are not tempted to stay in outdoor public spaces. After we understood the climate and how this affects the space we concluded that it is very important for this area to have common winter spaces in the ground floors of the buildings where the community activities can take place.
Finally, after we studied the current program we wanted to integrate it into the LABsnamae system but also provide new uses, that were not there that we understand are necessary for our area. In addition, in our area the development is mostly tall. Most of the buildings have heights between 20 to 30m tall and the lack of smaller elements combined with many open spaces leads to an unbalanced vertical development with no sense of human scale in the area. To solve this we regulated the heights of our new buildings to not exceed 12m of height.
CHAPTER 4 | LABSNAMAE
We started by identifying our main areas of intervention and implementing our strategies of the 3 axis; mobility, economical and social axis in the spatial dimension. We decided that we need to set up a timeline and divide our interventions into 4 phases. Every phase besides the main actions we are proposing is introducing a new policy that will regulate these actions and will be implemented through our whole timeline.
Starting from phase 1, the Renaturing we aim to recover the soil through forestation in our area. This will be completed by planting new trees in Kuristiku and at the same time, through our proposed policy that for every tree that is cut, 3 more trees need to be planted, 2 for production and material and 1 for the forestation we will motivate the planting of more trees. Besides that, we want to identify the green areas for growing, replace or remove the parking places, identify how we can protect our area and add a fast bus line in the route of the tram to reduce the use of the car until the tram line is completed.
Moving to phase 2 that is about Building the Infrastructure, we propose to create the 2 axes of our proposal, the mobility and the economical. In order to do so, we need to locate the tram line and the tram stop, locate the main FabLabs as nodes and connect these new nodes with the existing educational buildings. Finally, we introduce a new policy that every new company that comes to LABsnamae, should create amenities and urban furniture for public spaces through our main FabLabs in order to accelerate the construction of public equipment and elements.
Phase 3 focuses more on the Production through inclusion and the connection of the community. Through this phase we will continue developing the social axis, and we want to start creating the social Elderly Labs that will connect the different generations. The companies that are already established and the new ones coming should create programs for bringing closer children and elderly through a social responsibility department that takes care of Labsnamäe project. Finally, using the trees planted through phase 1 we aim to rehabilitate the sidewalks, activate the ground floors with new areas and start creating new residential buildings to attract more young people in the area.
Our last phase is about the total rehabilitation of the mikro-rayon. By rehabilitating the old buildings, recovering the public spaces and transforming the ground floors of the area to winter public spaces we create a new landscape of the mikro-rayon. At the same time, we propose that for every new residential building, it is necessary to rehabilitate the public spaces in order to be inhabited again and be more energy efficient. Meanwhile, the use of solar panels and renewable energy sources will provide Kuristiku a more sustainable future.
Our project Labsnamae aims to create a circular community in Lasnamae through the ideas of Industry 4.0, FabLabs and Circular economy. Besides the material aspect of our circularity we imagine a knowledge exchange between generations and people. Through Labsnamäe, Lasnamäe will be the place that everyone wants to be!
Welcome to the new economic and living system of Tallinn!
Labsnamäe is promoting a new urban model in the district of Lasnamäe in Tallinn. The goal is to use our mikro-rayon Kuristiku, as a pilot project to experiment in order to create a new economic model to fight segregation in Tallinn. We are proposing a design strategy based on circularity to create a new economy and urban model for Lasnamäe.
CHAPTER 0 : INTRODUCTION
The first general plan of the city of Tallinn was made in 1913 by Ariel Saarinen. To accommodate population growth, Saarinen targeted new areas for development outside the center city area. One of these areas was Lasnamäe, and it was divided into smaller areas, the mikro-rayons. Through the next years, Lasnamäe became one of the most populous administrative districts of Tallinn, where mass prefabricated concrete housing blocks were built between 1970-1990.
However, in 1991, the Republic of Estonia became an independent country after 51 years of being part of the Soviet Union. Consequently, this affected the housing and land ownership patterns; indicatively in 1992 public ownership of the housing was 76% while in 2002 it fell to 4%. Today, the area of Lasnamäe that was never fully developed, inhabits almost 120.000 people.
CHAPTER 1: CHALLENGES OF TALLINN & FIRST IDEAS
Based on our collaborative research and our own analysis we mainly focused on 4 challenges on district scale: Segregation, Lack of Job Opportunities, Unhealthy Effects and Lack of Human Scale.
Segregation is based on the distribution of population by age. Lasnamäe is inhabited mostly by elderly people, while the youth of Tallinn are willing to live in more central locations of the city.
Another factor of segregation of the area is the lack of job opportunities. The area was firstly designed as a residential area for people that worked in the Industrial area located south of Lasnamäe. Through the years though, the working model has changed and while the area can have enough space for living, it does not have enough work related infrastructure.
Despite this model of work becoming obsolete, Lasnamae still continues to produce materials with old methods and techniques which has many unhealthy effects in return.
Lastly, what we can see from even a basic figure and ground study is that the area has open wide spaces, however, considering the height of the buildings there is no respect to the human scale. In this way, people are getting lost in this wideness without any objects or urban elements adjusted in human scale around.
Through our research regarding circularity, we realized that we cannot have a socially useful and sustainable 4th Industrial Revolution that comes with Industry 4.0 without achieving circularity in our economic models. And at the same time, we cannot achieve fully circular economical models without the 4th Industrial Revolution.
Thus, we identified our main objectives that are the concepts of Industry 4.0, Fablab/Fabcity and their intersection with Circular Economy. What we want to achieve is to mix the beneficial aspects of FabLabs and Industry 4.0 and create our project based on a circular model. Local Production, New Materials, new Economy models and new Urban models and the connection of citizens are some of the aspects, technologies and benefits that we want to implement in our project.
More specifically, Labsnamäe system will work in 4 levels, that are based on our 4 challenges. We aim to develop a new economic model based on Industry 4.0 that will bring new jobs in the area and consequently will attract younger people. Apart from that, Lasnamäe has a good educational infrastructure which will be the base to create a new educational system that will attract new families and increase integration in our area. We propose the creation of Elderly City labs that will be the connecting place of the generations living in our area. In these labs, young people will have the opportunity to come closer to older populations in order to exchange knowledge. In this way, we aim to reduce the barrier between new technologies and older people.
All these will inevitably lead to a new Urban Model for our area, that will bring resiliency, circularity, efficiency, adaptability and new materials, leading to a more cohesive, trusting and dynamic community.
CHAPTER 2 | OPPORTUNITIES OF LASNAMÄE & STRATEGY
While the highway is not existing, the land use regulations do not allow other uses besides transportation related. However, the unfinished master plan creates a lot of opportunities for new development, as well as knowledge from the past. The infrastructure land use should contemplate more sustainable ways of mobility, the empty plots should create more flexible and less concentrated densities and the green areas should be preserved and understood as an opportunity to create more natural cities.
On the other hand, the existing buildings are very energy inefficient, so in relation to the policies for “new city model”, we know that both Estonian government and European Union encourages sustainable living environments and renovation projects, offering numerous programs and grants.
Lastly, in the area of Lasnamäe we have a great amount of educational units. We believe that if we manage through our proposal to coordinate and correlate them, we will be able to create a great educational network.
So, the question is: How to implement all those proposals spatially?
Our strategy on the district scale, is firstly focusing on the disconnection of the different mikro-rayons and the lack of public accessibility to Lasnamäe. In order to connect the existing residential areas as much as possible while reducing car usage, we want to create a circular tram line. In this way we are promoting a more sustainable way of mobility. On a second level we want to promote a new transversal economical axis, on the trace of the unbuilt highway for our new industries 4.0 to promote new ways of construction and building and a more sustainable construction economy to reformulate segregation. Vertical to this new axis we propose the development of a social axis in every micro-rayon that connects the education facilities that are in the middle of the micro-rayons and concentrates amenities and services. The intersection of these 2 axes will be the “heart” of our new communities.
Finally, we want to renaturalize the degraded area of this corridor in order to use the materials for our construction as well as increase the green areas of Lasnamäe.
At the end we will have a diverse axis connecting the mikrorayons that will promote integration, production, living amenities and services, rehabilitation of public spaces and buildings and bring a more sustainable and circular system in Lasnamäe.
CHAPTER 3 | KURISTIKU
The Labsnamäe strategy offers a proposal for the whole Lasnamäe district. In order to implement our ideas, we worked on the Kuristiku scale, which is one of the micro-rayons. Kuristiku has a population of 10.000 people and is inhabited by mostly elderly and Russian-speaking people. In order to define the proposal we ran different kinds of analysis that drive some of the design decisions, such as solar and wind analysis, weather conditions, land uses and accessibility analysis.
From solar analysis we understood the time of sun exposure through winter and summer and how it affects space. The average range of the sun hours in December is 0,30h/day and in June is 9,34h/day. More specifically, we ran an analysis for 2 days, the longest and shortest day of the year, the 22th of June and the 21st of December respectively to understand better the areas that get more sun so that we can implement them in our design proposal. We use this information to define the location and the orientation of the public spaces to take advantage of solar radiation during the seasons.
We used the wind analysis to understand where we need to protect the public space from the wind. During the year, wind comes mostly from the south and the average speed varies throughout the year. The windier part of the year lasts for 5.7 months, from September 19 to March 10, with average wind speeds of more than 13.8 miles per hour. The calmer time of year lasts for 6.3 months from March 10 to September 19. Through this analysis we were able to locate some strategic points to add different elements as a barrier from the wind. These elements can be different buildings, different trees, forest areas etc.
By understanding the current mobility model we concluded that the public infrastructure is not enough. As a consequence there are a lot of parking spaces in the current environment and of course a significant amount of cars. Thus, we propose a tram line in order to change the mobility model from private to public between the neighborhoods.
In the actual situation current road infrastructure is invading the culture areas and the central space with no structure hierarchy and dead end roads. To solve this issue we removed the roads inside the courtyards and created 3 closed circles without dead ends. To access the residential areas in case of need, service roads of one direction were created connecting them.
Regarding the pedestrians and bicycles, currently, only one bike lane exists that runs outside of the mikro-rayon and the pedestrian paths are not sufficiently connecting the areas and the buildings, and consequently, people don’t use the courtyards as a space of interaction. So we propose new bike paths for the inclusion axis as well as in the south part.
For the pedestrians, we propose continuous pedestrian paths by making perforations in the ground floors of the existing buildings in order to ensure connectivity, transversality and continuity.
Regarding the climate, since Estonia is located in northern Europe, it has a lot of low temperatures throughout the year. We concluded that the maximum temperature of Tallinn is around 21°C throughout the year, meaning that especially during the winter people are not tempted to stay in outdoor public spaces. After we understood the climate and how this affects the space we concluded that it is very important for this area to have common winter spaces in the ground floors of the buildings where the community activities can take place.
Finally, after we studied the current program we wanted to integrate it into the LABsnamae system but also provide new uses, that were not there that we understand are necessary for our area. In addition, in our area the development is mostly tall. Most of the buildings have heights between 20 to 30m tall and the lack of smaller elements combined with many open spaces leads to an unbalanced vertical development with no sense of human scale in the area. To solve this we regulated the heights of our new buildings to not exceed 12m of height.
CHAPTER 4 | LABSNAMAE
We started by identifying our main areas of intervention and implementing our strategies of the 3 axis; mobility, economical and social axis in the spatial dimension. We decided that we need to set up a timeline and divide our interventions into 4 phases. Every phase besides the main actions we are proposing is introducing a new policy that will regulate these actions and will be implemented through our whole timeline.
Starting from phase 1, the Renaturing we aim to recover the soil through forestation in our area. This will be completed by planting new trees in Kuristiku and at the same time, through our proposed policy that for every tree that is cut, 3 more trees need to be planted, 2 for production and material and 1 for the forestation we will motivate the planting of more trees. Besides that, we want to identify the green areas for growing, replace or remove the parking places, identify how we can protect our area and add a fast bus line in the route of the tram to reduce the use of the car until the tram line is completed.
Moving to phase 2 that is about Building the Infrastructure, we propose to create the 2 axes of our proposal, the mobility and the economical. In order to do so, we need to locate the tram line and the tram stop, locate the main FabLabs as nodes and connect these new nodes with the existing educational buildings. Finally, we introduce a new policy that every new company that comes to LABsnamae, should create amenities and urban furniture for public spaces through our main FabLabs in order to accelerate the construction of public equipment and elements.
Phase 3 focuses more on the Production through inclusion and the connection of the community. Through this phase we will continue developing the social axis, and we want to start creating the social Elderly Labs that will connect the different generations. The companies that are already established and the new ones coming should create programs for bringing closer children and elderly through a social responsibility department that takes care of Labsnamäe project. Finally, using the trees planted through phase 1 we aim to rehabilitate the sidewalks, activate the ground floors with new areas and start creating new residential buildings to attract more young people in the area.
Our last phase is about the total rehabilitation of the mikro-rayon. By rehabilitating the old buildings, recovering the public spaces and transforming the ground floors of the area to winter public spaces we create a new landscape of the mikro-rayon. At the same time, we propose that for every new residential building, it is necessary to rehabilitate the public spaces in order to be inhabited again and be more energy efficient. Meanwhile, the use of solar panels and renewable energy sources will provide Kuristiku a more sustainable future.
Our project Labsnamae aims to create a circular community in Lasnamae through the ideas of Industry 4.0, FabLabs and Circular economy. Besides the material aspect of our circularity we imagine a knowledge exchange between generations and people. Through Labsnamäe, Lasnamäe will be the place that everyone wants to be!
Welcome to the new economic and living system of Tallinn!
Labsnamäe | The building of a promise is a project of IAAC, Institute of Advanced Architecture of Catalonia developed at Master in City and Technology in 2020/21 by students: Adriana Aguirre Such, Iñigo Esteban Marina, Marta Maria Galdys, Sinay Coşkun and Stefania-Maria Kousoula and faculty: Andy Bow, Bruno Moser and Laura Narvaez Zertuche


3 Items $76
Age range 2 - 4 Years
76 95
Toys suitable for therapists, schools, parents and more.
Main Categories
Any Questions?
Lets Socialize


Fitness Tracker
Home
Dashboard
Profile
Workouts
Menu
home
Home
dashboard
Dashboard
person
Profile
fitness_center
Workouts
Search your City for the weather:
search
Weekly Calendar
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Save your weekly calender below!
save
Weight(lbs):
update weight


{% extends 'base.html' %} {% load static %} {% block content %}
Become a member of the fastest growing online store in Chico.
{{e}}