Details
-
Type: Bug
-
Status: Resolved
-
Priority: Major
-
Resolution: Cannot Reproduce
-
Affects Version/s: 2.0.4
-
Fix Version/s: None
-
Component/s: None
-
Labels:
-
Environment:We use Confluence 2.10.2
-
Internal Complexity:Unknown
-
Internal Value:Unknown
-
Rank:18
Description
When the space admin tries to delete the group and he receives a message that he does not have deletion privileges (due to references to that group in different spaces), the group will not be deleted (and this is what I expect) and sometimes the space group will not be visible in the 'Manage Users/Groups' tab (not expected) and sometimes the group's view permissions will be changed (not expected).
Use Case:
Space Admin1 creates a group: work-test1 in the Work space. The Work space view permissions are automatically assigned to that new group by the CSUM plug-in.
Space Admin2 creates a reference to the work-test1 group in the 'Friends' space (grants view permissions to the work-test1 group in his space).
And now Space Admin 1 tries to delete the work-test1 group and receives an error message saying that the user has no privileges to delete the group.
When repeating the steps mentioned above, I noticed CSUM plug-in's different behaviors:
1.Group is not deleted, group is visible in the 'Manage Users/Groups' tab, group's permissions did not change
2.Group is not deleted, group is not visible in the 'Manage Users/Groups' tab (even after clicking 'Refresh' button, clearing cache, changing browser), group's permissions did not change
3.Group is not deleted, group is not visible in the 'Manage Users/Groups' tab, group's permissions changed
Attachments
-
- csum_testing.doc
- 24/Jun/09 9:25 AM
- 186 kB
- Karolina null
-
- Debug_Logs_with_CSUMplugin_no_perm_removal.rtf
- 24/Jun/09 3:13 PM
- 425 kB
- Karolina null
-
- Debug_logs_with_CSUMplugin_no_perm_removal.txt
- 25/Jun/09 3:59 PM
- 7 kB
- Karolina null
-
- Debug_Logs_with_CSUMplugin.rtf
- 24/Jun/09 3:13 PM
- 455 kB
- Karolina null
-
- Debug_Logs_with_CSUMplugin2.txt
- 25/Jun/09 3:59 PM
- 41 kB
- Karolina null
-
$i18n.getText("admin.common.words.hide")
- permission-management-2.0.5-SNAPSHOT.jar
- 01/Jul/09 8:43 AM
- 531 kB
- Gary S. Weaver
-
- META-INF/MANIFEST.MF 0.1 kB
- atlassian-plugin.xml 8 kB
- csum/.../AbstractPagerPaginationSupportCachingSpaceAction.class 12 kB
- csum/.../AtlassianPlugin.properties 17 kB
- csum/.../AtlassianPlugin_en.properties 17 kB
- csum/confluence/.../CacheConstants.class 0.8 kB
- csum/.../BaseCustomPermissionConfigAction.class 6 kB
- csum/.../CsumConfigValidationResponse.class 1 kB
- csum/.../CustomPermissionConfigAction.class 7 kB
- csum/.../CustomPermissionConfigConstants.class 4 kB
- csum/.../CustomPermissionConfigurable.class 2 kB
- csum/.../CustomPermissionConfiguration.class 19 kB
- csum/.../LegacyConfigConstants.class 1 kB
- csum/.../LegacyConfigurationMigrator.class 4 kB
- csum/.../CsumAbstractSpaceAction.class 0.5 kB
- csum/.../CsumConfluenceActionSupport.class 0.5 kB
- csum/.../CustomPermissionConstants.class 0.5 kB
- csum/.../CustomPermissionManagerAction.class 43 kB
- csum/.../CustomPermissionManagerActionContext.class 3 kB
- csum/.../CustomPermissionServiceManager.class 4 kB
- csum/confluence/.../AddException.class 0.8 kB
- csum/confluence/.../FindException.class 0.8 kB
- csum/confluence/.../RemoveException.class 0.8 kB
- csum/.../ServiceAuthenticationException.class 0.9 kB
- csum/confluence/.../ServiceException.class 2 kB
- csum/.../UsersNotFoundException.class 0.9 kB
- csum/.../GroupManagementService.class 0.9 kB
- csum/.../BaseGroupManagementService.class 8 kB
- csum/.../BaseUserManagementService.class 11 kB
- csum/.../ConfluenceGroupManagementService.class 9 kB
$i18n.getText("admin.common.words.show")- permission-management-2.0.5-SNAPSHOT.jar
- 01/Jul/09 8:43 AM
- 531 kB
- Gary S. Weaver
-
$i18n.getText("admin.common.words.hide")
- permission-management-2.0.5-SNAPSHOT.jar
- 23/Jun/09 3:06 PM
- 530 kB
- Gary S. Weaver
-
- META-INF/MANIFEST.MF 0.1 kB
- atlassian-plugin.xml 8 kB
- csum/.../AbstractPagerPaginationSupportCachingSpaceAction.class 12 kB
- csum/.../AtlassianPlugin.properties 17 kB
- csum/.../AtlassianPlugin_en.properties 17 kB
- csum/confluence/.../CacheConstants.class 0.8 kB
- csum/.../BaseCustomPermissionConfigAction.class 6 kB
- csum/.../CsumConfigValidationResponse.class 1 kB
- csum/.../CustomPermissionConfigAction.class 7 kB
- csum/.../CustomPermissionConfigConstants.class 4 kB
- csum/.../CustomPermissionConfigurable.class 2 kB
- csum/.../CustomPermissionConfiguration.class 19 kB
- csum/.../LegacyConfigConstants.class 1 kB
- csum/.../LegacyConfigurationMigrator.class 4 kB
- csum/.../CsumAbstractSpaceAction.class 0.5 kB
- csum/.../CsumConfluenceActionSupport.class 0.5 kB
- csum/.../CustomPermissionConstants.class 0.5 kB
- csum/.../CustomPermissionManagerAction.class 43 kB
- csum/.../CustomPermissionManagerActionContext.class 3 kB
- csum/.../CustomPermissionServiceManager.class 4 kB
- csum/confluence/.../AddException.class 0.8 kB
- csum/confluence/.../FindException.class 0.8 kB
- csum/confluence/.../RemoveException.class 0.8 kB
- csum/.../ServiceAuthenticationException.class 0.9 kB
- csum/confluence/.../ServiceException.class 2 kB
- csum/.../UsersNotFoundException.class 0.9 kB
- csum/.../GroupManagementService.class 0.9 kB
- csum/.../BaseGroupManagementService.class 8 kB
- csum/.../BaseUserManagementService.class 11 kB
- csum/.../ConfluenceGroupManagementService.class 7 kB
$i18n.getText("admin.common.words.show")- permission-management-2.0.5-SNAPSHOT.jar
- 23/Jun/09 3:06 PM
- 530 kB
- Gary S. Weaver
-
$i18n.getText("admin.common.words.hide")
- permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar
- 24/Jun/09 10:15 AM
- 530 kB
- Gary S. Weaver
-
- META-INF/MANIFEST.MF 0.1 kB
- atlassian-plugin.xml 8 kB
- csum/.../AbstractPagerPaginationSupportCachingSpaceAction.class 12 kB
- csum/.../AtlassianPlugin.properties 17 kB
- csum/.../AtlassianPlugin_en.properties 17 kB
- csum/confluence/.../CacheConstants.class 0.8 kB
- csum/.../BaseCustomPermissionConfigAction.class 6 kB
- csum/.../CsumConfigValidationResponse.class 1 kB
- csum/.../CustomPermissionConfigAction.class 7 kB
- csum/.../CustomPermissionConfigConstants.class 4 kB
- csum/.../CustomPermissionConfigurable.class 2 kB
- csum/.../CustomPermissionConfiguration.class 19 kB
- csum/.../LegacyConfigConstants.class 1 kB
- csum/.../LegacyConfigurationMigrator.class 4 kB
- csum/.../CsumAbstractSpaceAction.class 0.5 kB
- csum/.../CsumConfluenceActionSupport.class 0.5 kB
- csum/.../CustomPermissionConstants.class 0.5 kB
- csum/.../CustomPermissionManagerAction.class 43 kB
- csum/.../CustomPermissionManagerActionContext.class 3 kB
- csum/.../CustomPermissionServiceManager.class 4 kB
- csum/confluence/.../AddException.class 0.8 kB
- csum/confluence/.../FindException.class 0.8 kB
- csum/confluence/.../RemoveException.class 0.8 kB
- csum/.../ServiceAuthenticationException.class 0.9 kB
- csum/confluence/.../ServiceException.class 2 kB
- csum/.../UsersNotFoundException.class 0.9 kB
- csum/.../GroupManagementService.class 0.9 kB
- csum/.../BaseGroupManagementService.class 8 kB
- csum/.../BaseUserManagementService.class 11 kB
- csum/.../ConfluenceGroupManagementService.class 7 kB
$i18n.getText("admin.common.words.show")- permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar
- 24/Jun/09 10:15 AM
- 530 kB
- Gary S. Weaver
Activity
Committed following changes:
Index: src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java =================================================================== --- src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java (revision 32200) +++ src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java (working copy) @@ -176,7 +176,23 @@ } } log.debug("Calling userAccessor.removeGroup(...)"); - userAccessor.removeGroup(group); + boolean success=false; + try { + userAccessor.removeGroup(group); + success=true; + } + finally { + if (perms!=null && !success) { + log.warn("Remove of group " + group.getName() + " failed and since there were permissions, " + + "we'll attempt to add them back in case they were able to be removed (as workaround for SUSR-97, CONF-16183)"); + // readd perms, as workaround for SUSR-97, CONF-16183 + for (int i=0; i<perms.size(); i++) { + SpacePermission perm = (SpacePermission)perms.get(i); + log.debug("Calling spacePermissionManager.savePermission(" + perm + ")"); + spacePermissionManager.savePermission(perm); + } + } + } } }
Sending trunk/src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java Transmitting file data . Committed revision 32201.
Index: src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java =================================================================== --- src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java (revision 32200) +++ src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java (working copy) @@ -176,7 +176,23 @@ } } log.debug("Calling userAccessor.removeGroup(...)"); - userAccessor.removeGroup(group); + boolean success=false; + try { + userAccessor.removeGroup(group); + success=true; + } + finally { + if (perms!=null && !success) { + log.warn("Remove of group " + group.getName() + " failed and since there were permissions, " + + "we'll attempt to add them back in case they were able to be removed (as workaround for SUSR-97, CONF-16183)"); + // readd perms, as workaround for SUSR-97, CONF-16183 + for (int i=0; i<perms.size(); i++) { + SpacePermission perm = (SpacePermission)perms.get(i); + log.debug("Calling spacePermissionManager.savePermission(" + perm + ")"); + spacePermissionManager.savePermission(perm); + } + } + } } }
Sending trunk/src/main/java/csum/confluence/permissionmgmt/service/impl/ConfluenceGroupManagementService.java Transmitting file data . Committed revision 32201.
Karolina,
Please test the attached plugin ( permission-management-2.0.5-SNAPSHOT.jar ) to see if it resolves the issue. In can be installed via Plugins in the administration area of Confluence. If it works, please let us know so that we can do a formal release of CSUM 2.0.5.
Thanks for your help!
Gary
Gary,
Thank you so much for your fast response! I will test the attached plugin and as soon as I am done with tests I will get back to you with the results.
Karolina
Gary,
I uploded the jar file that you attached to this ticket yesterday and I tested it. Please see the test results in the attachment: csum_testing.doc
It appears that there is still an issue with the plug-in. The view space permissions of a group are being changed when the space admin tries to delete the group and receives a warning that he does not have privilagaes to delete that group (because the group is referenced in another space). If the group is not deleted, the group permissions should not be deleted either and the group should still be listed in the "Manage Users/Groups' tab and in the 'Groups' table (in the Space Admin' tab - permissions).
Can you please take a look at my tests?
Thank you and let me know if you would like me to do more tests.
Karolina
attaching plugin build containing workaround code that still doesn't work around the issue customer is describing with Confluence API.
Karolina,
I updated: http://jira.atlassian.com/browse/CONF-16183
Can you do two things for me?
1. With the existing plugin I gave you, could you provide (scrubbed so as not to contain private info, since this is a public ticket) debug logs where debugging is turned on not just for CSUM but for Confluence and related classes and attach them to this ticket? If you can narrow down the part of the logs related to the issue, that would be great.
2. I'm going to attach a build of the plugin that doesn't remove perms prior to group delete. If you could test that out after providing the logs above that would be great. Then if there are still issues, providing debug logs for that also would be helpful.
Gary
attaching permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar for testing of #2 above. Please test other jar first and provide logs though.
Gary,
Just to confirm - Do you want me to turn on the DEBUG log level for all of the classes (listed below)?
com.atlassian.confluence.admin.actions
com.atlassian.confluence.cluster
com.atlassian.confluence.cluster.safety
com.atlassian.confluence.event.listeners.ResetHiLoAfterImportListener
com.atlassian.confluence.importexport.actions.ImportLongRunningTask
com.atlassian.confluence.importexport.impl.PdfExporter
com.atlassian.confluence.lifecycle
com.atlassian.confluence.search.v2.lucene.SearcherAction
com.atlassian.confluence.servlet.ConfluenceServletDispatcher
com.atlassian.confluence.upgrade
com.atlassian.core.servlet.AbstractNoOpServlet
com.atlassian.core.util.FileUtils
com.atlassian.util.profiling.UtilTimerStack
net.sf.hibernate.cache.ReadWriteCache
net.sf.hibernate.impl.SessionImpl
net.sf.hibernate.type.CustomType
net.sf.hibernate.util.JDBCExceptionReporter
org.apache.commons.httpclient.HttpMethodBase
org.apache.fop
org.directwebremoting.servlet.NotFoundHandler
org.springframework
org.springframework.jmx.support.JmxUtils
velocity
root
See under troubleshooting section here: http://confluence.atlassian.com/display/CONFEXT/Custom+Space+User+Management+Plugin
Specifically the logging stuff under:
http://confluence.atlassian.com/display/DOC/Requesting+External+User+Management+Support
Along with:
log4j.logger.csum=DEBUG, confluencelog
Hope that helps.
Gary,
Thank you for the links and your help!
1. I run the tests again with the dubug logs for confluence and csum turned on. I am attaching the file: Debug_Logs_with_CSUMplugin.rtf
2. I tested it again with this plug-in: permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar and it appears that the space admin is able to delete the group in his space even if that group is referenced in another space. But I think that the logic should be to throw an error saying that the group cannot be deleted because it is referenced in another space and it would be nice to see a list of spaces in which that group is referenced.
I am attaching the logs for that as well: Debug_Logs_with_CSUMplugin_no_perm_removal.rtf
Thanks again
Karolina,
Unfortunately those debug logs didn't contain the SpacePermissionsManager or UserAccessor that I thought they'd be calling.
So a few things to ask:
1. What user schema are you using (atlassian-user, osuser, crowd + ?, something else)?
2. What is the order of repositories defined in atlassian-user.xml or osuser.xml if appropriate (i.e. how is it finding users/groups)
3. What is your CSUM plugin configuration for what schema you are using? (atlassian-user vs. osuser, etc.)
4. Unfortunately the config in the docs I relayed to you must be missing something, or the classes I thought were being called aren't because you have a different setup. Could you try reconfiguring logging in such a way that you can make sure SpacePermissionManager, UserManager and related classes are logging? For example, these:
com.atlassian.confluence.security.SpacePermission;
com.atlassian.confluence.security.SpacePermissionManager;
com.atlassian.confluence.spaces.Space;
com.atlassian.user.Group;
com.atlassian.bandana.BandanaManager;
com.atlassian.spring.container.ContainerManager;
com.atlassian.bandana.BandanaManager;
com.atlassian.confluence.security.SpacePermission;
com.atlassian.confluence.security.SpacePermissionManager;
com.atlassian.confluence.setup.BootstrapManager;
com.atlassian.confluence.spaces.Space;
com.atlassian.confluence.spaces.persistence.dao.SpaceDao;
com.atlassian.confluence.user.UserAccessor;
com.atlassian.spring.container.ContainerManager;
com.atlassian.user.Group;
com.atlassian.user.search.page.DefaultPager;
com.atlassian.user.search.page.Pager;
csum.*
5. I'm only interested for now in the logging produced when you delete the group. If it is ok, I only want the logging from the delete operation that didn't work as expected. So basically, clear the logs (via echo>logname or whatever) when the delete dialog is showing, then click ok, then copy the logs when the operation is complete before touching anything else in the UI.
Other notes:
- There is some stuff in there that might be normal, but doesn't look normal like:
getUser Session found; BUT user doesn't exist
- I couldn't find any references to classes like SpacePermissionManager and UserAccessor, so if you can't send debug logs back that contain those, there isn't a lot I can do to help.
- I didn't see any errors in the log during the group deletion. This is wierd because the original ticket you showed an error message. Is it not showing an error in CSUM when you try to delete a group?
The other avenue that you should try is to try to delete the group from Confluence's administration area (not in the CSUM plugin) in a similar scenario if at all possible. That might not be possible since the issue you are having is with space managers that probably don't have rights to see the administration area, but if at all possible (even if the scenario isn't exactly the same), you could get support from Atlassian if you could reproduce an issue there. For now, we are stuck though, because I don't know what else I can do.
But I think that the logic should be to throw an error saying that the group cannot be deleted because it is referenced in another space and it would be nice to see a list of spaces in which that group is referenced.
Unfortunately, we are relying on the Confluence API to behave and not let you do things you aren't supposed to do. So, if the latter plugin "permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar" is not working, then there is a bug in Confluence's API, and we might need to log that as a separate bug in their Jira.
Our plugin does not write to the DB or do much that is fancy. It just uses Atlassian's own APIs in Confluence to do the user and group management. So if those APIs are broken, we need to tell them what is broken (which only you can do by providing them with logging that shows exactly what is going wrong). I want to help you with that, but at the moment I don't have enough info even though you've definitely done a great job of testing it.
One last note:
- Our plugin caches user and group data for the current session. If you want to clear that cache you must click a refresh link on the page. I don't think that is causing issues, but just to let you know.
Thanks again,
Gary
- There is some stuff in there that might be normal, but doesn't look normal like: getUser Session found; BUT user doesn't exist
- I couldn't find any references to classes like SpacePermissionManager and UserAccessor, so if you can't send debug logs back that contain those, there isn't a lot I can do to help.
- I didn't see any errors in the log during the group deletion. This is wierd because the original ticket you showed an error message. Is it not showing an error in CSUM when you try to delete a group?
But I think that the logic should be to throw an error saying that the group cannot be deleted because it is referenced in another space and it would be nice to see a list of spaces in which that group is referenced.Unfortunately, we are relying on the Confluence API to behave and not let you do things you aren't supposed to do. So, if the latter plugin "permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar" is not working, then there is a bug in Confluence's API, and we might need to log that as a separate bug in their Jira. Our plugin does not write to the DB or do much that is fancy. It just uses Atlassian's own APIs in Confluence to do the user and group management. So if those APIs are broken, we need to tell them what is broken (which only you can do by providing them with logging that shows exactly what is going wrong). I want to help you with that, but at the moment I don't have enough info even though you've definitely done a great job of testing it. One last note:
- Our plugin caches user and group data for the current session. If you want to clear that cache you must click a refresh link on the page. I don't think that is causing issues, but just to let you know.
Gary,
It looks that I gave you the wrong logs. I really apologize - it is still a learning process for me I am attaching the logs where you can see the error message (Debug_Logs_with_CSUMplugin2.txt )
1. I use a default confluence user schema so I guess it is an atlassian-user.
2. I use the default confluence user repository which is a hibernate repository.
3. The CSUM plug-in configuration is default (User manager location for wiki: confluence) and I did not make any changes to it.
4. Logs provided as attachments: Debug_Logs_with_CSUMplugin2.txt and Debug_logs_with_CSUMplugin_no_perm_removal.txt
I know that confluence admin can delete a group even there is a reference to that group in another space. But I would like space admins to be able to have that ability. And this is why I have been testing this plug-in to see if we can use it in our production environment.
Gary - you are helping me a lot! Thank you so much for your fast and detailed responses. Can you please check the logs that I attached and please let me know if this is what you were looking for.
Thanks again!
Karolina
Karolina,
I'm sorry that you've had to spend so much time on this.
Here are the current problems with me being able to help you:
1. Forget about the original plugin or the permission-management-2.0.5-SNAPSHOT.jar. We need to focus on permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar which completely eliminates the issue of permissions removal. We need to only focus on group deletion, and permission-management-2.0.5-SNAPSHOT-no-perms-removal.jar only does the call to Confluence API to remove the group (no more, no less).
2. The log I need from you must contain the debug logging from the Atlassian classes I mentioned (SpacePermissionManager and UserAccessor and related classes), basically exactly like the debug logs I need for the other plugin. The log files you attached didn't contain that (even the new ones). I just need one debug log txt file now with debug logging for csum classes, SpacePermissionManager, UserAccessor and related Atlassian classes to the group deletion stuff and only record the action of deleting the group.
Basically I'm going to take that debug log and pass it off to Atlassian, or you can do it at that point, because unfortunately I don't know what else I can do. It appears that the way it should work (if things were working correctly) would be that when the user tries to delete the group, he or she gets an error and no permissions are changed. If that is not happening with the no-perms jar plugin, then something is a bug in Confluence, and we'll need to open a support ticket.
Thanks,
Gary
Please try newly attached permission-management-2.0.5-SNAPSHOT.jar. This contains fix related to suggestion from Atlassian (Anatoli) that we use code similar to what they provided to check to make sure the user has permissions to delete the group prior to deletion. I was also enlightened that all Atlassian "Manager" classes do not check user permissions prior to action (in this case we were using SpacePermissionManager).
TIA,
Gary
Assuming this was resolved. Try latest version of Confluence (3.5.x+) and latest version of the plugin (2.2.1+). Let us know if that doesn't work for you.
Karolina,
Sorry to hear that you are having trouble with it.
Here is the deal...
In ConfluenceGroupManagementService.java within our CSUM plugin, we remove all space permissions from a group prior to its deletion as a workaround for an issue with Confluence 2.6.0 ( http://jira.atlassian.com/browse/CONF-9623 ) that was supposedly fixed in Confluence 2.7. If the group deletion fails after that, then we don't attempt to readd permissions.
Since the user does not have permissions to delete the group, the user really should not have rights to remove permissions either, so I think this appears to be a bug with Confluence, so I've logged it as:
http://jira.atlassian.com/browse/CONF-16183
However, I'll add some code to see if I can add permissions back if the delete fails and will provide a patched plugin shortly if that is possible.
Gary


N.H. Department of Revenue working on new taxpayer online system
by EndPlayCONCORD, N.H. - New Hampshire's Department of Revenue Administration is offering a new system online for taxpayers, overhauling decades-old technology.
The department, which collects more than $2 billion in taxes each year, expects the transition to be complete by the end of 2021.
The new Revenue Information Management System and Granite Tax Connect, its online user portal, launched Oct. 28 for more than 9,000 taxpayers, including those who pay meals and rentals, nursing facility quality assessment and Medicaid enhancement taxes.
The taxpayers can file taxes electronically and schedule automated online payments, along with other tasks.


RT @kjirs: Today's news: "There's a phone- a PHONE- that shoots 1080p video and has ARTIFICIAL FREAKING INTELLIGENCE! I'm disappointed." ...
10/5/2011, 12:41:03 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
RT @kjirs: Today's news: "There's a phone- a PHONE- that shoots 1080p video and has ARTIFICIAL FREAKING INTELLIGENCE! I'm disappointed." ...
10/5/2011, 12:41:03 PM
Favs: 0
Retweets: 0
link


ESP3 currently only runs on PC with a 64bit version of Windows.
Currently you have two options to download and run ESP3, using either the MATLAB source code, or a compiled version.
- Option 1. Download and run the compiled version.
Option 2. Download the MATLAB source code, and run it within the MATLAB environment.
You will need:
i. MATLAB R2017b (or more recent).
ii. The following Licenced MATLAB toolboxes:
a. Signal Processing
b. Image Processing
c. Statistics and Machine Learning
d. Curve Fitting
iii. The following Installed MATLAB toolboxes:
a. Database (needs to be installed to have access to the sqlite functionnality of Matlab, but Matlab does not require a licence for the use of the sqlite embedded function...)
iv. Git available at https://git-scm.com/downloads and Git Large File Storage (Git LFS) available at https://git-lfs.github.com/.
* Note that instead of installing those stand-alone versions, you can simply download and use a Git client that will install them for you. We use and recommend 'Sourcetree' (https://www.sourcetreeapp.com/).
* If you don't know Git yet, learn about it and version controlling here .
Then:
1. Clone the ESP3 repository and check it out (download) on your machine.
2. Once you have the repository on your machine, open MATLAB, make the "ESP3" root folder your current directory, and launch "EchoAnalysis.m".
FAQs
- How do I stay up-to-date with the latest developments? Do I have to re-download a new version every time it comes out?
For the compiled version, yes. For the MATLAB version, Git will allow you to keep it updated to the latest version if you so wish.
- I would like to code my own MATLAB algorithms and extensions for ESP3. Can I do it?
Yes. Fork the project using Git and develop it on your side. Your changes will stay on your copy, without affecting the development of the main branch. You can always integrate the latest changes made on the main branch back into your forked copy (see Git functions "sync" and "merge").
If down the line you wish to suggest to integrate parts of your code to the main branch, you can do that too using "pull requests" in Git.
- I would like to help developing the main branch. Can I join the development team?
It would be a pleasure to have you onboard. Contact the team.


{{- partial "head.html" . -}}
{{- partial "masthead.html" . -}}
{{- block "main" . }}{{- end }}
{{- partial "footer.html" . -}}


{{ announcement.createdByDisplayName }} at {{ announcement.createdOn|from_sakai_timestamp|date:"DATETIME_FORMAT" }}
{% if announcement.attachments %}{% blocktrans count announcement.attachments|length as attachments %}This announcement has {{ attachments }} attachment.{% plural %}This announcement has {{ attachments }} attachments.{% endblocktrans %}
-
{% for attachment in announcement.attachments %}
- {{ attachment.name }} {% endfor %}


Exact simulation from max-stable processes and multivariate extreme value distributions for various parametric models. Threshold selection methods.
| Version: | 1.11 |
| Imports: | boot, evd, gmm, ismev, methods, nleqslv, nloptr, numDeriv, Rcpp (≥ 0.11.6), rootSolve, stats, revdbayes |
| LinkingTo: | Rcpp, RcppArmadillo |
| Suggests: | cobs, knitr, fields |
| Published: | 2018-02-22 |
| Author: | Leo Belzile [aut, cre], Jennifer L. Wadsworth [aut], Paul J. Northrop [aut], Scott D. Grimshaw [aut], Jin Zhang [ctb], Michael A. Stephens [ctb], Art B. Owen [ctb], Raphael Huser [aut] |
| Maintainer: | Leo Belzile <leo.belzile at epfl.ch> |
| BugReports: | https://github.com/lbelzile/mev/issues |
| License: | GPL-3 |
| URL: | https://github.com/lbelzile/mev/ |
| NeedsCompilation: | yes |
| Materials: | NEWS |
| In views: | ExtremeValue |
| CRAN checks: | mev results |
| Reference manual: | mev.pdf |
| Vignettes: |
Exact unconditional sampling from max-stable random vectors |
| Package source: | mev_1.11.tar.gz |
| Windows binaries: | r-devel: mev_1.11.zip, r-release: mev_1.11.zip, r-oldrel: mev_1.11.zip |
| OS X binaries: | r-release: mev_1.11.tgz, r-oldrel: mev_1.11.tgz |
| Old sources: | mev archive |
Please use the canonical form https://CRAN.R-project.org/package=mev to link to this page.


why websockets?
we want an uninterrupted connection between our two clients and our server
- interactive communication session between the user's browser and a server
- you don't have to poll the server for a reply
- persistent connection
- Bi-directional
- Full-duplex communication
- Single TCP connection


Money Play. How should Red play 11?
pips Red=94 White=84
(CorrectAnswer= 0/0, ErrorScore= 0)
The key here is to make the checkers work. Red needs his 4-pt so 6/4 seems obvious and carries very little risk. Then either 12/11, 2/1 or 2/1(2) are both OK with the other two aces.
Over the board 12/10, 6/5, 2/1 was tried but that is a surprisingly bad error. That 4-point needs to be slotted now.
Over the board 12/10, 6/5, 2/1 was tried but that is a surprisingly bad error. That 4-point needs to be slotted now.
1. Cubeful 2-ply 12/11 6/4 2/1 Eq.: +0.608 0.788 0.116 0.001 - 0.212 0.013 0.000 2. Cubeful 2-ply 6/4 2/1(2) Eq.: +0.603 (-0.005) 0.786 0.116 0.001 - 0.214 0.014 0.000 3. Cubeful 2-ply 12/10 2/1(2) Eq.: +0.591 (-0.017) 0.787 0.100 0.001 - 0.213 0.012 0.000 4. Cubeful 2-ply 12/9 2/1 Eq.: +0.582 (-0.026) 0.785 0.096 0.001 - 0.215 0.011 0.000 5. Cubeful 2-ply 12/11 6/5 2/1(2) Eq.: +0.579 (-0.029) 0.786 0.089 0.001 - 0.214 0.010 0.000


Documentation for Dashboard
Index
- Introduction
- Hosting Dashboard yourself
- Configuring Dashboard
- Customize registration information
- Adding links to the header menus
- Access the API from your application server
- Localization
- Storage backends
- Storage caching
- Logging
- Dashboard modules
- Creating modules for Dashboard
- Testing
- Github repository
- NPM package
Introduction
Web applications often require coding a user account system, organizations, subscriptions and other 'boilerplate' again and again.
Dashboard packages everything web apps need into reusable, modular software. It runs separately to your application so you have two web servers instead of one, and Dashboard fuses their content together to provide a single website or interface for your users. To get started your web app just needs a /
for guests and /home
for signed in users.
| Application | Dashboard | + modules |
|---|---|---|
| / | /account | /account/... |
| /home | /administrator | /administrator/... |
Dashboard uses a template.html
with header, navigation and content structure. Dashboard and modules use HTML pages and CSS for all the functionality users need. Your application server can serve two special CSS files at /public/template-additional.css
and /public/content-additional.css
to theme the template and pages to match your application design. Dashboard assumes you must be signed in to access any URL outside of /
and /public/*
.
Your application server can return special HTML attributes and tags to interoperate with the Dashboard server. Your content can be accessible to guests by specifying <html data-auth="false">
and you can serve full-page content by specifying <html data-template="false">
in your HTML.
You can inject HTML snippets into the template by including <template id="head"></template>
in your content or populate the template's navigation bar by including <template id="navbar"></template>
with the links and any other HTML for your menu.
Hosting Dashboard yourself
Dashboard requires NodeJS 12.16.3
be installed.
$ mkdir my-dashboard-server
$ cd my-dashboard-server
$ npm init
$ npm install @userdashboard/dashboard
$ echo "require('@userdashboard/dashboard').start(__dirname)" > main.js
$ node main.js
Configuring Dashboard
Dashboard is configured with a combination of environment variables and hard-coded settings in your package.json
:
{
"dashboard": {
"title": "Title to place in Template",
"modules: [
"@userdashboard/organizations",
"@userdashboard/stripe-connect"
],
"server": [
"/src/to/script/to/run/receiving/requests.js"
],
"content": [
"/src/to/script/to/modify/content.js"
],
"proxy": [
"/src/to/script/to/modify/proxy/requests.js
],
"menus": {
"administrator": [
{
"href": "/administrator/your_module_name",
"text": "Administrator link",
"object": "link"
}
],
"account": [
{
"href": "/account/your_module_name",
"text": "Account link",
"object": "link"
}
]
}
}
}
| Attribute | Purpose |
|---|---|
| title | Template header title |
| modules | Activates the installed modules |
| menus | Add links to header menus |
| proxy | Include data in requests to your server |
| content | Modify content before it is served |
| server | Modify requests before they are processed |
Server handlers can execute before
and/or after
a visitor is identified as a guest or user:
module.exports = {
before: async (req, res) => {
// req.account is not set
// req.session is not set
},
after: async (req, res) => {
// req.account may be set
// req.session may be set
}
}
Content handlers can adjust the template
and page
documents before they are served to the user:
module.exports = {
page: async (req, res, pageDoc) => {
// adjust page before mixing with template
},
template: async (req, res, templateDoc) => {
// page is now in `src-doc` of application iframe
}
}
Proxy handlers can add to the headers sent to your application servers:
module.exports = async (req, proxyRequestOptions) => {
proxyRequestOptions.headers.include = 'something'
}
Customize registration information
By default users may register with just a username and password, both of which are encrypted so they cannot be used for anything but signing in. You can specify some personal information fields to require in an environment variable:
REQUIRE_PROFILE=true
PROFILE_FIELDS=any,combination
These fields are supported by the registration form:
| Field | Description |
|---|---|
| full-name | First and last name |
| contact-email | Contact email |
| display-name | Name to display to users |
| display-email | Email to display to users |
| dob | Date of birth |
| location | Location description |
| phone | Phone number |
| company-name | Company name |
| website | Website |
| occupation | Occupation |
Adding links to the header menus
The account and administrator drop-down menus are created from stub HTML files placed in Dashboard, modules, and your project. To add your own links create a /src/menu-account.html
and /src/menu-administrator.html
in your project with the HTML top include.
Account menu compilation
- Your project's
package.json
and/src/menu-account.html
- Any activated module's
package.json
links or/src/menu-account.html
files - Dashboard's
package.json
and/src/menu-account.html
Administrator menu compilation
- Your project's
package.json
and/src/menu-administrator.html
- Any activated module's
package.json
links or/src/menu-administrator.html
files - Dashboard's
package.json
and/src/menu-administrator.html
Access the API
Dashboard and official modules are completely API-driven and you can access the same APIs on behalf of the user making requests. You perform GET
, POST
, PATCH
, and DELETE
HTTP requests against the API endpoints to fetch or modify data. You can use a shared secret APPLICATION_SERVER_TOKEN
to verify requests between servers, both servers send it in an x-application-server-token
header. This example fetches the user's session information using NodeJS, you can do this with any language:
const sessions = await proxy(`/api/user/sessions?accountid=${accountid}`, accountid, sessionid)
const proxy = util.promisify((path, accountid, sessionid, callback) => {
const requestOptions = {
host: 'dashboard.example.com',
path: path,
port: '443',
method: 'GET',
headers: {
'x-application-server': 'application.example.com',
'x-application-server-token': process.env.APPLICATION_SERVER_TOKEN,
'x-accountid': accountid,
'x-sessionid': sessionid
}
}
const proxyRequest = require('https').request(requestOptions, (proxyResponse) => {
let body = ''
proxyResponse.on('data', (chunk) => {
body += chunk
})
return proxyResponse.on('end', () => {
return callback(null, JSON.parse(body))
})
})
proxyRequest.on('error', (error) => {
return callback(error)
})
return proxyRequest.end()
})
}
Storage backends
Dashboard by default uses local disk, this is good for development and under some circumstances like an app your family uses, but generally you should use any of Redis, PostgreSQL, MySQL, MongoDB or S3-compatible for storage.
| Name | Description |
|---|---|
| File system | For development and single-server apps |
| @userdashboard/storage-s3 | Minimum speed and minimum scaling cost |
| @userdashboard/storage-mysql | Medium speed and medium scaling cost |
| @userdashboard/storage-mongodb | Medium speed and medium scaling cost |
| @userdashboard/storage-postgresql | Medium speed and medium scaling cost |
| @userdashboard/storage-redis | Maximum speed and maximum scaling cost |
You can activate a storage backend with an environment variable. Each have unique configuration requirements specified in their readme files.
$ STORAGE=@userdashboard/storage-mongodb \
MONGODB_URL=mongodb:/.... \
node main.js
Storage caching
You can complement your storage backend with optional caching, either using RAM if you have a single instance of your Dashboard server, or Redis if you need a cache shared by multiple instances of your Dashboard server.
| Name | Description |
|---|---|
| NodeJS | For single-server apps |
| @userdashboard/storage-cache-redis | For speeding up disk-based storage |
You can optionally use Redis as a cache, this is good for any storage on slow disks.
$ CACHE=@userdashboard/storage-cache-redis \
CACHE_REDIS_URL=redis:/.... \
node main.js
If you have a single Dashboard server you can cache within memory:
$ CACHE=node \
node main.js
Logging
By default Dashboard does not have any active console.*
being emitted. You can enable logging with LOG_LEVEL
containing a list of valid console.* methods.
$ LOG_LEVEL=log,warn,info,error node main.js
Override Dashboard's logging by creating your own log.js
in the root of your project:
module.exports = (group) => {
return {
log: () => {
},
info: () => {
},
warn: () => {
}
}
}
Dashboard modules
Dashboard is modular and by itself it provides only the signing in, account management and basic administration. Modules add new pages and API routes for additional functionality.
| Name | Description |
|---|---|
| @userdashboard/localization | Specify language or allow users to select |
| @userdashboard/maxmind-geoip | IP address-based geolocation by MaxMind |
| @userdashboard/organizations | User created groups |
| @userdashboard/stripe-connect | Marketplace functionality by Stripe |
| @userdashboard/stripe-subscriptions | SaaS functionality by Stripe |
Modules are NodeJS packages that you install with NPM:
$ npm install @userdashboard/stripe-subscriptions
You need to notify Dashboard which modules you are using in package.json
conffiguration:
"dashboard": {
"modules": [
"@userdashboard/stripe-subscriptions"
]
}
If you have built your own modules you may submit a pull request to add them to this list.
Dashboard modules are able to use their own storage and cache settings:
$ SUBSCRIPTIONS_STORAGE=@userdashboard/storage-postgresql \
SUBSCRIPTIONS_DATABASE_URL=postgres://localhost:5432/subscriptions \
ORGANIZATIONS_STORAGE=@userdashboard/storage-postgresql \
ORGANIZATIONS_DATABASE_URL=postgres://localhost:5433/organizations \
STORAGE=@userdashboard/storage-redis \
REDIS_URL=redis://localhost:6379 \
node main.js
Creating modules for Dashboard
A module is a NodeJS application with the same folder structure as Dashboard. When Dashboard starts it scans its own files, and then any modules specified in the package.json
to create a combined sitemap of UI and API routes. You can browse the official modules' source to see examples.
$ mkdir my-module
$ cd my-module
$ npm install @userdashboard/dashboard --no-save
# create main.js to start the server
# create index.js optionally exporting any relevant API
# add your content
$ npm publish
The "--no-save" flag is used to install Dashboard, this prevents your module from installing a redundant version of Dashboard when it is being installed by users.
When your module is published users can install it with NPM:
$ npm install your_module_name
Modules must be activated in a web app's package.json
:
dashboard: {
modules: [ "your_module_name" ]
}
These paths have special significance:
| Folder | Description |
|---|---|
/src/www |
Web server root |
/src/www/public |
Static assets served quickly |
/src/www/account |
User account management pages |
/src/www/account/YOUR_MODULE/ |
Your additions (if applicable) |
/src/www/administrator |
Administration pages |
/src/www/administrator/YOUR_MODULE/ |
Your additions (if applicable) |
/src/www/api/user |
User account management pages |
/src/www/api/user/YOUR_MODULE/ |
Your additions (if applicable) |
/src/www/api/administrator |
Administration APIs |
/src/www/api/administrator/YOUR_MODULE/ |
Your additions (if applicable) |
/src/www/webhooks/YOUR_MODULE/ |
Endpoints for receiving webhooks (if applicable) |
Content pages may export before
, get
for rendering the page and post
methods for submitting HTML forms. API routes may export before
, get
, post
, patch
, delete
, put
methods. If specified, the before
method will execute before any verb
.
Guest-accessible content and API routes can be flagged in the HTML or NodeJS:
# HTML
<html auth="false">
# NodeJS API route
{
auth: false,
get: (req) = > {
}
}
Content can occupy the full screen without the template via a flag in the HTML or NodeJS:
# HTML
<html template="false">
# NodeJS page handler
{
template: false,
get: (req, res) = > {
}
}
Testing
Dashboard's test suite covers the API
and the UI
. The API
tests are performed by proxying a running instance of the software. The UI
tests are performed with puppeteer
remotely-controlling Chrome
to browse a running instance of the software. These tests are performed using each storage type.
Modules are tested by creating a running instance of Dashboard
configured with the module. They run both Dashboard and their own test suites using each storage type.
Storage engines are tested by creating a running instance of Dashboard
with the Organizations
module. Each storage engine is tested as being the only storage shared by both Dashboard and the Organizations module, being just Dashboard storage, being just the module storage, and being both Dashboard and module storage each with their own database.
The tests are all run via Github Actions when pushing to a repository. You can browse their configuration in the YML
files in the .github
folder. Github Actions can be run locally with this software. Some of the workflows publish to NPM and commit changes back to Github, which will not work for you locally.
The documentation site is built by running Dashboard and module test suites, with flags that save API responses and UI screenshots.
Support and contributions
If you have encountered a problem post an issue on the appropriate Github repository.
If you would like to contribute check Github Issues for ways you can help.
For help using or contributing to this software join the freenode IRC #userdashboard
chatroom - Web IRC client.
License
This software is licensed under the MIT license, a copy is enclosed in the LICENSE
file. Included icon assets and the CSS library pure-min
is licensed separately, refer to the icons/licenses
folder and src/www/public/pure-min.css
file for their licensing information.
Copyright (c) 2017 - 2020 Ben Lowry
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


| Edition 2019-20 Edition 2020-21 |
© Uwe Thümmel, 2010.
A model of technology adaptation according to Peyton Young, Social Dynamics: Theory and applications, Handbook of Computational Economics, Vol. 2, L. Tesfatsion, K.L. Judd (eds.), Elsevier, 2006, 1081-1108
There are two technologies, green and red. Agents are represented by patches. The color of a patch indicates the technology used by an agent. Initially, each agent is endowed with one of the technologies. Each period an agent is picked at random. She then decides on her technology in the next period by choosing a random sample of n other agents and comparing expected payoffs for the two technologies. (Coordination game)
This section could explain how to use the model, including a description of each of the items in the interface tab.
This section could give some ideas of things for the user to notice while running the model.
Random perturbations: At each period an agent either chooses a technology randomly with probability p, or plays a best response as in the standard model with probability 1-p.
Spatial adaptation: Instead of choosing a sample of n agents randomly, an agent compares her technology with the 8 neighboring agents.
This section could give some ideas of things to add or change in the procedures tab to make the model more complicated, detailed, accurate, etc.
This section could point out any especially interesting or unusual features of NetLogo that the model makes use of, particularly in the Procedures tab. It might also point out places where workarounds were needed because of missing features.
This section could give the names of models in the NetLogo Models Library or elsewhere which are of related interest.
A model of technology adaptation according to Peyton Young, Social Dynamics: Theory and applications, Handbook of Computational Economics, Vol. 2, L. Tesfatsion, K.L. Judd (eds.), Elsevier, 2006, 1081-1108
By Uwe Thuemmel<EMAIL_ADDRESS>University of Utrecht


Mum shares brilliant 'unicorn potion' trick to get kids to take their medicine
Any parent will know that getting a picky child to take their medicine is no easy feat.
So any sneaky tricks to help the healing along get a free pass.
Rachael Begley came up with a pretty genius way to get her daughters to gulp down their medicine, using just sprinkles and some imagination.
When Rachael’s daughters Anna, three, and Rosa, 16 months, were struck down with tonsilitis, Rachael struggled to give them the week-long course of ‘horrible-smelling’ antibiotic medicine they were prescribed to take four times a day.
After unsuccessful attempts disguising the medicine in yoghurts and juice, Rachael, 27, spotted a jar of cake toppers she’d stashed in a cupboard.
She tipped a load of the hundreds and thousands over the medicine to turn it into what she calls ‘unicorn potion’.
Advertisement Advertisement
Anna happens to love unicorns, so while she was initially suspicious she was quickly convinced to give it a go.
After a cautious taste she declared the potion was ‘great’.
Rachael shared the hack with her friends and then on her blog, Mummy Looks Funny, where it was flooded with comments from grateful parents.
The post, which has received more than 23,000 likes, shares and comments, reads: ‘Parent hack of the century.
‘My friend messaged me asking what it is that I do to get my kids to take medication if they are sick.
‘So I told her. She was mind blown. This sh*t works. I’m talking ANY MEDICINE.
‘Seeing as kids are germ infested and there’s a plethora of sickness going round at the minute I’ll share with you the hack that I dreamed up last year when I was at my wits end trying to get a tantruming toddler to get up off the floor and take a vile yellow antibiotic.
‘What you do is: 1. Grab your stinky medicine that your kid has been flat out refusing to take. Measure the required dose and put it on a spoon.
‘2. Grab some rainbow sprinkles. Dealers choice for the brand. I’m a high roller so we have Tesco own make.
‘3. Sprinkle the sprinkles onto the spoonful of previously repulsive liquid.
‘BAM! You now have yourself some delicious and magical unicorn potion.’
Advertisement Advertisement
Parents will need to make sure they sell the illusion, mind you. No kid will believe you’re giving them something magical if you offer up a half-hearted story about its powers.
This is unicorn potion. Treat it with the respect and wonder it deserves.
Rachael, from Belfast, said: ‘Last Christmas Anna and baby Rosa got really sick with bad tonsilitis.
‘Both of them were so sick and were prescribed medicine to take – it smelled horrible.
‘The baby was fine but because Anna was a bit older and in the terrible twos stage she just wouldn’t take it.
‘She tried it once and was just like ‘no’, I felt really bad and was thinking ‘please just take it’.
‘I was at my wit’s end and I opened the cupboard to get the syringe and the medicine.
‘I saw the sprinkles and just thought ‘ooh this could be good’ – I was just so desperate and tired.
‘I had it on the spoon and said ‘look it’s a unicorn potion, it’s great’.

Advertisement
Thankfully Rachael hasn’t needed to use the trick again, but says she now always makes sure to have sprinkles in her medicine cupboard.
‘I’d tried everything so was really pleased and relieved when this worked,’ she said. ‘It was quick, easy and painless enough – it was great.
‘Anna hasn’t needed another antibiotic since then but from now on I’m always going to have to make sure I’ve got hundreds and thousands in the medicine cupboard.
‘When it comes to hundreds and thousands, the more the better.’


{{creationDescription}}
The url fragment is a unique string for the group. If set, it generates a unique page from which users can request to join and details about the organisation can be displayed.


A basic HTML lay out should include the following
The purpose of the HTML Tags is to let the text editor know what type of document you are drafting
The Head should contain additional information such as where to find the styling information, specific instructions for screen width, etc.
The Body portion is where you will find text and images
This is a picture of a basic html layout


 Life is stressful.
When you’re zipping from point A to B, you do not want to be distracted by the chaos of your noisy environment.
Busy people deserve to feel energized and refreshed while on the go. And they want to look good while doing so.
That’s why we created the Cocoon.

That’s why we’ve created a number of features to help you power down and power up the way you see best - creating a fully customizable relaxation experience.
Eliminate sleep interrupting light to promote droziness.
Relax to the soothing sounds of music or meditation tracks.
Remove yourself from the hustle and bustle of your environment.
Wake up gently to light simulation that imitates the sunrise.
Rest assured knowing cocoon will keep you on schedule.
Simply remove the mask to disable wake-up features.
Dawn Simulation
Wake up gradually to soothing light instead of the harshness of a blaring audio alarm. Cocoon contains 32-bit full-color LED lights programmed to emulate the color changing serenity of the rising sun.
Environmental Isolation
Crafted from cushioning foam and premium microfiber fabrics, not only is cocoon the ultimate in comfort, but it eliminates light and isolates ambient noise to help the user retreat into a relaxing environment.
Easy to Clean Fabric
The internal components of cocoon are easily removed and cleaned, ensuring you a fresh feel when you want it.
Bluetooth Integration
Control cocoon via the dedicated smartphone application to configure the device, set alarms, and play inbuilt music to relax your mind and body
An easy to use app allows you to take full control over your sleep experience.
Set alarms in any combination of three ways: dawn imitation, pulse vibration, or audio.
Listen to carefully curated audio tracks to aid relaxation such as white noise, rainstorm, and ocean waves
Sync your personal audio collection or favorite streaming service to listen to music, podcasts, or meditation tracks
Don’t take our word for it - take theirs.
Our dawn imitation feature is backed by some serious research showing its many benefits for improving quality of life.
Dawn Simulation has proven benefits for reducing the impact of seasonal affective disorder1.
Studies2 have shown that dawn simulation may be beneficial for people with changes in circardian rhythm or disorders. Dawn simulation may also protect against early morning adverse cardiovascular events3.
We are a team of engineers, designers, and entrepreneurs
with a shared vision. We believe sleep is more than the time between closing your eyes and the jarring awakening of an alarm. Sleep is an experience. Allow us to help you improve your sleep experience.


{% extends "layout.html" %}
{% block content %}
{% for job in jobs %}
Command
Command Name
Schedule
Next Run
Status
Action
Logs
{% endfor %}
{{ job.command }}
{{ job.name }}
{{ job.schedule }}
{{ job.next_run }}
{{ job.status }}


Multi-instance Reactive Chat App using Spring Boot WebFlux and Redis Pub/Sub
Scalable Java 11 Spring Boot WebFlux Chat Application to demonstrate use of Reactive Redis Pub/Sub using Reactive WebSocket Handler, without using any external Message Broker like RabbitMQ to sync messages between different instances.
Both JVM based application and Graal Native Image is supported.
The older non-reactive servlet based spring-redis-websocket application can be found in below links:
The reactive spring-boot 2.4.6 based spring-redis-websocket application can be found in below:
Deploy to Play-with-Docker
Ctrl + Click this button to deploy multiple instances of the spring-redis-websocket load balanced by NGINX:
Installation and Configuration
Pre-requisite for Java Image:
Install and run Redis locally or on Docker.
To run Redis in Docker:
$ docker run -d -p 6379:6379 -e REDIS_PASSWORD=SuperSecretRedisPassword bitnami/redis:6.0.9
Pre-requisite for Graal Native Image:
This application uses Spring Data Redis APIs which doesn’t have default Graal hints/config and graal-native image fails to run with errors.
Hence, this application is configured to use GraalVM native image tracing agent allows intercepting reflection, resources or proxy usage on the JVM by running simple Integration Tests which requires Redis.
- To run integration test which uses Redis TestContainers so Docker should be configured properly to run Testcontainers
- You also need to install GraalVM JDK and native-image component:
$ sdk install java 21.1.0.r11-grl # Using [SDKMAN](https://sdkman.io/jdks) install GraalVM distribution of JDK $ gu install native-image # Then install [native-image](https://www.graalvm.org/reference-manual/native-image) component
Clone repo:
$ git clone https://github.com/RawSanj/spring-redis-websocket.git
Build and Run the application:
Build and run the spring-redis-websocket application:
$ cd spring-redis-websocket
$ mvn clean package
$ mvn spring-boot:run
Build Graal Native Image of the application:
Build and run the spring-redis-websocket native image:
$ cd spring-redis-websocket
$ mvn -Pnative clean package -DskipNativeImage=false
$ target/spring-redis-websocket # run the executable binary
Note: Above steps are applicable for Linux only and creates linux executable binary. To create Windows executable there are few additional set-ups required, follow this Steps.
Run in Docker
Build and run the spring-redis-websocket locally in Docker:
Build the JAR file:
$ mvn clean package
Build Docker image:
$ mvn clean spring-boot:build-image
Build Graal Native Docker image:
$ mvn -Pnative clean spring-boot:build-image
Run docker image:
$ docker run -d -p 8080:8080 rawsanj/spring-redis-websocket:2.5.2-webflux # JVM based Docker Image
$ docker run -d -p 8080:8080 rawsanj/spring-redis-websocket:2.5.2-native # Graal Native Image based Docker Image
Run multiple instances using docker-compose locally
Run multiple instances of spring-redis-websocket locally load balanced via Ngnix connected to redis container in Docker:
$ cd src/main/docker
$ docker-compose up
Or try Play with Docker to quickly setup Docker and run in browser:
- Click Create Instance to quickly setup Docker host.
- Install git by running:
$ apk add git --no-cache
- Clone the repository:
$ git clone https://github.com/RawSanj/spring-redis-websocket.git
- Run multiple instances of spring-redis-websocket:
$ cd spring-redis-websocket/src/main/docker $ docker-compose up
Run in Kubernetes
Assuming you have a Kubernetes Cluster up and running locally:
$ kubectl apply -f src/main/k8s
Or try Play with Kubernetes to quickly setup a K8S cluster:
- Follow the instructions to create Kuberenetes cluster.
- Install git by running:
$ yum install git -y
- Clone the repository:
$ git clone https://github.com/RawSanj/spring-redis-websocket.git
- Run multiple instances of spring-redis-websocket load balanced by native Kubernetes Service. All instances
connected to a single Redis pod.
$ cd spring-redis-websocket $ kubectl apply -f src/main/k8s
Tech
spring-redis-websocket uses a number of open source projects:
- Spring Boot - An opinionated framework for building production-ready Spring applications. It favors convention over configuration and is designed to get you up and running as quickly as possible.
- Spring Data Redis - Spring Data Redis provides easy configuration and access to Redis from Spring applications.
- Graal Native Image - Native Image is a technology to ahead-of-time compile Java code to a standalone executable, called a native image.
- Redis - Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
- Testcontainers - Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases or anything else that can run in a Docker container.
- Bootstrap - Bootstrap is an open source toolkit for developing with HTML, CSS, and JS. Custom Bootstrap theme
- Docker - Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications.
- NGINX - NGINX is High Performance Load Balancer, Web Server, & Reverse Proxy.
- Kubernetes - Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.
License
Apache License 2.0
Copyright (c) 2022 Sanjay Rawat


Documentation
Currently viewing documentation for version 4.x.
There are some caveats to using Bootbox dialogs in place of native dialogs. Please see the Known Limitations section to learn more.
A simple alert dialog with a single button. Pressing the ESC key or clicking the close button dismisses the dialog.
This is the simplest usage of Bootbox, requiring only the text of the message you wish to show.
bootbox.alert("Your message here…")
Your message can also contain HTML.
bootbox.alert("Your message here…")
All Bootstrap modals, unlike native alerts, confirms, or prompts, generate non-blocking events. Because of this limitation, code that should not be evaluated until your user has dismissed your alert should be placed (or called) within a callback function:
bootbox.alert("Your message here…", function(){ /* your callback code */ })
Alerts can be customized, using the options described below.
bootbox.alert({
size: "small",
title: "Your Title",
message: "Your message here…",
callback: function(){ /* your callback code */ }
})
A confirm dialog with a cancel and a confirm button. Pressing the ESC key or clicking close dismisses the dialog and invokes the callback as if the user had clicked the cancel button.
Confirm dialogs require a callback function.
The simplest method of using the confirm()
dialog requires the text of the message you wish to show and a callback to handle the user's selection.
The callback function is passed a value of true or false, depending on which button the user pressed.
bootbox.confirm("Are you sure?", function(result){ /* your callback code */ })
All Bootstrap modals, unlike native alerts, confirms, or prompts, generate non-blocking events. Keep that in mind when using the confirm()
dialog, as it is not a drop-in replacement for native confirm dialogs. Any code that depends on the user's selection must be placed in the
callback function.
Confirm dialogs can be customized, using the options described below.
bootbox.confirm({
size: "small",
message: "Are you sure?",
callback: function(result){ /* result is a boolean; true = OK, false = Cancel*/ }
})
A dialog which prompts for user input. Pressing the ESC key or clicking close dismisses the dialog and invokes the callback as if the user had clicked the cancel button.
Prompt dialogs require a callback function.
The simplest usage of the prompt()
dialog requires the text of the message you wish to show and a callback to handle
the user's input. The value entered will be null if the user cancelled or dismissed
the dialog; otherwise it is passed the value of the text input.
bootbox.prompt("What is your name?", function(result){ /* your callback code */ })
All Bootstrap modals, unlike native alerts, confirms, or prompts, generate non-blocking events. Keep that in mind when using the prompt()
dialog, as it is not a drop-in replacement for native prompt dialogs. Any code that depends on the user's input must be placed in the
callback function.
Prompt dialogs can also be customized, using the options described below.
bootbox.prompt({
size: "small",
title: "What is your name?",
callback: function(result){ /* result = String containing user input if OK clicked or null if Cancel clicked */ }
})
Prompt requires the title
option (when using the options object) and disallows the message
option.
Prompt dialogs are (by default) single-line text inputs. You can modify the type of prompt Bootbox generates using the prompt-only options below.
| Name | Description |
|---|---|
| value |
You can set the initial value of the prompt using the |
| inputType |
Changes the type of input generated for the prompt dialog. Valid values for
|
| inputOptions |
If you specify
|
Please see the Examples page for more examples of prompt dialogs.
A completely customisable dialog method which takes a single argument - an options object.
Custom dialogs do not close automatically when the ESC key is pressed; you must
implement this behavior yourself using the onEscape
option.
The minimum required to create a custom dialog is the message
option, which will create a non-dismissable
dialog (useful as a "loading" overlay).
bootbox.dialog({ message: '
 Loading...
' })
Please see the Examples page for more examples of custom dialogs.
Bootbox dialogs can be configured using the options below.
| Name | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
|
message |
String | Element |
Text (or markup) displayed in the dialog. Required for alert, confirm, and custom dialogs |
||||||
| title | String | Element |
Adds a header to the dialog and places this text (or markup) in an Required for prompts |
||||||
|
callback |
Function |
Required for confirm and prompt An alert callback should not supply an argument; it will be ignored if it does:
Confirm and prompt callbacks must supply an argument for the result; for confirm, it will be
a
or
Default: |
||||||
| onEscape | Boolean | Function |
Allows the user to dismiss the dialog by hitting ESC, which will invoke this function.
Default: |
||||||
| show | Boolean |
Whether the dialog should be shown immediately. Default: |
||||||
| backdrop | Boolean |
Whether the dialog should be have a backdrop or not. Also determines whether clicking on the backdrop dismisses the modal.
Default:
* When this value is set to |
||||||
| closeButton | Boolean |
Whether the dialog should have a close button or not. Default: |
||||||
| animate | Boolean |
Animate the dialog in and out (requires a browser which supports CSS animations). Default: |
||||||
| className | String |
An additional class to apply to the dialog wrapper. Default: |
||||||
| size | String |
Adds the relevant Bootstrap modal size class to the dialog wrapper. Valid values are
Requires Bootstrap 3.1.0 or newer. Default: |
||||||
|
buttons |
Object |
Buttons are defined as JavaScript objects. The minimum shortform requirement to define a button is:
The complete definition of a button object is:
Each of the available button options can be overridden to use custom content (text or HTML) and CSS styles. For example:
You cannot override the callbacks for the alert, confirm, and prompt dialog's buttons. |
The following functions can be called on an instance of a Bootbox object.
Allows the user to supply a function to be called when the dialog gets initialized.
var dialog = bootbox.dialog({
/* Your options... */
});
dialog.init(function(){
// Do something with the dialog...
});
init
can be called on any of the wrapper functions, as they all return a Bootbox object.
The following functions can be called statically.
This method allows the user to set many of the default options shown in the dialog example. Many of these options are also applied to the basic wrapper methods and can be overridden whenever the wrapper methods are invoked with a single options argument:
Allows the user to select a locale rather than using setDefaults("locale", ...)
.
The locale settings are used to translate the three standard button labels: OK, CONFIRM, CANCEL
Default: en
Currently available:
bg_BG
br
cs
da
de
el
en
es
et
fa
fi
fr
he
hu
hr
id
it
ja
lt
lv
nl
no
pl
pt
ru
sq
sv
th
tr
zh_CN
zh_TW
Allows the user to add a custom translation for each of the built-in command buttons. The values
object should be in this format:
{
OK : '',
CANCEL : '',
CONFIRM : ''
}
Allows the user to remove a locale from the available locale settings.
Hide all currently active Bootbox dialogs. Individual dialogs can be closed as per normal Bootstrap dialogs:
dialog.modal('hide')
Using Bootbox does have some caveats, as noted below.
All Bootstrap modals, unlike native alerts, confirms, or prompts, generate non-blocking events. Because of this limitation, code that should not be evaluated until a user has dismissed your dialog should be placed (or called) within the callback function of the dialog.
This is a limitation of the Bootstrap modal plugin, as noted in the official Bootstrap documentation. While it is functionally possible to trigger multiple modals, custom CSS and/or JavaScript code is required for each layer of modal to display properly.


Course Number - ILLUS-3412-01
Michael McDermott -<EMAIL_ADDRESS>Friday 1:10 – 6:10
Prov Wash Room 001
In this course, students conceptualize, edit, design and produce either a book or the first issue of an original publication. Possibilities include: artist's book, magazine, comic book, zine, e-zine on the web, etc. Emphasis is on concept and design. We discuss editorial ideas and look at existing artists' books and publications, especially alternative forms. Using computers, we work on typography, layout and design for both print and digital mediums. Collaborations both within and outside of the class are encouraged.
You must be physically, mentally and verbally present and prepared. Punctuality is of prime importance. There are few good excuses for being late to class, try and be as early as you can. Please come to class prepared and ready to work for the entire scheduled time. Being late twice constitutes one absence, and I record attendance each class period. By RISD policy, you are allowed one excused absence, but are encouraged not to use it. You will be dropped from the course after two unexcused absences. You will also be responsible material you missed in class.
You will need to take an active role in both the presentation and discussion of your work. We will review projects in a variety of ways and you are expected to be able to talk about your own work and give feedback to your peers about their work. The ability to talk about your work and other student’s work is a very important part of your education at RISD. Use this class to improve on those skills too.
Your grade will depend on your attendance, your participation, your process, your craft, and the completion of all the projects by the end of the class. Below is a more specific breakdown.
A – Strong design process, ability to come up with many different ways to solve a problem, excellent research, mastery of form, functionality, and craftsmanship, frequent participation in critiques and discussions, strong work ethic, focused, energetic, ability to articulate ideas, resourceful.
B – Solid, well-done work, could improve on items noted in A list, in particular, better process, more solutions, better craft and attention to detail, more class participation.
C – Does average work, fulfills assignments but not much else, frequently late, little or no class participation, not willing to re-work or refine projects.
D – Limited effort, incomplete work, lack of skill and enthusiasm, chronic tardiness and unexcused absences.
This class will also incorporate some basic HTML/CSS throughout the semester. Each student will have a page on the main site as a place to document your progress on each project. The site will also provide basic information on the class in general as well as a page that lets you know what is going on and due the following class. This site will be updated weekly by the class and by me.


Mompha: Alleged fraudster sues EFCC for N5m over unlawful detention
- Alleged fraudster, Mompha has slammed the EFCC with a N5m lawsuit for unlawful detention
- The popular big boy was arrested by the anti-graft agency on allegations of cybercrime and money laundering
- Mompha has accused the EFCC of detaining him beyond the constitutionally-allowed period without being charged to court
Disgraced social media big boy, Mompha, has slammed the Economic and Financial crimes commission (EFCC), with a N5m lawsuit. He filed the fundamental rights enforcement suit alleging unlawful detention and a violation of his rights.
Recall Legit.ng had earlier published the news of how the social media celebrity and big money spender, caused quite a stir on social media after he was arrested by the Economic Financial Crimes Commission (EFCC), on allegations bordering on internet fraud.
In his suit filed before the Lagos state High Court Igbosere by his counsel, Gboyega Oyewole SAN, Mompha accused the EFCC of detaining him beyond the constitutionally-allowed period without being charged to court.
Fake News! EFCC denies alleged plans to unfreeze Patience Jonathan’s assets
PAY ATTENTION: Personal letter from the Editor-in-Chief of Legit.ng (former NAIJ.com)
He stated that the remand order the EFCC obtained to keep him in their custody since his arrest has expired and the agency has refused to charge him to court. He has asked the court to award N5m against the EFCC. The court is yet to fix any date to hear the case.
PAY ATTENTION: Get the Latest Nigerian News on Legit.ng News App
In a recent development, about three accomplices of the individual have also been nabbed by officials of the anti-graft agency in Lagos. According to reports by The Nation, one of Mompha’s accomplices is a Lebanese identified as Hamza Koudeih. The individual was arrested over the weekend in his luxury home situated at the Eko Atlantic Pearl Tower, Victoria Island, Lagos.
PAY ATTENTION: Do you have news to share? Contact Legit.ng instantly
Drama as convicted fraudster masterminds $1m scam from Kirikiri prison
Would you accept money from a Yahoo boy? - Nigerians react | Legit TV


{% extends 'layouts/base.html' %}
{% import 'room_request/macros.html' as room_request_macros %}
{% import 'macros/form_macros.html' as f %}
{% set patient_info_endpoint = 'room_request.manage' %}
{% set contact_info_endpoint = 'room_request.requester_info' %}
{% set guest_info_endpoint = 'room_request.guest_info' %}
{% set room_occupancy_info_endpoint = 'room_request.room_occupancy_info' %}
{% set comments_endpoint = 'room_request.comments' %}
{% set edit_endpoint = 'room_request.edit' %}
{% set transfer_endpoint = 'room_request.transfer' %}
{% set delete_endpoint = 'room_request.delete' %}
{% set view_endpoints = [
(patient_info_endpoint, 'Patient details'),
(contact_info_endpoint, 'Contact information'),
(room_occupancy_info_endpoint, 'Room occupancy needs'),
(guest_info_endpoint, 'Guest information'),
] %}
{% set manage_endpoints = [
(comments_endpoint, 'Comments'),
(edit_endpoint, 'Edit request'),
(delete_endpoint, 'Delete request'),
(transfer_endpoint, 'Approve request'),
] %}
{% macro navigation(view_endpoints, manage_endpoints, room_request) %}
{% endmacro %}
{% macro contact_info(room_request) %}
Contact Information
| First Name | {{ room_request.first_name }} |
| Last Name | {{ room_request.last_name }} |
| Email | {{ room_request.email }} |
| Relationship to Patient | {{ room_request.relationship_to_patient }} |
| Address |
{{ room_request.address_line_one }} {{ room_request.address_line_two }}
{{ room_request.city }}, {{ room_request.state }}, {{ room_request.zip_code }}, {{ room_request.country }}
|
| Primary Phone | {{ room_request.primary_phone }} |
| Secondary Phone | {{ room_request.secondary_phone }} |
| Primary Language | {{ room_request.primary_language }} |
| Secondary Language | {{ room_request.secondary_language }} |
| Requested Before | {{ 'Yes' if room_request.previous_stay else 'No' }} |
| Additional Comments | {{ room_request.comments }} |
{% endmacro %}
{% macro patient_info(room_request) %}
| First Name | {{ room_request.patient_first_name }} |
| Last Name | {{ room_request.patient_last_name }} |
| Date of Birth | {{ room_request.patient_dob }} |
| Gender | {{ room_request.patient_gender }} |
| Hospital | {{ room_request.patient_hospital }} |
| Hospital Department | {{ room_request.patient_hospital_department }} |
| Diagnosis | {{ room_request.patient_diagnosis }} |
| Treatment Description | {{ room_request.patient_treatment_description }} |
| First Appointment Date | {{ room_request.patient_first_appt_date }} |
| Check-in Date | {{ room_request.patient_check_in }} |
| Check-out Date | {{ room_request.patient_check_out }} |
| Treating Doctor | {{ room_request.patient_treating_doctor }} |
| Treating Doctor Phone | {{ room_request.patient_doctors_phone }} |
| Social Worker | {{ room_request.patient_social_worker }} |
| Social Worker Phone | {{ room_request.patient_social_worker_phone }} |
| Inpatient/Outpatient | {{ room_request.inpatient }} |
| Inpatient Stay | {{ 'Yes' if room_request.inpatient_prior else 'No' }} |
| Vaccinated | {{ 'Yes' if room_request.vaccinated else 'No' }} |
{% endmacro %}
{% macro room_occupancy_info(room_request) %}
| Wheelchair Access | {{ 'Yes' if room_request.wheelchair_access else 'No' }} |
| Full Bathroom | {{ 'Yes' if room_request.full_bathroom else 'No' }} |
| Pack & Play | {{ 'Yes' if room_request.pack_n_play else 'No' }} |
{% endmacro %}
{% macro guest_info(room_request) %}
Guest Information
| Name |
Relationship to Patient |
Date of Birth |
Email |
Guardian? |
{% for guest in room_request.guests %}
| {{ guest.name }} |
{{ guest.relationship_to_patient }} |
{{ guest.dob }} |
{{ guest.email }} |
{{ 'Yes' if guest.guardian else 'No' }} |
{% endfor %}
{% endmacro %}
{% macro delete_request(room_request) %}
{% endmacro %}
{% macro comments(room_request) %}
{% set flashes = {
'post': get_flashed_messages(category_filter=['form-post']),
} %}
{{ f.begin_form(activity_form, flashes) }}
{{ f.render_form_field(activity_form.body) }}
{{ f.render_form_field(activity_form.submit) }}
{{ f.end_form()}}
{# Use overflow-x: scroll so that mobile views don't freak out
# when the table is too wide #}
| Created By |
Comment |
Time |
{% for comment in comments_all %}
| {{ comment.user.first_name }} {{ comment.user.last_name }} |
{{ comment.text }} |
{{ comment.created_at.strftime('%d-%m-%Y') }} at {{ comment.created_at.strftime('%I:%M:%S') }} |
{% endfor %}
{% endmacro %}
{% macro transfer(room_request) %}
transfer
{% endmacro %}
{% block content %}
{{ navigation(view_endpoints, manage_endpoints, room_request) }}
{% if request.endpoint == patient_info_endpoint %}
{{ patient_info(room_request) }}
{% elif request.endpoint == contact_info_endpoint %}
{{ contact_info(room_request) }}
{% elif request.endpoint == room_occupancy_info_endpoint %}
{{ room_occupancy_info(room_request) }}
{% elif request.endpoint == guest_info_endpoint %}
{{ guest_info(room_request) }}
{% elif request.endpoint == comments_endpoint %}
{{ comments(room_request) }}
{% elif request.endpoint == edit_endpoint %}
{{ room_request_macros.render_form(form) }}
{% elif request.endpoint == delete_endpoint %}
{{ delete_request(room_request) }}
{% elif request.endpoint == transfer_endpoint %}
{{ transfer(room_request) }}
{% endif %}
{% endblock %}


method of static class JsNgram
Description
Rebuild an array of raw results of json indexes loaded.
Sort by document and N-gram key preparing for matching.
Count the number of hits and put it in the property work
as an array of [hits, documents]
.
Example
JsNgram.sortResultsByLocation(results);
Usage
sortResultsByLocation(results);
Argument results is an array of json indexes.
The sequence must be by the N-gram key number.
The output format is for the method findPerfection
and sortFoundByDocumentPosition
.
The output format is:
{ document id: { N-gram key number: [position, position, position, ... ], N-gram key number: [position, position, position, ... ], N-gram key number: [position, position, position, ... ] }, document id: { N-gram key number: [position, position, position, ... ], N-gram key number: [position, position, position, ... ] } }
In above notation, N-gram key number is a sequence number of each N-gram key. For example, for searching "alice", following four N-gram keys are generated: "al", "li", "ic" and "ce" with the N-gram key number is 0, 1, 2 and 3, respectively.


{include file="public/header" } {include file="public/nav" } {include file="public/banner_b" }
Please complete the form information
Submitted successfully, please wait


Hong Kong Open postponed due to anti-government protests
The European Tour has released a statement today, adding that they hope to reschedule for early next year.
by AFPNEXT WEEK’S HONG Kong Open, one of the biggest golf tournaments in Asia, has been postponed following months of anti-government protests in the city.
“Regretfully the European Tour, in conjunction with our tournament co-sanctioning partner at the Asian Tour, has taken the decision to postpone next week’s Hong Kong Open,” a European Tour statement said.
European Tour chief executive Keith Pelley said he hoped the event, whose winners include Rory McIlroy, Colin Montgomerie and Peter Thomson, could be rescheduled for early next year.
“The decision has been taken due to the ongoing level of social unrest in Hong Kong,” Pelley said.
As the safety of our players, staff, stakeholders and everyone involved in each and every one of our tournaments around the world is our top priority, we feel this is the correct, but unfortunate, course of action.”
Asian Tour commissioner and CEO Cho Minn Thant said: “It is regrettable that the Hong Kong Open has to be postponed due to the ongoing unrest in the city.
“The unpredictability of the current situation in Hong Kong makes it very challenging to sanction the tournament especially with the safety of everyone of utmost importance.
“However, we are optimistic that once the situation in Hong Kong stabilises, we will be in a better position to sanction the 61st edition of the Hong Kong Open in the very near future.”


this is the history of the band gorillaz and thier 4 integrants noodle,2-D (stuart),murdock and russel, the content of this page is in the book the rise of the ogre which tells the story of the band.
this is the history of the band gorillaz and thier 4 integrants noodle,2-D (stuart),murdock and russel, the content of this page is in the book the rise of the ogre which tells the story of the band.
the history of the band begins with murdoc who was looking to form a band to realize his dream of achieving fame, but he needs to have members and even more important instruments, one day he decides to rob a store of musical instruments, and in his flight he runs over stuart tusspot , who loses an eye and remains in a vegetative state, as punishment for his crime is left in charge of stuart's care, one day murdoc in his boredom decides to play with his car while stuart is with him, but an accident arises and stuart is thrown from the car, as a result of this accident he loses his other eye but wakes up from the coma, from that moment he is nicknamed as 2-D (due to his two accidents). murdoc realizes his voice and that he has talent, and decides to put the band together with 2-D (voice) and his girlfriend paula Cracker (guitar), russel (drummer) who works with paula in a music store and he as a bass player, after some rehearsals a problem arises with murdoc and paula who made 2-D unfaithful, as a result of this russel hits murdoc and breaks his nose, paula after that they kicked her out of the group and From a FedEx package from Japan a girl arrives with a gift for the guitar but she did not know how to speak English so they nicknamed her noodles because it was the only word she knew how to say in English and she said it when she was hungry, so the road to this band,The switch had been activated,Gorillaz lived!.
The band's first release was Tomorrow Comes Today, released in 2002 but it would be until their first single, Clint Eastwood, that the band would be recognized worldwide. In Clint Eastwood's video, Russell is possessed by an entity, this spirit named Del is his best friend, the New York native drummer who lost all his friends when a gang shot them while driving. To protect him, his family sent him to England, but his spirits decided to stay in the body of russel some time later they managed to get them out, except for Del who had a talent for rap and in the video he is totally demonstrated. Later that month, their first album, Gorillaz, was released, producing four singles: Clint Eastwood, 19-2000, Tomorrow Comes Today, and Rock the House. "19-2000 (Soulchild Remix),Having great popularity, Gorillaz would have its first antagonist named Dr. Wurzel He is best known for the theft of the Murdoc trailer, as seen in video 19-2000. When she stole Murdoc's trailer, I took several photos of her in different places. He also leaked a single from the band that would later be on the G-Sides album. In late 2001, Murdoc and the authorities found the Dr. to return the trailer to him, and after that they took him to court to go to prison. After all this, and a couple of concerts, the band would take a temporary break, concluding the First Phase (Gorillaz).
The group broke up for a time: Murdoc went to Mexico and was arrested for passing false checks to prostitutes at a brothel in Tijuana. He enjoyed his short jail term alongside his raven Cortez - whom he met there - and two Mexican gangsters who would later help him escape. In prison he got a tattoo and won the title of "Dr. Niccals ”. 2D returned home and worked in an amusement park that his uncle had, in bumper cars, where he tried to lead a more or less calm life and where he tried to get used to his new popularity among girls.


Clan Level:
8
-
Cost:
150 Dontor Coins
Clan Level:
9
-
Cost:
400 Dontor Coins
Clan Level:
10
-
Cost:
650 Dontor Coins
Clan Level:
11
-
Cost:
900 Dontor Coins


Export reviewer votes
Proposal Votes Dashboard
{% for section_items in proposals %}
{% if section_items.proposals %}
{% include 'proposals/partials/proposal-list--votes-dashboard.html' with proposals=section_items.proposals title=section_items.section display_status=False %}
{% endif %}
{% endfor %}
{% endblock %}


{{grades[report.grade].letter}}
{{grades[report.grade].comment}}
Your test took {{report.summary.comparation.value}}% {{report.summary.comparation.key}} to finish than the typical cSpeed user worldwide,
and {{report.region.comparation.value}}% {{report.region.comparation.key}} to finish than the typical cSpeed user in {{user_ip.city}}.
Your test took {{report.summary.comparation.value}}% {{report.summary.comparation.key}} to finish than the typical cSpeed user worldwide.
Across tests run in {{user_ip.city}}, those using the {{report.region.fastest}} network
(like yourself) finish the test fastest.
Across tests run in {{user_ip.city}}, those using the {{report.region.fastest}} network
finish the test fastest, typically finishing {{report.region.fastestComparation.value}}% faster than {{user_ip.isp}} users.


Default
Home
Profile
Disabled
Dropdown
Action
Another action
Something else here
Separated link
Material Design for Bootstrap
Getting Started
Checkbox
Radio Button
Toggle Button
Input
File Input
Navbar
Progress Bar
Slider
Dropdown (Work in progress)
Dropdown Menu
Dialog


The I2P brand assets are included here. Use them responsibly.
Default Download SVG
White Download SVG
Default
White
Download SVG and PNG files
Identihub Project


Alias
{{ application.Alias }}
Description
{{ application.Description }}
Business Overview
| Attribute |
Value |
| SSO |
{{ application.SSO }} |
| 2 Letter Office |
{{ application.Owner }} |
| Business POC |
|
| Related Investment |
{{ application.Investment||"None Provided" }} |
| Revenue Generator |
{{ application.IsRevenueGenerator }} |
| Application ID |
{{ application.OMBUID }} |
| Status |
{{ application.Status }} |
| Production Year |
{{ application.ProdYear }} |
Business Application Roadmap
Related Business Capabilities
Technical Overview
| Attribute |
Value |
| Technical POC |
|
| Hosting Provider |
{{ application.HostingProvider }} |
| Cloud |
{{ application.Cloud }} |
| Technology Platform |
{{ application.TechnologyPlatform }} |
| Parent System |
{{ application.System }} |
| FISMA System |
{{ application.FISMASystem }} |
Related Technology


Similar Song Networks
Song
You Can Call Me Al
Sledgehammer
Poker Face
Jolene
Helplessness Blues
She Said She Said
Short Skirt, Long Jacket


{% extends "layout.html" %} {% block title %} Market Offer {% endblock %} {% block body %}
This is what trading is all about.


Experience
The State News
Creative Department Manager/Graphic Designer
2011-Present
Design advertisements for clients for print and web displays
Create in-house campaigns, promotions, and special section fronts
Proof ads for print and web & prepare the newspaper for print
Manage a group of other student designers on daily tasks
Zeeland East High School Yearbook
Art Director and Layout Editor
2009-2011
Create Cover, Endsheets, and Divisions of Yearbook
Design various feature spreads and page templates
Manage Yearbook Staff
Proof and edit pages
Education
Michigan State University
B.A. Candidate, 2014
Media and Information
Specialization in Design
Deans List
Technical Skills
Illustrator
Photoshop
InDesign
HTML & CSS
Javascript
Flash
Honors & Awards
Honorable Mention in 2012 Associated Collegiate Press Advertising Awards
Award of Excellence for Best Display Web Ad—The State News
Winner of 2010 Yearbook Excellence Award—Balfour Yearbooks & Quill and Scroll Honor Society
Honorable Mention in 2010 Adobe/Jostens Yearbook Design Contest
National Honor Society


ONLINE FOOD PORTAL
fill up the form
Email address
We'll never share your email with anyone else.
Password
Check me out
Submit


|
this was sent to me:
Click the link below to view it now:
An Alarming video every Westerner should see Anyone entertaining ideas of western democracies establishing friendly relations with the radicals of the Islamic world should watch this video.While watching the inflammatory rhetoric of the speaker, remember that this is not a Jihadists from Iran but a professor from Kuwait - a country with every reason to be grateful to the USA for liberating it from the tyranny of Saddam Husseins invasion. Windows Live™: Keep your life in sync. Check it out. |


I am an aspiring Frontend Web Developer with interests
user interfacess and cyber security.
I decided to turn my coding hobby into a career when I discovered
the potential of web technologies in relevent courses at the University of Rochester.
Since then I have gone through serveral frontend technology tutorials, a few
backend tutorials (MySQL and PHP), undertook a four month course on SDLC,
maunal, and automated testing scripts, and a frontend development bootcamp. I am currently studying to take the CompTIA A+ Certification Exam.
Social Media


Use SpotMySpotify to discover and stream a constantly expanding mix of music from emerging and major artists around the world.


BooksOnScience
A library for you !
1-2 Stars
3 Stars
4-5 Stars
Category
Book Title
Author
Icons made by Freepik from www.flaticon.com


module swap_module implicit none public :: swap private :: swap_reals, swap_integers interface swap procedure swap_reals, swap_integers end interface contains elemental subroutine swap_reals (a, b) real, intent (in out) :: a, b real :: temp temp = a a = b b = temp end subroutine swap_reals elemental subroutine swap_integers (a, b) integer, intent (in out) :: a, b integer :: temp temp = a a = b b = temp end subroutine swap_integers end module swap_module program test_swap_arrays use swap_module implicit none integer, dimension (3) :: & i = [1, 2, 3], & j = [7, 8, 9] print *, "[*] The array i is: ", i print *, "[*] The array j is: ", j print *, "[*] Now calling swap...." call swap(i, j) print *, "[*] After swapping, the array i is: ", i print *, "[*] After swapping, the array j is: ", j end program


I currently study at Sandwell Campus, a college that is based in West Bromwhich of the West Midlands, UK. The course I am studying is Website Development Level 2, which covers Multimedia Product Development, IT Networking, Employability and the Online World.
Multimedia
My multimedia course covers the process of designing a product for a specific audience, designing the product to suit a specific purpose aswell as provides information on how a product can be improved and testing. Furhtermore it provides information on what assets can be used in a digital product.
The multimedia unit of my college studies is the most vital part of the course as it aims to improve your production skills in the real world, covering the fundamentals of product design and usability.
In my multimedia lessons, we had to go through the process of designing and producing products, one of them being a presentation for schools that was targeted at staying healthy. We had to develop one interactive and one non-interactive product, so for the interactive one I decided to make a simple pacman-like game which required the player to eat the healthy food:
Before I was able to create the product, I had to go through the process of planning what assets to use, what the layout should be like etc.
During the process of developing a product, we (me and the class) are expected to go through a few stages before making a product, those being the following:
Ideas
Research
Plan/Design
Once these stages are complete and we are happy with our designs, we progress onto making the product which will be evaluated later on.
Networking
One of the 2nd most important topics of this course is being able to understand the computer networking topologies, which is a big deal when it comes to todays Business IT sector as it allows computers to interact with one another. Throughout the course we were informed of networking subjets, routers, switches, firewalls, routers and other fundamentals such as types of cables and connectors, e.g. CAT5, RJ45 etc.
One of the tasks that we were assigned during this unit was to make a functional Windows-Based network that allowed computers to access a shared resource with different user accounts and group policies. Of course, for me this was an easy subject as I have networking experience from my Robotics project and Webserver project.
IT networking and security is fundamental in this area of computing and is a must for any Administrator or website producer as it is the magic that allows a computer to interconnect with one another, allowing people to access websites and information.
The task I was assigned was fairly straight forward as Microsoft provide both GUI and CLI methods of creating and managing a computer network. In the scenario I was provided, I had to create a star topology network which required the following devices:
Ethernet cable with RJ45 connector
Router
3 computers/laptops with RJ45 Ethernet ports.
That was pretty much all the hardware requireed to produce this simple network, everything else was created through software. Here is some of the commands that I used for configuring the network and the devices connected to it:
After configuring the network and things such as homegroup, I was able to share resources with the other computers on the network and even mount them as virtual drives:


CreateWater()
Syntax
CreateWater(#Camera, x, y, z, Transparency, Flags)Description
Creates a water plane at the given position.
Parameters
#Camera The camera to use. x, y, z The absolute coordinates where the water plane has to be created. Transparency Sets the whole water transparency, from 0 (fully opaque) to 255 (transparent). Flags Can be a combination of the following constants: #PB_World_WaterMediumQuality: medium quality (default). #PB_World_WaterLowQuality : low quality, which means less polygons (but faster rendering). #PB_World_WaterHighQuality : high quality, which means more polygons (but slower rendering). #PB_World_WaterCaustics : Enable the water caustics effects, which are small patterns created by the light on the water surface. #PB_World_WaterSmooth : Enable smooth wave transition. #PB_World_WaterFoam : Enable foam effect, which affect underwater objects when viewed out of the water plane. #PB_World_WaterSun : Enable sun reflection on water. To control the sun position and color, use Sun(). #PB_World_UnderWater : Activate an underwater effect, to have opaque underwater. #PB_World_WaterGodRays : Activate sun god rays rendering when being underwater. #PB_World_WaterSun has to be specified.
Return value
None.
See Also
FreeWater()
Supported OS
All