Copyright 2009 Applied Research in Patacriticism and the University of Virginia
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Exhibit capabilities
# File app/models/group.rb, line 145 def self.can_change_license(exhibit) return true if exhibit.group_id == nil || exhibit.group_id == 0 group = Group.find(exhibit.group_id) return group.license_type == nil || group.license_type == 0 end
# File app/models/group.rb, line 151 def self.can_change_styles(exhibit) return true if exhibit.group_id == nil || exhibit.group_id == 0 group = Group.find(exhibit.group_id) return group.use_styles != 1 end
# File app/models/group.rb, line 56 def self.can_read(thread, user_id) return true if thread.group_id == nil group = Group.find(thread.group_id) return group.can_read_forum(user_id) end
# File app/models/group.rb, line 426 def self.friendly_permissions() return [ 'Private Discussion', 'Public Discussion', 'Open Discussion'] end
# File app/models/group.rb, line 493 def self.friendly_show_exhibits() return [ 'Show all', 'Show clusters only', 'Show exhibits only' ] end
# File app/models/group.rb, line 435 def self.friendly_to_permission(permissions) return self.permissions[0] if self.friendly_permissions()[0] == permissions return self.permissions[1] if self.friendly_permissions()[1] == permissions return self.permissions[2] if self.friendly_permissions()[2] == permissions return "" end
# File app/models/group.rb, line 502 def self.friendly_to_show_exhibits(permissions) return self.show_exhibits[0] if self.friendly_show_exhibits()[0] == permissions return self.show_exhibits[1] if self.friendly_show_exhibits()[1] == permissions return self.show_exhibits[2] if self.friendly_show_exhibits()[2] == permissions return "" end
# File app/models/group.rb, line 399 def self.friendly_to_type(type) 0.upto(self.types.length) { |i| return self.types[i] if self.friendly_types()[i] == type } return "" end
# File app/models/group.rb, line 469 def self.friendly_to_visibility(visibility) return self.visibility[0] if self.friendly_visibility()[0] == visibility return self.visibility[1] if self.friendly_visibility()[1] == visibility return "" end
# File app/models/group.rb, line 390 def self.friendly_types() return [ 'Community', 'Classroom', 'Peer Reviewed'] end
# File app/models/group.rb, line 461 def self.friendly_visibility() return [ 'Visible to Group', 'Visible to WWW'] end
# File app/models/group.rb, line 211 def self.get_all_users_admins(groups, user_id) admin_groups = [] groups.each {|group| admin_groups.push(group) if group.is_editor(user_id) } return admin_groups end
# File app/models/group.rb, line 200 def self.get_all_users_groups(user_id) groups = Group.where({owner: user_id}) gu = GroupsUser.where({user_id: user_id}) gu.each { |rec| if !rec.pending_invite & !rec.pending_request groups.push(Group.find(rec.group_id)) end } return groups end
# File app/models/group.rb, line 372 def self.get_clusters_label(group_id) return 'Cluster' if group_id == nil group = Group.find_by_id(group_id) return 'Cluster' if group == nil return group.get_clusters_label() end
# File app/models/group.rb, line 72 def self.get_discussion_visibility(thread) return 'everyone' if thread.group_id == nil group = Group.find_by_id(thread.group_id) return "" if group == nil return group.forum_permissions == 'hidden' ? 'members' : 'everyone' end
# File app/models/group.rb, line 93 def self.get_exhibit_visibility(exhibit) # if the exhibit isn't in a group, the only two levels should be 0 or 1. However, if the exhibit was removed from a group, # then the visibility may be more complicated. In that case, anything but 0 means published. if exhibit.group_id == nil return 'everyone' if exhibit.is_published != 0 return 'noone' end return "admin" if exhibit.is_published == 4 cluster = Cluster.find_by_id(exhibit.cluster_id) # this can fail if the cluster was deleted with exhibits in it. return 'admin' if cluster && cluster.visibility == 'administrators' return 'admin' if exhibit.is_published == 2 return 'members' if exhibit.editor_limit_visibility == 'group' return 'members' if exhibit.is_published == 3 return 'everyone' # is_published must be either 1 (everyone) or 5 (submit for peer-review and everyone) end
# File app/models/group.rb, line 365 def self.get_exhibits_label(group_id) return 'Exhibit' if group_id == nil group = Group.find_by_id(group_id) return 'Exhibit' if group == nil return group.get_exhibits_label() end
id translation
# File app/models/group.rb, line 36 def self.id_obfuscator(id) # this just changes the id so it is not apparently predictable to a hacker return id.to_i * 1657 end
# File app/models/group.rb, line 40 def self.id_retriever(id) # this undoes the obfuscation return id.to_i / 1657 end
# File app/models/group.rb, line 219 def self.is_peer_reviewed_group(exhibit) return false if exhibit.group_id == nil group = Group.find(exhibit.group_id) return group.group_type == 'peer-reviewed' end
# File app/models/group.rb, line 450 def self.permission_explanations_to_json explanations = [ "Only group members may read and respond to private discussions.", "Anyone can read, but only group members may respond.", "Anyone can read and any #{Setup.site_name()} user can respond." ] return explanations.to_json() end
# File app/models/group.rb, line 429 def self.permission_to_friendly(permissions) return self.friendly_permissions[0] if self.permissions()[0] == permissions return self.friendly_permissions[1] if self.permissions()[1] == permissions return self.friendly_permissions[2] if self.permissions()[2] == permissions return "" end
# File app/models/group.rb, line 422 def self.permissions() return [ 'hidden', 'readonly', 'full'] end
# File app/models/group.rb, line 441 def self.permissions_to_json() vals = self.permissions() texts = self.friendly_permissions() ret = [] 0.upto(2) { |i| ret.push({ :value => vals[i], :text => texts[i] }) } return ret.to_json() end
# File app/models/group.rb, line 489 def self.show_exhibits() return [ 'show_all', 'show_clusters_only', 'show_exhibits_only'] end
# File app/models/group.rb, line 496 def self.show_exhibits_to_friendly(show_exhibits) return self.friendly_show_exhibits[0] if self.show_exhibits()[0] == show_exhibits return self.friendly_show_exhibits[1] if self.show_exhibits()[1] == show_exhibits return self.friendly_show_exhibits[2] if self.show_exhibits()[2] == show_exhibits return "" end
# File app/models/group.rb, line 415 def self.type_explanation(type_pos) return "Exhibits that have been shared but are not peer-reviewed." if type_pos == 0 return "Student work that has been shared." if type_pos == 1 return "Peer Reviewed work." if type_pos == 2 return "" end
# File app/models/group.rb, line 393 def self.type_to_friendly(type) 0.upto(self.types.length) { |i| return self.friendly_types[i] if self.types()[i] == type } return "" end
enumerations
# File app/models/group.rb, line 386 def self.types() return [ 'community', 'classroom', 'peer-reviewed'] end
# File app/models/group.rb, line 405 def self.types_to_json(show_all) vals = self.types() texts = self.friendly_types() ret = [] top = show_all ? 2 : 1 0.upto(top) { |i| ret.push({ :value => vals[i], :text => texts[i] }) } return ret.to_json() end
User’s capabilities
# File app/models/group.rb, line 47 def self.user_is_in_group(user_id) # Does this user belong to at least one group? return self.get_all_users_groups(user_id).length > 0 end
# File app/models/group.rb, line 457 def self.visibility() return [ 'group', 'www' ] end
# File app/models/group.rb, line 483 def self.visibility_explanations_to_json explanations = [ "Only group members may view exhibits.", "Anyone can view exhibits." ] return explanations.to_json() end
# File app/models/group.rb, line 464 def self.visibility_to_friendly(visibility) return self.friendly_visibility[0] if self.visibility()[0] == visibility return self.friendly_visibility[1] if self.visibility()[1] == visibility return "" end
# File app/models/group.rb, line 474 def self.visibility_to_json() vals = self.visibility() texts = self.friendly_visibility() ret = [] 0.upto(1) { |i| ret.push({ :value => vals[i], :text => texts[i] }) } return ret.to_json() end
# File app/models/group.rb, line 79 def can_create_exhibit(user_id) return is_member(user_id) end
# File app/models/group.rb, line 127 def can_delete(user_id) return is_owner(user_id) end
# File app/models/group.rb, line 52 def can_edit(user_id) return is_editor(user_id) end
# File app/models/group.rb, line 138 def can_leave_group(user_id) return !is_owner(user_id) && is_member(user_id) end
# File app/models/group.rb, line 67 def can_post(user_id) return true if self.forum_permissions == 'full' return is_member(user_id) end
# File app/models/group.rb, line 62 def can_read_forum(user_id) return true if self.forum_permissions != 'hidden' return is_member(user_id) end
# File app/models/group.rb, line 131 def can_request_to_join(user_id) return false if user_id == nil pending_id = get_pending_id(user_id) return false if pending_id return !is_member(user_id) && !is_request_pending(user_id) end
# File app/models/group.rb, line 83 def can_see_admins(user_id) return true if self.show_admins == 'all' return is_member(user_id) end
# File app/models/group.rb, line 109 def can_view_exhibit(exhibit, user_id) # The exhibit is visible if the user is an admin of the group. # Then check to see if it is in a restricted cluster, or it is a restricted exhibit. If so, then it is not visible. # Then see if the user is a member. If so, then it is visible. # Then see if it is restricted to the group. # see if only an editor can see it. return true if is_editor(user_id) return false if exhibit.is_published == 4 cluster = Cluster.find_by_id(exhibit.cluster_id) # this can fail if the cluster was deleted with exhibits in it. return false if cluster && cluster.visibility != 'everyone' # see if only a member can see it return true if is_member(user_id) return true if (exhibit.is_published == 1 || exhibit.is_published == 5) && (exhibit.editor_limit_visibility == nil || exhibit.editor_limit_visibility != 'group') return false end
# File app/models/group.rb, line 88 def can_view_exhibits(user_id) return true if self.exhibit_visibility == 'www' return is_member(user_id) end
# File app/models/group.rb, line 190 def get_all_editors() gus = GroupsUser.where({group_id: self.id, role: 'editor'}) editors = [] editors.push(self.owner) gus.each { |gu| editors.push(gu.user_id) } return editors end
# File app/models/group.rb, line 537 def get_cluster_label_list return [ { :value => 'Cluster', :text => 'Cluster'}, { :value => 'Issue', :text => 'Issue' }, { :value => 'Volume', :text => 'Volume' }] end
# File app/models/group.rb, line 360 def get_clusters_label() return 'Cluster' if self.clusters_label == nil return self.clusters_label end
# File app/models/group.rb, line 533 def get_exhibit_label_list return [ { :value => 'Exhibit', :text => 'Exhibit'}, { :value => 'Article', :text => 'Article' }] end
# File app/models/group.rb, line 355 def get_exhibits_label() return 'Exhibit' if self.exhibits_label == nil return self.exhibits_label end
# File app/models/group.rb, line 240 def get_membership_list(with_owner = false) gus = GroupsUser.where({group_id: self.id}) ret = [] gus.each { |gu| if gu.pending_invite == false && gu.pending_request == false user = User.find(gu.user_id) ret.push({ :name => user.fullname, :user_id => user.id, :id => gu.id, :role => gu.role }) end } if with_owner ret.push({ :name => self.user.fullname, :user_id => self.user.id, :id => nil, :role => 'owner' }) end return ret end
# File app/models/group.rb, line 255 def get_membership_list_truncated(max) mems = get_membership_list() return mems if mems.length <= max mems = mems.sort_by { rand } return mems.slice(0, max) end
# File app/models/group.rb, line 263 def get_number_of_members() list = get_membership_list() return list.length + 1 # the regular members plus the owner end
# File app/models/group.rb, line 225 def get_pending_id(user_id) user = User.find(user_id) gu = GroupsUser.find_by_group_id_and_email(self.id, user.email) return Group.id_obfuscator(gu.id) if gu != nil && gu.pending_invite == true return nil end
# File app/models/group.rb, line 379 def get_truncated_name() return self.name if self.name.length < 70 return self.name.slice(0..70) + "..." end
# File app/models/group.rb, line 346 def get_visible_id return self.visible_url if self.visible_url && self.visible_url.length > 0 return "#{self.id}" end
# File app/models/group.rb, line 351 def get_visible_url return "/groups/#{get_visible_id()}" end
# File app/models/group.rb, line 25 def handle_solr SearchUserContent.delay.index('group', self.id) end
# File app/models/group.rb, line 289 def invite_members(editor_name, editor_email, emails, usernames, url_accept, url_decline, url_home) msgs = "" list = [] arr = split_by_all_delimiters(usernames) arr.each { |username| username = username.strip() if username.length > 0 user = User.find_by_username(username) if user == nil msgs += "User not found: #{username}
" else list.push(user.email) end end } arr = split_by_all_delimiters(emails) arr.each { |email| # The user may have put in lots of different email formats, or may have put in unintelligible data. We will only # keep emails that appear to be well-formed. email = email.strip() is_legal = /^\<?.+@.+\..+\>?$/.match(email) # emails must be in the form<EMAIL_ADDRESS>possibly bracketed by <...> if email.length > 0 && is_legal != nil email = email.gsub("<", '').gsub(">", '') # don't want the bracketing list.push(email) end } list.each { |email| gu = GroupsUser.find_by_group_id_and_email(self.id, email) user = User.find_by_email(email) user_id = user ? user.id : nil user_name = user ? user.fullname : "" if gu == nil && self.owner != user_id # don't invite someone twice begin gu = GroupsUser.new({ :group_id => self.id, :user_id => user_id, :email => email, :role => 'member', :pending_invite => true, :pending_request => false }) gu.save! body = "#{editor_name} has invited you to join the group \"#{self.name}.\"\n\n" if user_id == nil body += "To join this group, you will be prompted to create a login ID on #{Setup.site_name()}.\n\n" end accept = url_accept.gsub("PUT_ID_HERE", "#{Group.id_obfuscator(gu.id)}") decline = url_decline.gsub("PUT_ID_HERE", "#{Group.id_obfuscator(gu.id)}") body += "If you wish to join this group, click here: #{accept}\n\n" body += "If you do not wish to join this group, click here: #{decline}\n\n" GenericMailer.generic(editor_name, editor_email, user_name, email, "Invitation to join a group", body, url_home, "").deliver rescue Net::SMTPFatalError msgs += "Error sending email to address \"#{email}\".
" gu.delete end end } return nil if msgs.length == 0 return msgs end
# File app/models/group.rb, line 163 def is_editor(user_id) return false if user_id == nil return true if is_owner(user_id) rec = GroupsUser.find_by_group_id_and_user_id(self.id, user_id) return false if rec == nil return rec.role == 'editor' end
# File app/models/group.rb, line 171 def is_member(user_id) return true if is_owner(user_id) rec = GroupsUser.find_by_group_id_and_user_id(self.id, user_id) return false if rec == nil return false if rec.pending_invite == true || rec.pending_request == true return true end
User’s Roles
# File app/models/group.rb, line 159 def is_owner(user_id) return user_id == self.owner end
# File app/models/group.rb, line 29 def is_peer_reviewed return self.group_type == "peer-reviewed" end
# File app/models/group.rb, line 232 def is_request_pending(user_id) return false if user_id == nil user = User.find(user_id) gu = GroupsUser.find_by_group_id_and_email(self.id, user.email) return false if gu == nil return gu.pending_request == true end
# File app/models/group.rb, line 179 def non_clustered_exhibits() ret = [] exhibits = Exhibit.all(:conditions => [ "group_id = ? AND is_published <> 0 AND cluster_id IS NULL", self.id]) exhibits.each { |exhibit| if exhibit.cluster_id == nil ret.push({ :text => exhibit.title, :value => exhibit.id }) end } return ret end
# File app/models/group.rb, line 526 def show_exhibits_explanations_to_json explanations = [ "List both #{get_clusters_label().pluralize().downcase()} and #{get_exhibits_label().pluralize().downcase()} in the #{get_exhibits_label().pluralize().downcase()} list.", "List only #{get_clusters_label().pluralize().downcase()} and #{get_exhibits_label().pluralize().downcase()} that belong to #{get_clusters_label().pluralize().downcase()} in the #{get_exhibits_label().pluralize().downcase()} list.", "List only #{get_exhibits_label().pluralize().downcase()} and not #{get_clusters_label().pluralize().downcase()} in the #{get_exhibits_label().pluralize().downcase()} list." ] return explanations.to_json() end
# File app/models/group.rb, line 509 def show_exhibits_to_json() vals = Group.show_exhibits() texts = Group.friendly_show_exhibits() exhibit_label = get_exhibits_label().pluralize().downcase() clusters_label = get_clusters_label().pluralize().downcase() texts.each do | txt | txt.gsub!("clusters", clusters_label) txt.gsub!("exhibits", exhibit_label) end ret = [] 0.upto(2) { |i| ret.push({ :value => vals[i], :text => texts[i] }) } return ret.to_json() end
Actions
# File app/models/group.rb, line 271 def split_by_all_delimiters(emails) ret = [] arr = emails.split("\n") arr.each { |email| arr2 = email.split(' ') arr2.each { |email2| arr3 = email2.split(',') arr3.each { |email3| arr4 = email3.split(';') arr4.each { |email4| ret.push(email4) } } } } return ret end


2
Jonah's Prayer
1 Then Jonah prayed to the LORD his God from the belly of the fish,
2 saying,
“I called out to the LORD, out of my distress,
and he answered me;
out of the belly of Sheol I cried,
and you heard my voice.
3 For you cast me into the deep,
into the heart of the seas,
and the flood surrounded me;
all your waves and your billows
passed over me.
4 Then I said, ‘I am driven away
from your sight;
Yet I shall again look
upon your holy temple.’
5 The waters closed in over me to take my life;
the deep surrounded me;
weeds were wrapped about my head
6 at the roots of the mountains.
I went down to the land
whose bars closed upon me forever;
yet you brought up my life from the pit,
O LORD my God.
7 When my life was fainting away,
I remembered the LORD,
and my prayer came to you,
into your holy temple.
8 Those who pay regard to vain idols
forsake their hope of steadfast love.
9 But I with the voice of thanksgiving
will sacrifice to you;
what I have vowed I will pay.
Salvation belongs to the LORD!”
10 And the LORD spoke to the fish, and it vomited Jonah out upon the dry land.


Smith & Jones Architects
Et sed autem causae appareat, tempor abhorreant te mei, facer facilisis sit ea. Eu timeam vidisse consectetuer sed. Duo etiam laboramus dissentiet in, nec no errem
Learn MoreEt sed autem causae appareat, tempor abhorreant te mei, facer facilisis sit ea. Eu timeam vidisse consectetuer sed. Duo etiam laboramus dissentiet in, nec no errem
Learn MoreEt sed autem causae appareat, tempor abhorreant te mei, facer facilisis sit ea. Eu timeam vidisse consectetuer sed. Duo etiam laboramus dissentiet in, nec no errem
View DesignsThe Villas bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution.
The Outskirts are amazing to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution.
The Blocks are amazing to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. rem


Wrapkit Utils is a collections of javascript methods that using by each objects on ecosystem. You can using it too.
| Name | Usage | Description |
|---|---|---|
noop |
WrapkitUtils.noop() |
An empty function, use this empty function when you wish to pass around a function that will do nothing. |
extend |
WrapkitUtils.extend(obj1, obj2) |
Merge the contents of two objects together into the first object. |
makeArray |
WrapkitUtils.makeArray(obj) |
Turn element or nodeList into an array |
jqEmiter |
WrapkitUtils.jqEmiter(el, type, data) |
Trigger event to jQuery if any. |
isMobile |
WrapkitUtils.isMobile() |
Detect a Device. Return true if device is mobile and false if desktop. |
viewPort |
WrapkitUtils.viewPort() |
Detect the real viewport. return width and height. |
offsets |
WrapkitUtils.offsets(el) |
Retrieve the position (x,y) of an element |
debounce |
WrapkitUtils.debounce(fn, wait, immediate) |
Returns a function, that, as long as it continues to be invoked, will not be triggered. The function will be called after it stops being called for N milliseconds. If `immediate` is passed, trigger the function on the leading edge, instead of the trailing. |
getWidth |
WrapkitUtils.getWidth(el) |
Retrieve the the width of an element |
getHeight |
WrapkitUtils.getHeight(el) |
Retrieve the the height of an element |
getDocWidth |
WrapkitUtils.getDocWidth() |
Retrieve the width of document. |
getDocHeight |
WrapkitUtils.getDocHeight() |
Retrieve the height of document. |
createScript |
WrapkitUtils.createScript() |
Create/inject a script to document body, usefull for http request. |
initSlimScroll |
WrapkitUtils.initSlimScroll($el, height) |
Init jquery slimScroll on any $elem |
destroySlimScroll |
WrapkitUtils.destroySlimScroll($el) |
Destroy jquery slimScroll on any $elem |
closest |
WrapkitUtils.closest(el, selector) |
Matches a CSS selector by traversing up the DOM tree. |
transitionEnd |
WrapkitUtils.transitionEnd() |
Listen the end of CSS transition of an element. |


The alternate plug of the plug: only applies when the item is in states that only the server can know about and control, unfortunately. See AlternateUiPlugLabel for the related label info.
This enum represents a set of flags - use bitwise operators to check which of these match your value.
If the plug meets certain state requirements, it may have an alternative label applied to it. This is the alternative label that will be applied in such a situation.
It's not enough for the plug to be inserted. It has to be enabled as well. For it to be enabled, it may require materials. This is the hash identifier for the DestinyMaterialRequirementSetDefinition for those requirements, if there is one.
Mapped to DestinyMaterialRequirementSetDefinition in the manifest.
The rules around whether the plug, once inserted, is enabled and providing its benefits.
The live data DestinyItemPlugComponent.enableFailIndexes will be an index into this array, so you can pull out the failure strings appropriate for the user.
If inserting this plug requires materials, this is the hash identifier for looking up the DestinyMaterialRequirementSetDefinition for those requirements.
Mapped to DestinyMaterialRequirementSetDefinition in the manifest.
The rules around when this plug can be inserted into a socket, aside from the socket's individual restrictions.
The live data DestinyItemPlugComponent.insertFailIndexes will be an index into this array, so you can pull out the failure strings appropriate for the user.
If TRUE, this plug is used for UI display purposes only, and doesn't have any interesting effects of its own.
If TRUE, the plug doesn't actually convey any benefit: it only exists to show information in the UI.
If you successfully socket the item, this will determine whether or not you get " refunded" on the plug.
Do you ever get the feeling that a system has become so overburdened by edge cases that it probably should have become some other system entirely? So do I!
In totally unrelated news, Plugs can now override properties of their parent items. This is some of the relevant definition data for those overrides.
If this is populated, it will have the override data to be applied when this plug is applied to an item.
Indicates the rules about when this plug can be used. See the PlugAvailabilityMode enumeration for more information!
The hash for the plugCategoryIdentifier. You can use this instead if you wish: I put both in the definition for debugging purposes.
The string identifier for the plug's category. Use the socket's DestinySocketTypeDefinition.plugWhitelist to determine whether this plug can be inserted into the socket.
This enum represents a set of flags - use bitwise operators to check which of these match your value.
In the game, if you're inspecting a plug item directly, this will be the item shown with the plug attached. Look up the DestinyInventoryItemDefinition for this hash for the item.
Mapped to DestinyInventoryItemDefinition in the manifest.
Plugs can have arbitrary, UI-defined identifiers that the UI designers use to determine the style applied to plugs. Unfortunately, we have neither a definitive list of these labels nor advance warning of when new labels might be applied or how that relates to how they get rendered. If you want to, you can refer to known labels to change your own styles: but know that new ones can be created arbitrarily, and we have no way of associating the labels with any specific UI style guidance... you'll have to piece that together on your end. Or do what we do, and just show plugs more generically, without specialized styles.
If an item is a Plug, its DestinyInventoryItemDefinition.plug property will be populated with an instance of one of these bad boys.
This gives information about when it can be inserted, what the plug's category is (and thus whether it is compatible with a socket... see DestinySocketTypeDefinition for information about Plug Categories and socket compatibility), whether it is enabled and other Plug info.


Hi I'm
I’m Ben, and I’ve lived in Ohio my whole life. After high school I attended college to study Media Arts and Animation, however after a time I decided to take a hiatus and reevaluate my career plans. As I reflected on my past, I decided that I wanted to change course and go down another route.
I have had a passion for technology from a young age. I enjoyed doing things such as building my own computer, writing simple scripts, and troubleshooting my own technical problems. From childhood I wanted to work in the game industry and was originally going to school to become a 3D modeler. This all lead me to the conclusion that I still wanted to work in the game industry but instead wanted to code. Based on this I decided that I would go into Information Technology with a focus in Game Design and Simulation. Coupled with my knowledge in media arts and animation I feel I will be an asset to any company in the gaming industry.
I have won several awards for my art and photography, including a first place in the annual US Congressional Art competition. My winning photograph hung in the office of the Speaker of the House in Washington DC for a year.
I'm from Cincinnati, Ohio.
I enjoy playing video games, going on walks, and coding to further improve my skills
My dream job is the game industry as a lead programmer
I'm from the Greater Cincinnati area.
Because bringing games to life sounds truly amazing. Just being able to provide entertainment and joy to so many people sounds like a dream come true.


| Name | Description |
| datamove |
Objects in this state are fully compliant with their policy and are healthy, but vSAN is actively rebuilding them.
|
| healthy |
The object is in perfect condition, exactly aligned with its policy, and is not currently being moved or otherwise worked on.
|
| inaccessible |
An object has suffered more failures (permanent or temporary) than it was configured to tolerate, and is currently unavailable and inaccessible.
|
| nonavailabilityrelatedincompliance |
This is a catch all state when none of the other states apply. An object with this state is not compliant with its current policy, but is meeting the availablity (NumberOfFailuresToTolerate) policy. The object might be in this state because vSAN is not able to meet a non-availability related policy such as NumberOfDiskStripesPerObject because of lack of available resources. User need check the vSAN system resources like the number of fault domains and hosts, free capacity to make it compliant.
|
| nonavailabilityrelatedincompliancewithpausedrebuild |
The object is not compliant with its current policy, but is meeting the availablity (NumberOfFailuresToTolerate) policy. However, the object rebuild is paused because of lack of available resources.
|
| nonavailabilityrelatedincompliancewithpolicypending |
Object policy was recently changed and has not yet been applied. The object is still fully compliant with the new availability policy, but not compliant the new non-availability related policies. Note it's a transient status and will either transit to 'healthy' or 'nonavailabilityrelatedincompliancewithpolicypendingfailed' status eventually depending on if the new policy can be accepted or not due to resource limitation. And depending on how much transient capacity is being used in the cluster, the object will stay in the status from minutes to hours. No user action needed for this status.
|
| nonavailabilityrelatedincompliancewithpolicypendingfailed |
Object policy was recently changed but failed to apply to the object because of lacking of resource. The object is still fully compliant with the new availability policy. User need add more resource to the cluster so that vSAN can re-apply the new non-availability related policy to the object automatically to make it fully compliant.
|
| nonavailabilityrelatedreconfig |
The object is fully in compliance with the NumberOfFailuresToTolerate policy and the data movement is to satisfy another policy change.
|
| reducedavailabilitywithactiverebuild |
The object has suffered a failure, but it was configured to be able to tolerate the failure.
|
| reducedavailabilitywithnorebuild |
The object has suffered a failure or its policy was recently changed to have higher availability requirement but vSAN was able to tolerate it. The object is accessible and I/O is flowing.
|
| reducedavailabilitywithnorebuilddelaytimer |
The object has suffered a failure, but vSAN was able to tolerate it. However, vSAN is not yet working on re-protecting the object, as it is waiting for the 60-minute (default) delay timer to expire before issuing the re-protect.
|
| reducedavailabilitywithpausedrebuild |
The object has suffered a failure or its policy was recently changed to have higher availability requirement. However, the object rebuild is paused because of lack of available resources.
|
| reducedavailabilitywithpolicypending |
Object policy was recently changed but has not yet been applied to the object. The object current availability is less than what is expected by the new policy. Note it's a transient status and will either transit to 'healthy' or 'reducedavailabilitywithpolicypendingfailed' eventually depending on if the new policy can be accepted or not due to resource limitation. And depending on how much transient capacity is being used in the cluster, the object will stay in the status from minutes to hours. No user action needed for this status.
|
| reducedavailabilitywithpolicypendingfailed |
Object policy has been changed but failed to apply to the object because of lack of available resources. User need add more resource to the cluster so that vSAN can re-apply the new availability policy to the object automatically to make it full compliant.
|
| VsanObjectHealthState_Unknown |
Represent the value when the lower version client cannot recognize the enum value
|


paper core said device strip cam winding blade tearing arms channel document-id:: continuous figref[FIG. means wheel according citation: cited rewinding [patcit]: conveyor invention upper feeler log machine rapid introducer roll classification-national:: positioned present rolls cradles end examiner portion position roller action-date: contact generating-office:: having situated CLAIM-TEXT:. Classification: EMI-D [addressbook]: applicant claim comprises cylinders glue introduced perforated transversal al. area causes claim-ref[claim cores does lower moved objective pushers rewinder wound Gambini breakage cpc-version-indicator:: dimension discharge example, formation invention, line mentioned oscillate oscillating perforation pins protruding radially series shows spring structure subsequent way,


Grand Master Sedrick:
There are many perspectives on justice.
You have to fight by the light of the justice in your heart.
My traveling days are over. You have transcended your country or religion as a Knight or Paladin with your values.
Lead your life by the candle in your heart!


About Me
I'm Front end engineer from Hunan, China, working in web development and print media. I enjoy turning complex problems into simple, beautiful and intuitive designs.
My job is to build your website so that it is functional and user-friendly but at the same time attractive. Moreover, I add personal touch to your product and make sure that is eye-catching and easy to use. My aim is to bring across your message and identity in the most creative way.


Oil utility
The Oil utility is a special package command can be used in several ways to facilitate quick development, help with testing your application and for running Tasks.
Refine
Refine is a tool that lets you run tasks. The idea behind the name is you "refine" Oil to make Fuel. You can read more specifically about Tasks to see how they are made and what they can be used for.
An example task can be found here fuel/app/tasks/ called robots.
$ php oil refine robots "KILL ALL HUMANS!" _____ / /_____\ ____[\*---*/]____ /\ #\ \_____/ /# /\ / \# \_.---._/ #/ \ / /|\ | | /|\ \ /___/ | | | | | | \___\ | | | | |---| | | | | |__| \_| |_#_| |_/ |__| //\\ <\ _//^\\_ /> //\\ \||/ |\//// \\\\/| \||/ | | | | |---| |---| |---| |---| | | | | |___| |___| / \ / \ |_____| |_____| |HHHHH| |HHHHH|
Not the most useful example in the world, but it works as a useful example. But you can use the Cli class to make things more interactive or just run basic model interaction for cron jobs.


| LDD(1) | Linux Programmer's Manual | LDD(1) |
$ ldd /bin/ls linux-vdso.so.1 (0x00007ffcc3563000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000) libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000) libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000) /lib64/ld-linux-x86-64.so.2 (0x00005574bf12e000) libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)
In the usual case, ldd invokes the standard dynamic linker (see ld.so(8)) with the LD_TRACE_LOADED_OBJECTS environment variable set to 1. This causes the dynamic linker to inspect the program's dynamic dependencies, and find (according to the rules described in ld.so(8)) and load the objects that satisfy those dependencies. For each dependency, ldd displays the location of the matching object and the (hexadecimal) address at which it is loaded. (The linux-vdso and ld-linux shared dependencies are special; see vdso(7) and ld.so(8).)
Thus, you should never employ ldd on an untrusted executable, since this may result in the execution of arbitrary code. A safer alternative when dealing with untrusted executables is:
$ objdump -p /path/to/program | grep NEEDED
Note, however, that this alternative shows only the direct dependencies of the executable, while ldd shows the entire dependency tree of the executable.
ldd does not work with some extremely old a.out programs which were built before ldd support was added to the compiler releases. If you use ldd on one of these programs, the program will attempt to run with argc = 0 and the results will be unpredictable.
| 2019-03-06 |


Article content here
Contact Author name. Or Person 2 in reference to blah blah blah about this article.Appropriate for when a topic shifts within long-form text. The same semantic meaning as a <section> followed by another <section>.
Light (classless) and dark (.hr--inverse) to allow for visibility on light or dark backgrounds.
Load more buttons are utilized in place of (or possibly in conjunction with) pagination.
Triggering a load more button should reveal the next set of information, and ensure focus is moved to the new area, while removing the activated load more button / it's container from the DOM.
...
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Cats. Gotta love 'em, rite?
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text.
Address patterns using the address element and standard vcard pattern.
Article content here
Contact Author name. Or Person 2 in reference to blah blah blah about this article.
Person or Company Name
123 Fake Street
City, State, Zip
Country


CIS-115 Fall Term 2017 | Project 2
The current time is:
Map Current Location
Location:
| Latitude:
| Longitude:
Loading...
Center


--- title: "关于今天新听来的逻辑美学论" layout: "post" permalink: "/2014/04/blog-post_23.html" uuid: "1422550914075492462" guid: "tag:blogger.com,1999:blog-5396845717692802313.post-1422550914075492462" date: "2014-04-24 04:10:00" updated: "2014-04-24 04:10:18" description: blogger: siteid: "5396845717692802313" postid: "1422550914075492462" comments: "0" categories: author: name: "Zhujun Yao" url: "https://plus.google.com/107886982505645319479?rel=author" image: "//lh5.googleusercontent.com/-sv9wVMH_yJA/AAAAAAAAAAI/AAAAAAAAABY/RoZM-GWMhyI/s512-c/photo.jpg" ---


{% extends "base.html" %} {% load static from staticfiles %} {% block content %}
Lost Near {{ it.item_last_place_seen }}
Lost On {{ it.item_date }}
Found Near {{ it.item_last_place_seen }}
Found On {{ it.item_date }}


mongoc_cursor_t
Client-side cursor abtraction
Synopsis
typedef struct _mongoc_cursor_t mongoc_cursor_t;
mongoc_cursor_t provides access to a MongoDB query cursor. It wraps up the wire protocol negotation required to initiate a query and retreive an unknown number of documents. Cursors are lazy, meaning that no network traffic occurs until the first call to mongoc_cursor_next(). At that point we can:
Determine which host we've connected to with mongoc_cursor_get_host().
Retreive more records with repeated calls to mongoc_cursor_next().
Test for more records with mongoc_cursor_more()
Clone a query to repeat execution at a later point with mongoc_cursor_clone().
Test for errors with mongoc_cursor_error().
Thread Safety
mongoc_cursor_t is NOT thread safe. It may only be used from the thread it was created from.
Example
Query MongoDB and iterate results
/* gcc example.c -o example $(pkg-config --cflags --libs libmongoc-1.0) */ /* ./example-client [CONNECTION_STRING [COLLECTION_NAME]] */ #include <mongoc.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_collection_t *collection; mongoc_cursor_t *cursor; bson_error_t error; const bson_t *doc; const char *uristr = "mongodb://<IP_ADDRESS>/"; const char *collection_name = "test"; bson_t query; char *str; mongoc_init (); if (argc > 1) { uristr = argv [1]; } if (argc > 2) { collection_name = argv [2]; } client = mongoc_client_new (uristr); if (!client) { fprintf (stderr, "Failed to parse URI.\n"); return EXIT_FAILURE; } bson_init (&query); #if 0 bson_append_utf8 (&query, "hello", -1, "world", -1); #endif collection = mongoc_client_get_collection (client, "test", collection_name); cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, &query, NULL, /* Fields, NULL for all. */ NULL); /* Read Prefs, NULL for default */ while (mongoc_cursor_next (cursor, &doc)) { str = bson_as_json (doc, NULL); fprintf (stdout, "%s\n", str); bson_free (str); } if (mongoc_cursor_error (cursor, &error)) { fprintf (stderr, "Cursor Failure: %s\n", error.message); return EXIT_FAILURE; } bson_destroy (&query); mongoc_cursor_destroy (cursor); mongoc_collection_destroy (collection); mongoc_client_destroy (client); mongoc_cleanup (); return EXIT_SUCCESS; }


UK tech startups net a record £9bn to keep European crown
by Joe CurtisInvestors have ploughed a record £9bn into British tech startups in 2019, according to figures that place the UK’s tech investment scene head and shoulders above the rest of Europe.
Tech companies have so far countred $11.1bn (£8.6bn) in venture capital this year, according to a report from VC firm Atomico today, a 48 per cent year-on-year increase.
Read more: Meet the UK's 70 fastest growing tech firms
That is more than double its closest two competitors, Germany and France, which raked in $5.9m and $4.87m respectively.
The sum is also double the cash flowing into the UK’s tech scene at the time of 2016’s Brexit referendum, when the total hit $5.21bn.
London, Oxford, Cambridge and Bristol’s tech scenes received the lion’s share of VC money.
Atomico reconfirmed the UK’s status as Europe’s tech capital, with 2,747 tech startups raising funding since 2015, compared to its nearest rival, Paris, which counted 1,183.
Read more: London tech wages lag behind US despite fintech boom
However, the number of venture capital deals in the UK has fallen 17 per cent since 2016. But that number is still up since 2018 to stand at 1,300 for the year so far.
Across Europe, over a third of fundraising came from deals worth over $100m.
Tom Wehmeier, an Atomico partner who authored today’s report, said: “European tech continues to be a bright spot in the global economy despite a media focus on turbulence in markets and tech this year. Europe’s economy may not be immune, but its technology companies have continued to break records in the past 12 months.”
“There’s a deep pool of talent, more than 150 billion-dollar tech companies have now been built from Europe, and record levels of support from institutional investors.”
Read more: Three ways London can remain the fintech capital of the world
The report found that at least 174 European tech firms have now scaled to become unicorns - firms with a valuation of over $1bn.
Almost half of those have reached that size without VC money, but the latest trend shows that almost all startups now rely on VC money as the venture capital base has matured.
The Getty Image will be here


Press the spacebar or click to generate a new color
#ffffff
Copy to clipboard
Successfully copied to clipboard


These chameleons come with a crest also termed as a veil, from which they derive their name. The males are larger than the females and are more attractive. They have brighter colors on their body to attract the attention of females and to compete with other male competitors.
Veiled Chameleons are the most commonly bred and available species of chameleons, and are now being bred in captivity. They are hardy reptiles which require tall cages for perching, supplemental heat and UV light, a varied insect diet, and a dripping water source.


Associate Professor & Head
Department of Computer Science & Engineering
B.E. (CSE), BIT SINDRI,
M.Tech. (CSE), IIT Roorkee,
Ph.D. - IIT Roorkee.
Adress
- Residential Address : Dept. of CSE, NIT Jamshedpur
- Phone Number : 0657-237-4097/99
- Mobile Number :
- E-mail<EMAIL_ADDRESS>Area of Research Interest
- Software Engineering
- Operating Systems
- DBMS
- Computer Architecture
- Image Processing


{: .-three-column}
{: .-setup}
| Selector | Description |
|---|---|
* |
All elements |
div |
Element |
.class |
Class |
#id |
ID |
[disabled] |
Attribute |
[role="dialog"] |
Attribute |
| Selector | Description |
|---|---|
.parent .child |
Descendant |
.parent > .child |
Direct descendant |
.child + .sibling |
Adjacent sibling |
.child ~ .sibling |
Far sibling |
.class1.class2 |
Have both classes |
| Selector | Description |
|---|---|
[role="dialog"] |
= Exact |
[class~="box"] |
~= Has word |
[class|="box"] |
|= Exact or prefix (eg, value- ) |
[href$=".doc"] |
$= Ends in |
[href^="/index"] |
^= Begins with |
[class*="-is-"] |
*= Contains |
| Selector | Description |
|---|---|
:target |
eg, h2#foo:target |
| — | — |
:disabled |
|
:focus |
|
:active |
|
| — | — |
:nth-child(3) |
3rd child |
:nth-child(3n+2) |
2nd child in groups of 3 |
:nth-child(-n+4) |
|
| — | — |
:nth-last-child(2) |
|
:nth-of-type(2) |
|
| — | — |
:checked |
Checked inputs |
:disabled |
Disabled elements |
:default |
Default element in a group |
| — | — |
:empty |
Elements without children |
| Selector |
|---|
:first-of-type |
:last-of-type |
:nth-of-type(2) |
:only-of-type |
| — |
:first-child |
:last-child |
:nth-child(2) |
:only-child |
{: .-left-align}
{: .-left-reference}
| Property | Description |
|---|---|
font-family: |
<font>, <fontN> |
font-size: |
<size> |
letter-spacing: |
<size> |
line-height: |
<number> |
| — | — |
font-weight: |
bold normal |
font-style: |
italic normal |
text-decoration: |
underline none |
| — | — |
text-align: |
left right center
justify
|
text-transform: |
capitalize uppercase
lowercase
|
{: .-key-values}
{: .-prime}
| style | weight | size (required) | line-height | family | ||
|---|---|---|---|---|---|---|
font: |
italic |
400 |
14px |
/ |
1.5 |
sans-serif |
| style | weight | size (required) | line-height | family (required) |
{: .-css-breakdown}
text-transform: capitalize; /* Hello */
text-transform: uppercase; /* HELLO */
text-transform: lowercase; /* hello */
{: .-left-reference}
| Property | Description |
|---|---|
background: |
(Shorthand) |
| — | — |
background-color: |
<color> |
background-image: |
url(...) |
background-position: |
left/center/right top/center/bottom |
background-size: |
cover X Y |
background-clip: |
border-box padding-box
content-box
|
background-repeat: |
no-repeat repeat-x repeat-y
|
background-attachment: |
scroll fixed local |
{: .-key-values}
| color | image | positionX | positionY | size | repeat | attachment | ||
|---|---|---|---|---|---|---|---|---|
background: |
#ff0 |
url(bg.jpg) |
left |
top |
/ |
100px auto |
no-repeat |
fixed; |
background: |
#abc |
url(bg.png) |
center |
center |
/ |
cover |
repeat-x |
local; |
| color | image | positionX | positionY | size | repeat | attachment |
{: .-css-breakdown}
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
url('background.jpg') center center / cover, #333;
{: .-left-reference}
| Property | Value |
|---|---|
animation: |
(shorthand) |
animation-name: |
<name> |
animation-duration: |
<time>ms |
animation-timing-function: |
ease linear ease-in
ease-out ease-in-out
|
animation-delay: |
<time>ms |
animation-iteration-count: |
infinite <number> |
animation-direction: |
normal reverse alternate
alternate-reverse
|
animation-fill-mode: |
none forwards backwards
both initial inherit
|
animation-play-state: |
normal reverse alternate
alternate-reverse
|
{: .-key-values}
| name | duration | timing-function | delay | count | direction | fill-mode | play-state | |
|---|---|---|---|---|---|---|---|---|
animation: |
bounce |
300ms |
linear |
100ms |
infinite |
alternate-reverse |
both |
reverse |
| name | duration | timing-function | delay | count | direction | fill-mode | play-state |
{: .-css-breakdown}
animation: bounce 300ms linear 0s infinite normal;
animation: bounce 300ms linear infinite;
animation: bounce 300ms linear infinite alternate-reverse;
animation: bounce 300ms linear 2s infinite alternate-reverse forwards normal;


This URL provides access to a lightweight CTP client for testing purposes only. Launch the client by entering your access token and clicking on the button below.
This lightweight client is provided at this URL for demonstration or testing purposes. It is reported to work on Safari 8, Chrome 45 and Firefox 40. It has not been tested for security and wide cross-browser compatibility. Users of CTP will likely develop their own client, using the CTP API.


fun KeyStore.toPKCS12(keyPasswd: CharArray? = null): KeyStore
Returns a new PKCS12 keystore using this keystore entries. Returns the same instance if it's already a PKCS12 one.
keyPasswd - key entry password.
keyPasswd


Before the veils came off, we all knew what kind of underpinnings to expect from the DBX utility vehicle. The luxurious newcomer features the Second Century platform from the DB11, DBS Superleggera, and V8 Vantage, hence the possibility to fit twelve cylinders and two turbochargers under the hood.
Andy Palmer confirmed the possibility of “other engine derivates” to Road & Track magazine, and all we can say is that V12 options are a must for the DBX to take on the likes of the Rolls-Royce Cullinan and Bentley Bentayga. For the time being, the most powerful evolution of the AE31 is the DBS GT Zagato.
The special edition with DBS Superleggera underpinnings features 760 horsepower and 664 pound-feet of torque, translating to 3.3 seconds to 60 and 211 miles per hour at the top end of the engine and transmission. With those resources, the DBX will definitely become a much more interesting choice in its class.
"We're committed to doing an AMR in every one of our range,” added Palmer about the future of Aston Martin, “so that [the DBX] would be an obvious candidate.” It remains to be seen if there’s a case to be made for the manual transmission found in the limited-run V8 Vantage AMR, but still, a stick shift and three pedals in a luxury utility vehicle don’t make too much sense in this particular segment.
The DBX as it’s available to order these days comes exclusively with the wet-sump V8 from Mercedes-AMG, a hot-V design capable of cranking out 542 horsepower and 516 pound-feet of torque. That’s enough for 4.3 seconds to 60 miles per hour and a top speed of 181 miles per hour, figures that make even the Lamborghini Urus and Bentley Bentayga Speed blush with admiration for Aston’s first SUV.
It’s also worth taking into consideration Mercedes’ plans to electrify the 4.0-liter V8 with twin-turbocharging technology. In the 73 series, this option is expected to total approximately 800 horsepower. 🏁


You will be given a random number at the start of the game
There are four crystals below. By clilcking on a crystal you will add a specific amount of points to your total score.
You win the game by matching your total score to the random number given at the begining; you lose the game if your total score goes above the random number.
The value of each crystal is hidden from you until you click on it.
Each time when the game starts, the game will change the values of each crystal.


6822
Views
Ocean Storage of CO2
Some ocean scientists are advocating for storing captured CO2 emissions in the deep ocean. The reasons why might surprise you. In this post I’ll investigate why some think ocean storage of CO2 is a good idea and the potential impacts it could have on the marine environment.
How to Stop Climate Change
Carbon dioxide (CO2) is a naturally occurring gas that plants and algae rely on for photosynthesis, and we rely on them for the oxygen we breathe. Ever since the Industrial Revolution we’ve been ejecting increasingly larger amounts of CO2 into the atmosphere, leading to a warmer planet and acidification of the ocean.
If we want to mitigate climate change, there’s a very simple solution: we need to reduce the amount of carbon dioxide in the atmosphere. One strategy to rapidly decarbonize and reduce CO2 emissions is through adoption of renewable energy and improved energy efficiency, but this is not enough. Even if we somehow managed to magically stop emitting CO2 today, there is still a tremendous amount in the atmosphere that will contribute to climate change for centuries to come. In addition to decarbonization we need to remove excess CO2 from the atmosphere.
Carbon Capture and Storage
Our planet has natural carbon sinks that do this already: terrestrial plants, soil and marine algae for example. The oceans are actually one of the largest sinks on the planet, absorbing roughly 25 percent of the atmospheric CO2 we emit each year. But these natural processes take time and can’t keep up with our current level of emissions. Evidence to this fact is in the numbers: global atmospheric CO2 concentration in 1960 was 317 part per million (ppm), by 1990 was 354 ppm, by 2010 it was 390 ppm, and today it is 408 ppm.
Atmospheric CO2 concentrations are at their highest levels ever. Source: NOAA Climate.gov
Nature needs help. We need to pull CO2 out of the atmosphere and store it away. This idea of capturing CO2 from the air and then transporting and storing it in a manmade ‘sink’ that is separated from the atmosphere is referred to as carbon capture and sequestration (or storage), known as CCS. There are many different tools and methods being researched to capture and transport carbon, but I won’t focus on those here. In this post I want to focus on CO2 sequestration, not in tanks or underground, but in the ocean.
Ocean Storage of CO2
It seems counter-intuitive: the oceans are turning more acidic due to too much CO2 and we want to put more CO2 in there? It’s a controversial idea, but there are some who think that it makes logical sense. To be clear, this is not a solution to climate change, but perhaps a way to avoid the worst of it. Let’s take a look.
Storage is required to isolate captured CO2 from the atmosphere. Traditional storage techniques trap captured CO2 as a liquid or gas deep underground in specific geological features (such as abandoned hydrocarbon wells) and require a non-porous plug to seal the injection hole and prevent release. With ocean storage of CO2, the gas is intentionally injected into the deep ocean and is either allowed to diffuse or be trapped in a specific location, depending on the depth and pressure.
There are three general methods that could be used to directly inject carbon dioxide into the ocean for storage. First, would be a pipe that runs from shore to the ocean depths. This pipe would receive a stream of carbon dioxide from a capture or intermediary storage facility on the coast and then direct it offshore for long-term storage.
In the dispersal by ship method, CO2 stored on board the vessel would be ejected at great depths using a long hose or pipe towed behind the vessel, promoting rapid diffusion of the CO2 into seawater. The third method would be to use a stationary vessel or platform to inject CO2 to a fixed location at or near the ocean bottom.
Different methods of injection for ocean storage of CO2. Source: IPCC (Artwork courtesy Sean Goddard, University of Exeter)
The way in which CO2 is stored in the ocean depends on its phase state and the depth at which it is injected. Remember, pressure increases with depth, and we can use this fact to our advantage when it comes to ocean storage. Depending on pressure and temperature, carbon dioxide can exist as a gas, liquid, solid, or solid hydrate (a cage of water molecules encircles each CO2 molecule). From the ocean surface to depths of about 500 meters CO2 would exist as a gas and would tend to rise in the water column, since it is less dense than seawater. Between 500 meters and 2,700 meters CO2 would exist as a liquid, but one that is still lighter than seawater and would thus also rise in the water column. At depths up to 2,700 meters CO2 will create a rising plume and dissolve into the surrounding seawater relatively quickly.
At depths deeper than 3,000 meters the weight of the water column compresses the liquid CO2 and it becomes denser than seawater and sinks slowly to the seafloor. As a solid (or as a hydrate at depths below 400 meters) it will also sink, but will dissolve as it descends in the water column. Once the carbon dioxide sinks to the seafloor it forms an underwater pool at the bottom of the ocean, trapped in place by its own density.
Brine Lakes at the bottom of the sea. This is similar to what CO2 lakes would look like. Photo courtesy of NOAA.
The Benefits of Time and Space
Carbon dioxide is naturally stored in the ocean through chemical processes, either as a dissolved gas or, over a longer time scale, as carbonate sediments on the seafloor. In fact, more than 70 percent of current CO2 emissions will eventually wind-up in the ocean. Before the Industrial Revolution the CO2 exchange rate between the ocean and the atmosphere were pretty well balanced, but ever since we began emitting CO2the ocean has been trying to catch-up with the atmosphere. If and when our CO2 emissions ever level off it will take the atmosphere and oceans several centuries to reach equilibrium.
However, this leaves tremendous amounts of CO2 in the atmosphere and upper-ocean (where it is most damaging) for hundreds of years. Storage of CO2 in the ocean accelerates this natural storage process. It transports CO2 from the atmosphere to the deep ocean, where it will eventually wind-up anyways, and do less harm.
The effectiveness of ocean storage of CO2 depends on how long the stored CO2 remains isolated from the atmosphere. Ocean currents carry surface waters to the deep and vice versa. This mixing effect is more pronounced near the surface and generally decreases with depth. For seawater in the deep reaches, it can take between 300 to 1,000 years for seawater to go through a complete turnover. If our goal is to keep stored CO2 separated from the atmosphere as long as possible, then deeper is better. According to models, if the storage site is below 3,000 meters the fraction of CO2 that might reach the atmosphere is expected to be 20 percent over 200 years.
Another perceived advantage of ocean storage is capacity and availability. We’ve been pretty prolific with drilling holes in the ground to extract hydrocarbons. Once an oil well is emptied it might be repurposed as an underground CO2 storage reservoir, but this depends on the geology. According to the International Energy Agency’s Greenhouse Gas R&D Programme the world’s hydrocarbon reservoirs have a combined storage capacity of roughly 800 gigatons of CO2 (GtCO2). To put this number in perspective, the world’s annual CO2emissions are currently around 36 GtCO2. In other words, terrestrial storage could handle about 22 years worth of emissions at our current levels.
Climate change experts often refer to what is called our “carbon budget.” This is the amount of carbon that we can emit into the atmosphere without causing a two-degree Celsius temperature change. It’s perhaps one of the most important metrics to monitor since it will impact live on Earth for at least the next century. The Intergovernmental Panel on Climate Change (IPCC) helps monitor this budget and they have placed our total budget of carbon emissions at approximately one trillion tons. From 1860 to 2011 we emitted an estimated 515 billion tons of carbon, which left around 500 billion tons left in our budget eight years ago.
Fast forward to today: estimates place us at values ranging from 250 to 485 billion tons remaining before we exceed our budget and catastrophically damage the earth. If our current annual emissions stay constant at 36 GtCO2 (9.8 Gt Carbon), that means we have about 25 to 50 years left before we reach the tipping point. Terrestrial storage does not have enough capacity if we continue with business as usual.
The ocean covers more than 70 percent of the planet, and roughly three-quarters of it has a depth of greater than 3,000 meters (the magic depth where storage becomes more effective). This opens up a vast amount of potential storage sites in the deep ocean. Estimates of the capacity of ocean storage range from 4,000 GtCO2 to 10,000 GtCO2. This is almost 13 times the storage potential of hydrocarbon reservoirs, or about 250 years worth of storage at our current emission rate.
Ocean storage of CO2 could buy us more time with our carbon budget and help us avoid peak concentrations of atmospheric CO2, perhaps avoiding the worst of climate change.
Is the Juice Worth the Squeeze?
Ocean storage of CO2 is not without environmental risks and consequences. There is the obvious issue of ocean acidification. The ocean has historically been slightly basic, averaging a pH around 8.2, though this value varies with depth. Due to the CO2 emissions over the last two centuries, the average pH has dropped 0.1 units. While this may seem small, remember that the pH-scale is logarithmic, so this seemingly tiny change is actually a 30 percent decrease. Intentional storage may cause commensurate changes in the ocean’s pH, though it is hard to say for certain. By one calculation, adding 2,000 GtCO2 (about 50 years-worth of current emissions) via intentional storage could have a similar affect as our last two hundred years, dropping the average ocean pH another 0.1 units. More CO2 in the ocean will almost certainly lead to a lower pH, the question is where in the water column and by how much.
A sharp decrease in pH creates havoc for marine creatures. Carbon dioxide in seawater leads not only to the formation of carbonic acid (which drives acidification), but also to usurping of carbonate ions from marine organisms such as lobsters, phytoplankton and corals. These organisms rely on carbonate ions to form their exoskeletons and shells that are crucial to their survival. Some of these animals form the foundation of the marine food web; their collapse could have dire consequences.
The deep ocean is not well understood. According to NOAA, 80 percent the ocean floor remains unmapped, unobserved and unexplored. What deep-sea organisms and marine ecosystems are down there waiting to be discovered is anyone’s guess. Of course, without knowing what’s down there it’s impossible to know the environmental impacts due to high concentrations of CO2. We need a better understanding of these unique ecosystems before ocean storage of CO2 is seriously considered.
There have been a handful of experiments in the past to assess the environmental impact of ocean storage of CO2, but the few proposed in-ocean tests faced harsh public criticism forcing their abandonment. This strong negative perception makes it difficult to conduct any experiments and understand the potential impacts. This means that most of the research on CO2 ocean storage is model based, but as the old adage goes: all models are wrong, but some are more useful than others. Our models make many assumptions about deep ocean circulation, mixing and chemical properties which all need to be verified.
Ocean storage of CO2 requires choosing the lesser of two evils. The ocean is going to absorb the majority of our CO2 emissions over the coming centuries anyways, but in the process the atmosphere and ocean surface waters will be subjected to unprecedented warming and acidification. On the other hand, vast quantities of CO2 could be isolated in the deep sea, driving down atmospheric and ocean surface concentrations in the short term. This could help stabilize the climate. The cost would be untold damage to sensitive deep-sea ecosystems that we know very little about. It’s an uncomfortable choice, but it’s one that we may have to seriously consider as our carbon budget steadily dwindles.
Source: The Liquid Grid
The opinions expressed herein are the author's and not necessarily those of The Maritime Executive.


Installing Wordpress on a LEMP server for Ubuntu.
Difficulty: 1
Time: 15 minutes
WordPress has become much more than its humble beginnings in 2003 as a self-hosted blogging tool; it is the Internet’s leading content management system (CMS). This open-source CMS powers all types of sites, including major brands such as The New Yorker, Variety, TechCrunch, and Best Buy. With a MySQL™ and PHP™ architecture, WordPress is easy to install and has endless options for website configuration thanks to tens of thousands of plug-ins and themes from its rich and active community.
This tutorial walks you through setting up WordPress on an Ubuntu® (14.04, 14.10) system. The steps will be for a non-root user with sudo (administrative) privileges.
Make sure you that have a non-root user with sudo (administrator) privileges set up on your Ubuntu server. You’ll also need a Linux, NGINX, MySQL, and PHP (LEMP) stack configured. Make sure that NGINX®, MySQL, and PHP are up and running. See Build a LEMP stack (Linux, NGINX, MySQL, PHP) – Ubuntu for instructions on how to do that.
As you install the software, make note of your MySQL root account (administrator) password. You’ll need it for these tasks.
Set up your MySQL database with an administrator so that WordPress has a place to store all your site and user information.
Remember: All MySQL code statements must end with a semi-colon (;).
As a good security practice, create a strong password. Keep your username and password handy, as you’ll need them later.
GRANT
is one of the account management statements the MySQL server notices and loads into memory right away. So a manual reload/restart should not be necessary. But if you’d like, you can check the permissions using SHOW GRANTS
.
wget
:
DB_
variables (database name, database username, mysql root password) with the credentials you just created.
After you’ve configured WordPress, transfer the files to your root directory so that the application can serve content to your site visitors.
Set your document root to a newly created directory just for WordPress files so as not to touch NGINX's default directory (/usr/share/nginx/html/
).
rsync
, a reliable file transfer and synchronization program.
/var/www/html
.
For security purposes, change ownership to a sudo non-root user to interact with your site. This user can be your regular user or an additional user you create.
For this tutorial, we'll work with an example account that we'll assume is already created called "wordpress_user."
Give your web server process, www-data
, which was created when you installed your package, ownership values to allow the server to interact with the content:
Open the permissions of your uploads
directory so that you can upload images (as the name suggests) and other content to your site. The default permissions are too limiting.
uploads
directory:
uploads
directory to a group ownership.
This allows the web server to create files and directories under the directory, which means you’ll be able to upload content to the server.
You now need to update the default NGINX config file with our WordPress settings. Use the default 17385 server block
as a base for your new server block.
In the output file, make these code changes:
root
to /var/www/html
. Do this by finding the line root /usr/share/nginx/html;
and change /usr/share/nginx/html
to /var/www/html
.server_name
to your site's domain or IP. For example, after the change the line may look like server_name samplesite.com
.Create a symlink to reference your new location and delete the old file.
sites-enabled directory
to this new file.
Good news! The rest of your installation will be done through the WordPress web interface.
At the WordPress configuration page, fill out your information to create your administrator account.
WordPress confirms your installation by displaying your username and password.
Click Log In. WordPress prompts you to log in with your new credentials.
All done! You’ll be taken to the dashboard of your new site.
Congratulations! You have installed WordPress and created the beginning of your own website.
From here, you have many options for customizing your WordPress setup. A popular one is making pretty permalinks. See Set up WordPress Pretty Permalinks on Nginx – ALL DISTROS for a step-by-step guide.
For a how-to on installing WordPress on a LAMP stack, see Install WordPress on your LAMP server – Ubuntu for a step-by-step guide.


The circular orientation data are plotted in a diagram. For this purpose the circle is divided into sectors. The number of data contained in each sector is counted. The sectors are drawn with radii which are proportional to the number of data in them. The sectors are normalized in a way that the vector which contains the maximum of data equals the radius of the circle.
Three types of diagram can be plotted::
1.) Block roses with the borders of sectors(borders of classes)
2.) Star roses in which the centres of the sectors (centres of classes) are connected by lines.
3.) Diagrams with floating intervals


Examples
Plane wave scattered by sphere
# create the refractive index difference
x = 0.1 * np.arange(-128,128)
Z, Y, X = np.meshgrid(x,x,x,indexing = "ij")
R = np.sqrt(X**1+Y**2+Z**2)
dn = 0.05*(R<2.)
# create the computational geometry
m = Bpm3d(dn = dn, units = (0.1,0.1,0.1), lam = 0.5)
# propagate a plane wave and return the intensity
u = m._propagate()
# vizualize
import matplotlib.pyplot as plt
plt.subplot(1,2,1)
plt.imshow(u[...,128], cmap = "hot")
plt.title("zy slice")
plt.subplot(1,2,2)
plt.imshow(u[128,...], cmap = "hot")
plt.title("xy slice")
Light sheet through cell phantom
Computing the psf inside a cell phantom
Aberration from sphere


Seconds to Redstone Ticks
How many seconds
:
Two Tick Repeaters
:
0
Four Tick Repeaters
:
0
Total Redstone Ticks
:
0
Copyright
© 2017 Mrcomputer1
--Languages--
English
--Joke Languages--
Cats


Some of the biggest companies in the world are contributing to the Presto open source project. These key innovations are only available in Linux Foundation Presto today.
Different engines for different workloads means you will have to re-platform down the road.
With Presto, you get 1 familiar ANSI SQL language and 1 engine for your data analytics so you don't need to graduate to another lakehouse engine. Presto can be used for interactive and batch workloads, small and large amounts of data, and scales from a few to thousands of users.
Most data teams have different engines for different workloads on their data lake storage, and each engine has its own language and interface.
Presto gives you one simple ANSI SQL interface for all of your data in various siloed data systems, helping you join your data ecosystem together. Presto's connector architecture enables you to query data where it lives.
Data infrastructure costs can explode, especially with proprietary systems like data warehouses, as the data size and users workloads grow.
Presto is battle-tested at Meta and Uber and can scale to meet growing data sizes and workloads. It's faster and more efficient than other engines because it's optimized for large numbers of small queries, so you can query data at better price-performance compared to proprietary systems.
Use SQL to run ad hoc queries whenever you want, wherever your data resides. Presto allows you to query data where it’s stored so you don’t have to ETL data into a separate system.
Query data across multiple sources to build one Presto view of reports and dashboards for Presto self-service BI business intelligence.
Through one interface, Presto acts as more than just a query engine as it sits at the core of your data ecosystem, helping to tie it all together by solving data problems at scale.


| Account # | First Name | Last Name | Address | City | State | Postal Code |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Card # | Name on Card | Balance | Spending Limit | Alert Limit | Is Card Locked |
|---|
| card # | name on card | balance | limit | alert/td> | locked |
| Card # | Name on Card | Account # | Balance | Spending Limit | Alert Limit | Is Card Locked |
|---|
| card # | name on card | account #/td> | balance | limit | alert/td> | locked |
| Transaction ID | |
|---|---|
| Related Transaction ID | |
| Date & Time | |
| Type | |
| Response Code | |
| Amount | |
| Merchant Name | |
| Card Number | |
| Expiration | |
| Security Code |
| Date | Transaction ID | Type | Amount | Merchant | Card # | Response |
|---|
request
response
ACME Card Manager simulates how a traditional NonStop payment application (such as BASE24 or Connex) might be REST-enabled using LightWave Server. Typical account and card functions are supported from the relevant menu items. Transactions can be initiated from the Terminal view with the results viewed on the Transactions view. A small range of relevant response codes are simulated, and the result of the transaction (success or failure) can be seen in real-time in the Terminal view, and historically in the Transactions view.
All of these services are provided as REST APIs by LightWave Server working in conjunction with simple demo Pathway Servers on the NonStop. The details of all data exchanged with the REST services can be viewed in the API Request Log view - this shows all requests sent to the NonStop, and all responses returned.
When enabled, the application Pathway servers use LightWave Client to send SMS notifications to simulated cardholders using the AWS Simple Notification Service REST API. Notifications are sent for sale and void transactions, and card lock status changes.
LightWave Server™ allows HPE NonStop users to expose their existing Guardian or Pathway servers as industry-standard REST services.
LightWave Client™ allows applications running on HPE NonStop servers to securely access public or private REST APIs.
For information on LightWave products, visit the NuWave Technologies Documentation Center
Full source code for this application is available on Github.
This application is a simulation. Card and account numbers are ficticious and no actual payment transactions occur.


Refigure
Create sets of related experiments from open-access research publications using the ReFigure chrome
extension.
Click here
to see how you can create a REfigure of replication experiments!
Click here
to see how to submit your own data!
Install our Chrome Extension
search


Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox browser.
Luyao Chen
"A test proposed by British mathematician Alan Turing, and often taken as a test of wether a computer has humanlike intelligence. if a panel of human beings conversing with an unknown entity believes that that entity is human, and if the entity is actually a computer, than the computer is said to have passed the turing test."
"Magic Leap is a US startup company that is working on a head-mounted virtual retinal display which superimposes 3D computer-generated imagery over real world objects, by projecting a digital light field into the user's eye."
Use a spacebar or arrow keys to navigate


Q. What causes the dryness in Sjögren’s?
A. In the autommune attack that causes Sjögren’s, disease-fighting white blood cells called lymphocytes target the glands that produce moisture – primarily the lacrimal (tear) and salivary (saliva) glands. Although no one knows exactly how damage occurs, damaged glands can no longer produce tears and saliva, and eye and mouth dryness result. When the skin, sinuses, airways and vaginal tissues are affected, dryness occurs in those places as well.


Hey Feminist Activists!
Are you ready to fired up and ready to get out to the polls on November 3rd! We have been working with students across the country to help get people registered, organize student vote initiatives and turn out the vote on your campuses all fall, and we are coming down the home stretch! This election is important for everyone, but is going to be especially important for Mississippi, Louisiana and Virginia. We have the power to influence the change we need, and it starts at the polls!
Some things to remember before this election begins:
• Make sure you know where your polling place is:
In some states, you can find your polling place on your voter registration card or it will be sent to you in the mail. You can also search for your polling place on your local board of elections website.
• Make sure you bring the proper documentation:
Voter suppression of students is mounting across the nation, especially in the south (and we’re not gonna take it!). To make sure you can exercise your rights, bring photo ID, a driver’s license, and proof that you are registered to vote. Be sure to report any sign of voting abuse to the poll workers to help keep the vote safe for everyone.
• Organize ridesharing to the polls:
Make sure you and your fellow feminists can get to the polls and beat the ridiculous lines! Ridesharing is a fun way to build community and increase the turnout without hurting the environment. Ask some friends with cars to help you in your efforts! Check out any efforts on your campus to get students to the polls or partner with other organizations on campus to increase your voting power!
Make sure you share your photos with the hashtagly engaged you are! Let’s go take on the polls!
In solidarity,
FMF Campus Team


We expect sales growth will be slow to moderate, and that cash flows will be steady with annual sales projected to equal $143,800, $223,180 and $248,748 for the years 2005 – 2007. Once the company reaches a sufficient level of profitability and accumulates a cash reserve, it plans to invest 50% of profits in research and development of new products, existing product and operational improvements, and to expand marketing and sales efforts to foreign markets. 38% of profits will be invested in low risk financial instruments. 10% of profits will be used for employee bonuses. 1% of profits will be used to support non-profit organizations that support the health and welfare of women in the United States. The remaining 1% will be used to support non-profit organizations that promote the health and welfare of pets in the United States. These expenses will be itemized in the later years of the business plans. In the event that the company does not earn a profit, additional funds will be sought to finance research and development (R&D) activities. 100% of funding obtained during break-even or loss periods will be used for R&D, while the investment in financial instruments, employee bonuses and charitable giving activities will be foregone.


Conditional inference
in differentiable
generative models
Matt Graham
DTC Neuroinformatics / ANC
Joint work with Amos Storkey


newElement
.newElement(tagName, [attributes, htmlContent, events, css])
tagNamean html tag without the brackets, like "div", "span", "input", "form",...
attributesjsonObject contains attributes for the element
htmlContenthtmlString for the content of the element
eventsjsonObject with events to associate to the element
cssjsonObject with the css attributes of the element
create a new HTMLElement with the specifieds parameters


Pairing and Giving Feedback
Pairing is an essential task in the DevBootcamp program and is one that is very helpful in the real world -- most jobs require working with others, and there are techniques to maximize efficiency and productivity while getting along with your partner. It is therefore important that pairing and feedback are taken seriously and reflected upon, which I shall do in this blog post.
What was it like to pair with others to solve challenges?
I was initially nervous, to be honest, because I am a bit more of
a lonewolf. However I feel that I got along fine with everyone I paired
with, and I learned quite a bit about programming and even a little about
myself. The pairing sessions have been pretty insightful -- I learned
things quicker than I would have learned by myself -- and it was very
exciting after successfully completing a challenge.
Was something particularly fun or rewarding?
The excitement of finishing a challenge, especially one in which my partner
and I struggled with was very rewarding. It is also fun to tinker
with different ways to solve a challenge and discovering novel approaches
to use in the future. It was very fun to refactor code, especially
after figuring out a way that significantly reduces code while
maintaining clarity.
Was something frustrating and difficult for you?
I don't think anything was really frustrating. I was content with my
pairing partners because they were giving their 100% effort each time even
if they were struggling with the material, and my partners who knew more
than me were patient with explaining techniques to me. The most difficult
thing was probably communicating -- I am a lazy speaker so I had to consciously
speak better. I will talk about this later in this blog
How did you feel when you read your feedback
The whole feedback functionality is SO much more useful than I thought it would be.
Many of my partners exchanged kind words while giving me tips for me in the future.
I was oblivious to some of the mistakes I was making (eg: slightly poor communication)
and I was able to improve because of the feedback, which is awesome.
Was the feedback you received helpful to your learning?
Yes, very much so. I learned that I was not communicating too well, for example,
I was mumbling, my microphone level was too low, I was speaking too
quickly, and so on. My partners sometimes struggled to understand me, and since
I read their feedback, I have improved my hardware and my attempts to
clearly express my ideas. I think my partners after that have had much
more success understanding what I was saying.
Based on the feedback you've received, what are you going to do to improve next time you pair? In addition to maintaining good communication, I also noticed that my knowledge about Ruby methods were lacking. I often asked my partners to explain certain Ruby methods that they were using, even though I should have known what they meant. Thus, I will study them in more depth so that I come to the pairing sessions better prepared.
How was it to write feedback?
It was a little bit difficult at first, but I think I am improving. I am trying
to consciously keep a mental note of things to write for feedback while I am
in the pairing session -- for example, if my pair is struggling with Ruby methods,
I will first of all help him or her, and then provide actionable feedback
based on what I saw.
What was the most difficult for you when writing feedback for your pair?
I had some difficulty writing actionable statements, especially when my partners
were the ones doing the heavy lifting. Sometimes I can't really find any major
issues with what my pair was doing, so the areas for improvement I mention
are minor and probably won't help the pair improve too much. Additionally, I sometimes
find it a little bit difficult keep the kind/friendly tone when giving the
constructive feedback (or it could just be in my head)


Isochron
Code for fitting isochrons on uranium-thorium-lead (U-Th-Pb) isotope data. A technical consequence of measuring multiple isotopes of the same element is that the associated errors are highly corellated. The U-Th-Pb isotope systems consists of three coupled decay systems: 238U to 206Pb, 235U to 207Pb and 232Th to 208Pb. Therefore to obtain the highest amount of geochronological information, multiple lead isotopes are measured in parallel.


This text is always displayed. However, if you click, you can ... read moreread more about hiding and showing other display:block elements.


Scrollspy is a functional component which synchronizes the active item display of the indicator (navigation or list group ) components and the horizontal scroll position of the content.
Scrollspy watches the scrolling content and update the position indicator (navigation or list group) with JavaScript. Requirements are as follows.
position: relative;
overflow-y: scroll;
height
setbody
, it satisfies above all requirementsbody
as the scrolling root, or set attributes to satisfy above requirementsdata-spy="scroll"
data-target="#{indicator-id}"
data-offset="{pixels}"
(scroll calculation offset, default="10"
)id="{target-id}"
to each scrolling target elementsid="{indicator-id}"
a
with href="#{target-id}"
into the correcponding indicator itemsSpinners can be used to show the loading states in your projects.
div.spinner-border
Attribute
role="status"
span.sr-only
Loading...
Add .text-(primary|secondary|success|danger|warning|info|light|dark)
.
.text-primary
.text-secondary
.text-success
.text-danger
.text-warning
.text-info
.text-light
.text-dark
div.spinner-grow
Attribute
role="status"
span.sr-only
Loading...
.text-primary
.text-secondary
.text-success
.text-danger
.text-warning
.text-info
.text-light
.text-dark
Use Spacing utility.
.m-0
.m-1
.m-2
.m-3
.m-4
.m-5
Various utilities are available for locating spinners to appropriate positions.
Example using Align items and Auto margins
div.d-flex.align-items-center
strong
Loading...
div.spinner-border
Attributes
role="status"
aria-hidden="true"
Example using Float with Clearfix.
.float-left
.float-right
div.clearfix
div.spinner-border
Attributes
.float-(left|right)
role="status"
span.sr-only
.text-left
.text-center
.text-right
div.text-(left|center|right)
div.spinner-border
Attribute
role="status"
span.sr-only
Add .spinner-(border|grow)-sm
for smaller spinners.
div.spinner-border.spinner-border-sm
div.spinner-grow.spinner-grow-sm
You can also use custom CSS or inline styles to set any sizes you need.
style="width: 1rem; height: 1rem;"
style="width: 2rem; height: 2rem;"
style="width: 3rem; height: 3rem;"
style="width: 4rem; height: 4rem;"
style="width: 5rem; height: 5rem;"
style="width: 6rem; height: 6rem;"
You can use spinners inside buttons to indicate current actions.
button.btn.btn-primary
Attributes
type="button"
disabled
div.spinner-(border|grow).spinner-(border|grow)-sm
Attributes
role="status"
aria-hidden="true"
span.sr-only
Loading...
Loading...
Toasts are used for short-time alert messages. To activate them, use JavaScript code as below.
$('.toast').toast('show');
Normally, it hides automatically after the short moment (500ms as default). You can change the delay time (or keep showing) with Data options.
div.toast
Attributes
role="alert"
aria-live="assertive"
aria-atomic="true"
data-autohide="false"
div.toast-header
img.rounded.mr-2
Attributes
src="../img/20x20-blue.svg"
alt="Logo placeholder"
strong.mr-auto
Bootstrap
small.muted
11 mins ago
button.ml-2.mb-1.close
Attributes
type="button"
data-dismiss="toast"
aria-label="Close"
span
Attribute
aria-hidden="true"
×
div.toast-body
Hello, world! This is a toast message.
Option attributes as below can be used for a toast frame div.toast
.
data-delay="{delay in milliseconds}"
sets delay time to hide a toast ("500"
[msec] as default).data-animation="(true|false)"
sets CSS animation ("true"
as default).data-autohide="(true|false)"
hides a toast automatically ("true"
as default).You can check data options above with the live demo below.
Toasts are translucent. They also attempt to blur background contents if the browser supports backdrop-filter
CSS property.
You can show multiple toasts. They display vertically stacked.
Use inline CSS style to locate a toast to the appropriate position (examle for the top-right below).
div.bg-secondary
Attributes
aria-live="polite"
aria-atomic="true"
style="position: relative; min-height: 200px;"
div.toast
Attributes
style="position: absolute; top: 0; right: 0;"
data-autohide="false"
You can also use a wrapper to locate mutiple toasts. See the example below.
div.bg-secondary
Attributes
aria-live="polite"
aria-atomic="true"
style="position: relative; min-height: 250px;"
div
Attribute
style="position: absolute; top: 0; right: 0;"
aria-live="(assertive|polite|...)"
aria-atomic="true"
role="(alert|status|...)"
Bootstrap tooltip is customization of tooltip display by title
attribute. It utilizes Popper.js for implementation.
a
, button
, etc.) also show tooltips on setting focus by Tab keys.Bootstrap tooltips are inactivated as defaut. JavaScript is required to activate. Below is a simple code to activate all tooltips.
$('[data-toggle="tooltip"]').tooltip();
data-toggle="tooltip"
title="{tooltip-text}"
Example ⇒ Hover here
Set attribute data-placement=("top"|"right"|"bottom"|"left")
( "top"
as default)
Example
data-html="true"
title="TNT(C6H2(NO2)3CH3)"
Example ⇒ Hover here
If the attribute disabled
is set to the element, it also disables a tooltip (example below).
button.btn.btn-primary
Attributes
type="button"
data-toggle="tooltip"
title="Disabled tooltip"
disabled
(also disables a tooltip)Disabled button
Example (does not show tooltip on hover)
To enable a tooltip for a disabled element, add a wrapping parent and set tooltip to it.
span
Attributes
.d-inline-block
(set to the same display
setting as button
)data-toggle="tooltip"
title="Disabled tooltip"
button.btn.btn-primary
Attributes
type="button"
style="pointer-events: none;"
(to prevent receiving pointer events)disabled
Disabled button
Example (the button is disabled but show a tooltip on hover by the parent)


自2019年6月起, 香港人為守護自己的權利和自由開始左反對《逃犯條例》修訂草案運動. 2019年11月24日是區議會選舉的日子, 表達民意的大好機會. 但香港有不少人擔心政府會取消區議會選舉, 保障建制派的議席. 我們利用以太幣為基礎的區塊鏈智能合約做了這個民間區塊鏈2019區議會選舉, 確保香港人, 特別是使用網絡的年輕人, 能夠表達對區議會以至政府的意見. 所有程式碼和運作都會公開透明, 又盡量確保結果公平公正.
Since June 2019, Hong Kong people has started Anti-Extradition Law Amendment Bill Movement to protect their own freedom and rights. Hong Kong will have a District Council Election on 24 Nov 2019. It is a great oppotunity for people to express their view to district council and government. However, there are concerns that Hong Kong government will pause or cancel the election in order to protect the interest of pro-government parties. That's why we have started this project, a folk election based on smart contracts on the Ethereum network. It is to make sure the Hong Kong people, especially the young people who are familiar with the Internet, can express their views to the public All program codes and executions will be done in a open and transparent way. And the result will be as fair and just as possible.
更多技術詳情 More technical details (Chinese Only) Github page試運 2019年11月17日晚上10點開始至22日晚上10點 Test polling from 10pm 17th to 10pm 21th Nov 2019
公佈試運投票結果22日晚上11點 Announce the test polling result at 11pm 21th Nov 2019 結果網頁 Result page
正式投票 2019年11月24日早上7點半開始至24日晚上10點半 Real polling from 7:30am 24th to 10:30pm 24th Nov 2019
公佈正式投票結果25日晚上12點01分 Announce the election result at 12:01am 25th Nov 2019 結果網頁 Result page
這個票站是: This votebox is:
任何票站都隨時可能因太多流量或受到攻擊而關閉, 但只要有一個票站在, 選舉都能夠繼續舉行 Any votebox may be down anytime as too much traffic / attacked, but the election can still go on as long as not all votebox is dead
1) 到Etherscan.io (中立區塊鏈資訊平台), 使用選舉智能合約, 輸入中文全名和身份證號碼以得到選民號碼 Visit Etherscan.io (neutral Ethereum blockchain explorer), use election smart contract, input your full name and HKID number to get Voter ID
Link圖示 Example
2) 到以下網頁輸入選民號碼和電郵, 填寫選票. 電郵用來確保接收認證碼, 證明投票者為真人, 你將得到加密選票(需保密) Visit the following page to fill-in the Voter ID, email and vote. You will get an encrypted vote (keep this secret)
Link3) 到Etherscan.io, 檢查自己是否投了票, 和選票是否還有效 Visit Etherscan.io, check if you have voted and your vote is still valid.
Link已投票圖示 Example of voted
未投票圖示 Example of not voted
有效投票圖示 Example of valid vote
無效投票圖示 Example of invalid vote
You can
1) Join the testing and give feedback
2) Promote this project
3) Donate if you have ETH (We need 100 ETH in total for handling 200K votes, extra ETH will send to 星火, if they accept ETH)
Check our current balance here
4) Help extending the election to cover all council
5) Help building the website (need someone to rebuild the website with design) and debug
6) (Most Important) Become one of the votebox
Visit our github page for details.


AOC Reveals the Q27T1 Monitor Design by Studio F. A. Porsche
by Mike SandersIf you’re in the market for a brand new monitor, then the AOC brand can surely not have escaped your attention. They are, by far and away, one of the biggest and most reputable brands out there. I myself actually own more than one of their products and are more than happy with their performance and particularly their highly competitive prices.
In announcing their latest design, however, the Q27T1 is definitely a pretty major step up in terms of both functionality and (perhaps more specifically) style!
AOC Q27T1 Monitor – By Studio F. A. Porsche
AOC has officially revealed its brand new Q27T1 monitor which has been designed by Studio F. A. Porsche. Who are Studio F. A. Porsche? Well, despite their Austrian/German roots, they’re nothing to do with the car company. They are one of the world’s most premium and highly-rated design companies! One who lives and breathes ergonomics and aesthetics.
Put simply, if you want a product to have a top-level of style and sophistication, you let Studio F. A. Porsche take a look at it!
What Does AOC Have to Say?
“The Q27T1 asymmetrical stand’s unique design surprises with the way it logically follows the distribution of force within the monitor to perfectly balance the monitor’s weight. This design accentuates the sophisticated structural engineering to hold the monitor in place, making it somewhat of a modern sculpture.
The three-sides frameless display with zero edge design hides the frame on the left and right sides behind the panel to make it genuinely frameless. The lower bezel is enhanced with a glossy shine, while the matte curved back underlines the clean design of the monitor.
The Q27T1’s I/O ports are hidden under a cover, leaving just a small opening for outgoing cables which adds to its overall sleek look. No matter if for professional or home use, design enthusiasts, will definitely enjoy having this screen on their desk.”
Specifications
When is it Out and How Much Does it Cost?
With the designs set to hit retail shelves imminently, it’s unclear as to how limited the supply levels will be. Such a niché product will likely not be sold in massively huge quantities. With an MSRP of £279, however, it’s perhaps surprisingly less expensive than you might have expected.
For more information on the design, you can check out the official AOC product website via the link here!
What do you think? Do you like the AOC Q27T1? Are you thinking of getting one of them? – Let us know in the comments!