“Paripuṇṇakāyo suruci,
Sujāto cārudassano;
Suvaṇṇavaṇṇosi bhagavā,
Susukkadāṭhosi vīriyavā.
“O Blessed One, your body’s perfect,
you’re radiant, handsome, lovely to behold;
golden colored,
with teeth so white; you’re strong.
Narassa hi sujātassa,
ye bhavanti viyañjanā;
Sabbe te tava kāyasmiṁ,
mahāpurisalakkhaṇā.
The characteristics
of a handsome man,
the marks of a great man,
are all in your body.
Pasannanetto sumukho,
brahā uju patāpavā;
Majjhe samaṇasaṅghassa,
ādiccova virocasi.

In the midst of the Saṅgha of ascetics,
you shine like the sun.
Kalyāṇadassano bhikkhu,
kañcanasannibhattaco;
Kiṁ te samaṇabhāvena,
evaṁ uttamavaṇṇino.
You’re a mendicant fine to see,
with skin of golden sheen.
But with such excellent appearance,
what do you want with the ascetic life?
Rājā arahasi bhavituṁ,
cakkavattī rathesabho;
Cāturanto vijitāvī,
jambusaṇḍassa issaro.
You’re fit to be a king,
a wheel-turning monarch, chief of charioteers,
victorious in the four directions,
lord of all India.
Khattiyā bhogī rājāno,
anuyantā bhavanti te;
Rājābhirājā manujindo,
rajjaṁ kārehi gotama”.
Aristocrats, nobles, and kings
follow your rule.
Gotama, you should reign
as king of kings, lord of men!”
“Rājāhamasmi sela,
(selāti bhagavā)
Dhammarājā anuttaro;
Dhammena cakkaṁ vattemi,
Cakkaṁ appaṭivattiyaṁ”.
“Sela, I am a king,”
said the Buddha to Sela,
“the supreme king of the teaching.
By the teaching I roll forth the wheel
which cannot be rolled back.”
“Sambuddho paṭijānāsi,
(iti selo brāhmaṇo)
Dhammarājā anuttaro;
‘Dhammena cakkaṁ vattemi’,
Iti bhāsatha gotama.
“You claim to be awakened,”
said Sela the brahmin,
“the supreme king of the teaching.
‘I roll forth the teaching’:
so you say, Gotama.
Ko nu senāpati bhoto,
sāvako satthuranvayo;
Ko tetamanuvatteti,
dhammacakkaṁ pavattitaṁ”.
Then who is your general,
the disciple who follows the Teacher’s way?
Who keeps rolling the wheel
of the teaching you rolled forth?”
“Mayā pavattitaṁ cakkaṁ,
(selāti bhagavā)
Dhammacakkaṁ anuttaraṁ;
Sāriputto anuvatteti,
Anujāto tathāgataṁ.
“By me the wheel was rolled forth,”
said the Buddha,
“the supreme wheel of the teaching.
Sāriputta, taking after the Realized One,
keeps it rolling on.
Abhiññeyyaṁ abhiññātaṁ,
bhāvetabbañca bhāvitaṁ;
Pahātabbaṁ pahīnaṁ me,
tasmā buddhosmi brāhmaṇa.
I have known what should be known,
and developed what should be developed,
and given up what should be given up:
and so, brahmin, I am a Buddha.
Vinayassu mayi kaṅkhaṁ,
adhimuccassu brāhmaṇa;
Dullabhaṁ dassanaṁ hoti,
sambuddhānaṁ abhiṇhaso.
Dispel your doubt in me—
make up your mind, brahmin!
The sight of a Buddha
is hard to find again.
Yesaṁ ve dullabho loke,
pātubhāvo abhiṇhaso;
Sohaṁ brāhmaṇa buddhosmi,
sallakatto anuttaro.
I am a Buddha, brahmin,
the supreme surgeon,
one of those whose appearance in the world
is hard to find again.
Brahmabhūto atitulo,
mārasenappamaddano;
Sabbāmitte vase katvā,
modāmi akutobhayo”.
Holy, unequaled,
crusher of Māra’s army;
having subdued all my opponents,
I rejoice, fearing nothing from any quarter.”
“Idaṁ bhonto nisāmetha,
yathā bhāsati cakkhumā;
Sallakatto mahāvīro,
sīhova nadatī vane.
“Pay heed, sirs, to what
is spoken by the seer.
The surgeon, the great hero,
roars like a lion in the jungle.
Brahmabhūtaṁ atitulaṁ,
mārasenappamaddanaṁ;
Ko disvā nappasīdeyya,
api kaṇhābhijātiko.
Holy, unequaled,
crusher of Māra’s army;
who would not be inspired by him,
even one whose nature is dark?
Yo maṁ icchati anvetu,
yo vā nicchati gacchatu;
Idhāhaṁ pabbajissāmi,
varapaññassa santike”.
Those who wish may follow me;
those who don’t may go.
Right here, I’ll go forth in the presence of him,
this man of such splendid wisdom.”
“Etañce ruccati bhoto,
sammāsambuddhasāsanaṁ;
Mayampi pabbajissāma,
varapaññassa santike”.
“Sir, if you like
the teaching of the Buddha,
we’ll also go forth in the presence of him,
this man of such splendid wisdom.”
“Brāhmaṇā tisatā ime,
yācanti pañjalīkatā;
‘Brahmacariyaṁ carissāma,
bhagavā tava santike’”.
“These three hundred brahmins
with joined palms held up, ask:
‘May we lead the spiritual life
in your presence, Blessed One?’”
“Svākkhātaṁ brahmacariyaṁ,
(selāti bhagavā)
Sandiṭṭhikamakālikaṁ;
Yattha amoghā pabbajjā,
Appamattassa sikkhato”.
“The spiritual life is well explained,”
said the Buddha,
“visible in this very life, immediately effective.
Here the going forth isn’t in vain
for one who trains with diligence.”
“Yaṁ taṁ saraṇamāgamha,
ito aṭṭhame cakkhuma;
Sattarattena bhagavā,
dantāmha tava sāsane.
“This is the eighth day since
we went for refuge, O seer.
In these seven days, Blessed One,
we’ve become tamed in your teaching.
Tuvaṁ buddho tuvaṁ satthā,
tuvaṁ mārābhibhū muni;
Tuvaṁ anusaye chetvā,
tiṇṇo tāresimaṁ pajaṁ.

Upadhī te samatikkantā,
āsavā te padālitā;
Sīhova anupādāno,
pahīnabhayabheravo.
You have transcended attachments,
your defilements are shattered;
by not grasping, like a lion,
you’ve given up fear and dread.
Bhikkhavo tisatā ime,
tiṭṭhanti pañjalīkatā;
Pāde vīra pasārehi,
nāgā vandantu satthuno”ti.
… Selo thero ….
These three hundred mendicants
stand with joined palms raised.
Stretch out your feet, great hero:
let these giants worship the Teacher.”


This is a timeline containing everything I did (internships, student jobs) related to the computer field.
After finishing my Bachelor's degree, I maintained contact with the company, working as a half-time Freelancer. I used the half-time I gained to learn new technologies.
Internship at Clement & Weyer Company during the last semester of my Bachelor's degree at the University of Luxembourg. I did 3 months internship + 2 months as volontary internship.
After finishing my computer technician degree in highschool, I wanted to study Computer Science more. I applied to the University of Luxembourg and meanwhile, found a student job as a Computer Assistant for the CTIE during the summer break. There, I used to help different highschools in order to replace their outdated IT hardware.
In 2012, I did a one month internship in connection to my computer technician training (accomplished during highschool). The Datagest company recruted me and allowed me to have a first experience as a Computer assistant (or doing so called, Helpdesk).
This is a timeline of my educational background.
During my Bachelor studies in Computer Science, I had the opportunity to live a one semester Erasmus experience. I decided to go to my home country, Portugal, and have a great time in Coimbra, which allowed me to meet new friends (unforgettable ones) and of course study Computer Science in portuguese.
I used to want to go work after my highschool studies, but I was still curious to discover the university life and what I would be able to learn there. I applied for the Bachelor in Computer Science, where I had a great experience. After obtaining this degree, I decided to have a break for a year and have some professional experience before, maybe, applying for a Master.
During the 9th year of my highschool education, I had to choose a new direction to my studies. Knowing that I liked math and computers (gaming specially), I decided to go for a specific training which would allow me to have a computer technician degree and the related skills.


{% blocktrans trimmed %} Django Girls Foundation is an initiative that aims to introduce women and girls who never coded before to the world of technology and increase the diversity of the tech industry. We achieve this by organising one-day workshops and inviting women to come and learn how to build the internet using HTML, CSS, Python and Django.  Django Girls has two part-time paid staff members and the support team (six awesome ladies who are also volunteers) to help provide support to all other volunteers. {% endblocktrans %}
{% blocktrans trimmed %} This Impact Report aims to celebrate achievements of the Django Girls community in the past two years, and showcase the incredible growth of the organization. For the first time ever, we're also presenting results of a survey we conducted with almost 600 past Django Girls attendees to see if Django Girls Foundation actually achieves the goal of our mission: to bring more women into tech industry! {% endblocktrans %}
{% blocktrans trimmed %} 👭👫👬 Django Girls community grew to 1069 volunteers who have organised 377 free workshops with 102 more being currently planned. That's more than 3000 hours of happy coding! {% endblocktrans %}
{% blocktrans trimmed %} 👩💻 21% of participants in our survey started working in tech after attending Django Girls workshop. 👉 {% endblocktrans %}
{% blocktrans trimmed %} 💯 In the last 2 years we improved our tools to support the growth of the organisation, maintended our free online resources (our tutorial is now in 14 languages!), started Django Girls Store as a fundraising effort, shipped 146 organizer kits and more. 👉 {% endblocktrans %}
{% blocktrans trimmed %} 📈🎉 In July 2017, on our 3rd birthday, we also celebrated our 10,000th workshop attendee 👉 {% endblocktrans %}
{% blocktrans trimmed %} 🎓 We learned that 79% of Django Girls alumnis are still learning programming after the workshop. 👉 {% endblocktrans %}
{% blocktrans trimmed %} 📚 693,524 people used our free online tutorial in the last year {% endblocktrans %}
| {% trans "2014-2015" %} | {% trans "2015-2016" %} | {% trans "2016-2017" %} | |
| {% trans "Number of Django Girls workshops" %} | 51 | 122 | 188 |
| {% trans "Number of participants" %} | 1681 | 4129 | ~4373* |
| {% trans "Number of cities" %} | 42 | 102 | 163 |
| {% trans "Number of new cities" %} | - | 79 | 108 |
| {% trans "Number of countries" %} | 26 | 48 | 54 |
| {% trans "Number of new countries" %} | - | 28 | 13 |
| {% trans "Unique users reading our Tutorial" %} | 73,392 | 313,064 | 693,524 |
{% blocktrans trimmed %}
The curriculum we developed Django Girls Tutorial is used in our workshops to introduce attendees to web development
using Python and Django. The tutorial has been published online for free to allow everyone to learn without the need
to attend an in-person workshop.
We are proud that the tutorial has been now translated into 14 languages
We are thankful to all the volunteers who have made this possible.
{% endblocktrans %}
{% blocktrans trimmed %} The popularity of the online tutorial keeps growing significantly faster than our in-person workshops. In the second year it gained a 328.95% increase in the number of unique users who used the tutorial, and 121.53% increase in the last year. Since the tutorial as been published, it's been read by 1,068,995 of people! {% endblocktrans %}
{% blocktrans trimmed %} We realised that there are certain things such as room decorations and swag (stickers, buttons and tattoos) that are needed by all event organisers. We lowered the costs of decorations and swag for each event by ordering them in bulk from suppliers and stock them in the Django Girls shop. Organisers then order the Organizer Starter Kit from our shop for a small donation, and we donated a number of them to events organised in developing countries. We are super excited that we managed to introduce the Django Girls Starter Kit in 2016. {% endblocktrans %}
{% blocktrans trimmed %} Since the introduction, 146 events have received their starter kits which has helped them make their events awesome! Out of those, 28 were donated for free for events in need. {% endblocktrans %}
{% blocktrans trimmed %} Most of our funds were generated through corporate and individual donations through Patreon, an online donation management system. In 2016, we also managed to introduce Django Girls shop where we sell swag such as t-shirts, socks and tote bags as a way of making the charity sustainable. Details of how much was raised in 2016 are shown in the table below: {% endblocktrans %}
| {% trans "Activity" %} | {% trans "Amount" %} | {% trans "Notes" %} |
| {% trans "Patreon donations" %} | $12,546.71 | {% trans "Patreon donation have been steadly decreasing in the last months" %} |
| {% trans "Django Girls Store" %} | £7,258.00 | |
| {% trans "Organiser Starter Kits" %} | £701.80 |
{% blocktrans trimmed %} We have celebrated reaching our milestone of 10,000 workshop participants by conducting a survey to see how Django Girls alumni are doing after attending the workshop in their city. We reached out to our former attendees and received an overwhelming response from 519 awesome women who shared with us their experiences with Django Girls and how attending the workshop changed their lives. {% endblocktrans %}
{% blocktrans trimmed %} The ages of the respondents ranged from 14 to 65 years, with 71% being under the age of 30. This shows that Django Girls workshops are open and welcoming to women and girls irrespective of their age, as long they have an interest in technology and learning programming {% endblocktrans %}
{% blocktrans trimmed %} We'd like to acknowledge that even though the total number of responses received is a significant representative sample of the Django Girls alumni, it is likely that most of the women who responded to our survey stayed active in the tech industry after attending our workshops and hence the results could be positively skewed. {% endblocktrans %}
{% blocktrans trimmed %} We asked the respondents if they were involved in tech-related activities after the workshop. The tech activities included attending tech events, organising Django Girls and similar tech events, coaching at Django Girls workshops, teaching or working in tech, working on coding projects and enrolling for programming courses. {% endblocktrans %}
{% trans "We were excited to learn that 73% of the respondents are still involved tech-related activities after the event." %}
{% blocktrans trimmed %} These statistics show that our workshops are generating interest in technology and programming in the participants who attends them. This interest then results in them organising other workshops and tech events as well as attending tech events for some of the women. These findings prove that Django Girls workshops have been a successful intervention to increase the number of women involved in engineering and programming. {% endblocktrans %}
{% trans "We were also interested in finding out whether our former participants continued learning programming after attending the workshop." %}
{% blocktrans trimmed %} 79% of women attending Django Girls workshop continued learning programming after and 7% were planning to continue learning {% endblocktrans %}
{% blocktrans trimmed %} 1% of participants had tried and given up while 13% had not continued learning programming after the workshop. {% endblocktrans %}
{% blocktrans trimmed %} The findings showed that the majority of the women who attend Django Girls workshops continue learning to code after. The women continued learning in various ways; some on their own, enrolling for online coding courses or enrolling into universities. These findings show that Django Girls is indeed increasing the number of women in the programming field, who will one day be employed as programmers after they have developed their programming skills. {% endblocktrans %}
{% blocktrans trimmed %} The biggest question we were interested to answer was to know how many of the women started working in tech as developers after attending the workshop. {% endblocktrans %}
{% trans "We were impressed to learn that 21% of Django Girls' former attendees are now hired as developers after attending the workshop!" %}
{% blocktrans trimmed %} It was also interesting to note that 15% of the attendees of were already working in tech and hence their newly acquired skills made their jobs better. About 23% had not yet got jobs as developers but were still developing their skills so they could get jobs in the future while the remaining 40% had not got tech jobs and did not indicate their future plans. {% endblocktrans %}
{% blocktrans trimmed %} This further affirmed that our work has had positive results in the lives of women we introduced to coding as well as the tech industry that hires these women. We are proud that at least 109 women now work as developers after attending the workshop. This is a big achievement which we are happy about! {% endblocktrans %}
{% blocktrans trimmed %} We were also interested in learning other ways the participants had been impacted by attending a Django Girls workshop. {% endblocktrans %}
{% trans "The survey showed that 93% of the participants had been impacted positively in different ways." %}
{% blocktrans trimmed %} The survey showed that about 43% had been inspired by meeting other women in tech resulting in them becoming more involved in tech by organising tech events and attending other tech events. Many of these women were so inspired to learn that the tech industry and programming are for women as well. {% endblocktrans %}
{% blocktrans trimmed %} About 25% had been excited that learnt new knowledge about technology, programming and web development; gained experienced and experienced personal growth. About 14% of the participants had been happy to have been able to meet new friends and new connections within the tech industry whom they have kept in touch with since the workshop. About 11% of the participants had changed their career path and became interested in a career in the tech industry prompting them to continue learning to code so they could one day become developers. Only 7% said there was no remarkable impact on their lives due to participation in the workshop. {% endblocktrans %}
{% blocktrans trimmed %} The findings show that Django Girls has been successful in inspiring women to fall in love with programming as participants are exposed to women who are in the programming discipline within their own communities. The friendly environment that Django Girls workshops provide enables women who have never programmed before to learn to code and thereby arousing interest in tech and causing many of these women to work towards a career change and aim to be employed in the tech industry. The friendly environment also creates an atmosphere for making new friends and creating new network connections, fostering the beauty of the Django community which strives to be welcoming and diverse. {% endblocktrans %}
{% blocktrans trimmed %} On our third birthday, we asked our Twitter community to tell us about the ways Django Girls impacted their lives. The response we received was overwhelmingly positive: {% endblocktrans %}
#IAmADjangoGirl Thanks to Django Girls, I carved out a whole new career & life for myself, and met some amazing people along the way! 🎉🎉
— Jen (@OuiDoll) July 21, 2017
HBDay to #DjangoGirls ! Its been an amazing journey with folks here in Korea.6 workshops already held and 1 more on the way #IAmADjangoGirl pic.twitter.com/qMy4Xn4vfu
— Hassan Abid (하산) (@hassanabidpk) July 21, 2017
🎉 Y'all!! I used to be an awesome English teacher but now, because of @djangogirls, I'm an awesome django developer. #IAmADjangoGirl ❤ pic.twitter.com/3C15jLGFeg
— Rachell (@Rachell_Calhoun) July 21, 2017
From trainee @ home, coach two times and organizer once. I can tell you that @djangogirls changed my life in many good ways #IAmADjangoGirl pic.twitter.com/MbUuN5bc0R
— Jessica Temporal (@jesstemporal) July 21, 2017
Thanks to @djangogirls I became more self-confident and learned that you don't need super powers to change the world #IAmADjangoGirl pic.twitter.com/5xVJ58TwEH
— Ola Sendecka (@asendecka) July 21, 2017
Happy 3rd birthday to @djangogirls! I feel amazingly lucky to have been a part of @DjangoGirlsPDX for the past 2 years. 🙌💕 #IAmADjangoGirl pic.twitter.com/g4512ebKgl
— Terian 💀💾🌸 (@spine_cone) July 21, 2017
🎂 3 years ago I attended @djangogirls and it was the kickstart of my new awesome life as a programmer + many other things 🎈 #IAmADjangoGirl pic.twitter.com/6GIcYq0ftP
— Dori Czapari (@doriczapari) July 21, 2017
#IAmADjangoGirl Thanks to djangogirls I participated in some beautiful workshops and I met new friends. pic.twitter.com/h4oEFCGbKz
— Fiorella de luca (@fiorella_deluca) July 21, 2017
The decision 2 organize d 1st @DjangoGirlsLAG was 1 of the best I ever made. I am grateful 4 d experience HBD @djangogirls #IAmADjangoGirl
— Aisha Bello #PyConNG (@AishaXBello) July 21, 2017
Thank you@AishaXBello @DjangoGirlsLAG @djangogirls. Because of y'all, programming became my thing #IAmADjangoGirl
— Hamdalah (@GeekHijabi) July 21, 2017
Organising & coaching with @djangogirls has brought so many amazing opportunities and wonderful people into my life! #IAmADjangoGirl 🎂🎈💙💜🦋
— Helen ST 🚲💚 (@helenst) July 21, 2017
Three years ago I attended the @djangogirls workshop and now I'm working as Python dev. I've learnt so much thanks to you! #IAmADjangoGirl pic.twitter.com/vKbfczTZ6X
— Agatku (@AgataGrdal) July 21, 2017
Attending Django Girls Ota changed my mind of Women in STEM. Now I do all I can to encourage more Women/Girls into STEM. #Iamadjangogirl pic.twitter.com/qJc3lzCKiw
— Ada Lilian Oragudosi (@Oragudosi_Ada) July 21, 2017
#IAmADjangoGirl. I started contributing to organize Django Girls events in Italy in 2015 and I'm proud I met so many passionate women! pic.twitter.com/sPrHSqPXrc
— Laura Bartoli (@LauraCelesteBar) July 21, 2017
Django Girls helped me out to go back to the time when I used to code as a hobby ❤ #IAmADjangoGirl #Happybday pic.twitter.com/lfrpcUYESq
— Paula Côrte Real (@paulacortereal) July 21, 2017
I organized two @djangogirls Brazil and it was amazing to see the smiles and lives that changed! Happy B-day! #IAmADjangoGirl
— Leticia Portella (@leleportella) July 21, 2017
Happy birthday @djangogirls 1st attended @DjangoGirlsPyUK then organised two @DjangoGirlsMcr organising third & more to come #IAmADjangoGirl pic.twitter.com/agwL42er1a
— le (@lwyso) July 21, 2017
Thank you @djangogirls for giving me the confidence to become a developer and to run workshops to help others do the same! #IAmADjangoGirl pic.twitter.com/ALL3beAIK4
— 🥞Päivi ✨ (@peconias) July 21, 2017
@djangogirls taught me a lot of being confident and awesome :). Happy birthday ^^ #IAmADjangoGirl pic.twitter.com/smm5Nwwqb7
— Aina Anjary Fenomamy (@anjania_catus) July 21, 2017
{% blocktrans trimmed %} Again, we would like to thank amazing sponsors of Django Girls and of the individual Django Girls workshops all over the world. They help us make Django Girls sustainable and more importantly, they help local organizers keep their events free. We want Django Girls to be accessible to many people as possible, and that couldn't happen without them. {% endblocktrans %}
{% blocktrans trimmed %} Known for Elasticsearch, Kibana, Beats, and Logstash, Elastic creates products to to search, analyze, and visualize your data, allowing you to get actionable insight in real time. Before becoming one of our biggest sponsors, they also sponsored several local events. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} The Django Software Foundation (DSF) is a non-profit organization created to promote, support, and advance the development of Django. They've helped many Django Girls events that had problems finding local sponsors. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} The Python Software Foundation (PSF) is a non-profit organization that holds the intellectual property rights behind the Python programming language. They are one of the biggest sponsors for local events. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} GitHub is a Git repository hosting service. They have sponsored many Django Girls events, and they provide useful materials for new learners like cheat-sheets. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} Divio, that created Django CMS and Aldryn, uses Python and Django to provide support for website installation, maintenance, troubleshooting, and development. They sponsored many local events and joined as Patreon supporters in June 2015. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} Lincoln Loop is a full service web studio offering user experience and development based on the Django Web Framework. They joined our Patreon campaign in April 2015, and have contributed to local events. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} Since May, Django Girls has been hosted on PythonAnywhere! They host, run, and code Python in the cloud, and have made the lives of our attendees much easier by being really simple and pleasant to use. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} Mandrill is a transactional email platform from MailChimp. They'vebeen supporting our emails since September 2015 and have also sponsored local events. Thanks <3 {% endblocktrans %}
{% blocktrans trimmed %} We would also like to thank our regular donors from Patreon: your commitment to help us every month is amazing. Thanks <3 {% endblocktrans %}


As the subject said, in the server browser, everytime I click "Refresh and Save Setting" the set region area always reset to default for no reason, and I have also test it by disable BBLog and the feature is working fine. I notice the problem rising only after BBLog update to the 1.9 version.
BBLog version: 1.9
Google Chrome 20 BETA
On side note, although my Chrome is a beta version but I never had any problem with BBLog before, plus since the vanilla version is working fine so it mean it is BBLog's fault. Thanks.
xXJumpyXx
Helping Hand
Thanks for reporting this bug. It was most likely caused by the new Battlelog update that broke BBLog.
ORFK
Global Moderator
Sometimes same Problem with BBlog, but generally it works.
We will check out this report and made some tests. Thx for reporting =)
BrainFooLong
Administrator
I don't think that is produced by BBLog.
BBLog doesn't touch server filter things in any way.
I tried to reproduce - This error happens right but for me also with disabled BBLog.


Lists: Thumbnails
Pretty Hate Machine
Nine Inch Nails
Nevermind
Nirvana
License To Ill
Bestie Boys
Dookie
Green Day


{{> html-head}}
This project is not safe for use in production. It's a 10% project, and is likely to collapse under any kind of load


namei
Follows a pathname (which can be a symbolic link) until a terminal point is found (a file/directory/char device etc).
This program is useful for finding "too many levels of symbolic links" problems.
More information: home page
- Resolve the pathnames specified as the argument parameters:
namei path/to/a path/to/b path/to/c
- Display the results in a long-listing format:
namei --long path/to/a path/to/b path/to/c
- Show the mode bits of each file type in the style of `ls`:
namei --modes path/to/a path/to/b path/to/c
- Show owner and group name of each file:
namei --owners path/to/a path/to/b path/to/c
- Don't follow symlinks while resolving:
namei --nosymlinks path/to/a path/to/b path/to/c


--- layout: post title: "Albedo" description: "Albedo is a .NET library targeted at making Reflection programming more consistent, using a common set of abstractions and utilities." date: 2013-11-15 8:24 UTC tags: [Miscellaneous, Albedo] --- {% include JB/setup %}
{{ page.description }}
For the last five weeks, Nikos Baxevanis, Adam Chester, and I have been working on a new, small Open Source project: Albedo.
It's a .NET library targeted at making Reflection programming more consistent, using a common set of abstractions and utilities. The project site may actually contain more details than you'd care to read, but here's a small code sample to either whet your appetite, or scare you away:
PropertyInfo pi = from v in new Properties<Version>() select v.Minor; var version = new Version(2, 7); var visitor = new ValueCollectingVisitor(version); var actual = new PropertyInfoElement(pi).Accept(visitor); Assert.Equal(version.Minor, actual.Value.OfType<int>().First());
Albedo is available via NuGet.


To test this MIDI WebSocket server, proceed as follows:
Open terminal and install NPM modules
Run MIDI WebSocket server
Run MIDI player (e. g. Sforzando by Plogue) and open soundfont
Connect to MIDI output "WSS Out"
Send MIDI events (see below)
Run Tests
Console
…
Command Line arguments
The command line tools recognizes the following options:
Usage: node index.js [options]
-i <midi input>: Use the specified input device
-o <midi output>: Use the specified output device
-h This help
-p <n>: Port number (default: 8888)
-l List available midi devices or drivers
-v Verbose MIDI events


We assume you’ve installed Macaulay2 and can type
on a command line to bring up the program. You should see something like:
We suggest you do that now, so that you can experiment while you read
this tutorial!
(By D. Eisenbud, D. Grayson, and M. Stillman)
Arithmetic with integers, rings and ideals
You can immediately do arithmetic with integers:
2+2
107*431
25!
binomial(5,4)
factor 32004
Most Macaulay2 applications involve polynomial rings over fields
and their quotient rings. Fields can be made in various ways:
ZZ/101
QQ
k = toField (QQ[i]/(i^2+1))
After making k we can compute in it:
1/i
Computation is often fastest and needs least
memory when performed over finite prime fields of the form
ℤ/p.
Fortunately, when the characteristic p is not too small,
qualitative questions often have similar answers over
ℤ/p and over ℚ, so we mostly use the former.
In Macaulay2 the prime p
can range up to 32749.
We make a polynomial ring in 5 variables over ℤ/101:
kk=ZZ/101
S=kk[x_1..x_5]
Here is another way:
S=kk[a,b,c,d,e]
One can do arithmetic on polynomials:
(3*a^2+1)^5
We make an ideal in S:
I=ideal(a^3-b^3, a+b+c+d+e)
Using this ideal, we can make a factor ring:
R=S/I
Another way to make an ideal, with more compact notation (familiar to anyone who used the
classic Macaulay) is:
use S
I=ideal"3(a+b)3, 4c5"
Note the command “use S”, which specifies
that we want to work with the generators of the polynomial ring S again;
otherwise the variables a, b, and c
would still have had values in R instead of in S.
Algebraic operations on ideals are available:
I^2
I*I
I+ideal"a2"
In case you forget any of these things, help is available! The most
useful way to get it is often to type something like:
help ideal
Then a browser window will pop up that contains documentation about the function ideal that we’ve been using; links on that page allow one to explore all of the Macaulay2 documentation.
On the other hand, we might have wanted information about the class of all ideals.
Not too surprisingly, this class is called Ideal. We could get information about
what functions create or use ideals by typing:
To see the names of classes, you can begin by looking at the output
of commands; the second line output (the one introduced by a colon) often contains the name of the
class of the result. -->
Here are some basic operations on matrices:
M= matrix{{a,b,c},{b,c,d},{c,d,e}}
M^2
determinant M
trace M
M-transpose M
The function entries gives the entries of a matrix:
entries M
The result is a list of lists, one for each row of the matrix M.
The function flatten can be used to merge the
lists into a single list:
flatten entries M
If you want a particular entry, say the one in the upper left corner,
you can use the underscore operator _:
M_(0,0)
Here, as everywhere in Macaulay2, all indexing starts with 0.
For example:
I_0
is the first generator of I. You can list all the generators with:
I_*
A module can be defined as a cokernel, kernel, image, or even as a subquotient:
coker M
image M
kernel matrix"a,b,0;0,a,b"
N = matrix{{a,b},{b,c},{c,d}}
(image M)/(image N)
subquotient(M,N)
Note that the matrix N above was defined with an
alternate syntax, parallel to the alternate syntax for ideal.
Properties of ideals and modules
To compute the Gröbner basis of an ideal
(x2y,xy2+x3) in the polynomial ring in
four variables we proceed as follows.
First we make our favorite field:
kk = ZZ/32003
Then the polynomial ring:
R = kk[x,y,z,w]
And then the ideal:
I = ideal(x^2*y,x*y^2+x^3)
Now the punch line. We compute the Gröbner basis with the
groebnerBasis function:
J = groebnerBasis I
Gröbner bases are always computed with respect to a particular
monomial order on the ring. In fact, the ring we defined above has
a default monomial order, the graded reverse lex order. For many
other possibilities, see the documentation.
The analogue of factorization in the theory of ideals
is primary decomposition.
For example, we can begin by intersecting three ideals:
I= intersect (ideal"x2,y3", ideal"y2,z3", (ideal"x,y,z")^4)
We can almost undo this operation by computing
a primary decomposition:
primaryDecomposition I
Inspecting the output, we see that the first two ideals
are the same as the first two ideals we intersected, but the
third one differs from the corresponding input ideal.
This is because only the primary components corresponding
to minimal primes (here, the first two) are unique. All three of the input ideals
are primary, so they constitute a primary decomposition of
I
different from the one provided by
Macaulay2 on the output line.
For larger examples, primary decomposition is computationally challenging!
Sometimes it is easier to compute just the minimal primes. To do
this we can use
decompose:
decompose I
Using Gröbner bases we can compute
codimensions, dimensions,
degrees, Hilbert
functions, and Hilbert polynomials.
This will be more fun if we work with a
meaningful example. We will use
the ideal defining the smooth
rational quartic curve in
ℙ3 given
parametrically (in an affine representation)
by
t ↦ (t,t3,t4).
(The reader more interested in algebra than geometry
may simply treat the ideal given below as a
gift from the gods.)
First we make the
polynomial ring in 4 variables, to serve as the
homogeneous coordinate ring of
ℙ3:
R = kk[a..d]
We introduce the ring map
φ: R →kk[s,t] defined by
(a,b,c,d) ↦ (s4, s3 t, s t3, t4):
phi = map(kk[s,t],R,{s^4, s^3*t, s*t^3, t^4})
Here the syntax of the function
map has the target ring first and the source ring second:
maps in
Macaulay2 generally go from right to left!
The last input to the command is a
list of the elements to which to send the variables of the source ring.
The ideal we want is the kernel of this map:
I = ker phi
Shortcut notation for this construction is provided by the function
monomialCurveIdeal:
I = monomialCurveIdeal(R,{1,3,4})
We can compute the
dimension,
codimension (also called the
height) and
degree of this ideal:
dim I
codim I
degree I
The Hilbert polynomial is obtained with the function
hilbertPolynomial:
hilbertPolynomial(R/I)
The output above may not be what the user expected:
the term
Pm represents the Hilbert polynomial of
projective
m-space. Thus the output tells
us that the Hilbert polynomial of
M is
i ↦ -3*1+4*(i+1) = 4i + 1. Thus the degree
is four, the dimension of the projective variety
that is the support of
M is 1 (and so the affine
dimension is 2), and the (arithmetic) genus is 0 (obtained as 1 minus the
constant term of the polynomial.)
The more usual expression for the Hilbert polynomial can
be obtained as follows:
hilbertPolynomial(R/I, Projective => false)
The construction
Projective => false is our first example of
an
option to a function: we specified that the option
Projective was to have the value
false.
The form we used first could also have been written this way:
hilbertPolynomial(R/I, Projective => true)
The Hilbert series of
M (the generating function
for the dimensions of the graded pieces of
M) is
obtained with:
hilbertSeries (R/I)
This generating function is expressed
as a rational function with denominator equal to (1-T)
n, where
n is the number of variables in R.
Since R/I has dimension 2, it can also be written
with denominator (1-t)
2. To see it in this form, use
reduceHilbert:
reduceHilbert hilbertSeries (R/I)
It is possible to manipulate the numerator and denominator of this
expression.
A great deal of subtle information about a module is visible using
free resolutions. For an example, we begin
by turning
R/I into a module. Here the code
R1 produces the free module of
rank 1 over
R, and
res computes a free resolution:
M=R^1/I
Mres = res M
To get more precise information about
Mres,
we could compute its Betti table with
betti:
betti Mres
The display is chosen for compactness. Each column of the
table corresponds
to a free module in the resolution. The column’s heading
specifies the
homological degree (the position of the free
module in the resolution).
The entry just below the homological degree
is the rank of the free module, also called the
total betti
number. The remaining entries in the column
tell us how many generators of each degree this free
module has: the number in the column labelled
j and in the row labelled
d
tells how many generators of degree
j+d the
j-th free module has.
Thus, in our case, the single
generator of the third (and last) free module in the
resolution has degree
3+2=5.
Commonly computed homological invariants
such as
projective dimension and
regularity are (also) available directly:
pdim M
regularity M
Division With Remainder
A major application of Gröbner bases is
to give the normal form for an element modulo an
ideal, allowing one, for example, to decide whether
the element is in the ideal.
For example, we can decide which power of the trace
of a generic 3x3 matrix is expressible in terms of the entries of the
cube of the matrix with the following code:
kk = ZZ/32003
R = kk[a..i]
M = genericMatrix(R,a,3,3)
I = ideal M^3
This gives the ideal of entries of the matrix. In the expression
“M = genericMatrix(R,a,3,3)” the arguments “R,a,3,3” specify the
ring, the first variable to use, and the numbers of rows and columns
desired.
Tr = trace M
for p from 1 to 10 do print (Tr^p % I)
The expression “Trp % I” computes the normal form for the p-th power
of the trace Tr with respect to the Gröbner basis of I.
The expression “for p from 1 to 10 do” specifies a
for loop that executes the following expression, “print (Trp % I)”,
with 10 consecutive values of p.
We see from the output of these commands that the 6-th power
of the trace is NOT in the ideal of entries of the cube of M,
but the 7-th power is. We can compute the coefficients in the expression for it
using the division algorithm, denoted in this setting by //:
Tr^7//(gens I)
Elimination Theory
Consider the problem of projecting the
“twisted cubic”, a curve in
ℙ3 defined
by the three
2 × 2 minors of a certain
2 × 3 matrix.
We already have the simplest tools for solving
such a problem.
We first clear the earlier meaning of
x
to allow it to be used as a subscripted variable:
x = symbol x
Since we are going to deal with a curve in
ℙ3,
we begin with a polynomial ring in four variables:
kk = ZZ/32003
R = kk[x_0..x_3]
The ideal of the twisted cubic curve is generated by the
2 × 2
minors of a “catalecticant" or “Hankel" matrix, conveniently
defined as follows:
M = map(R^2, 3, (i,j)->x_(i+j))
I = minors(2,M)
As projection center we
take the point with homogeneous coordinates
(1,0,0,-1),
which is defined by the ideal:
pideal = ideal(x_0+x_3, x_1, x_2)
The ideal J of the image of the curve under the projection from this point
is the kernel of the ring map
S=kk[u,v,w] →R/I
sending the variables
of S to the generators of
pIdeal,
regarded as elements of
R/I. This is the same as the more usual formulation:
J = I ∩ kk[x0+x3, x1, xx]
To compute this we first substitute
pIdeal into
R/I, and then form
the necessary ring map:
Rbar = R/I
pideal = substitute(pideal, Rbar)
S = kk[u,v,w]
J=kernel map (Rbar, S, gens pideal)
The ideal J defines a curve with one singular point.
We can compute the ideal of the singular locus with:
K = ideal singularLocus(J)
This doesn’t look like the ideal of a reduced point! But
that’s because it isn’t yet saturated:
saturate K
We have just seen the
saturate function in its most
common use: to saturate with respect to the maximal ideal.
but we can also find the saturation of any ideal with
respect to another:
saturate (ideal"u3w,uv", ideal"u")
We can also take the “ideal quotient” I:J of an ideal I with
respect to another, J
defined as the set of elements f such that
f*J is contained in I:
ideal"u3w,uv":ideal"u"
Defining functions and loading packages
It is easy to define your own functions in Macaulay2, and this
can save a lot of typing. Functions are defined with the
symbol ->. For example, the famous Collatz Conjecture
(also called the “hailstone problem”) asks
about the following procedure: given an integer n, divide it
by 2 if possible, or else multiply by 3 and add 1.
If we repeat this over and over,
does the process always reach 1? Here is a function that
performs the Hailstone procedure again and again,
producing a list of the intermediate results.
Collatz = n ->
while n != 1 list if n%2 == 0 then n=n//2 else n=3*n+1
For example:
Collatz 27
If you don’t understand this code easily, see Function and while in the documentation.
In order to understand a process it is often useful to tabulate the
results of applying it many times. One feature of the Collatz process
is how many steps it takes to get to 1. We can tabulate this statistic
for the first 25 values of n with the function tally, as follows:
tally for n from 1 to 30 list length Collatz n
A line of the form 18 =>3
in the result means that a Collatz sequence of length 18
was seen 3 times.
To see the successive “record-breakers”,
that is, the numbers with longer Collatz sequences than any
number before them, we might try:
record = length Collatz 1
L = for n from 2 to 1000 list (
l := length Collatz n;
if l > record
then (record = l; (n,l))
else continue)
If you want to see a list of just the successive records,
you can apply the
function last to each element of the list L.
A convenient way to do this is with this syntax:
L/last
Note that in
writing functions of more than one expression (usually
there’s one expression per line), the expressions must be
separated by semicolons. For example in the “for” loop
above, the first expression was “l = length Collatz n”.
After the last expression of an input line or of a function body,
a semicolon suppresses output, useful when the output
would be large.
There are many packages of ready-made functions available for
your use, many written by other users (perhaps you’ll contribute one
someday!).
For example, there is a package called EdgeIdeals::EdgeIdeals.
To load the package, use:
loadPackage "EdgeIdeals"
After loading it, you can call its functions,
such as EdgeIdeals::randomGraph and EdgeIdeals::edgeIdeal:
kk = ZZ/32003
R = kk[vars(0..10)]
G=randomGraph (R,20)
K=edgeIdeal G
hilbertSeries K
betti res K
When testing a conjecture one sometimes wants to run a
large number of randomly chosen
examples.
Here’s some typical code that one might use to study
a random graph ideal. First we use “for ... list ...” to construct a list L
and suppress its printing by ending the line that creates
it with a “;”. Each entry of L is a triple consisting of the
codimension, degree, and Betti table of a random graph ideal
on 10 vertices having only 4 edges.
R = ZZ/2[vars(0..10)]
L=for j from 1 to 100 list(
I = edgeIdeal randomGraph (R,5);
(codim I, degree I, betti res I));
We can use tally to find out how many examples
were found with each combination of codimension and degree and Betti table.
tally L
We can determine how many distinct patterns were found:
#tally L
Ext, Tor, and cohomology
Macaulay2 can compute the homology of complexes;
for example, let’s compute the homology of a
Koszul complex that is not a resolution:
K(x2, x y2): 0 → S(-5) → S(-2)⊕S(-3) → S →0
The free module
S(-2) ⊕ S(-3) can be defined with this
syntax:
kk = ZZ/32003
S = kk[u,v,w]
S^{-2,-3}
Here is how we can define the maps in the Koszul complex:
S = kk[x,y]
phi1 = map(S^1, S^{-2,-3}, matrix"x2,xy2")
phi2 = map(S^{-2,-3}, S^{-5}, matrix"xy2;-x2")
Let’s check that this is will really make a complex:
phi1*phi2
To get the homology we can, for example compute:
(ker phi1)/(image phi2)
We could also use the data type
ChainComplex
and use a built-in facility to take homology (in our case
H1):
FF = chainComplex(phi1,phi2)
FF.dd
homology FF
presentation (homology FF)_1
Either way, the first homology is
((x2):(xy2)) / (x2) ≅ S/(x), in accord
with general theory.
There are other ways to construct Koszul complexes. One way is as the tensor product of
chain complexes of length 1:
FF = chainComplex matrix {{x^2}} ** chainComplex matrix {{x*y^2}}
FF.dd
Another way is by using the function
koszul, designed for that purpose:
FF = koszul matrix {{x^2, x*y^2}}
FF.dd
Since
Macaulay2 can compute resolutions and homology, it can
compute things such as
Ext,
Tor and sheaf cohomology, as in the
following examples. The first uses Serre’s formula to compute
the multiplicity with which a 2-plane meets the union
of two 2-planes in 4-space (this is the first case in which
the length of the intersection scheme is NOT the right answer.)
The notation “
M**N” denotes the tensor product of the modules
M and
N.
We use the syntactical forms
“
for j from 0 to 4 list ...” to list some results and
“
sum(0..4, j -> ...)” to sum some results.
S=kk[a,b,c,d]
IX = intersect(ideal(a,b), ideal(c,d))
IY = ideal(a-c, b-d)
degree ((S^1/IX) ** (S^1/IY))
for j from 0 to 4 list degree Tor_j(S^1/IX, S^1/IY)
sum(0..4, j-> (-1)^j * degree Tor_j(S^1/IX, S^1/IY))
Similarly, we can compute Hom and Ext:
Hom(IX, S^1/IX)
Ext^1(IX, S^1/IX)
or the cohomology of the sheaf associated to a module.
Here is how to compute
the first cohomology of the structure
sheaf twisted by
-2 of the curve
Proj(S/IX), which
in this case is the disjoint union of two
lines in
ℙ3:
HH^1 (sheaf (S^{-2}**(S^1/IX)))


This method assumes that alpha is unknown, but that the multiplication is a known function of the effective 239Pu mass. Presently, only a quadratic dependence of multiplication on effective 239Pu mass is supported and no error analysis is done. Eliminating alpha from the point model equations for the singles and doubles rates from the section “Conventional Multiplicity Assay” gives:
where
= effective 239Pu mass
= calibration parameters
and where the other symbols are defined in the section “Conventional Multiplicity Assay.” The factor is a function of the isotopic composition only, so the known multiplicity equation can be solved for effective 239Pu mass using Newton’s method as follows:
1. Set
2. Calculate
where
3. Set
4. If
set and go to step 2.
After the effective 239Pu mass is obtained,


AP Top International News at 3:43 a.m. EST
by EndPlayGermany, allies mark 30 years since Berlin Wall fell
Japan emperor greets public in parade marking enthronement
Hindus rejoice, Muslims deplore India court ruling on temple
Spain goes to the polls with far-right tipped to make gains
Iran calls ex-FBI agent's case a 'missing person' file
Hong Kong pro-democracy lawmakers charged, student mourned
Cambodia's exiled opposition leader makes it part way home
New challenge for Bolivian president as police abandon posts
Hopes of young Lebanese to escape sectarianism put to test
Last victim of Mexico border killings buried as others leave


Original article and Stephen's blog can be found here: https://breakitdownto.earth/2019/05/10/Transformers_part1.html
Reposted with permission.
There’s quite a lot of talk about how wonderful Transformers are and how they solve a lot of problems. Fair enough, they are pretty good. That said, all the explanations I’ve seen so far include math and neural network diagrams (nothing wrong with that!). What I’m going to attempt to do is talk about how they work in a more conceptual way, because it’s much easier to understand the math and diagrams if you have some idea of why those equations even exist.
In this post I’ll attempt to walk through the history that got us to the point where Transformers (the neural network technique, for clarity), seemed like a good idea. There are a couple of things we’ll need to think about:
- The situation we use a Transformer in - and why
- How have we evolved in thinking about how to deal with natural language?
- Why wasn’t any of the stuff we thought of in the past good enough? Why did we have to keep going and invent transformers?
- How do transformers work?
We’ll look at the first two points in this post and the second two in the next post. I’ll be assuming you know what you’re doing with neural networks, to at least some extent.
Hopefully what you’ll see at the end of all of this is that Transformers contain echoes of all the things that came before and that in conceptual terms they’re actually quite simple. Finally, I’m going to talk about this through the lens of Natural Language Processing (NLP), because that’s what these things get used for. If you’re interested in this with respect to financial time series stuff or otherwise, just squint really hard and imagine some of the words are replaced with whatever the appropriate domain-specific replacement is.
This is actually the simple bit of these posts, if anything is. It’s what is known as a sequence to sequence problem. Also known as a seq2seq problem if you’re one of the people who works on this sort of thing.
Now, what the heck is that?
Basically, it’s the sort of thing you see over and over in NLP. Translation is a perfect example. Take for instance the following input and output pair:
Input : I do want to eat vegetables Output: 我想吃蔬菜
The goal of this task is to turn the input (English), into the output (Mandarin).  BUT! The order in which they appear matters. To see this in action, the input “do I want to eat vegetables” clearly has a different meaning. Some languages might have less of a problem with this than others, but in any event it’s a real source of information that we want to incorporate when we’re working on this problem. So the challenge is, how to predict a sequence of values - not necessarily words, it could be a financial time series problem you’re working on - using not just the knowledge of the input values but their structure (i.e. order), as well.
Just to briefly emphasise, this general type of problem has existed forever. People creating neural networks didn’t invent this type of problem, only new ways of solving it.
Important digression!
Looking at the above example and a great deal of explanatory material on the topic of seq2seq problems, there’s a common problem you can encounter. It’s this: the problem looks like the input and output are concurrent, but they actually aren’t.
The way the problem works is, you feed in an input sequence and then want your model to complete the sequence. So really, the input and output pair above should be presented more like this:
I do want to eat vegetables BREAK 我想吃蔬菜
The reason for the BREAK there is that you need something to tell your model to stop reading input and start generating output.
This will become very important as time goes on in this discussion.
Baby steps
Ok so first let’s step back in time. In the beginning (and I mean actually a long time ago, like 40 years or more), we didn’t have any of the gleaming mathematical machinery we now do for working on language problems. So where to start?
N-grams
This was the first, and simplest go at trying to figure out the what comes next? problem beyond just feeding in your input and hoping for the best. The idea here is that you can actually do a better job of predicting the next word if you use not only the current one, but the one before it. All the “N” in “N-grams” tells you is that you might use more or less context as opposed to specifically one or two words of history. The following examples might make things clearer.
Guess the next word given the input:
is
This is basically impossible, right? There’s some stuff that might not be that likely to come next, but by and large we can’t really narrow it down.
What about this input:
weather is
This is a bit more workable. We could probably make a few guesses about what goes next, but it’s definitely a narrower scope of possibilities than last time.
Now what about this:
The weather is
At this point I’m fairly sure something like hot or cold comes next.
So far so good, but what’s the cost? It’s pretty simple, in fact. Firstly, the reason we know one of those words comes next is because we’ve all watched too much news on the TV so far in this life. That’s well and good for a human, but sometimes you don’t have enough data for that to work for a machine.
Another problem arises if you’re trying to predict more than just the next word. If you’re trying to predict a whole sentence, you’re in a lot of trouble. Maybe you can get the first word of your output correct, but after that you’re at the mercy of whatever you predicted as your first word. If that’s wrong, everything else becomes even wronger. We’ve only really started solving this problem comparatively recently.
Even worse, the longer your input sequence the rarer it is! In the case of “The weather is”, you might be able to see it a few times in a dataset if you’re lucky. But not as many times as you see “weather is”, perhaps. So we’re stuck in a classic problem where we can get a few edge cases right all of the time, or have hopefully better than random performance over a much broader set of cases, assuming your input doesn’t fundamentally change as time goes on. That’s probably not good enough. So people kept researching stuff.
Time becomes a loop
Another thing that people discovered when talking about seq2seq problems is that sometimes stuff a long time ago in your input sequence actually matters in terms of the prediction you make at the end of it. Doing stuff with N-grams won’t work here because for example a 128-gram is basically unique. You’ll only every see that sequence of tokens the once, if at all, so it’s no use for prediction. So what can you do about this?
This is where things start getting complicated, unfortunately. That is to say, as soon as you try and do anything beyond the most basic stuff with a seq2seq problem, it gets complicated.
Intuitively, what we want is something that can remember the earlier parts of a sequence like this:4
I was born in a water moon. Some people, especially its inhabitants, called it a planet, but as it was only a little over two hundred kilometres in diameter, ‘moon’ seems the more accurate term. The moon was made entirely of water, by which I mean it was a globe that not only had no land, but no rock either, a sphere with no solid core at all, just liquid water, all the way down to the very centre of the globe.
If it had been much bigger the moon would have had a core of ice, for water, though supposedly incompressible, is not entirely so, and will change under extremes of pressure to become ice. (If you are used to living on a planet where ice floats on the surface of water, this seems odd and even wrong, but nevertheless it is the case.) The moon was not quite of a size for an ice core to form, and therefore one could, if one was sufficiently hardy, and adequately proof against the water pressure, make one’s way down, through the increasing weight of water above, to the very centre of the moon.
Where a strange thing happened.
For here, at the very centre of this watery globe, there seemed to be no gravity. There was colossal pressure, certainly, pressing in from every side, but one was in effect weightless (on the outside of a planet, moon or other body, watery or not, one is always being pulled towards its centre; once at its centre one is being pulled equally in all directions), and indeed the pressure around one was, for the same reason, not quite as great as one might have expected it to be, given the mass of water that the moon was made up from.
This was, of course,
Imagine you’re trying to guess what comes next after “This was, of course,”. Do you think it’s something about the physics stuff towards the end of the passage, or about the perspective of people who live on planets where ice floats on the surface referred to much earlier in the text? It could be either, but if your model isn’t capable of having some way of hanging onto relevant info from much earlier in your input sequence, you have no choice. You can only really consider the physics option.
So we needed some way of hanging onto not everything but at least some important info from the earlier parts of a potentially long sequence. This is where neural networks start to play a role.
The original go at this involved trying to get a neural network to have a memory of its own, after a fashion. I don’t want to go on forever about this because it turns into talking about math, but the long and the short of it was that you wanted a bit of your network to loop around on itself in a way that made some of the information coming in from a given sequence element take a while to get back out again.
It’s a bit like Gumbo. This is a slightly weird analogy, but stick with me. Gumbo is this dish you get in the southern parts of the U.S. that takes forever to cook. But the trick is to make it so that the flavour of the ingredients you put in early on is still retained some hours later in the pot when you finally finish cooking, even if you’ve taken that ingredient back out.
In our case, we want to put words in and move on to subsequent parts of the sequence without necessarily losing all of the earlier flavour. By the time we get to the end of that passage I put in above, we still want to be able to have some hint of the earlier part where the speaker says his planet was a moon.
In practical terms, what you do is make information take a really long path to get out of your network. Problem is, this isn’t perfect either. For a really long sequence, you can wind up with a gigantic number of parameters in your network. You also don’t really know what to hang on to, so by creating a recurrent neural network all you’re really doing is trying to hang on to as much of your input information as possible for as long as possible. This is on top of the other problem where introducing recurrence makes it slower to process an input sequence because now you have a dependency problem: you can only process some of your input after you’ve processed the bits that came before.

My model accurately predicts everything!
The next step forward after recurrence seemed at first like it solved everything. We’ll see that wasn’t the case though.
It turns out two of the problems with the basic approach to recurrence can be solved in the same way. The non-selectiveness of memory storage in a basic recurrent net and the escalating number of parameters needed were both addressed by the Long Short-Term Memory cell.
What this thing did differently was conceptually simple enough. Rather than just adding links between cells in a neural network so that it took a while for information to find the exit, each cell now got its own memory storage.
As always, so far so good. With this particular invention, you could get to the end of a passage like the one in the previous section and have some sort of useful numerical information from earlier on predict what comes next.
Going back to the first example I gave:
I do want to eat vegetables BREAK 我想吃蔬菜
Now that we have an LSTM to work with, the input sequence can comfortably be quite large and we’ll still have all of it to work with when we start predicting an output sequence.
That’s another big step forward, but there’s still a problem here. Now, although we have a lot of information to work with when we start predicting an output sequence, we still have the problem that the sequence is only as good as the first prediction.
That is to say, we need the entire sequence to be meaningfully encoded in whatever you have after you’ve looked at the last item in your input. It also has to be able to let you spell out the entire output sequence. And when you do, you’re still stuck with the problem that your second prediction depends on your first one and your third prediction depends on your second one.
Also this LSTM stuff is relatively slow because you have to process one element of your sequence at a time and there’s no real way around that in the framework. That said, as always, it was a big leap forwards and started to show some serious potential for dealing with seq2seq problems.
Wouldn’t it make more sense and potentially be faster if we could use all of the bits of the input sequence independently in determining an output, instead of pancaking the information you have up against an invisible wall separating your input sequence and whatever comes next? This question is more or less what the Attention method and Transformers grow out of. I’ll talk about why next time.


So after a little reading and a few videos of people 'tripping' on salvia, I decided to try it out. My sister and I went to the headshop and bought a can of 'sticky purple 80x' and a glass bong. Now, I've done well into 500 hits of acid, more than 20 lbs of reefer and more than my fair share of opium. Doing this was just something to do for shits and giggles. So, after getting back to my house we went out to my garage and prepared to try out a product that I expected to do little to nothing.
I packed my glass bong with ice and loaded a bowl as tight as I could get it. My sister being a little more hesitant than I said I should go first. I told her if I was going first, I'm cashing my bowl and she could reload. So, thatís how it went.
 I felt a sensation going over my body that no word could describe.  It felt good and terrible at the same time. I exhaled and quickly took another hoping for the pure joy being masked by terror would go. A few seconds into holding that hit in, I couldn't feel my legs. It was alarming, but I figured I had been this far down the rabit hole, I may as well 'meet Alice'. I blew out the hit and noticed it had an orange tone to it. I slowly took my last hit and drew it deep and large. I felt a large pop in my existance.
You may be wondering at this point what I mean by 'pop' but, as best I could explain it, it was like my soul was being pealed from my body like one peice of bread from another on a toast cheese sandwich.
Suddenly I'm in another world. I no longer existed, I was part of something much larger. I can't explain what that larger was, but I hated it. It was painful and trying to rip me apart. I was part of it, this large mass of vibrant colors. It was trying to tear me up and mix me into whatever it was. Much like taking 20 peices of chewed up gum and mixing them all together. I was only one color but the other colors were trying to make us one by destroying the singular forms. I could verbalize my thoughts and I said in this world 'What kind of cruel fucker does this? I was just born and now I'm going to be torn into peices?
I tried to think of who I was, but I knew I wasn't a 'he' anymore and more of an 'it'. I had the thought 'if I can make it a few more minutes, help will be here to remove me from this mass that I'm a part of. Slowly the mass dissolved and I could see a face. I didn't recognize the face because it wasn't attached to anything. It was just a floating face. The face said 'Do I need to call an ambulance? Say something, for christ sake say something' I verbalized without thinking or trying 'Iím back'. Minutes later after being helped to my feet I still couldn't figure out where I was at, but I did understand that my wife and sister where both very worried about something.
I finally figured out a few more minutes later that I was in my garage and with my wife and sister. I knew I had gone somewhere and what had happened there, but no understanding of exactly where that 'somewhere' was.
I decided I need to leave the 'crime scene' right now. So, we went outside on my deck and sat and smoked. The rain started but my head still wasn't there. Realizing I'm sweating like a pig somehow I understood that my sister was getting covered by my presperations and I was embarrassed by it, but could stop it. I couldn't stay outside either.
After months of thought, and reading I've noticed the similarities between my trip and a near death experience to hell. My life really did change that day. I stopped smoking, started excercising, changed my diet, dropped 15 lbs and I'm in the best physical shape of my life. But, I'm also on xanax to help with the anxiety at night I feel thinking of that hell I was in. My physician said I have 'Post traumatic stress disorder' even though she has no knowledge of the trip I took. Itís been 5 months and I'm still not feeling perfectly mentally healthy.
I've taken double dipped double wide acid, smoked a bowl of opium and some reefer in one sitting and had a 'bad' trip, but nothing like the Salvia.  Some people have reported good trips, and good for them. But, if I had a 1 in 99 chance of tripping like that again, I wouldn't take it.  I'd never had a thought like that before or after.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


| Top |
| GtkAdjustment * | adjustment | Read / Write |
| gdouble | climb-rate | Read / Write |
| guint | digits | Read / Write |
| gboolean | numeric | Read / Write |
| gboolean | snap-to-ticks | Read / Write |
| GtkSpinButtonUpdatePolicy | update-policy | Read / Write |
| gdouble | value | Read / Write |
| gboolean | wrap | Read / Write |
| struct | GtkSpinButton |
| enum | GtkSpinButtonUpdatePolicy |
| enum | GtkSpinType |
| #define | GTK_INPUT_ERROR |
GtkSpinButton implements AtkImplementorIface, GtkBuildable, GtkEditable, GtkCellEditable and GtkOrientable.
A GtkSpinButton is an ideal way to allow the user to set the value of some attribute. Rather than having to directly type a number into a GtkEntry, GtkSpinButton allows the user to click on one of two arrows to increment or decrement the displayed value. A value can still be typed in, with the bonus that it can be checked to ensure it is in a given range.
The main properties of a GtkSpinButton are through an adjustment. See the GtkAdjustment section for more details about an adjustment's properties. Note that GtkSpinButton will by default make its entry large enough to accomodate the lower and upper bounds of the adjustment, which can lead to surprising results. Best practice is to set both the “width-chars” and “max-width-chars” poperties to the desired number of characters to display in the entry.
1 2 3 4 5 |
spinbutton.horizontal ├── entry │ ╰── ... ├── button.down ╰── button.up |
1 2 3 4 5 |
spinbutton.vertical ├── button.up ├── entry │ ╰── ... ╰── button.down |
GtkSpinButtons main CSS node has the name spinbutton. It creates subnodes for the entry and the two buttons, with these names. The button nodes have the style classes .up and .down. The GtkEntry subnodes (if present) are put below the entry node. The orientation of the spin button is reflected in the .vertical or .horizontal style class on the main node.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// Provides a function to retrieve an integer value from a GtkSpinButton // and creates a spin button to model percentage values. gint grab_int_value (GtkSpinButton *button, gpointer user_data) { return gtk_spin_button_get_value_as_int (button); } void create_integer_spin_button (void) { GtkWidget *window, *button; GtkAdjustment *adjustment; adjustment = gtk_adjustment_new (50.0, 0.0, 100.0, 1.0, 5.0, 0.0); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 5); // creates the spinbutton, with no decimal places button = gtk_spin_button_new (adjustment, 1.0, 0); gtk_container_add (GTK_CONTAINER (window), button); gtk_widget_show_all (window); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// Provides a function to retrieve a floating point value from a // GtkSpinButton, and creates a high precision spin button. gfloat grab_float_value (GtkSpinButton *button, gpointer user_data) { return gtk_spin_button_get_value (button); } void create_floating_spin_button (void) { GtkWidget *window, *button; GtkAdjustment *adjustment; adjustment = gtk_adjustment_new (2.500, 0.0, 5.0, 0.001, 0.1, 0.0); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 5); // creates the spinbutton, with three decimal places button = gtk_spin_button_new (adjustment, 0.001, 3); gtk_container_add (GTK_CONTAINER (window), button); gtk_widget_show_all (window); } |
void gtk_spin_button_configure (GtkSpinButton *spin_button
,GtkAdjustment *adjustment
,gdouble climb_rate
,guint digits
);
Changes the properties of an existing spin button. The adjustment, climb rate, and number of decimal places are all changed accordingly, after this function call.
GtkWidget * gtk_spin_button_new (GtkAdjustment *adjustment
,gdouble climb_rate
,guint digits
);
Creates a new GtkSpinButton.
adjustment |
the GtkAdjustment object that this spin
button should use, or |
[allow-none] |
climb_rate |
specifies how much the spin button changes when an arrow is clicked on |
|
digits |
the number of decimal places to display |
GtkWidget * gtk_spin_button_new_with_range (gdouble min
,gdouble max
,gdouble step
);
This is a convenience constructor that allows creation of a numeric
GtkSpinButton without manually creating an adjustment. The value is
initially set to the minimum value and a page increment of 10 * step
is the default. The precision of the spin button is equivalent to the
precision of step
.
Note that the way in which the precision is derived works best if step
is a power of ten. If the resulting precision is not suitable for your
needs, use gtk_spin_button_set_digits()
to correct it.
void gtk_spin_button_set_adjustment (GtkSpinButton *spin_button
,GtkAdjustment *adjustment
);
Replaces the GtkAdjustment associated with spin_button
.
GtkAdjustment *
gtk_spin_button_get_adjustment (GtkSpinButton *spin_button
);
Get the adjustment associated with a GtkSpinButton
void gtk_spin_button_set_digits (GtkSpinButton *spin_button
,guint digits
);
Set the precision to be displayed by spin_button
. Up to 20 digit precision
is allowed.
void gtk_spin_button_set_increments (GtkSpinButton *spin_button
,gdouble step
,gdouble page
);
Sets the step and page increments for spin_button. This affects how quickly the value changes when the spin button’s arrows are activated.
void gtk_spin_button_set_range (GtkSpinButton *spin_button
,gdouble min
,gdouble max
);
Sets the minimum and maximum allowable values for spin_button
.
If the current value is outside this range, it will be adjusted to fit within the range, otherwise it will remain unchanged.
gint
gtk_spin_button_get_value_as_int (GtkSpinButton *spin_button
);
Get the value spin_button
represented as an integer.
void gtk_spin_button_set_value (GtkSpinButton *spin_button
,gdouble value
);
Sets the value of spin_button
.
void gtk_spin_button_set_update_policy (GtkSpinButton *spin_button
,GtkSpinButtonUpdatePolicy policy
);
Sets the update behavior of a spin button. This determines whether the spin button is always updated or only when a valid value is set.
void gtk_spin_button_set_numeric (GtkSpinButton *spin_button
,gboolean numeric
);
Sets the flag that determines if non-numeric text can be typed into the spin button.
void gtk_spin_button_spin (GtkSpinButton *spin_button
,GtkSpinType direction
,gdouble increment
);
Increment or decrement a spin button’s value in a specified direction by a specified amount.
spin_button |
||
direction |
a GtkSpinType indicating the direction to spin |
|
increment |
step increment to apply in the specified direction |
void gtk_spin_button_set_wrap (GtkSpinButton *spin_button
,gboolean wrap
);
Sets the flag that determines if a spin button value wraps around to the opposite limit when the upper or lower limit of the range is exceeded.
void gtk_spin_button_set_snap_to_ticks (GtkSpinButton *spin_button
,gboolean snap_to_ticks
);
Sets the policy as to whether values are corrected to the nearest step increment when a spin button is activated after providing an invalid value.
void
gtk_spin_button_update (GtkSpinButton *spin_button
);
Manually force an update of the spin button.
guint
gtk_spin_button_get_digits (GtkSpinButton *spin_button
);
Fetches the precision of spin_button
. See gtk_spin_button_set_digits()
.
void gtk_spin_button_get_increments (GtkSpinButton *spin_button
,gdouble *step
,gdouble *page
);
Gets the current step and page the increments used by spin_button
. See
gtk_spin_button_set_increments()
.
gboolean
gtk_spin_button_get_numeric (GtkSpinButton *spin_button
);
Returns whether non-numeric text can be typed into the spin button.
See gtk_spin_button_set_numeric()
.
void gtk_spin_button_get_range (GtkSpinButton *spin_button
,gdouble *min
,gdouble *max
);
Gets the range allowed for spin_button
.
See gtk_spin_button_set_range()
.
gboolean
gtk_spin_button_get_snap_to_ticks (GtkSpinButton *spin_button
);
Returns whether the values are corrected to the nearest step.
See gtk_spin_button_set_snap_to_ticks()
.
GtkSpinButtonUpdatePolicy
gtk_spin_button_get_update_policy (GtkSpinButton *spin_button
);
Gets the update behavior of a spin button.
See gtk_spin_button_set_update_policy()
.
gdouble
gtk_spin_button_get_value (GtkSpinButton *spin_button
);
Get the value in the spin_button
.
gboolean
gtk_spin_button_get_wrap (GtkSpinButton *spin_button
);
Returns whether the spin button’s value wraps around to the
opposite limit when the upper or lower limit of the range is
exceeded. See gtk_spin_button_set_wrap()
.
struct GtkSpinButton;
The GtkSpinButton contains only private data and should not be directly modified.
The spin button update policy determines whether the spin button displays
values even if they are outside the bounds of its adjustment.
See gtk_spin_button_set_update_policy()
.
|
When refreshing your GtkSpinButton, the value is always displayed |
||
|
When refreshing your GtkSpinButton, the value is only displayed if it is valid within the bounds of the spin button's adjustment |
The values of the GtkSpinType enumeration are used to specify the
change to make in gtk_spin_button_spin()
.
#define GTK_INPUT_ERROR -1
Constant to return from a signal handler for the “input” signal in case of conversion failure.
“adjustment”
property“adjustment” GtkAdjustment *
The adjustment that holds the value of the spin button.
Flags: Read / Write
“climb-rate”
property“climb-rate” gdouble
The acceleration rate when you hold down a button.
Flags: Read / Write
Allowed values: >= 0
Default value: 0
“digits”
property“digits” guint
The number of decimal places to display.
Flags: Read / Write
Allowed values: <= 20
Default value: 0
“numeric”
property“numeric” gboolean
Whether non-numeric characters should be ignored.
Flags: Read / Write
Default value: FALSE
“snap-to-ticks”
property“snap-to-ticks” gboolean
Whether erroneous values are automatically changed to a spin button's nearest step increment.
Flags: Read / Write
Default value: FALSE
“update-policy”
property“update-policy” GtkSpinButtonUpdatePolicy
Whether the spin button should update always, or only when the value is legal.
Flags: Read / Write
Default value: GTK_UPDATE_ALWAYS
“value”
property“value” gdouble
Reads the current value, or sets a new value.
Flags: Read / Write
Default value: 0
“wrap”
property“wrap” gboolean
Whether a spin button should wrap upon reaching its limits.
Flags: Read / Write
Default value: FALSE
“shadow-type”
style property“shadow-type” GtkShadowType
Style of bevel around the sping button.
GtkSpinButton:shadow-type
has been deprecated since version 3.20 and should not be used in newly-written code.
Use CSS to determine the style of the border; the value of this style property is ignored.
Flags: Read
Default value: GTK_SHADOW_IN
“change-value”
signalvoid user_function (GtkSpinButton *spin_button, GtkScrollType scroll, gpointer user_data)
The ::change-value signal is a keybinding signal which gets emitted when the user initiates a value change.
Applications should not connect to it, but may emit it with
g_signal_emit_by_name()
if they need to control the cursor
programmatically.
The default bindings for this signal are Up/Down and PageUp and/PageDown.
spin_button |
the object on which the signal was emitted |
|
scroll |
a GtkScrollType to specify the speed and amount of change |
|
user_data |
user data set when the signal handler was connected. |
Flags: Action
“input”
signalgint user_function (GtkSpinButton *spin_button, gpointer new_value, gpointer user_data)
The ::input signal can be used to influence the conversion of
the users input into a double value. The signal handler is
expected to use gtk_entry_get_text()
to retrieve the text of
the entry and set new_value
to the new value.
The default conversion uses g_strtod()
.
spin_button |
the object on which the signal was emitted |
|
new_value |
return location for the new value. |
[out][type double] |
user_data |
user data set when the signal handler was connected. |
TRUE
for a successful conversion, FALSE
if the input
was not handled, and GTK_INPUT_ERROR
if the conversion failed.
Flags: Run Last
“output”
signalgboolean user_function (GtkSpinButton *spin_button, gpointer user_data)
The ::output signal can be used to change to formatting of the value that is displayed in the spin buttons entry.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// show leading zeros static gboolean on_output (GtkSpinButton *spin, gpointer data) { GtkAdjustment *adjustment; gchar *text; int value; adjustment = gtk_spin_button_get_adjustment (spin); value = (int)gtk_adjustment_get_value (adjustment); text = g_strdup_printf ("%02d", value); gtk_entry_set_text (GTK_ENTRY (spin), text); g_free (text); return TRUE; } |
spin_button |
the object on which the signal was emitted |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
“value-changed”
signalvoid user_function (GtkSpinButton *spin_button, gpointer user_data)
The ::value-changed signal is emitted when the value represented by
spinbutton
changes. Also see the “output” signal.
spin_button |
the object on which the signal was emitted |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
“wrapped”
signalvoid user_function (GtkSpinButton *spin_button, gpointer user_data)
The ::wrapped signal is emitted right after the spinbutton wraps from its maximum to minimum value or vice-versa.
spin_button |
the object on which the signal was emitted |
|
user_data |
user data set when the signal handler was connected. |
Flags: Run Last
Since: 2.10


16 May 2018
Recently I found myself wanting to dive in to blockchain development after finishing the fantastic CryptoZombies tutorials, and what better way to start working on DApps than to create something for the open source community.
Etherplate is an example project showing how you can hook up your Ethereum Non-Fungible Tokens (NFTs, ERC721, similar to CryptoKitties) contract(s) with web3. It demos minting ERC721 tokens, replaying blockchain history, subscribing to web3 events, and consuming view
Solidity methods in the JS frontend.
View Source on GitHub
View Demo on Netlify (Uses Ropsten testnet, ‘Loading …’ state currently waits for a mined transaction from testnet and therefore could take a few moments)
20 December 2017
Compile Time (AKA: thumb-twiddling time) Comparison
In Unity, each time you make any change to your C# code the entire project is recompiled. This can take anywhere from a couple of seconds to minutes, depending on your computer’s hardware, the size of your project and number of plugins.
Thankfully, a new feature was released yesterday in Unity 2017.3 which allows you to selectively recompile certain files, instead of the entire project. This can greatly speed up your development time, as you typically do not change code in your 3rd-party plugins.
Read on for a quickstart guide on how to get this working for you.
9 September 2017
For the past six months I’ve been working on a city-building sim named Skytropolis for VR & Desktop in Unity. Early on we realized a need for a UI (user interface) where the player could choose which buildings they would want to add to their city. Instead of creating a typical, uninspired flat UI and pointing a laser pointer at scrollbars and menus (similar to using a web browser) we decided to create a card deck concept where you choose buildings from your card hand (similar to any card game you’ve played).
One of the largest challenges so far while developing Skytropolis has been solving the best ways to keep performance smooth. We need to hit and keep the game at over 90FPS for the Vive & Rift, while maintaining a visually interesting aesthetic.
25 April 2017
Previously
For the past year or so I’ve been a part of an amazing local community of game developers called Indiepod. Each week we meet up to discuss our progress. The numerous things I’ve shared with the group and learned from them has been instrumental in helping me release my first game, find work in the burgeoning Virtual Reality (VR) space, and stay on track during my transition from app to game developer.


Dr. Norman Borlaug
Here's a time line of Dr. Borlaug's life.
- 1914- Born in Cresco, Iowa
- 1933- Leaves his family's farm to attend the University of Minnesota, thanks to a Depression era program known as the "National Youth Administration"
- 1935 - Has to stop school and save up more money. Works in the Civilian Conservation Corps, helping starving Americans. "I saw how food changed them", he said. "All of this left scars on me."
- 1937 - Finishes university and takes a job in the US Forestry Service


Welcome to Cronus Agent!
Pylons Server is Up. If you are not redirected automatically in 3 seconds, follow this
link
to Cronus Agent Validate Internal page.


This is the default page for the OPeNDAP Java servlet.
Here you will find:
Plus, a link to the bundled OPeNDAP DAP2 Test Server:
You will most likely wish to replace this page with one that describes your data sets, server, research program, etc. And that's exactly what you should do!
In the meantime we hope we hope you find this software useful, and we welcome your questions and comments.
To Contact Us:
Technical Support<EMAIL_ADDRESS>Java Core Development<EMAIL_ADDRESS>$Name: $


Is it a coincidence that garage and garbage are separated by only one letter?
5/27/2018, 9:29:51 AM
Favs: 4
Retweets: 0
link--- layout: tweet ---
Is it a coincidence that garage and garbage are separated by only one letter?
5/27/2018, 9:29:51 AM
Favs: 4
Retweets: 0
linkIn other news come by my garage sale if you’re in Portland. We even take credit cards if you don’t have $1.25 on you for those cute vintage jars.
5/27/2018, 9:29:52 AM
Favs: 1
Retweets: 0
link


Constructor
new AudioPlayer(guild)
Instantiates a new audio player.
Parameters:
| Name | Type | Description |
|---|---|---|
guild |
Discord.Guild | Discord guild object. |
- Source:
Members
currentStream
Current stream object
- Source:
ffmpegProcess
FFMPEG process
- Source:
guild
Associated guild
- Source:
timestamp :number
Current playback timestamp.
Type:
- number
- Source:
voiceConnection
Current voice connection
- Source:
Methods
clean(disconnect)
Cleans resources and (optionally) disconnects from the voice channel.
Parameters:
| Name | Type | Description |
|---|---|---|
disconnect |
boolean | Set to true to disconnect |
- Source:
(async) join(voiceChannel) → {Promise.<Object>}
Joins a voice channel.
Parameters:
| Name | Type | Description |
|---|---|---|
voiceChannel |
object | Discord voice channel object |
- Source:
Returns:
Discord voice connection object
- Type
- Promise.<Object>
(async) play(voiceChannel, path, flags) → {Promise.<Object>}
Plays an audio stream.
Parameters:
| Name | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
voiceChannel |
Discord.VoiceChannel | Discordie VoiceChannel object | |||||||||
path |
String | Stream path or URL | |||||||||
flags |
object | Flags to append to the FFMpeg command
Properties
|
- Source:
Returns:
Discord encoder object
- Type
- Promise.<Object>
stop(disconnect, removeEvents)
Attempts to stop playback.
Parameters:
| Name | Type | Description |
|---|---|---|
disconnect |
boolean | Set to true to also disconnect from the voice channel |
removeEvents |
boolean | Remove event listeners before sending the stream. |
- Source:


?illÇ
???
?1
BM_WM
l|||jj|gj
YjTn
¥jijTW
Ž
[¥
i
n
1
1
iwjCiSj
I
1
nsssn
GARDEN
01443637
|
Mastichodendron
žr+*i.
A
-*y.A
New
York
Botanical
Garden
Arthur
Cronquist,
1944
Herb.
Forsyth.
Purchased
1885.
P
V
t
Ac-'
LSULf
fch•
mM
01443537
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


While most of Django core is Python, the admin
and gis
contrib apps
contain JavaScript code.
Please follow these coding standards when writing JavaScript code for inclusion in Django.
.editorconfig
file. We recommend using a text editor with EditorConfig support to avoid
indentation and whitespace issues. Most of the JavaScript files use 4 spaces
for indentation, but there are some exceptions.camelCase
instead of underscore_case
.
Different JavaScript files sometimes use a different code style. Please try to
conform to the code style of each file.$('body').on('click', selector, func)
instead of
$(selector).click(func)
. This makes it easier for projects to extend
Django’s default behavior with JavaScript.Django’s admin system leverages the jQuery framework to increase the capabilities of the admin interface. In conjunction, there is an emphasis on admin JavaScript performance and minimizing overall admin media file size. Serving compressed or “minified” versions of JavaScript files is considered best practice in this regard.
To that end, patches for JavaScript files should include both the original
code for future development (e.g. foo.js
), and a compressed version for
production use (e.g. foo.min.js
). Any links to the file in the codebase
should point to the compressed version.
To simplify the process of providing optimized JavaScript code, Django includes a handy Python script which should be used to create a “minified” version. To run it:
$ pip install closure
$ python django/contrib/admin/bin/compress.py
...\> pip install closure
...\> py django\contrib\admin\bin\compress.py
Behind the scenes, compress.py
is a front-end for Google’s
Closure Compiler which is written in Java. The Closure Compiler library is
not bundled with Django, but you can install it using pip as done above. The
Closure Compiler library requires Java 7 or higher.
Please don’t forget to run compress.py
and include the diff
of the
minified scripts when submitting patches for Django’s JavaScript.
Django’s JavaScript tests can be run in a browser or from the command line.
The tests are located in a top level js_tests
directory.
Django’s JavaScript tests use QUnit. Here is an example test module:
QUnit.module('magicTricks', {
beforeEach: function() {
var $ = django.jQuery;
$('#qunit-fixture').append('<button class="button"></button>');
}
});
QUnit.test('removeOnClick removes button on click', function(assert) {
var $ = django.jQuery;
removeOnClick('.button');
assert.equal($('.button').length, 1);
$('.button').click();
assert.equal($('.button').length, 0);
});
QUnit.test('copyOnClick adds button on click', function(assert) {
var $ = django.jQuery;
copyOnClick('.button');
assert.equal($('.button').length, 1);
$('.button').click();
assert.equal($('.button').length, 2);
});
Please consult the QUnit documentation for information on the types of assertions supported by QUnit.
The JavaScript tests may be run from a web browser or from the command line.
To run the tests from a web browser, open up js_tests/tests.html
in your
browser.
To measure code coverage when running the tests, you need to view that file over HTTP. To view code coverage:
python -m http.server
from the root directory (not from inside
js_tests
).To run the tests from the command line, you need to have Node.js installed.
After installing Node.js, install the JavaScript test dependencies by running the following from the root of your Django checkout:
$ npm install
...\> npm install
Then run the tests with:
$ npm test
...\> npm test
Oct 01, 2019


Events
Home
Upcoming Events
Ongoing Events
Previous Events
Contact Us
About
UPCOMING EVENTS
S-NO.
EVENT NAME
DATE
TOGGLE
1
KAALRAV 2020
28 February 2020
2
TECH ADRISHTA
15 March'20
Days
Hours
Minutes
Seconds


AI Glossary
Click on a letter to see terms
Click on a term to see it's definition
something
All
Pages
Term
Date
Scheme
Upload RDF
Graph
Export Turtle
Export
Resource List
SPARQL
Create New Page
Title


WikiLeaks: FARC-EP<EMAIL_ADDRESS>mail archive
This message is part of a particular mailbox provided at WikiLeaks
and it should be discussed here.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Don't let me down
- Subject: Don't let me down
- From: "HUGO ARMANDO LOAIZA CONTRERAS"<EMAIL_ADDRESS>- Date: Mon, 28 Jan 2008 14:22:46 -0700
- Authentication-results: mta187.mail.re3.yahoo.com from=perfspot.com; domainkeys=pass (ok)
- Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=perfspot.com; h=From:Subject:Date; b=ew6MYOVgEtsoYvjoou74ib+1mFSzbQUlY0AStQMGZPn/s/TEEJCLzNE+uc1IaSfM4KGJiOfmZRz7WgvY21zroASTzfVrLrWMugm8fHjeG2/PheEs/v6EXAhKIOp8gwb3;
- List-unsubscribe<EMAIL_ADDRESS>- Reply-to<EMAIL_ADDRESS>Come on, what are you waiting for? Come check out my PerfSpot profile and
set up a free account so we can stay in touch better.
Use this link to join so you'll be set up as my friend:
http://www.perfspot.com/j/halcondj
This site is great, it's free, you can upload unlimited pictures, listen to
music, meet guys and girls, customize your page and more...
Let me know once you've set up your site, can't wait to check it out.
Have a great day.
HUGO ARMANDO LOAIZA CONTRERAS
------------------------------------------------------------
You are receiving this email because HUGO ARMANDO LOAIZA CONTRERAS has
invited you to join.
If you wish to never be contacted by PerfSpot.com again, please click here:
http://www.perfspot.com/u.asp?e=elbarcinocolombia%40yahoo%2Ecom
If you have any questions or require assistance please contact our support
team:
Toll Free (USA): 1-888-311-PERF (311-7373)
Direct Dial (International): (1)602-273-3758
Email<EMAIL_ADDRESS>PerfSpot.com | 1275 W. Washington St. | Tempe, AZ 85281 | USA
Entry for this page on WikiLeaks |
Discussion page on WikiLeaks |
wikileaks.org
Main Index |
Thread Index |
Author Index


--- layout: base title: Training slug: training ---
Looking for online training courses instead?
We'll come to your premises and teach groups of 8 or more people. We adapt our training material to your organisation's needs.
Teaching exercises can use real user stories from your projects. When we get technical, we'll use the programming language your developers use.
+44 20 8720 6842 (Europe)
1-844-414-4961 (USA)
All attendees of private training classes also get a complimentary subscription to Cucumber School - our online training program.
We run public training events around the world. This is a great way to train a small number of people, or to sample our training before rolling it out to a larger team or department.
With Aslak Hellesøy and Liz Keogh
With Julien Biezemans and Pat Maddox
Cucumber Ltd can arrange public training classes in Europe and the USA. Let us know if you want to arrange a class in your city!
First, we teach the whole team the fundamental skills that make BDD and Specification by Example a success.
Learn how Business Analysts, UX designers, Developers and Testers can collaborate on specifications that lead to fewer defects and shorter delivery time.
We'll give you a solid training in test automation and how to write executable specifications with Cucumber.
You'll learn how to execute those specifications with Cucumber using Ruby, Java, JavaScript, .NET, PHP, Groovy, Scala or Clojure.
Write automated tests for your existing code, with our expert guidance. We'll show you advanced techniques for systems that are hard to test.
Enquire NowHundreds of people have already benefited from this training. From project managers to sysadmins, business analysts to testers, developers to user experience designers – anyone involved in software development can learn better collaboration with BDD and Specification by Example.
Here is some of their feedback:
"Without a doubt, our team has greatly benefited. I have been in IT for 13 years and have attended training classes on various subjects during my career. This was by far the most useful training I have ever attended.
— Amy Espinosa, User Experience " Information Architecture Manager, Wolters Kluwer


Home
Blog
Projects
Contact
Contact Me!
Thanks for coming to my site! If you like my work, send me message! I'd love to work with you.
Name
Email


mode_edit
insert_chart
format_quote
publish
attach_file
menu
http
web
desktop_windows
android
new_releases
contact_phone
CratorWorks : Get In Touch
Have An Enquiry , Feel Free To Send Us A Message
Full Name
Email
Contact Number
Category(Web App , Desktop App , Android App , Other)
Message
Submit
send


My home page has moved here! You should be redirected.
I'm a fourth-year undergraduate at Harvard University studying computer science and economics. I'm originally from Anaheim, California. I enjoy rock climbing, listening to music, and playing string instruments. My academic interests include futurism, artificial intelligence, moral philosophy, public policy, and physics. A few of my projects are highlighted below. To see what else I've been up to over the years, take a look at my resume!
Data Visualizations
Farm Animal Suffering Comparisons
- How much suffering do we cause when we buy _____? Aimed at informing ethical consumers. Some results run counter to common perception - for example, buying chicken is probably more unethical than buying beef.
American Electoral Politics: The Past 100 Years
- U.S. presidential elections from 1912 to 2012
What Makes an Elite Rock Climber?
- Characteristics of boulderers who have achieved V15 (8C), the hardest confirmed grade
- Word clouds characterizing any subreddit, fetching data in real time from Reddit's API
Applications and Extensions
- A Chrome extension to enhance the user experience of the MMO game Agar.io
- A Chrome extension for streamlined note-taking and excerpt sharing on Wikipedia
- A training, reference, and record-keeping app for rock climbers
- Settlers of Catan board generator
Connect Four AI: Interactive Game and Two-AI Showdown
- Adjustable-difficulty AI with command-line interface, using MiniMax and AlphaBeta pruning
- A simple in-browser tool to generate win probabilities between two players given their Elo ratings.
Writing
Shock Waves: Managing the Impacts of Climate Change on Poverty
- With Jisung Park
Buying Enemies: Why Foreign Assistance Endangers US Security Interests and Directions for Reform
- With the 2014 national security policy team at the Harvard Institute of Politics


Both the Athens County Democratic and Athens County Republican parties have experienced a high demand for political signs from Athens residents during the course of the election. John Haseley, chairman of the Athens Democratic Party, said political signs matter to voters now more than ever.
“I worked in campaigns throughout my life, and there used to be the old adage that yard signs don’t vote, and people used to kind of make fun of the obsession with yard signs, that they’re not that helpful to actually winning a campaign,” Haseley said. “I think things have changed. I think we’re in a different place in our political lives where I think yard signs are something that matter to voters right now.”
Yard signs often encourage political discussions between residents about candidates who will be on the upcoming ballot. But while some residents simply put up political signs to show support for their favored candidates, others put up signs in spite of those who disagree.
Hannah Adkins, an Athens resident, currently has 13 political signs in her yard. She originally had one sign that said “Support Small Businesses, Go Democrat.” After a neighbor said something negative about the sign, she added nine more, all supporting different candidates, save for duplicate Biden-Harris signs.
She added several more after two signs were stolen from her yard last week, Adkins said in an email.
“I had planned to put up one or two more, but I don’t appreciate being told my opinions don’t matter, and that I shouldn’t share them on my property,” Adkins said in an email. “Hence the overabundance of signs.”
Though they may have been added out of spite, Adkins believes, at worst, her signs will inspire discussions about the elections that will affect those who see them, which are often for local and state positions or local levies.
Adkins wants to encourage people to vote down the ballot. If someone sees a name in Adkins’ yard they don’t recognize, it could cause them to look up and learn more about the candidates in the election, she said.
“Those discussions are important, seeing a previously unknown candidate’s name might lead to research into local politicians,” Adkins said in an email.
Some voters use political signs to show that it is OK to not stick to only one political party. If there is a Democratic sign in someone’s yard who is known to vote Republican, it could encourage others to cross over the political line, Haseley said.
Pete Couladis, chairman of the Athens County Republican Executive Committee, said it would depend on the person. While some people might be influenced based on the number of signs that they see, others could get mad at neighbors who have different political views than them.
Residents are able to get their signs through a candidate’s website or at a party’s county headquarters. Trump signs are in high demand, and the Athens County Republicans gave out several hundred Trump signs from their headquarters before running out, Couladis said.
Many residents went back to the Republican county headquarters once or twice after signs were stolen out of their yard, Couladis said. Signs being stolen is not new to this election, though. It has been a problem in the past for Athens, Couladis said.
The county Democrats have also had a constant flow of residents looking for signs supporting Democratic candidates, Haseley said.
“I think it gives voters that comfort that if somebody that they respect is displaying a sign of who they support,” Haseley said.


What do we offer?
We send newsletters with exclusive content and deals on diesmo5
products, courses, free software & hardware giveaways, upcoming events, and job/internship opportunities.
How often do we send?
We send one newsletter every month.
How much does it cost to join?
It's free!
Anything else?
Members of our newsletter get access to a live face time call once a
week where we answer questions about engineering, design, or business.
{{partial "mailchimp" . }}