Lila Tretikov announced as Executive Director
Thirteen months after the March 2013 announcement that Sue Gardner was planning to step down as the Wikimedia Foundation Executive Director, the Board of Trustees announce that Lila Tretikov has been appointed to the position, effective June 1. She previously worked as the Chief Product Officer at SugarCRM.
- Press release: Wikimedia Foundation names Lila Tretikov as its new Executive Director
- Wikimedia blog: Announcing our new Executive Director: Lila Tretikov
- Signpost: Foundation announces long-awaited new executive director
- New York Times: Open-Source Software Specialist Selected as Executive Director of Wikipedia
Media Viewer and superprotect conflict
The Wikimedia Foundation roll out the Media Viewer, a software feature intended to provide a "more immersive multimedia experience". Following a community decision, a volunteer administrator disables the feature. He is reverted by a Wikimedia Foundation staff member, who threatens to remove his administrator status. Soon after, the Wikimedia Foundation rolls out a software change called "superprotect" that can restrict anyone but WMF employees from changing a page. These events result in an arbitration case on the English Wikipedia, as well as controversy on the German Wikipedia. The superprotect feature is eventually removed from all wikis on November 5, 2015.
Letter to Wikimedia Foundation: Superprotect and Media Viewer
Pete Forsyth, a Wikimedia community member, writes a letter to the Wikimedia Foundation leadership expressing concern about the recent events with the Media Viewer rollout and the superprotect change. The letter receives nearly 1,000 signatures, but receives no response from the Wikimedia Foundation.
Jan-Bart de Vreede writes a post about "crossroads"
Jan-Bart de Vreede, then the chair of the Wikimedia Board of Trustees, posts on Lila Tretikov's Meta talk page that "we are at a crossroads....Other internet projects (not limiting ourselves to websites) are passing us by left and right...All of this is going to require change, change that might not be acceptable to some of you. I hope that all of you will be a part of this next step in our evolution. But I understand that if you decide to take a wiki-break, that might be the way things have to be. Even so, you have to let the Foundation do its work and allow us all to take that next step when needed. I can only hope that your break is temporary, and that you will return when the time is right."
Steven Walling leaves
Steven Walling, (User:Steven Walling), Product Manager of the Growth team, leaves the Wikimedia Foundation after four years of employment.
Terry Chay leaves
Terry Chay, Director of Features Engineering, leaves the Wikimedia Foundation after two years and eight months of employment. He later writes a long response to a Quora question asking "What has caused so many people to leave jobs at the Wikimedia Foundation (WMF) in 2015-16?"
Damon Sicore joins as Vice President of Engineering
Damon Sicore joins the Wikimedia Foundation as the Vice President of Engineering. Before coming to the WMF, he worked at Edmodo and, before that, at the Mozilla Corporation.
Brandon Harris leaves
Brandon Harris (User:Jorm), Senior Designer, leaves the Wikimedia Foundation after four years of employment.
Lila Tretikov discusses her "Call to Action" with the Board of Trustees
The "Call to Action" is discussed with the Board of Trustees and other attendees. This is a list of focuses for the Wikimedia Foundation, and one of the first clear statements of Lila Tretikov's vision. Meeting notes indicate she intends to present it to staff at the upcoming all-hands meeting on Jan 21–22.
Community Engagement team is created as Anasuya Sengupta's departure is announced
Community Engagement team is created in response to Anasuya Sengupta's upcoming departure. The team is led by Luis Villa, who is promoted to Senior Director of Community Engagement. Siko Bouterse is promoted to Director of Community Resources to lead the Grantmaking team.
The Wikimedia Foundation asks for strategy input from the community
The Wikimedia Foundation asks community members to provide input on the "future of Wikimedia" to "inform the development of the direction and priorities for the Wikimedia Foundation". This takes the form of a two-week-long community consultation, announced by Philippe Beaudette. The consultation contains only two questions. Although it as identified as "the first step" in the consultation, it is never revisited.
Terry Gilbey joins as interim COO
Terry Gilbey joins the Wikimedia Foundation as interim Chief Operating Officer. He had previously consulted with the Wikimedia Foundation. Before that, he was the Executive Director of Enterprise Operations at Kaiser Permanente (a healthcare organization), and in management at IBM Global Services.
Kourosh Karimkhany joins as Vice President of Strategic Partnerships
Kourosh Karimkhany joins the Wikimedia Foundation as the Vice President of Strategic Partnerships. Previously, he was the head of corporate development at Condé Nast.
First publication of Wikimedia Foundation's "Call to Action" to the broader community
The "Call to Action" is first outlined publicly. The list is divided into subcategories: Improve technology & execution, focus on knowledge & community, support innovation & new knowledge.
Erik Möller leaves
Erik Möller (User:Eloquence), Vice President of Product and Strategy and Deputy Director, leaves the Wikimedia Foundation after seven years of employment.
Wikimedia Foundation reorganizes its engineering team
The Wikimedia Foundation reorganizes its engineering team. Some of the April departures are suspected to be in relation to this shakeup. The reorganization is later described as poorly handled, and it is criticized for being based on assumptions of an impractically large budget increase. The reorganization occurred in a span of two weeks, and some WMF staff did not learn about it until the day it was implemented.
Wes Moran joins as Vice President of Search & Discovery
Wes Moran joins the Wikimedia Foundation as the Vice President of Search & Discovery. Previously, he was the Vice President of User Experience at SugarCRM and had consulted with the Wikimedia Foundation for several months.
Funds Dissemination Committee member asks about the focus on the Search and Discovery team
User:Risker, a member of the Funds Dissemination Committee, posts a "Review from current FDC member" on the draft 2015–2016 Wikimedia Foundation Annual Plan talk page. She includes the comment, "Search and Discovery, a new team, seems to be extraordinarily well-staffed with a disproportionate number of engineers at the same time as other areas seem to be wanting for them. I don't see "fix search" in the Call to Action document; even if it fell into the heading "Improve technology and execution", this seems like an abnormally large concentration of the top WMF Engineering minds to be focusing on a topic that didn't even rate its own mention in the CtA. More explanation of why Search and Discovery has suddenly become such a major focus is required to assess whether this is appropriate resourcing."
2015 Wikimedia Foundation Board of Trustees election results announced
Dariusz Jemielniak (User:Pundit), James Heilman (User:Doc James), and Denny Vrandečić (User:Denny) are elected to the three two-year-long community seats on the Wikimedia Foundation's Board of Trustees.
"Knowledge engine" terminology first used publicly
The term "knowledge engine" is first used publicly in a slide in the June 2015 Metrics meeting. Following a slide reading "Strategic Direction" is a slide reading "From Wikipedia and sisters → Open Source library of all Knowledge. A knowledge engine where users, institutions and computers around the world contribute and discover knowledge on Wikimedia every day, on every platform, in their own language."
Damon Sicore leaves
Damon Sicore, Vice President of Engineering, leaves the Wikimedia Foundation after eight months of employment. This is first brought to light when someone notices his account has been removed from the Foundation wiki and globally locked. Some Wikimedia Foundation staff clarify that Sicore is on leave for two weeks, though they have been instructed not to share this information in writing. Lila Tretikov subsequently reveals that Sicore will not be returning. Reasons for his departure are not provided; in an FAQ attached to her email, Lila states that "Damon's departure is a personnel issue, so we are not able to comment on it."
Fabrice Florin leaves
Fabrice Florin, Movement Communications Manager, leaves the Wikimedia Foundation after three years of employment. This is originally announced on June 18.
Boryana Dineva joins
Boryana Dineva joins the Wikimedia Foundation as the Vice President of Human Resources. Previously, she led the Human Resources Analytics, Information Systems, and Operation groups at Tesla Motors.
Philippe Beaudette leaves
Philippe Beaudette, (User:Philippe), Director of Community Advocacy, leaves the Wikimedia Foundation after six years of employment, citing health reasons.
Knight Foundation approves $250,000 grant to build a search engine
The Knight Foundation approves a $250,000 grant to the Wikimedia Foundation, under the conditions that the money is used "to advance new models for finding information by supporting stage one development of the Knowledge Engine by Wikipedia, a system for discovering reliable and trustworthy public information on the Internet." The document titles the project "Search Engine by Wikipedia." The document details how the Knowledge Engine will "upend" commercial search engine structures. It cites development on similar projects from Google, Yahoo, and other "big commercial search engines" as a potential threat to the project.
James Heilman sends email to the rest of the Board of Trustees with concerns about the Knight Foundation grant
After the grant is presented to the Wikimedia Foundation Board of Trustees, board member James Heilman writes an email to the rest of the board. In this email, he states, "We are at 6 days since being notified of the Knight Foundation grant. I at this point strongly oppose its acceptance. There are too many issues..." He goes on to detail his concerns, including that the WMF is "'selling' the Knight Foundation a search engine," confusion over whether or not the project will involve building a search engine, and "serious lack of transparency." He warns "it maybe a bigger issue than simply refusing a grant."
Lila Tretikov sends email to staff saying that the Knowledge Engine "is NOT ... a search engine"
Lila Tretikov sends an email to staff, in which she states "[the Knowledge Engine] is NOT ... a search engine". This email is later provided to the Signpost by several staff members.
Wikimedia Discovery FAQ page created
Tomasz Finc creates the Wikimedia Discovery FAQ page on MediaWiki wiki. In its first draft, it includes the question "Are you building a new search engine?"
Superprotect feature is removed from all wikis
The Wikimedia Foundation removes the superprotect feature from all wikis. Lila Tretikov explains, "Superprotect set up a precedent of mistrust, and this is something it was really important for us to remove, to at least come back to the baseline of a relationship where we're working together, we're one community, to create a better process. To make sure we can move together faster, and to make sure everybody is part of that process, everybody is part of that conversation, and not just us at the Wikimedia Foundation." This change is rushed out in order to be presented at the Metrics meeting. Some Wikimedia community members involved in the August 2014 letter to the Wikimedia Foundation express concern that the underlying problem has not been addressed.
Board of Trustees approves Knight Foundation grant
The Board of Trustees approves the $250,000 grant from the Knight Foundation. Although Heilman supports the vote, he later states that he did so "following pressure which included comments about potentially removing members of the Board."
Wikimedia Foundation all-staff meeting with Lila Tretikov, Jimmy Wales, and Patricio Lorente
Lila Tretikov calls an all-staff meeting with herself and board representatives to discuss growing staff discontent at the Foundation's senior leadership and to provide an opportunity for open staff feedback. This meeting establishes that the board has provided Lila with a second chance and offered her their full support. Although the resulting airing of grievances is cathartic for some, many WMF employees are left frustrated by the lack of agenda and established outcomes from the meeting and are disheartened by the stream of frustrated and negative feedback. One staff member characterizes the two-hour meeting as "a combination of a guilt trip and a trial, with no set goals."
Asaf Bartov challenges Lila's KE statements as "a lie" in the all-staff meeting
Asaf Bartov, Head of WMF Grants and Global South Partnerships at the Wikimedia Foundation, later writes on Facebook (non-Facebook mirror of the comment), "I confronted Lila about these falsehoods, and asked why we are being lied to. My concerns were dismissed (by Jimmy) as "harsh words", and a re-assertion that no search engine is planned." He also writes, "It was only after staff (outside the Discovery team, *who were also in the dark* regarding the grant and what was written in it) began asking persistent questions on the staff-wide mailing list about the mysterious and undefined "Knowledge Engine" that Lila shared any information at all."
Patricio Lorente sends email to Wikimedia Foundation staff
Wikimedia Foundation Board of Trustees chair Patricio Lorente sends an email to Wikimedia Foundation staff, referencing concerns and a statement on the internal wiki. The email goes on to state, "We recognize there were legitimate concerns in certain areas, such as staff management, communications, and style of leadership. We acknowledge that many of those issues arise also from poor communication from the Board in setting expectations for change and the asks we have made to Lila, our Executive Director. We are working with Lila to put together a plan to address these issues. We are confident that she has the capability and the commitment needed for this challenging time, and we know that, at the present time, she is listening carefully to the Board, to you, and to the community. To that end, the Board remains unanimously committed in our support of Lila in her role and in her efforts to adapt her leadership and to address these issues. We ask everyone to move forward. We will continue working with the Executive Director and supporting her progress, and we rely on your help in this process and your personal commitment to the WMF and our shared vision."
Funds Dissemination Committee criticizes lack of transparency from the Wikimedia Foundation
The Funds Dissemination Committee include in their recommendations a request that the Wikimedia Foundation "improve its own level of planning transparency and budget detail." They state that they are "appalled by the closed way that the WMF has undertaken both strategic and annual planning, and the WMF's approach to budget transparency (or lack thereof). This sets a poor example for the affiliate organisations in the movement, decreases the moral authority of the FDC and decreases the general level of trust within the movement." They recommend that the Wikimedia Foundation submit their annual plan for review in the second round of the process.
Staff engagement survey results announced internally to staff
The results of a staff engagement survey are announced internally. Although more than two dozen Wikimedia Foundation staff members supported releasing the survey results publicly, this has not happened. A staff member leaked the survey results to the Signpost, which provided a summary but did not publish the results in full. Among the findings, gleaned from 93% of staff members, were high levels of pride in working at the Wikimedia Foundation and strong confidence in line managers. More concerning were responses to other questions regarding the Foundation's senior leadership:
- Senior leadership at Wikimedia have communicated a vision that motivates me: 7% agree
- Senior leadership at Wikimedia keep people informed about what is happening: 7% agree
- I have confidence in senior leadership at Wikimedia: 10% agree
- Senior leadership effectively directs resources (funding, people and effort) towards the Foundation's goals: 10% agree
This apparently extends to members of the executive team: according to the Signpost, only one C-level has confidence in senior leadership.
James Heilman is removed from the Board of Trustees
The Board of Trustees vote 8–2 to remove James Heilman (User:Doc James). No explanation is given for the removal, which prompts outcry on the Wikimedia-l mailing list, Jimmy Wales' talk page, and in other venues. Wales responds to inquiries, but receives criticism for a response that seems to blame the lack of explanation on Heilman.
Kelly Battles and Arnnon Geshuri appointed to Board of Trustees
Kelly Battles and Arnnon Geshuri are appointed to Board of Trustees by the board. Kelly Battles is currently the Chief Financial Officer of Bracket Computing, a California-based company providing cloud computing. Arnnon Geshuri is the Vice President of Human Resources at Tesla Motors.
Boryana Dineva replies to an email on Wikimedia-l about retention
After a community member expresses concern over a high level of staff turnover at the Wikimedia Foundation, Vice President of Human Resources Boryana Dineva replies, "The HR team definitely keeps an eye on turnover on a regular basis. One of the first things I did when I started (approximately 3 months ago) is a stats health check including turnover trends, org demographics, compensation practices, recruiting stats, etc." She describes analysis her team performs on turnover and compares to market trends, and discusses regular surveys on staff engagement. She is later criticized for not disclosing the level of discontent with senior management that was reflected in the most recent employee survey.
Wikimedia Foundation announces grant from the Knight Foundation
The Wikimedia Foundation announces a $250,000 grant from the Knight Foundation to "launch a new project to explore ways to make the search and discovery of high quality, trustworthy information on Wikipedia more accessible and open." This announcement comes two months after the Board of Trustees vote to accept the grant.
Community members discuss Arnnon Geshuri's role in the High-Tech Employee Antitrust Litigation
Days after Arnnon Geshuri's appointment to the board, a community member notes in an email to Wikimedia-l that Geshuri was involved in the High-Tech Employee Antitrust Litigation. Geshuri, then the director of staffing at Google, received a complaint from Steve Jobs that a Google recruiter had attempted to poach an Apple employee. Geshuri responded to say that the recruiter "should not have [contacted the employee] and will be terminated within the hour," and that "we will be very careful to make sure this does not happen again." Litigation on the issue later ended in a settlement involving both Google and Apple, amounting to $415 million.
The Wikimedia Foundation begins a new strategy consultation
With the February 2015 strategy consultation abandoned, a new one is opened. The staff managing the effort emphasize that "We also need to finalize the Foundation's strategy quickly, so that we can meet our 2016 Annual Plan deadlines and align our team and department strategies with the overall strategy."
Frances Hocutt speaks up about staff engagement survey at the Metrics meeting
At the January Metrics meeting, software developer Frances Hocutt speaks up to ask why the high level of discontent with senior leadership reflected in the staff engagement survey is not being discussed. Senior Research Scientist Aaron Halfaker follows up on the Metrics meeting talk page and posts on Lila Tretikov's talk page to attempt to get a response to the question. Tretikov says she will ask to follow up, but the question goes unanswered.
Request for comment filed for a vote of no confidence in Arnnon Geshuri
A request for comment is opened on Meta, proposing "In the best interests of the Wikimedia Foundation, Arnnon Geshuri must be removed from his appointment as a trustee of the Wikimedia Foundation Board." Board member Guy Kawasaki is notably the first to oppose the vote. The vote eventually receives 292 votes supporting the no confidence proposal and 22 opposing. The issue receives broad coverage in the mainstream media.
- Meta request for comment: Vote of no confidence on Arnnon Geshuri
- Signpost: Vote of no confidence; WMF trustees speak out
- Signpost: Media coverage of the Arnnon Geshuri no-confidence vote
- Ars Technica: Wikipedia editors revolt, vote "no confidence" in newest board member
- BBC: Wikipedia editors sign vote of no confidence
Florence Devouard writes an email to Wikimedia-l about Geshuri
Florence Devouard (User:Anthere), former Chair of the Board of Trustees, writes an email to Wikimedia-l about the controversy surrounding Arnnon Geshuri. She states that she supported the no confidence vote against Geshuri, and writes about how she waited for Geshuri or the entire board to speak about the decision to appoint him. She writes, "I can't sit and say nothing. Learning the whole story about Arnnon was a disappointment to me as it means the board selection process is not working as it should be.... I hesitate between two interpretations. Either the board is completely paralyzed and no more able to make any decision as to what they should do. Or the board has decided not to provide any feedback, which I consider completely disrespectful to the community and unhealthy generally. Either way, I consider this lack of responsiveness from the board an even WORSE consideration than Arnnon being a board member." She also discusses concerns about the conflict-of-interest policy for the board.
 As a quick review - my vote to remove him was because of a pattern of behavior and actions that I viewed as violating the trust and values of the community. One example emerged clearly after he was removed - he made a false claim about why he was removed, and I got a unanimous statement from every board member involved that it was false. The community deserves better than that.  He wrote a nice piece for the Signpost about transparency which implied that the board got rid of him for wanting more transparency.
Arnnon Geshuri emails Wikimedia-l to say he intends to stay on the Board of Trustees
Arnnon Geshuri sends an email to Wikimedia-l acknowledging the complaints that have been made about him. In his message, he states, "I know I have a longer journey than most new Board members to prove to the community and WMF alumni that they can put their trust in me." His pledges to work through the issues are later criticized by a community member, who writes, "What you describe as an *inspirational* experience, I see as an extremely painful event to watch as it damages the Wikimedia Foundation and the wikimedia movement."
Arnnon Geshuri resigns from the Board of Trustees
The day after Geshuri emails Wikimedia-l indicating that he intends to remain on the Board of Trustees, board chair Patricio Lorente and vice chair Alice Wiegand send an email to report that Geshuri has decided to step down. In the email, they say, "To paraphrase his words, he doesn't want to be a distraction for the important discussions that the community and the Foundation need to face in the times to come."
Pine posts on Lila Tretikov's talk page about employee intimidation
User:Pine begins a conversation on Lila Tretikov's Meta talk page about rumors that Wikimedia Foundation employees are being intimidated into silence.
Lila Tretikov replies to thread about employee intimidation
Lila Tretikov responds to a thread containing concerns about employee intimidation at the Wikimedia Foundation. In her reply, she says, "Hi Pine, retaliation is strictly prohibited by WMF policy and will not be tolerated. A healthy discourse is important in any organization, especially within our movement which values free speech. We support feedback in our office. I ask anyone who believes they are experiencing retaliation to report it to myself, HR, or Legal. Allegations of retaliation will be investigated and we will take action."
Lila Tretikov posts "Some background on the KE grant" on her Meta talk page
In response to questions about the Knight Foundation grant, Lila Tretikov posts an explanation on her Meta talk page. It opens with, "As some of you know, I have been making concerted efforts to engage deeper on-wikis and to provide more insights into my thought process. As a demonstration of this commitment, I would like to share my thoughts on the Knight Foundation grant which has been called out for clarification." She goes on to take responsibility for not discussing the grant with the community sooner, and says, "Quite honestly, I really wish I could start this discussion over in a more collaborative way, knowing what I know today." In a later section, she explains that she cannot share the full content of the Knight Foundation grant paperwork because of "donor privacy."
María Sefidari rejoins the Board of Trustees
María Sefidari (User:Raystorm) rejoins the Board of Trustees to fill the vacancy left by James Heilman. She was a member of the board from 2013–2015, and she earned the fourth-highest ranking in the elections for the 2016 board.
Frances Hocutt replies to thread about employee intimidation
Frances Hocutt, a software developer for the Wikimedia Foundation, responds to a thread containing concerns about employee intimidation at the Wikimedia Foundation saying, "I have taken great care to speak with civility during these months of conflict, particularly when I have spoken in public. I have also expressed my concerns about the potential for retaliation to my manager and to HR. I have been repeatedly assured that I have nothing to worry about due to the care I take with my words, but the specific standards that are being used to define 'aggressive', 'unprofessional', and 'uncivil' are still unclear to me. I hear my colleagues' concerns and see some of them being censured for speaking in ways that I have found sharply critical but still fundamentally honest and civil, and I worry that someday I will be the one who is suddenly found to have stepped over lines which were previously invisible or unspoken. I fear that even making this reply with my volunteer account will be considered 'unprofessional': it is both critical and public, and no clarification has been given yet on the question of what constitutes 'professional' usage of our staff and volunteer accounts." The edit summary is, "reply to Pine: I'm still afraid." There has been no response from Tretikov.
Community member raises concerns about Boryana Dineva
On January 11, Lila Tretikov had sent an email to Wikimedia-l thanking Amy Elder and Boryana Dineva for managing the recruiting process that resulted in Arnnon Geshuri's appointment. On February 6, Ruslan Takayev sends an email including, "Are we any closer to having public comments from the BoT on how the Arrnon debacle was able to occur? I am especially interested in how Boryana fits in with this. Given Boryana's shared history t Telsa with Arnnon, she would surely have known about Arnnon's past at Google, but it would appear this past was never mentioned in the presentation to the board by her. At best this could be seen as an attempt to secure "jobs for the boys"; at worst it can be seen as incompetence on the part of Boryana." There has been no response.
Jimmy Wales posts on his talk page that the Wikimedia Foundation will not be creating a general search engine
Jimmy Wales posts on his talk page: "To make this very clear: no one in top positions has proposed or is proposing that WMF should get into the general 'searching' or to try to 'be google'. It's an interesting hypothetical which has not been part of any serious strategy proposal, nor even discussed at the board level, nor proposed to the board by staff, nor a part of any grant, etc. It's a total lie."
James Heilman states that cost estimates provided to the board for the Knowledge Engine were in the "10s of millions range and were still likely conservative"
James Heilman writes on Facebook (non-Facebook mirror of the comment), "there are more complete estimates of costs that both you and I saw that were for all four stages of this project. These estimates were in the 10s of millions range and were still likely conservative. Yes I agree that a global search engine is going to cost more than 2.5M and cost estimates were well above that." He later mentions $32 million as a proposed amount.
Siko Bouterse leaves
Siko Bouterse, Director of Community Resources, leaves the Wikimedia Foundation after four and a half years of employment. In her departure email, she writes, "Transparency, integrity, community and free knowledge remain deeply important to me, and I believe I will be better placed to represent those values in a volunteer capacity at this time."
Signpost reveals that the Wikimedia Foundation initially requested $6 million from the Knight Foundation
The Signpost examines internal documents to conclude that the Wikimedia Foundation initially requested the Knight Foundation provide a $6 million grant to fund the first stage of the project over three years. The grant was finalized at $250,000 for a year of development. The documents also state that "the remaining initial support will come from the Wikimedia Foundation's general fund or from additional restricted grants."
Jimmy Wales denies that the Knowledge Engine is a Google competitor
Jimmy Wales posts on his user talk page suggesting that people "[read] the actual grant agreement" and stating, "Media reports and trolling suggesting that this is some kind of broad google competitor remain completely and utterly false."
Wes Moran and Lila Tretikov publish a post on the Wikimedia blog titled "Clarity on the future of Wikimedia search"
Wes Moran and Lila Tretikov release a blog post describing the current state of search on Wikimedia projects, the Knight Foundation grant, and plans for search engines. The post seems targeted at recent press attention describing the project as a Google competitor. The post states, "What are we not doing? We're not building a global crawler search engine. We're not building another, separate Wikimedia project.... Despite headlines, we are not trying to compete with other platforms, including Google."
Brion Vibber asks "why the secrecy and stonewalling?" on a comment on the Moran–Tretikov post
Brion Vibber, Lead Software Architect for the Wikimedia Foundation, writes a comment on Moran and Tretikov's blog post: "I know that former VP of Engineering Damon Sicore secretly shopped around grandiose ideas about a free knowledge search engine, which eventually evolved into the reorg creating the Discovery team. From leaked documents, we know at least some of those grandiose plans went into the early drafts of the Knight Foundation grant request, which eventually became a smallish grant to support Wikipedia's search capabilities. What we don't know is to what degree Executive Director Lila Tretikov was supporting the secretive "compete with Google" plan without putting it into WMF's public plans. It seems this would all be a simple case of "yes, there was some talk and we decided against it", so why the secrecy and stonewalling?"
Meeting about Knowledge Engine with Lila Tretikov
A meeting about the Knowledge Engine was held with Lila Tretikov, Wes Moran, and others. In this meeting, they discuss the recent attention to the Knowledge Engine/Wikimedia Discovery project. Notes were taken during the meeting, and published about a week later. In this meeting, several people mention concerns about lack of communication with the community. Chris Koerner, a Community Liason who joined the Wikimedia Foundation under a month ago, expresses concerns about how lack of communication has resulted in outsiders discussing the stories before the WMF, "building up a sense of conspiracy." The notes describe Tretikov's response as, "That’s problematic that you don’t feel empowered to share what we are doing. You absolutely should feel free to say what we’re working on. Koerner brings up delays in responding to inquiries about the grant, and leaked documents, referring to things "spiraling." Tretikov's response is recorded in the notes as, "That was a problem.... We need you to step in and respond. And we need to make sure you are speaking with similar message to avoid confusion." Other members of the meeting express concern with the Knight Foundation grant documentation being published without their knowledge. Some question, after hearing Tretikov speak of all she has learned from this experience, exactly what she has learned. There is some concern about the relationship with the Knight Foundation; Tretikov's discussion of this is summarized as "They know this is troublesome, so they expect turbulence." At one point, a meeting member brings up concerns about the talk in the media; notes describe Lila's response as, "The press is wrong on issues, not necessarily bad." Moiz Syed, a User Experience Designer at the WMF replies with what is noted as, "But people reading it don’t know if it’s wrong or not. It is negative press."
Steve Scheier says he is no longer working with Lila Tretikov
Steve Scheier, brought on on November 22, 2015 as a coach to Lila Tretikov to help with "leadership challenges," emails Wikimedia Foundation staff to clarify that he is no longer coaching Tretikov or working on projects with the Wikimedia Foundation. This directly refutes a statement from Tretikov that they are still working together.
Max Semenik clarifies whether Knowledge Engine is a search engine
Max Semenik, software developer on the Search and Discovery team, comments on the Moran–Tretikov post about whether the Knowledge Engine is a search engine, and on how the proposal has changed. He says, "Yes, there were plans of making an internet search engine. I don’t understand why we’re still trying to avoid giving a direct answer about it.... The whole project didn’t live long and was ditched soon after the Search team was created, after FY15/16 budget was finalized, and it did not have the money allocated for such work.... I don’t think anybody but the certain champion of the project has considered competing with Google with any degree of seriousness. The scrapping was finalized in summer, after said champion and WMF parted ways. However, ideas and wording from that search engine plan made their way to numerous discovery team documents and were never fully expelled."
Ido Ivri sends "An Open Letter to Wikimedia Foundation BoT" email to Wikimedia-l
Ido Ivri, a member of the Wikimedia Israel board, writes an open letter to the Board of Trustees and sends it to Wikimedia-l. He details his concerns with "deep, strategic change" in the Wikimedia Foundation that is not accompanied with transparency, honesty, or accountability; "concealment (rather than openness) as a default"; lack of communication and consultation with the community; and lack of communication and trust from and with the Board of Trustees. He adds, "If any APG-receiving affiliate conducted itself in such a non transparent, dishonest manner and with lack of clear, timely communication with its community and stakeholders, it would get seriously reprimanded by the Foundation."
People respond to "An Open Letter to Wikimedia Foundation BoT" email to Wikimedia-l
Dariusz Jemielniak, member of the Board of Trustees, replies to Ivri's message. In his message, he praises the Wikimedia Foundation for submitting its Annual Plan to the Annual Plan Grants system, despite the FDC's criticisms. He also states, "There is way too much blaming/bashing/sour expectations working both ways - we almost forget how unique we are, irrespective of many slips and avoidable failures we make (and WMF is definitely leading here, too! ;)"
Ori Livneh, Principal Software Engineer at the Wikimedia Foundation, replies to Jemielniak. He outlines some successes of the engineering teams at the Wikimedia Foundation, then says, "This is happening in spite of -- not thanks to -- dysfunction at the top. If you don't believe me, all you have to do is wait: an exodus of people from Engineering won't be long now. Our initial astonishment at the Board's unwillingness to acknowledge and address this dysfunction is wearing off. The slips and failures are not generalized and diffuse. They are local and specific, and their location has been indicated to you repeatedly."
Moiz Syed, Design Manager at the Wikimedia Foundation, responds to Livneh's comment on Jemielnek's sentence about "sour expectations" to say, "That line from Dariusz disappointed me to, but I just chalked it up to just another case of a board member downplaying community/staff concerns and plea for help."
Dan Andreescu, Software Engineer at the Wikimedia Foundation, writes, "I hope people have the presence of mind, like you say - despite the dysfunction at the top, to stay and talk things out among each other. And to realize that the dysfunction at the top does not *really* matter."
Asaf Bartov, Head of WMF Grants and Global South Partnerships at the Wikimedia Foundation, responds, "Dariusz, I disagree with you: this *is* a time for "negativity". We have been laboring under significant dysfunction for more than a year now, and are now in crisis. We are losing precious colleagues, time, money, *even more* community trust than we had previously squandered, and health (literally; the board HR committee has been sent some details).... Please act. If for some reason the board cannot act, please state that reason. Signal to us, community and staff, by concrete words if not by deeds, that you understand the magnitude of the problem."
Edward Galvez, Survey Specialist at the Wikimedia Foundation, echoes those calling for Board action: "Second Asaf and Sydney. Please take these concerns seriously. If you truly *respect* us and this movement, please act."
Lila Tretikov responds. Her email, in full, reads, "For a few 2015 accomplishments by the product/technical teams you can see them listed here: https://meta.wikimedia.org/wiki/2015_Wikimedia_Foundation_Product_and_Technology_Highlights"
Brion Vibber, Lead Software Architect at the Wikimedia Foundation, asks, "What is the board doing, going forward, to stem the tide of staff resignations?"
Gayle Karen Young, former Chief Talent and Culture Officer at the Wikimedia Foundation, replies to Andreescu, "People will leave despite how much they love a place, its mission, and its volunteers at the point it becomes too painful for them to stay.... I have been watching, even in pain and at a distance, the enormous toll it takes for people to go in day after day and keep doing their work when they have felt unsupported and unheard by the leadership, the board, and the movement, and uncertain of the strategy of the organization - and even worse, characterized as being the wrong people on the bus, so to speak - that this turnover is "normal" and part of leadership transition. This is not normal."
Delphine Ménard (User:notafish), former Chapters Coordinator at the Wikimedia Foundation and former member of the Funds Dissemination Committee, responds on Wikimedia-l. In her email, she writes, "I believe that this is what is missing today. Boldness. Boldness does not only translate in taking (un)calculated risks, it also comes in the capacity of admitting failure.... I'll tell you where I think we, as an organisation, have failed. It was already a long time ago, when we started to talk about efficiency. When the Foundation started working and acting like an American Global Corporation, and stopped cherishing our diversity and leverage it to do that thing we once all dreamed of "taking over the world"."
Dan Andreescu later replies to say, "I sincerely apologize for minimizing that pain, it was not my intention but I can see how what I wrote can be seen this way. This is not normal, and even if it was normal, it would still be awful."
Siko Bouterse, former Director of Community Resources writes, "I need to believe that the power of the collective leadership that so many volunteers and staff are showing here will ultimately be strong enough to ensure that the Wikimedia Foundation has the leadership that its mission deserves."
James Alexander, Manager of Trust & Safety at the Wikimedia Foundation, replies in the context of a dicussion about the speed of board responses, "Waiting a month, or two, or 3... to rethink decisions that were very clearly going to explode like this... eventually we start to think that you're not making a decision or that you're trying desperately to avoid it and hope everything just goes away despite the reality of the situation."
Brion Vibber writes in reply to an email discussing WMF successes, "I suppose I should be clearer: it is my contention that it is largely the people advocating for and implementing the improvements you cite that we are losing due to the management crisis."
Lila Tretikov sends a message that includes, "As I am sure you practice all too often in your own professional life this is required in a professional role: to take the heat and the arrows when something goes wrong, and to give away credit for what goes right. I would not have it any other way, but it is something people all too often ignore or forget."
Marc Pelletier, former Operations Engineer at the Wikimedia Foundation, replies to Tretikov, "That is... downright brilliant. Pretend to be caring and responsible, while at the same time make an underhanded implication that the people who left are villains and that you are a poor victim for being unable to speak the Truth. I hope you choke on shame for having the gall to even so much suggest that pillars of the staff and community like Siko, Luis, and Anna left for any reason other than your "exemplary" leadership.... If you have a single iota of integrity, please leave now before more of the foundation crumbles around you. Even if you were perfectly correct in all you did and everyone else was perfectly wrong, any supposed leader that has no trust from at least 93% of their staff should realize that - if nothing else - they are a bad fit and cannot possibly salvage the situation."
- Email from Dariusz Jemielniak to Wikimedia-l on Feb 18 at 12:47UTC
- Email from Ori Livneh to Wikimedia-l on Feb 18 at 18:33UTC
- Email from Moiz Syed to Wikimedia-l on Feb 18 at 18:48UTC
- Email from Dan Andreescu to Wikimedia-l on Feb 18 at 18:55UTC
- Email from Dan Andreescu to Wikimedia-l on Feb 18 at 19:54UTC
- Email from Edward Galvez to Wikimedia-l on Feb 18 at 19:56UTC
- Email from Lila Tretikov to Wikimedia-l on Feb 18 at 20:07UTC
- Email from Brion Vibber to Wikimedia-l on Feb 18 at 20:16UTC
- Email from Gayle Karen Young to Wikimedia-l on Feb 19 at 07:16UTC
- Email from Delphine Ménard to Wikimedia-l on Feb 19 at 16:17UTC
- Email from Dan Andreescu to Wikimedia-l on Feb 19 at 16:52UTC
- Email from Siko Bouterse to Wikimedia-l on Feb 19 at 19:34UTC
- Email from James Alexander to Wikimedia-l on Feb 20 at 23:41UTC
- Email from Brion Vibber to Wikimedia-l on Feb 21 at 00:58UTC
- Email from Lila Tretikov to Wikimedia-l on Feb 21 at 03:36UTC
- Email from Marc Pelletier to Wikimedia-l on Feb 21 at 03:54UTC
The Wikipedian publishes "Search and Destroy: The Knowledge Engine and the Undoing of Lila Tretikov"
The Wikipedian, a blog about Wikipedia written by William Beutler, publishes "Search and Destroy: The Knowledge Engine and the Undoing of Lila Tretikov". The article is also published in the Signpost. It opens with, "The Wikimedia Foundation is in open revolt." and continues to detail staff departures, dissatisfaction with WMF senior leadership, concerns about the Knowledge Engine project, and other unrest. It concludes, "For the sake of Wikipedia’s future, the Wikimedia Foundation needs new leadership. Lila Tretikov must resign, or she must be replaced." The article received many comments in both venues.
Erik Möller comments on Visual Editor history on Facebook
Erik Möller posts (non-Facebook mirror) a comment in Wikipedia Weekly explaining some background behind the Visual Editor, a software project that was widely criticized for being prematurely rolled out.  So there was a general, shared feeling that we needed to do better. I take responsibility for not putting on the brakes; it was due to my own lack of experience and focus at the time.... I agree with Ori's point on the list, however, that most of this continuous improvement has been going on in spite of, not because of, what's been happening at the top. That's in many ways how it should be -- WMF's engineering organization has the capacity for independent self-improvement in all areas. But of course the drama that's going on right now is entirely avoidable and depressing, and if it continues, will damage existing capabilities and lead to regressions in important areas as key people leave.... I left voluntarily because it was clear things were going to just continue to deteriorate at the top. But if some of the key folks in engineering left, that would really really suck. You don't want that to happen, trust me. These are good, super-talented people, and the institutional/technical memory that would leave with them would set the org back severely."
Lila Tretikov sends email to Wikimedia-l
Lila Tretikov sends an email to Wikimedia-l titled Why we changed. In this email, she states that, "After 15 years since the birth of Wikipedia, the WMF needs to rethink itself to ensure our editor work expands into the next decade.... The choice in front the WMF is that of our core identity.... We could either fully focus on building our content and educational programs. Or we can get great at technology as the force multiplier for our movement. I believe the the former belongs to our volunteers and affiliates and that the role of the WMF is in providing global support and coordination of this work. I believe in -- and the board hired me to -- focus on the latter. To transform our organization into a high-tech NGO, focused on the needs of our editors and readers and rapidly moving to update our aged technology to support those needs. To this end we have made many significant changes.... Many at the WMF and in our community believe that we should not be a high-tech organization. I believe we should." She includes in the email a list of accomplishments the Wikimedia Foundation has made. She ends the email by stating, "The world is not standing still. It will not wait for us to finish our internal battles and struggles. Time is our most precious commodity."
Staff members reply to Lila Tretikov's Wikimedia-l email
WMF Lead Software Architect Brion Vibber includes, "First, many staff members feel that the accomplishments you claim under "we" are not attributable to you. Complaints about lack of strategy and confusing management have come from all levels of the staff; the implication that people who failed to be promoted might be behind discontent seems not to hold water.... If your contention is that tech supports you as a silent majority, I have strong doubts that this is the case."
Development Outreach Manager Anna Stillwell and Research Analyst Os Keyes, reply to state their agreement with Vibber.
Former Vice President of Product and Strategy Erik Möller argues that Tretikov's claim to have "in the past year... for the first time since 2007... finally stem the editor decline" is inaccurate, or at least premature. He also questions which "pet projects" Tretikov was referring to when she pointed to "shutting down pet projects" as a measure of her success in setting standards for staff.
Lead Platform Architect Tim Starling writes, "I agree with your broad strategic goals (educate, innovate, retain volunteers, secure funding), I just doubt your ability to implement them. Because an ED of a non-profit organisation needs to be able to lead, not just dictate. And an effective manager should make decisions rationally and collaboratively."
Principal Operations Engineer Faidon Liambotis writes, "This is a pretty infuriating email, full of inaccuracies, FUD and unnecessary platitudes. We're in need of answers and actions, not essays. After such a failed record as an ED, I would expect you to acknowledge that we have indeed changed, but for the worst. Then, learn from your mistakes and work on fixing them (possibly silently; I'd undrestand that).... What you did instead was to sent a community-wide email making it sound like this was a carefully executed plan and the only reason people are revolting is because they're either change-averse or bitter for not getting a promotion. This is downright insulting. Finally, with all of your references to "community", it also sounds to me like like you're trying to gain some support from our community and effectively stategically place the (almost unanimously) revolting staff at odds with our community, in the hopes that you can get supporters and salvage your position. This would be a pretty desperate and selfish move. I hope I'm wrong."
Senior Operations Engineer Giuseppe Lavagetto writes, "Now, one easy way to read this, the most obvious one, is that the attitude towards work of the WMF employees was somewhat not right or unprofessional, and that we were lazy and not goal-driven. I would find this inappropriate in an internal email, but you went to state that in public, and I have to admit I find this is deeply offending on a personal and professional level."
- Brion Vibber's email to Wikimedia-l in the "Why we changed" thread
- Erik Möller's email to Wikimedia-l in the "Why we changed" thread
- Tim Starling's email to Wikimedia-l in the "Why we changed" thread
- Faidon Liambotis' email to Wikimedia-l in the "Why we changed" thread
- Giuseppe Lavagetto's email to Wikimedia-l in the "Why we changed" thread
Rumors of a board meeting to discuss Lila Tretikov's position as Executive Director
In a response to a Wikimedia-l post questioning when the Board of Trustees will meet to discuss Lila Tretikov's role, Brion Vibber writes, "Rumor mill says they're meeting again on the subject at 9am pacific today."
Sumana Harihareswara writes "Leadership Crisis at the Wikimedia Foundation"
Sumana Harihareswara, a former employee of the Wikimedia Foundation for three years and eight months, writes a blog post about the "leadership crisis" at the WMF. She writes, "I left WMF thinking that it was fine.... Lila Tretikov, the new executive director, was settling in and I perceived WMF to be on the right track, iteratively moving closer to reversing the editor decline, with solid management and plans in place to keep positive momentum going. I thought the conflicts and stumbles from summer 2014 were normal temporary pains, not unusually worrying. A few months after I left, when I caught up with old Foundation colleagues, I started hearing wariness about the new high-level management (the ED and some other newer executive hires). The worries progressed into stronger and stronger concerns, getting more and more disturbing." She goes on to say, "Fantastic colleagues are voting with their feet and leaving (and do you know how hard it is to find and hire the right people for an org this weird and this important?). People who would rather walk with rocks in their shoes than throw their coworkers under the bus are compelled to speak in public about dysfunction at the top... This is not just the ordinary grumblings of a transparent organization. This is dire.... If unaltered, this is the kind of dynamic that leads to schisms and forks. I would hate for the movement to have to pay that kind of cost but, unless the Wikimedia Foundation Board of Trustees and Executive Director change course, I think that's a potential outcome."
Os Keyes leaves
Os Keyes (User:Ironholds), Researcher, leaves the Wikimedia Foundation after five years of employment. In their departure email, they write that this comes after "12 months of continual stress, losses and workplace fear" and that they have "no confidence" in the ability of the Board of Trustees to effectively solve the current crisis.
Ariel Glenn forwards an email they wrote to the Board of Trustees
Ariel Glenn, Software Developer and Systems Engineer at the Wikimedia Foundation, forwards to Wikimedia-l an email that they had sent to the Board of Trustees. The email opens, "A tale from the trenches" and goes on describe their daily experience checking email: "I gear myself up to learn who may have left today, what they will have said, to digest the outpouring of support and sadness from others, and the deafening silence from those who are in a position to put an end to all of this. I go over the reasons again in my mind that we're in this crisis: bad hirings, decisions in secret, dissembling and coverups about the processes that led to those decisions; refusal or inability to state a clear vision, let alone get buy-in or the involvement of staff/community in shaping that vision; restructuring the organization following these same broken processes. And so much more. Make no mistake, this is not just about an ED. It's also about failure of oversight, powerlessness of staff, and a culture of exclusion, among other things. If, as I hope, the Board acts decisively to remove the current ED, that will only be the first step in a mountain of work ahead of us. Hard, painful, exhausting work. But we can't begin to get started on it until that first step is taken."
Frances Hocutt leaves
Frances Hocutt, who was previously on leave of absence, leaves the Wikimedia Foundation after ten months of employment.
Katherine Maher unanimously appointed Executive Director by the Board
Katherine Maher, after serving as interim Executive Director for three months, is unanimously appointed as Executive Director of the Wikimedia Foundation by the Board of Trustees, in a meeting at Wikimania 2016 in Esino Lario, Italy.


Introduction
You: As a survivor of an unknown event which has caused people to go Crazy and turn into zombies, you as a player are forced to assume a leadership role in order to insure the survival of a group of people you are looking over.
Theme: Surviving the attacks of Crazies, Zombies, and mutated creatures and trying to stay alive one day at a time.


{% extends 'base.html' %} {% block body %} {% load mathfilters %}
{{ msg }}
{% if were_adds %}{{ registered_adds.count }}
The following {{ registered_adds.count }} registered users were added to the space:{{ non_registered_adds.count }}
The following {{ non_registered_adds.count }} un-registered users were invited to the site: {% for email in non_registered_adds %} {{ email }} {% if forloop.counter|mod:5 == 0 %}{{ already_added.count }}
The following emails had already been invited to the space and were not sent an additional email:{% endblock %}


In July \(2021\text{,}\) student loan debt in the U.S. totaled \(\$1.73\) trillion. In \(2019\text{,}\) the average debt held by a student loan borrower was \(\$30,000\) [9.11.164].


Home
About
Contact
Click for Contact info!
contact me at<PHONE_NUMBER> or via email at gistarr@pointpark.edu


A simple component for rendering Carbon Ads.
To install this library, run npm install @ngx-lite/carbon-ad --save and then from your Angular AppModule:
npm install @ngx-lite/carbon-ad --save
AppModule


Week 5 - Ruby Classes
Classes; Variables and Methods
Up until this point in my Ruby training I have not worked with very many Classes. Having now had a bit more experience with them I can see how more advanced programming will benefit from the organization they offer. A Class can offer a single place to house multiple methods that are performing functions of a similar nature.
By containing multiple common methods in a single Class object you can dictate certain shared behavior. An object created from an example Class named Silverware may share many similar characteristics to other objects created from the same Class. Having the ease of passing these default values off to these similar objects is all due to the containing Class.
When telling the machine to create a new object based on a Class, a particular set of instructions are executed. The code attempts to look for any attr_* statements. The attr_* statements consist of the following; attr_reader, attr_writer, and attr_accessor. Reader allows an instance variable to be read from outside the Class. Writer allows an instance variable to be written from the outside of the Class. Accessor is the shortcut to allow both read and write access in one command.
The next thing the code will be looking for is a method entitled #initialize. This is where you will pass any Class arguments that may be important when creating an object from the Class. It is also where you will translate any of those incoming arguments into instance variables. Any default values that need to be applied to every instance of the Class will be set in #initialize as well.
Seaking of instance variables, their application can seem a bit confusing at first glance. I recall a very specific reading I was browsing through that referenced instance variables relationship with the seperate instances of the Class. It was then that I was able to grasp fully why some variables would be instance and others simply regular. This allows you to create multiple objects from the same Class but provide flexibility for them to grow in different directions.


News
Contact
About
Text
text
RECOMMENDED
gfdsgasdgsdfsafdasfsdgfyds
sadsdgsfdhgfhdfhvvvvvvvvvvvvvvvvvvvvvvvvvv
sadsdgsfdhgfhdfh


| SUBJECT | GRADE |
|---|---|
| Physics | S |
| Chemistry | S |
| Biology | S |
| General English | A |
| SUBJECT | GRADE |
|---|---|
| Mathematics | A |
| Science | A |
| Roman Catholic | B |
| Sinhala | B |
| Design and Technology | B |
| Drama | B |
| English | B |
| History | C |
| Commerce | C |
I'm a very Lazy Person so I made things for make my Life Easier. I ❤ Robotics, Electronics and 3D Modeling. I'm Interested in Supervised/Unsupervised Deep Learning and Machine Learning.
Back To Top Button And It's Functionality
Create most of the Animations in Website
Fixed most of JS Issues in Website
Create and Manage Website Source Code in GitHub


Conventions¶
WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure. For conciseness, this structure is described in the form of an abstract syntax. All parts of this specification are defined in terms of this abstract syntax.
Grammar Notation¶
The following conventions are adopted in defining grammar rules for abstract syntax.
- Terminal symbols (atoms) are written in sans-serif font: \(\mathsf{i32}, \mathsf{end}\).
- Nonterminal symbols are written in italic font: \(\mathit{valtype}, \mathit{instr}\).
- \(A^n\) is a sequence of \(n\geq 0\) iterations of \(A\).
- \(A^\ast\) is a possibly empty sequence of iterations of \(A\). (This is a shorthand for \(A^n\) used where \(n\) is not relevant.)
- \(A^+\) is a non-empty sequence of iterations of \(A\). (This is a shorthand for \(A^n\) where \(n \geq 1\).)
- \(A^?\) is an optional occurrence of \(A\). (This is a shorthand for \(A^n\) where \(n \leq 1\).)
- Productions are written \(\mathit{sym} ::= A_1 ~|~ \dots ~|~ A_n\).
- Large productions may be split into multiple definitions, indicated by ending the first one with explicit ellipses, \(\mathit{sym} ::= A_1 ~|~ \dots\), and starting continuations with ellipses, \(\mathit{sym} ::= \dots ~|~ A_2\).
- Some productions are augmented with side conditions in parentheses, “\((\mathrel{\mbox{if}} \mathit{condition})\)”, that provide a shorthand for a combinatorial expansion of the production into many separate cases.
Auxiliary Notation¶
When dealing with syntactic constructs the following notation is also used:
- \(\epsilon\) denotes the empty sequence.
- \(|s|\) denotes the length of a sequence \(s\).
- \(s[i]\) denotes the \(i\)-th element of a sequence \(s\), starting from \(0\).
- \(s[i \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} n]\) denotes the sub-sequence \(s[i]~\dots~s[i+n-1]\) of a sequence \(s\).
- \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i] = A\) denotes the same sequence as \(s\), except that the \(i\)-th element is replaced with \(A\).
- \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} n] = A^n\) denotes the same sequence as \(s\), except that the sub-sequence \(s[i \href{../syntax/conventions.html#notation-slice}{\mathrel{\mathbf{:}}} n]\) is replaced with \(A^n\).
- \(\href{../syntax/conventions.html#notation-concat}{\mathrm{concat}}(s^\ast)\) denotes the flat sequence formed by concatenating all sequences \(s_i\) in \(s^\ast\).
Moreover, the following conventions are employed:
- The notation \(x^n\), where \(x\) is a non-terminal symbol, is treated as a meta variable ranging over respective sequences of \(x\) (similarly for \(x^\ast\), \(x^+\), \(x^?\)).
- When given a sequence \(x^n\), then the occurrences of \(x\) in a sequence written \((A_1~x~A_2)^n\) are assumed to be in point-wise correspondence with \(x^n\) (similarly for \(x^\ast\), \(x^+\), \(x^?\)). This implicitly expresses a form of mapping syntactic constructions over a sequence.
Productions of the following form are interpreted as records that map a fixed set of fields \(\mathsf{field}_i\) to “values” \(A_i\), respectively:
The following notation is adopted for manipulating such records:
\(r.\mathsf{field}\) denotes the contents of the \(\mathsf{field}\) component of \(r\).
\(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field} = A\) denotes the same record as \(r\), except that the contents of the \(\mathsf{field}\) component is replaced with \(A\).
\(r_1 \href{../syntax/conventions.html#notation-compose}{\oplus} r_2\) denotes the composition of two records with the same fields of sequences by appending each sequence point-wise:
\[\{ \mathsf{field}_1\,A_1^\ast, \mathsf{field}_2\,A_2^\ast, \dots \} \href{../syntax/conventions.html#notation-compose}{\oplus} \{ \mathsf{field}_1\,B_1^\ast, \mathsf{field}_2\,B_2^\ast, \dots \} = \{ \mathsf{field}_1\,A_1^\ast~B_1^\ast, \mathsf{field}_2\,A_2^\ast~B_2^\ast, \dots \}\]\(\href{../syntax/conventions.html#notation-compose}{\bigoplus} r^\ast\) denotes the composition of a sequence of records, respectively; if the sequence is empty, then all fields of the resulting record are empty.
The update notation for sequences and records generalizes recursively to nested components accessed by “paths” \(\mathit{pth} ::= ([\dots] \;| \;.\mathsf{field})^+\):
- \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i]\,\mathit{pth} = A\) is short for \(s \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} [i] = (s[i] \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathit{pth} = A)\).
- \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field}\,\mathit{pth} = A\) is short for \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field} = (r.\mathsf{field} \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathit{pth} = A)\).
where \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}}~.\mathsf{field} = A\) is shortened to \(r \href{../syntax/conventions.html#notation-replace}{\mathrel{\mbox{with}}} \mathsf{field} = A\).
Vectors¶
Vectors are bounded sequences of the form \(A^n\) (or \(A^\ast\)), where the \(A\) can either be values or complex constructions. A vector can have at most \(2^{32}-1\) elements.


name = "Alex Xie";
title = "university, programming, and other adventures.";
var
contact,
skills/interests,
education,
projects,
experience;
// contact me
email =<EMAIL_ADDRESS>resume = "alex_xie_resume_1B.pdf";
github = "https://github.com/alexieyizhe";
linkedin = "https://www.linkedin.com/in/alexieyizhe";
facebook = "https://www.facebook.com/alexieyizhe";
// education
for (University of Waterloo) {
discipline = "Honours Computer Science (co-op)";
timeframe[] = {Sept 2017, May 2022 (expected)};
desc = "96% Major Avg. // cs courses
88% Cumulative Avg. // 3.9 GPA
Dean's Honour List."; // 1A term
}
// some things i'm experienced with:
Python;
Java;
Scheme;
C;
HTML;
CSS;
LaTeX;
Git;
// some things i enjoy:
soccer;
piano;
fitness;
music;
travelling;
graphic design; //view my portfolio
puns (good AND bad);
.
// major projects
for (WATBus(shouldItake?)) {
desc = "a Facebook Messenger Bot that allows users to easily obtain GRT transit info and set reminders in-app.";
tech[] = {Python, Flask framework, Wit.ai NLP API, GRT/FB API, Heroku};
}
for (Kanye Quest) {
desc = "a top down horde shooter featuring Kanye West, handcrafted maps, power-ups, and various weapons.";
tech[] = {Java, Java graphics2D library};
}
for (PokePaint) {
desc = "Pokemon themed paint program with a suite of tools, including stickers, undo/redo, and file I/O.
created for ICS3U final summative project.";
tech[] = {Python 2.7, Pygame 3 library};
}
// experience
for (MathSoc Computer Science Representative){
timeframe[] = {Jan 2018, Present};
desc = "voting member in Mathematics Society, the Faculty of Mathematics' student council.
elected by and representing the interests of computer science students in the faculty."
}
for (Equithon) {
position = "Operations Coordinator";
timeframe[] = {Oct 2017, Present};
desc = "executive in charge of organizing Waterloo's largest social innovation hackathon.
responsible for overseeing all logistics as part of a team of 4.";
contact =<EMAIL_ADDRESS>}
for (YMCA Summer Work Student Exchange){
timeframe[] = {June 2016, Sept 2016};
desc = "1 of 8 selected to live and work full-time in St-Jerome, Quebec for an entire summer.
took initiative to improve my problem solving, communication, and teamwork skills.";
}
return to top|


| Fig 1 |
Three life history types expressed in terms of abundance and ... |
| Fig 2 |
(a) Simplified schematic of the life cycle of an organism de ... |
| Fig 3 |
Sensitivity of variance in population (ln N t ) to variabili ... |
| Fig 4 |
High mortality of early life stages and increased environmen ... |


Files CCore/inc/net/PTPBase.h CCore/src/net/PTPBase.cpp
Files CCore/inc/net/PTPExtra.h CCore/src/net/PTPExtra.cpp
Files CCore/inc/net/PTPClientDevice.h CCore/src/net/PTPClientDevice.cpp
Files CCore/inc/net/PTPServerDevice.h CCore/src/net/PTPServerDevice.cpp
PTP is the Packet Transaction Protocol. This is a packet-based, reliable, transactional, parallel point-to-point protocol. It is best suited to implement an asynchronous call-type client-server interaction. It works atop a packet-based communication layer. There is no security features in the protocol.
PTP defines rules for two endpoints, one is the Server, another is the Client. These endpoints exchange raw data packets (byte packets). Client issues call requests, Server takes call data, process it and returns some resulting data. From the Client perspective, it makes a function call. Function arguments is a byte range. Server "evaluates" the function and returns a result — another byte range. The meaning of data is out of scope PTP protocol, it is defined by an upper protocol level. Usually, Server may serve multiple Clients. From the protocol perspective all transactions are parallel and independent.
Protocol defines the following constants:
const unsigned MaxPacketLen = 1472 ; const unsigned DeltaInfoLen = 32 ; const unsigned MaxInfoLen = 1440 ; // MaxPacketLen-DeltaInfoLen const unsigned MinTimeout = 300 ; // msec, 0.3 sec const unsigned MaxTimeout = 10000 ; // msec, 10 sec const unsigned DeltaTimeout = 100 ; // msec, 0.1 sec
MaxPacketLen — maximum packet length. This value is chosen as the maximum UDP data length fits a standard Ethernet frame length.
DeltaInfoLen — maximum delta between packet length and information length.
MaxInfoLen — maximum information length.
MinTimeout — minimum timeout value.
MaxTimeout — maximum timeout value.
DeltaTimeout — timeout increment. Each time a timeout value is used, it is incremented by DeltaTimeout up to MaxTimeout.
Protocol defines the following data types:
typedef ??? uint8; typedef ??? uint16; typedef ??? uint32; typedef ??? uint64; typedef uint32 PacketType; typedef uint32 SlotId; typedef uint32 RecallNumber; struct TransId { uint64 number; uint64 clock; }; struct Info { uint32 len : len<=MaxInfoLen ; uint8 data[len]; };
uint8, uint16, uint32, uint64 are usual arithmetic unsigned integral types. For the protocol purpose they are transported using the big-endian representation.
PacketType is used to represent a packet type.
SlotId is used to represent a slot id. Slot is a processing resource on both sides. It contains data, related with a single transaction.
RecallNumber is used to represent a recall number.
TransId is 128-bit value, it is generated by Client and serves as the unique transaction id. It's recommended, that the number is incremented with each transaction and the clock is a high-frequency clock or another random input. A random mask can be applied to TransId for the better diversity.
Info is a call or return information. It is sent as the length, followed by the information bytes.
There are 8 packet types, 3 with attached information and 5 are short. Each packet starts with a fixed format header. Info packets are ended with Info.
struct Packet_CALL // info, Client to Server { PacketType type = 1 ; TransId tid; SlotId client_slot; Info client_info; }; struct Packet_RET // info, Server to Client { PacketType type = 2 ; TransId tid; SlotId client_slot; SlotId server_slot; Info server_info; }; struct Packet_RECALL // info, Client to Server { PacketType type = 3 ; TransId tid; SlotId client_slot; RecallNumber number; Info client_info; }; struct Packet_ACK // short, Client to Server { PacketType type = 4 ; TransId tid; SlotId client_slot; SlotId server_slot; }; struct Packet_NOINFO // short, Server to Client { PacketType type = 5 ; TransId tid; SlotId client_slot; SlotId server_slot; }; struct Packet_RERET // short, Server to Client { PacketType type = 6 ; TransId tid; SlotId client_slot; SlotId server_slot; }; struct Packet_SENDRET // short, Client to Server { PacketType type = 7 ; TransId tid; SlotId client_slot; SlotId server_slot; }; struct Packet_CANCEL // short, Server to Client { PacketType type = 8 ; TransId tid; SlotId client_slot; SlotId server_slot; };
To start a transaction, Client allocates a slot, prepares client Info, generates TransId and client SlotId. Then it prepares and sends the CALL packet.
Client -> CALL -> Server TransId tid; SlotId client_slot; Info client_info;
Server accepts transaction by allocating a server slot. It may replay with RET, CANCEL, NOINFO or RERET packets.
Client <- RET <- Server TransId tid; TransId tid; SlotId client_slot; SlotId client_slot; Info client_info; SlotId server_slot; Info client_info; // "arguments" Info server_info; // "result"
Client completes transaction by the ACK packet, it cleanup the processing slot. Server cleanup the processing slot upon reception of this packet.
Client -> ACK -> Server TransId tid; TransId tid; SlotId client_slot; SlotId client_slot; SlotId server_slot; SlotId server_slot; Info client_info; Info client_info; Info server_info; Info server_info;
The "good" case if a transaction is finished by these 3 packets. Everything else is to make the protocol reliable.
Once Client is sent the CALL packet, it setup a timer to count timeout. The initial timeout value is the MinTimeout. If this timer expires before an expected reply, the RECALL packet is sent. number starts from 1 and is incremented with saturation per each RECALL packet. The timeout value is incremented each time it is expired.
Client -> RECALL -> Server TransId tid; SlotId client_slot; Info client_info; RecallNumber number = 1 ; bool no_info = false ;
Server may send the NOINFO packet instead of RET packet to confirm it has received the CALL packet.
Client <- NOINFO <- Server TransId tid; TransId tid; SlotId client_slot; SlotId client_slot; Info client_info; SlotId server_slot; Info client_info;
If Client gets this packet it sets the flag no_info in the processing slot. If this flag is set, then Client sends the SENDRET packet at a timeout expiration instead of RECALL.
Client -> SENDRET -> Server TransId tid; TransId tid; SlotId client_slot; SlotId client_slot; SlotId server_slot; SlotId server_slot; Info client_info; Info client_info; bool no_info = true ;
To cancel a transaction Server may send the CANCEL packet. Client responds with the ACK packet and cleanup the processing slot.
Server may also send the RERET (Ready Return) packet. In response, Client sends the SENDRET packet.
Server starts a transaction processing upon CALL or RECALL packet. If there is no available slots the packet is discarded. If the packet is CALL and the transaction id is used, then the packet is discarded. If Server serves multiple Clients, Client id must be accounted for the transaction identification. The CALL packet starts the transaction processing. If the RECALL packet has the new transaction id, it also starts the transaction processing. Otherwise one of the packet RET, CANCEL or NOINFO is returned to the Client. RET or CANCEL is returned if the slot processing is finished, NOINFO if the slot processing is in progress.
When Server completes the slot processing and has the processing result, it sends the RET packet or CANCEL packet, if the processing is canceled by the execution entity. Once it is done, the Server setup a timer to count timeout. When timer is expired, Server sends RERET packet. Server sends RET or CANCEL packet as the answer on SENDRET packet from Client. And only ACK packet finally cleanup the processing slot.
If Server gets SENDRET packet and cannot find the correspondent processing slot, it responds with CANCEL packet.
If Client gets any packet and cannot find the correspondent processing slot, it responds with ACK packet.
The file txt/PTP.txt.cpp contains a precise protocol description in pseudo-C++ code.
The file net/PTPBase.h contains this protocol definition in C++ in the namespace PTP.
PTPClientDevice is an implementation of PTP client protocol as a device class. It is located in the PTP namespace (::CCore::Net::PTP).
class ClientDevice : public ObjBase
{
....
public:
// constructors
explicit ClientDevice(StrLen ep_dev_name,ulen max_slots=100);
virtual ~ClientDevice();
// methods
PacketEndpointDevice * getEPDevice() const;
void start(Packet<uint8,TransExt> packet);
typedef ClientStatInfo StatInfo;
void getStat(ClientStatInfo &ret);
ulen getMaxOutboundInfoLen(); // always > 0 , <= MaxInfoLen
ulen getMaxInboundInfoLen(); // always > 0 , <= MaxInfoLen
// generic transactions
template <class Ext>
void start(Packet<uint8,Ext> packet,const typename Ext::InputType &input);
template <class Ext>
void start_format(Packet<uint8,Ext> packet,const typename Ext::InputType &input);
struct FormatResult
{
PacketFormat format;
bool too_short;
FormatResult(NothingType) : too_short(true) {}
FormatResult(PacketFormat format_) : format(format_),too_short(false) {}
bool operator ! () const { return too_short; }
bool noRoom() const { return format.max_data==0; }
};
template <class Ext>
static PacketFormat GetFormat();
template <class Ext>
static FormatResult GetFormat(ulen max_outbound_info_len);
template <class Ext>
FormatResult getFormat();
template <class Ext>
PacketFormat getFormat_guarded(const char *name);
// support service
void setSeed(PTPSupport::SeedExt *ext);
bool setLengths(PTPSupport::LenExt *ext);
void support(Packet<uint8,PTPSupport::LenExt> packet);
void support(Packet<uint8,PTPSupport::SeedExt> packet);
void support(Packet<uint8,PTPSupport::SessionExt> packet);
FormatResult getEchoFormat();
void support(Packet<uint8,PTPSupport::EchoExt> packet,uint32 delay_msec);
void support(Packet<uint8,PTPSupport::ErrorDescExt> packet,ServiceIdType service_id,FunctionIdType function_id,ErrorIdType error_id);
void support(Packet<uint8,PTPSupport::ExistExt> packet,ServiceIdType service_id,FunctionIdType function_id);
// initial interaction
bool support(PacketSet<uint8> &pset,MSec timeout=DefaultTimeout);
void support_guarded(MSec timeout=DefaultTimeout);
};
The first constructor argument is the PacketEndpointDevice object name. The second is the number of transaction slots. When all slots are active, an extra transaction is put into a wait queue. It is activated as soon as a slot becomes available.
getEPDevice() returns the PacketEndpointDevice this object is attached to.
getMaxOutboundInfoLen() and getMaxInboundInfoLen() are info length limits, these values are calculated based on the PacketEndpointDevice properties, they are always positive.
getStat() returns the protocol statistic counters.
start(Packet<uint8,TransExt> packet) starts a transaction. This is the most general way to perform a transaction. You must prepare a packet, fill it with client info and call this method. TransExt constructor argument is a flag, set this flag to MovePacketBuf if you require the packet buffer movement with server info. When transaction is finished, the packet is completed. In the completion function you will see the server info, it is the field server_info of the TransExt. You must use the operator ! to check if the transaction is failed. If you required the packet buffer movement, the packet will have the packet buffer with the server info attached. Otherwise, the server_info disappears after the completion function is returned.
struct TransExt
{
TransResult result; // output
PtrLen<const uint8> server_info; // output
// constructors
explicit TransExt(MoveFlagType move_flag);
// methods
bool operator ! () const { return result!=Trans_Ok; }
....
};
Another way to perform a transaction is to define a special structure Ext like this:
struct Ext : ExtBase<ServiceId,FunctionId>
{
typedef .... InputType;
typedef .... OutputType;
void done(const OutputType &output)
{
....
}
};
ServiceId is the service id and FunctionId is the function id. See the recommended service/function encoding. Serialized InputType is used as the function argument and OutputType is used to deserialize the function result.
Then two methods can be used to start a transaction.
start(Packet<uint8,Ext> packet,const typename Ext::InputType &input) starts a transaction, it uses the given input object to prepare a function argument in the packet buffer. When the transaction is successfully finished, the method done() is called. It can transport data from the output object to the Ext structure. Errors are reported in result and error_id fields of the base class. The method reset() resets them.
template <ServiceIdType ServiceId_,FunctionIdType FunctionId_,MoveFlagType MoveFlag=MoveNothing>
struct ExtBase
{
// consts
static const ServiceIdType ServiceId = ServiceId_ ;
static const FunctionIdType FunctionId = FunctionId_ ;
// data
TransResult result;
ErrorIdType error_id;
// constructors
ExtBase(); // if( MoveFlag!=MovePacketBufByRequest )
explicit ExtBase(MoveFlagType move_flag); // if( MoveFlag==MovePacketBufByRequest )
// methods
bool isOk() const { return !result && !error_id ; }
void reset();
....
};
Another method start_format() can be used, if you need to place additional data after the input object. You have to preplace data to the packet buffer. To do this you need a packet format. You can get it using the following methods:
getFormat<Ext>() returns the FormatResult result.
getFormat_guarded<Ext>() is a guarded version, it throws an exception, if the outbound info length is too short.
GetFormat<Ext>(ulen max_outbound_info_len) works the same way as the getFormat<Ext>(), but it is a static method and it uses the given max_outbound_info_len.
GetFormat<Ext>() uses the "infinite" max_outbound_info_len.
The Ext::InputType must define the static constant Ext::InputType::MaxLen to cap the extra data length.
If you select MoveNothing flag, then packet data buffer will be lost after the completion function is finished. But if you set it to the MovePacketBuf, then during the completion processing the packet buffer with resulting data is moved to the transaction packet. And if you select MovePacketBufByRequest, then you have to specify a required behavior giving the argument to the ExtBase constructor.
The family of methods are built using this approach to perform support service functions. Below are the correspondent Ext structures.
/* struct PTPSupport::LenExt */ struct PTPSupport::LenExt : ExtBase<PTPSupport::ServiceId,PTPSupport::FunctionId_Len> { typedef LenInput InputType; typedef LenOutput OutputType; ulen max_outbound_info_len; ulen max_inbound_info_len; void done(const OutputType &output); }; /* struct PTPSupport::SeedExt */ struct PTPSupport::SeedExt : ExtBase<PTPSupport::ServiceId,PTPSupport::FunctionId_Seed> { typedef SeedInput InputType; typedef SeedOutput OutputType; uint64 seed1; uint64 seed2; void done(const OutputType &output); }; /* struct PTPSupport::SessionExt */ struct PTPSupport::SessionExt : ExtBase<PTPSupport::ServiceId,PTPSupport::FunctionId_Session> { typedef SessionInput InputType; typedef SessionOutput OutputType; void done(const OutputType &); }; /* struct PTPSupport::EchoExt */ struct PTPSupport::EchoExt : ExtBase<PTPSupport::ServiceId,PTPSupport::FunctionId_Echo,MovePacketBuf> { typedef EchoInput InputType; typedef Tailed<EchoOutput> OutputType; PtrLen<const uint8> data; void done(const OutputType &output); }; /* struct PTPSupport::ErrorDescExt */ struct PTPSupport::ErrorDescExt : ExtBase<PTPSupport::ServiceId,PTPSupport::FunctionId_ErrorDesc,MovePacketBuf> { typedef ErrorDescInput InputType; typedef Tailed<ErrorDescOutput> OutputType; PtrLen<const uint8> desc; void done(const OutputType &output); }; /* struct PTPSupport::ExistExt */ struct PTPSupport::ExistExt : ExtBase<PTPSupport::ServiceId,PTPSupport::FunctionId_Exist> { typedef ExistInput InputType; typedef ExistOutput OutputType; bool exist; void done(const OutputType &output); };
There are two methods for the initial interaction with the server. Both methods performs three functions: Session, Seed and Len. Seeds are used for transaction id generation, input/output info lengths are corrected according Len function.
support() returns true, if the interaction was successful. You have to supply some packet set for this function.
support_guarded() throws an exception in case of failure.
setSeed() can be used to seed the client from the PTPSupport::SeedExt fields.
setLengths() can be used to reduce inbound/outbound lengths from the PTPSupport::LenExt fields. It returns true, if both lengths are non-null. Otherwise it returns false and does nothing.
PTPServerDevice is an implementation of PTP server protocol as a device class. It is located in the PTP namespace (::CCore::Net::PTP).
class ServerDevice : public ObjBase
{
....
public:
// constructors
explicit ServerDevice(StrLen mp_dev_name,ulen max_slots=100);
virtual ~ServerDevice();
// methods
PacketMultipointDevice * getMPDevice() const;
ulen getMaxOutboundInfoLen() const;
ulen getMaxInboundInfoLen() const;
typedef ServerStatInfo StatInfo;
void getStat(ServerStatInfo &ret);
void send_info(TransIndex idx,Packet<uint8> proc_packet,PtrLen<const uint8> server_info);
void send_cancel(TransIndex idx);
void attach(ServerProc *proc);
void detach();
void waitActiveComplete();
bool waitActiveComplete(MSec timeout);
bool waitActiveComplete(TimeScope time_scope);
};
The first constructor argument is the PacketMultipointDevice object name. The second is the number of available transaction slots.
getMPDevice() returns the PacketMultipointDevice this object is attached to.
getMaxOutboundInfoLen() and getMaxInboundInfoLen() are info length limits, these values are calculated based on the PacketMultipointDevice properties, they are always positive.
getStat() returns the protocol statistic counters.
To implement a server functionality some server processor must be attached.
attach() attaches the server processor.
detach() detaches the server processor and waits while it is in use.
struct ServerProc
{
virtual void inbound(XPoint point,TransIndex idx,Packet<uint8> packet,PtrLen<const uint8> client_info)=0;
virtual void tick()=0;
};
Server processor interface has two methods. inbound() is called to process a transaction. The first argument is a client address, the second is a some transaction index, then packet follows and client info range from this packet. tick() is a network tick. When processor finished with transaction, it must call either send_info() or send_cancel() methods. Each of them starts with transaction index. send_info() takes also a packet and a server info data range from this packet. The original client packet may be reused, otherwise it must be completed.
waitActiveComplete...() methods can be used to wait until all processing slots are free (no in-progress transactions).


In this project, a CNN is trained on MNIST digits dataset completely in JavaScript. Data is also fully processed in the browser starting from raw images.
As this is a web app, downloading 1000s of training examples individually is not an option, unlike in Python Tensorflow. Luckily MNIST images dataset is available as a single binary file in its original form here. The interesting part of this project is how we parse this giant binary file and prepare the training tensors. This is surprisingly simple in JavaScript using Typed Arrays. Checkout the 2 tests below, which validate training data preparation.
This downloads the dataset if not already done and parses only a single random image & its label from it on request. This way we can ensure the parsing logic of the dataset is accurate.
This downloads the dataset if not already done, parses all data to create a big matrix of images and shows only a single random image from it. This way we can ensure parsing and training data creation logic.
Train a neural network which learns to identify raw images as one of 0 to 9 digits.
As training is a compute intensive task, we use web workers for it and keep the main thread available for visualizations and to handle user actions. Comlink library is used to manage the communication between main and worker threads. This way, all the model code runs in a worker thread while training visualizations are managed by the main thread. This is something new to learn from in this module and can be found in model.js and model-worker.js files
Test your trained model with your own hand writing. This is available only after training a model.
Use your pointer to draw a digit on the surface and see how well the model recognizes it.
This is the image that is fed as input to model to predict


WIDT
What I Did Today
{{ entries.length }}
Entries and counting!
+
Categories
-
Add Entry
Categories
{{c.text}}
Sort by:
Newest
Oldest
{{ entry.created_at | date:'short' }}
| Modified: {{ entry.modified | date:'short' }}
{{ entry.text }}
{{ entryCategory | lowercase }}


System Architect Picture "Resource For Abandoned Activity"
Parent Diagram:
Resource For Activity
(OMT Object Model)


Javascript, jQuery, HTML, CSS, Bootstrap
This cryptocurrency calculator tells the user how much money they would have made (or lost) if they had bought cryptocurrency (our API has every currency on the market) on date X and sold on future date Y.
On Github


#ftl output_format="HTML" auto_esc=true> <#import "layout/default.html" as layout><EMAIL_ADDRESS>Dear ${notificationTarget.name},
You have been contacted as a result of your registration on the Horizon 2020 registration portal. You are now invited by Innovate UK to submit your application for continuation of EU Horizon 2020 funding, through the Innovation Funding Service.
${notificationTarget.name} is the UK beneficiary in receipt of EU grant funding.
You will need to create a separate application for every project you have registered through Horizon 2020.
Once you have signed in to the Innovation Funding Service you may find the terminology is more suited to applications for competitions. This is because we are using the same service applicants use to apply for competitions.
You will be asked about your Horizon 2020 project. If you are eligible for the funding transfer, you will set up your project with us using our service. This second step requires information about the project you are receiving funding for.
You will need to upload your grant agreement during your application. Your EU reconciliation report will need approval from the EU. Once you have received this you will be asked to upload it as part of your project setup.
The details you previously provided are listed below. You may find this useful when completing your application. If you spot any errors, please ring 0300 321 4357 or email<EMAIL_ADDRESS>Yours sincerely,
<EMAIL_ADDRESS>/>Reference code: ${referenceCode}
Organisation type: ${organisationType}
Registered name: ${registeredName}
Registration number: ${registrationNumber}
Full name: ${fullName}
Job title: ${jobTitle}
Email: ${email}
Telephone: ${telephone}
Grant agreement number: ${grantAgreementNumber}
Type of action: ${actionType}
Participant identification code: ${participationIdentificationCode}
Project name: ${projectName}
Project start date: ${startDate}
Project end date: ${endDate}
EU funding contribution for above project (EUR): ${fundingAmount}
@layout.default>


TResultProperty corresponds a <property> tags inside a <resultMap> tag.
The NullValue attribute can be set to any valid value (based on property type). The NullValue attribute is used to specify an outgoing null value replacement. What this means is that when a null value is detected in the result, the corresponding value of the NullValue will be used instead.
The Select property is used to describe a relationship between objects and to automatically load complex (i.e. user defined) property types. The value of the Select property must be the name of another mapped statement. The value of the database Column that is defined in the same property element as this statement attribute will be passed to the related mapped statement as the parameter. The LazyLoad attribute can be specified with the Select .
Located in /Data/SqlMap/Configuration/TResultProperty.php (line 36)
TComponent | --TResultProperty
Gets the containing result map ID.
Create type handler from Type or TypeHandler.
Gets the value for the current property, converts to applicable type if necessary.
Determines if the type is an instance of ArrayAccess, TList or an array.
Returns true if the result property Type is of ArrayAccess
or that the actual result object is an array or implements ArrayAccess
Returns true if the result property Type is of TList type or that the actual result object is an instance of TList.
The select property is used to describe a relationship between objects and to automatically load complex (i.e. user defined) property types.
Inherited From TComponent
TComponent::addParsedObject()
TComponent::attachEventHandler()
TComponent::canGetProperty()
TComponent::canSetProperty()
TComponent::createdOnTemplate()
TComponent::detachEventHandler()
TComponent::evaluateExpression()
TComponent::evaluateStatements()
TComponent::getEventHandlers()
TComponent::getSubProperty()
TComponent::hasEvent()
TComponent::hasEventHandler()
TComponent::hasProperty()
TComponent::raiseEvent()
TComponent::setSubProperty()
TComponent::__get()
TComponent::__set()
Documentation generated on Sun, 11 Jan 2009 20:23:40 -0500 by phpDocumentor 1.3.0RC4


CorrLead Map Demo 2
Map of Leadership terrain covering three major regions; within are 10 points of interest each with suggested trails and off trail exploration. All elements are merely for demonstration purpose, and to test functionality of map interface.
Map managed using LeafletJS, land map generated with Fantasy Map Generator.
Area (unit)
Destination (on or off trail)
Map Demos
- First Prototype - square map, first experiment with Leaflet. Tooltips on map.
- Second Prototype - base map generated with different tool, rectangular map.
- Layers - Modification of second prototype, testing using the top right interface to toggle different layers or parts of map, on an off.
Background image: Monochrome version of MediaWiki Commons public domain image "British Columbia 1896".


Here you'll get to know a little about my skills as a full stack developer and some projects that I have been working on!
Find Out MoreHello! I currently work at Cypress Semiconductor as an analog design engineer, but I have great interest in software applications and web development. I am proficient in Java and JavaScript and have a working knowledge of C and Python. I have experience building several full stack applications using MongoDB, Express, React, and Node, from concept to deployment and have experience developing mobile apps using React Native. I have strong interest in learning about the following areas: Deep Learning, Game Development, Cloud technologies, Microservices, and Blockchain.
Check out my Skills!If you are interested in my projects or skills, feel free to contact me!


% var titleStr= 'Free recall '; if(prm['preview']) { titleStr+='preview ';} if(prm['qualification']) { titleStr+= 'qualification ';} %>
This is a qualification task. If you pass a qualification you will be granted a qualification to perform a real task.
<% } %>You will be presented with list of words flashed on the screen one after another. After presentation finishes, you need to type all words you can recall one at a time, separated by "ENTER" key press. You would have a limited time to type words, after which results would be automatically submitted to server.
This is a challenging taks, no one expect you to recall all presented words. Nevertheless, we ask you to concentrate on this task for next 2 and half minutes, otherwise we would not be able to undestand how our brain works.
<% if (prm['qualification']) {%>Please do not run this task if you've been trained on memorizing techniques. In the qualification task we are testing your typing speed. Only 4 words will be presented, and we are measuring the time it takes you to type any 2 of them correctly. You will be given 60 seconds for typing.
At the completion of the task you will be automatically given the qualification. If your speed is not much slower than an average typing speed for Native English speaking persons you will get access for the real experiment.
<% } else { %> <% } %>Consent to Participate in Research:
By answering the following questions, you are participating in a study being performed by cognitive scientists in the Weizmann Institute Neurobiology Department. The purpose of this research is to examine human memory recall.
If you have questions about this research, or if you would like to receive a report of this research when it is completed please contact Mikhail Katkov at<EMAIL_ADDRESS>Your participation in this research is completely voluntary.
If you choose to participate, you may change your mind and leave the study at any time. Refusal to participate or stopping your participation will involve no penalty or loss of benefits to which you are otherwise entitled. You may decline to answer any or all of the following questions. Your anonymity is assured; the researchers who have requested your participation will not receive any personal information about you. For questions, concerns, or complaints that are not being addressed by the researcher, or research-related harm contact: Committee on the Use of Human Subjects in Research at Weizmann Institute of Science, 234 Herzl St. PO Box 26 Rehovot 7610001 Israel, Tel. +972-8-934-2111. Email<EMAIL_ADDRESS>By continuing, you are confirming that you understand these instructions and conditions of participation.


Developers Community
Welcome Gamers!
Thank You For Registering Us
A confirmation has already been sent.Check your inbox.
Back to homepage


Program Name
Description
This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.