TeamCity OTA+ :: rvi_sota_server :: migrations container [Build 173](http://teamcity.prod01.internal.advancedtelematic.com:8111/viewLog.html?buildId=30742&buildTypeId=ota_plus_RviSotaServer_MigrationsContainer) is now running


In the next iteration of this we should use https://codex.wordpress.org/Function_Reference/wp_remote_get, document the `purge` responses from Tapestry properly, and handle and notify in WordPress


No, [it's all right](https://forum.palemoon.org/viewtopic.php?p=113307#p113307).


Why import logger? Service has self.logger.error()


TeamCity OTA+ :: rvi_sota_server :: migrations container [Build 173](http://teamcity.prod01.internal.advancedtelematic.com:8111/viewLog.html?buildId=30742&buildTypeId=ota_plus_RviSotaServer_MigrationsContainer) outcome was **SUCCESS**
Summary: Running Build time: 00:01:49


Merged.


> I'm a bit concerned about blocking all the refactoring operations in a wiki

Yeah I know but I would say it's good enough for now and it's a non interactive and not very long task so it should be Ok in practice.


Thanks, merged it just now.


Oh, and:

> Well the groups system is still an optional thing, so theoretically one could completely turn it off and therefore don't need the group part of access.

I'd actually make the groups system a first class "always-on" citizen. If an administrator decides to have no groups at all, that's fine (empty list = off), but making it completely optional is IMHO overthinking it slightly. I mean, apart from adding complexity like having to check if groups are enabled or not in the API layer and such, what would being able to disable it actually add?


Can you explain this try/except? From my understanding its a no-op


- インスタンス作成の実行結果

```
gaia% ansible-playbook gcp.yml -vvvv
Using /Users/tshst/OneDrive/src/github.com/tshst/develop/ansible/ansible.cfg as config file
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

Loading callback plugin default of type stdout, v2.0 from /Users/tshst/.anyenv/envs/pyenv/versions/3.5.2/lib/python3.5/site-packages/ansible/plugins/callback/__init__.py

PLAYBOOK: gcp.yml ************************************************************************************************************************************************************************************************************************************************************
1 plays in gcp.yml

PLAY [create instance] *******************************************************************************************************************************************************************************************************************************************************
META: ran handlers

TASK [launch instances] ******************************************************************************************************************************************************************************************************************************************************
task path: /Users/tshst/OneDrive/src/github.com/tshst/develop/ansible/gcp.yml:13
Using module file /Users/tshst/.anyenv/envs/pyenv/versions/3.5.2/lib/python3.5/site-packages/ansible/modules/cloud/google/gce.py
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: tshst
<127.0.0.1> EXEC /bin/sh -c 'echo ~ && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/tshst/.ansible/tmp/ansible-tmp-1493812067.711612-211842625513158 `" && echo ansible-tmp-1493812067.711612-211842625513158="` echo /Users/tshst/.ansible/tmp/ansible-tmp-1493812067.711612-211842625513158 `
" ) && sleep 0'
<127.0.0.1> PUT /var/folders/p8/r468lzq147jf4b9kgsmcghd80000gn/T/tmpdan19_57 TO /Users/tshst/.ansible/tmp/ansible-tmp-1493812067.711612-211842625513158/gce.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /Users/tshst/.ansible/tmp/ansible-tmp-1493812067.711612-211842625513158/ /Users/tshst/.ansible/tmp/ansible-tmp-1493812067.711612-211842625513158/gce.py && sleep 0'
W
<127.0.0.1> EXEC /bin/sh -c '/Users/tshst/.anyenv/envs/pyenv/versions/3.5.2/bin/python3.5 /Users/tshst/.ansible/tmp/ansible-tmp-1493812067.711612-211842625513158/gce.py; rm -rf "/Users/tshst/.ansible/tmp/ansible-tmp-1493812067.711612-211842625513158/" > /dev/null 2>&1 &
& sleep 0'
changed: [localhost] => {
    "changed": true,
    "instance_data": [
        {
            "disks": [
                "sample-secretspy"
            ],
            "image": "centos-7-v20170426",
            "machine_type": "f1-micro",
            "metadata": {},
            "name": "sample-secretspy",
            "network": "default",
            "private_ip": "10.146.0.3",
            "public_ip": "35.187.213.2",
            "status": "RUNNING",
            "subnetwork": "default",
            "tags": [],
            "zone": "asia-northeast1-a"
        }
    ],
    "instance_names": [
        "sample-secretspy"
    ],
    "invocation": {
        "module_args": {
            "credentials_file": null,
            "disk_auto_delete": true,
            "disk_size": 10,
            "disks": null,
            "external_ip": "ephemeral",
            "image": "centos-7-v20170426",
            "instance_names": "sample-secretspy",
            "ip_forward": false,
            "machine_type": "f1-micro",
            "metadata": null,
            "name": null,
            "network": "default",
            "num_instances": null,
            "pem_file": null,
            "persistent_boot_disk": false,
            "preemptible": null,
            "project_id": null,
            "service_account_email": null,
            "service_account_permissions": null,
            "state": "present",
            "subnetwork": null,
            "tags": null,
            "zone": "asia-northeast1-a"
        }
    },
    "state": "present",
    "zone": "asia-northeast1-a"
}
META: ran handlers
META: ran handlers

PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0
```


-1 for using final
it just blows up the code and is never used in any PF code


Daniel Havlik your emails are not known to GithHb and thus it is impossible to know if you have signed the Plone Contributor Agreement, which is required to merge this pull request.

Learn about the Plone Contributor Agreement: http://docs.plone.org/develop/coredev/docs/contributors_agreement_explained.html How to add more emails to your GitHub account: https://help.github.com/articles/adding-an-email-address-to-your-github-account/


> So let's add N°5 to the list of 'ODROID XU4 UAS' problems:

We have not identified any Odroid XU4 UAS problems.  Only **Linux** UAS problems have been reported.  The issues reported affect all USB3 UAS capable platforms.


@pvalena Ah,right. In fact that's what my code does, I just wrote the comment wrong. Will fix, thanks


thanks and regards, Following attached my file, mix between matrix and 7 segment, please try it for me i am still arduino beginner


I'm concerned this is an unnecessarily large amount of memory for a struct.  See https://gist.github.com/thargy/44912017fc2281da5150807f87fc98c5 for an alternate implementation and justification.


Was there a particular reason to add this maxheight restriction here? IMHO, this makes it hard to discover that one can actually change the time/distance limit and intervals, because the scrollbar is not very visible on all browsers:

![](http://i.imgur.com/eeOiVr6.png)

Also, these scrollbars aren't present in the normal routing mode's settings (where the lists just expand vertically until the whole panel scrolls out of view).


Thanks, I should have compiled it myself


`#include "LedControl.h"
#include <fontDigiClock.h>
#include <Wire.h>
#include "RTClib.h"
#include <Button.h>
#include <OneWire.h>

#define NUM_DISPLAY_MODES 4
#define NUM_SETTINGS_MODES 2
#define SLIDE_DELAY 10
#define cls   clear_display
#define DISP 4

LedControl lc1 = LedControl(11, 13, 10, 6);
LedControl lc2 = LedControl(DISP, DISP + 8, DISP + 1, 1);

bool debug = true;
//bool show_intro = true;
byte intensity = 7;
bool ampm = false;
bool show_date = true;
byte clock_mode = 4;

////________________________________________________________________________________________

byte old_mode = clock_mode;
short DN;
short WN;
bool date_state = true;
int devices, dev;
int rtc[7];
char dig[7];
char shiftChar[8];

////________________________________________________________________________________________

char days[7][4] = {
  "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
char daysfull[7][9] = {
  "MINGGU", "SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"
};
char suffix[1] = {'.'};

RTC_DS1307 ds1307;

Button buttonA = Button(2, BUTTON_PULLUP);
Button buttonB = Button(3, BUTTON_PULLUP);

int seconds_for_P1;
int seconds_for_P2;
int minutes_for_P1=50;
int increment_P1=0;
int minutes_for_P2=50;
int increment_P2=0;
int button_state_P1 = LOW;
int button_state_P2 = LOW;
int middle_button_state = LOW;
int button_P1 = 6;
int button_P2 = 7;
int middle_button = 8;
bool gameover = false;
bool blitzgameover = false;
bool dasagameover = false;
bool rapidgameover = false;
float time_P1=0;
float time_P2=0;
bool is_P1s_turn = false;
bool is_P2s_turn = false;
float last_time_comparison_P1 = millis();
float last_time_comparison_P2 = millis();
int end_of_game=0;
bool whiteleft = true;
int minuteP1H = minutes_for_P1 / 10;
int minuteP1L = minutes_for_P1 - minuteP1H * 10;
int minuteP2H = minutes_for_P2 / 10;
int minuteP2L = minutes_for_P2 - minuteP2H * 10;
int secondP1H = seconds_for_P1 / 10;
int secondP1L = seconds_for_P1 - 10 * secondP1H;
int secondP2H = seconds_for_P2 / 10;
int secondP2L = seconds_for_P2 - 10 * secondP2H;
int buzzer = A1;
int countdown = -1;
bool pair = false;
unsigned int secondH, secondL;
unsigned int minuteH, minuteL;
unsigned int hourH, hourL;

////////////////////////////////////////////////////////////////////////////////////////

void setup() {

  pinMode(button_P1, INPUT);
  pinMode(button_P2, INPUT);
  pinMode(middle_button, INPUT);
  pinMode(buzzer, OUTPUT);

  digitalWrite(button_P1, LOW);
  digitalWrite(button_P2, LOW);
  digitalWrite(middle_button, LOW);

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(9, LOW);

  pinMode(DISP, OUTPUT);
  pinMode(DISP + 1, OUTPUT);
  pinMode(DISP + 8, OUTPUT);

  if(debug){
  Serial.begin(9600);
  Serial.println("Debugging activated ... ");
  }

  devices = lc1.getDeviceCount();
  dev = devices-1;

  for (int address = 0; address < devices; address++) {
    lc1.shutdown(address, false);
    lc1.setIntensity(address, intensity);
    lc1.clearDisplay(address);
    lc2.shutdown(0, false);
    lc2.setIntensity(0, 15);
    lc2.clearDisplay(0);
  }

  #ifdef AVR
  Wire.begin();
  #else
  Wire1.begin();
  #endif
  ds1307.begin();
  displayclock();
  wipeOutside();
 //if(show_intro){ intro(); }
}

////////////////////////////////////////////////////////////////////////////////////////

void loop() {

  switch (clock_mode){
  case 0:
    blitz();
    break;
  case 1:
    dasa();
    break;
  case 2:
    rapid();
    break;
  case 3:
    catur();
    break;
  case 4:
    small();
    break;
  case 5:
    setup_menu();
    break;
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void plot (byte x, byte y, byte val) {

  byte address;
  y=7-y;
  if (x >= 0 && x <= 7)   {
    address = 0;
  }
  if (x >= 8 && x <= 15)  {
    address = 1;
    x = x - 8;
  }
  if (x >= 16 && x <= 23) {
    address = 2;
    x = x - 16;
  }
  if (x >= 24 && x <= 31) {
    address = 3;
    x = x - 24;
  }
  if (x >= 32 && x <= 39) {
    address = 4;
    x = x - 32;
  }
  if (x >= 40 && x <= 47) {
    address = 5;
    x = x - 40;
  }

  if (val == 1) {
    lc1.setLed(address, x, y, true);
  } else {
    lc1.setLed(address, x, y, false);
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void clear_display() {

  for (byte address = 0; address < 6; address++) {
    lc1.clearDisplay(address);
  }
}

////////////////////////////////////////////////////////////////////////////////////////
/*
void intro() {
  displayclock();

  for (byte address = 0; address < 15; address++) {
       lc1.setIntensity(address, 7);
  }
  for(int i=0; i<1; i++){
  }
  wipeOutside();
  char ver_a[14] = "KOTAMATI";
  for (byte address = 0; address < 6; address++) {
       lc1.setIntensity(address, 7);
  }
  byte i = 0;
   while (ver_a[i]) {
    delay(180);
    putnormalchar((i * 6), 1, ver_a[i]);
    i++;
  }
}
*/
////////////////////////////////////////////////////////////////////////////////////////

void puttinychar(byte x, byte y, char c){

  byte dots;
  if (c >= 'A' && c <= 'Z' || (c >= 'a' && c <= 'z') ) {
    c &= 0x1F;
  }
  else if (c >= '0' && c <= '9') {
    c = (c - '0') + 32;
  }
  else if (c == ' ') {
    c = 0;
  }
  else if (c == '.') {
    c = 27;
  }
  else if (c == ':') {
    c = 28;
  }
  else if (c == '\'') {
    c = 29;
  }
  else if (c == '!') {
    c = 30;
  }
  else if (c == '?') {
    c = 31;
  }
  else if (c == '-') {
    c = 42;
  }
  else if (c == '#') {
    c = 43;
  }
  else if (c == '>') {
    c = 44;
  }
  else if (c == '~') {
    c = 45;
  }
  else if (c == '*') {
    c = 46;
  }

  for (byte col = 0; col < 3; col++) {
    dots = pgm_read_byte_near(&mytinyfont[c][col]);
    for (char row = 0; row < 5; row++) {
      if (dots & (16 >> row))
        plot(x + col, y + row, 1);
      else
        plot(x + col, y + row, 0);
    }
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void putnormalchar(byte x, byte y, char c){

  byte dots;
  if (c >= 'A' && c <= 'Z' ) {
    c &= 0x1F;
  }
  else if (c >= 'a' && c <= 'z') {
    c = (c - 'a') + 41;
  }
  else if (c >= '0' && c <= '9') {
    c = (c - '0') + 31;
  }
  else if (c == ' ') {
    c = 0;
  }
  else if (c == '.') {
    c = 27;
  }
  else if (c == '\'') {
    c = 28;
  }
  else if (c == ':') {
    c = 29;
  }
  else if (c == '>') {
    c = 30;
  }
  else if (c == '=') {
    c = 79;
  }
  else if (c >= -80 && c <= -67) {
    c *= -1;
  }

  for (char col = 0; col < 5; col++) {
    dots = pgm_read_byte_near(&myfont[c][col]);
    for (char row = 0; row < 7; row++) {
      if (dots & (64 >> row)) {
        plot(x + col, y + row, 1);
      } else {
        plot(x + col, y + row, 0);
      }
    }
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void small() {

  char textchar[8];
  byte mins = 100;
  byte secs = rtc[0];
  byte old_secs = secs;

  cls();
  lc2.clearDisplay(0);

  while (run_mode()) {
    displayclock();

  get_time();
  secs = rtc[0];

  if (buttonA.uniquePress()) { switch_mode();  return; }

  if (secs != old_secs) {

  if(rtc[2] % 1 == 0 && rtc[1]==0 && rtc[0]==0){
    digitalWrite(buzzer, HIGH);
    delay(1000);
    digitalWrite(buzzer, LOW);
    delay(100);
    digitalWrite(buzzer, HIGH);
    delay(1000);
    digitalWrite(buzzer, LOW);
    delay(100);
    digitalWrite(buzzer, HIGH);
    delay(1000);
    digitalWrite(buzzer, LOW);
    delay(100);
    digitalWrite(buzzer, HIGH);
    delay(1000);
    digitalWrite(buzzer, LOW);
    delay(100);
    }

  if(rtc[0]==40  && date_state){
     display_date();
     return;
    }

      char buffer[3];
      itoa(secs, buffer, 10);
      if (secs < 10) {
        buffer[1] = buffer[0];
        buffer[0] = '0';
      }
      putnormalchar( 30, 0, ':');
      putnormalchar( 36, 0, buffer[0]);
      putnormalchar( 42, 0, buffer[1]);
      old_secs = secs;
    }

    if (mins != rtc[1]) {
      mins = rtc[1];
      byte hours = rtc[2];
      if (hours > 12) {
        hours = hours - ampm * 12;
      }
      if (hours < 1) {
        hours = hours + ampm * 12;
      }

      char buffer[3];
      itoa(hours, buffer, 10);
      if (hours < 10) {
        buffer[1] = buffer[0];
        if (ampm) {
          buffer[0] = ' ';
        }
        else {
          buffer[0] = '0';
        }
      }
      textchar[0] = buffer[0];
      textchar[1] = buffer[1];
      textchar[2] = ':';

      itoa (mins, buffer, 10);
      if (mins < 10) {
        buffer[1] = buffer[0];
        buffer[0] = '0';
      }
      textchar[3] = buffer[0];
      textchar[4] = buffer[1];

      textchar[5] = ':';
      buffer[3];
      secs = rtc[0];
      itoa(secs, buffer, 10);
      if (secs < 10) {
        buffer[1] = buffer[0];
        buffer[0] = '0';
      }
      textchar[6] = buffer[0];
      textchar[7] = buffer[1];

      byte x = 0;
      byte y = 0;
      for (byte x = 0; x < 6 ; x++) {
        putnormalchar( x * 6, 0, textchar[x]);
      }
    }
    delay(50);
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void display_date(){

  int date_delay = 70;
  wipeBottom();

  byte dow = rtc[3];
  byte date = rtc[4];
  byte month = rtc[5] - 1;
  byte year = rtc[6]-2000;

  char monthnames[12][4] = {
    "JAN", "FEB", "MAR", "APR", "MEI", "JUN", "JUL", "AGT", "SEP", "OKT", "NOP", "DES"
  };

  //----------- cetak nama hari ----------- //

  displayclock();
  byte len = 0;
  while(daysfull[dow][len]) {
    len++;
  };
  byte offset = (47 - ((len-1)*6)) / 2;
  int i = 0;
  while(daysfull[dow][i]){
    putnormalchar((i*6) + offset , 0, daysfull[dow][i]);
    delay(date_delay);
    i++;
  }
        int counter = 1000;
        while (counter > 0){
        if (buttonA.uniquePress()) { switch_mode();  return; }
        delay(1);
        counter--;
        }
  cls();

  //----------- cetak nomor tanggal ----------- //

  displayclock();
  char buffer[3];
  itoa(date,buffer,10);
     if (date < 10) {
       buffer[1] = buffer[0];
       buffer[0] = '0';
      }
  offset = 1;
  putnormalchar(0+offset, 0, buffer[0]);
  delay(date_delay);
  putnormalchar(8+offset, 0, buffer[1]);
  delay(date_delay);
  putnormalchar(16+offset, 0, suffix[0]);
  delay(90);

  //----------- cetak nama bulan ----------- //

  displayclock();
  len = 0;
  while(monthnames[month][len]) {
    len++;
  };
  offset = 28;
  i = 0;
  while(monthnames[month][i]){
    putnormalchar((i*6) +offset, 0, monthnames[month][i]);
    delay(date_delay);
    i++;
  }
        counter = 1000;
        while (counter > 0){
        if (buttonA.uniquePress()) { switch_mode();  return; }
        delay(1);
        counter--;
        }
  cls();

  //----------- cetak nomer tahun ----------- //

  displayclock();
  offset = 10;
  char buffer_y[3] = "20";
  putnormalchar(0+offset , 0, buffer_y[0]);
  delay(date_delay);
  putnormalchar(8+offset , 0, buffer_y[1]);
  delay(date_delay);

  itoa(year,buffer,10);
   if (year < 10) {
       buffer[1] = buffer[0];
       buffer[0] = '0';
      }
  putnormalchar(16+offset, 0, buffer[0]);
  delay(date_delay);
  putnormalchar(24+offset, 0, buffer[1]);
  delay(1000);
  cls();

  //----------- cetak nomer mingguan dalam tahunan ----------- //

  displayclock();
  offset = 1;
  char buffer_w[12] = "Minggu ke";
  puttinychar(0+offset , 1, buffer_w[0]);
  delay(date_delay);
  puttinychar(4+offset , 1, buffer_w[1]);
  delay(date_delay);
  puttinychar(8+offset , 1, buffer_w[2]);
  delay(date_delay);
  puttinychar(12+offset , 1, buffer_w[3]);
  delay(date_delay);
  puttinychar(16+offset , 1, buffer_w[4]);
  delay(date_delay);
  puttinychar(20+offset , 1, buffer_w[5]);
  delay(date_delay);
  puttinychar(24+offset , 1, buffer_w[6]);
  delay(date_delay);
  puttinychar(27+offset , 1, buffer_w[7]);
  delay(date_delay);
  puttinychar(31+offset , 1, buffer_w[8]);
  delay(date_delay);
  itoa(WN,buffer,10);
   if (WN < 10) {
       buffer[1] = buffer[0];
       buffer[0] = '0';
      }
  puttinychar(39+offset, 1, buffer[0]);
  delay(date_delay);
  puttinychar(43+offset, 1, buffer[1]);

        counter = 1000;
        while (counter > 0){
        if (buttonA.uniquePress()) { switch_mode();  return; }
        delay(1);
        counter--;
        }
  wipeTop();
}

////////////////////////////////////////////////////////////////////////////////////////

void switch_mode() {

  old_mode = clock_mode;
  const char *modes[] = {
     "BLITZ 5", "BLITZ 10", "RAPID", "C MANUAL", "JAM", "Set JAM",
  };

  byte next_clock_mode;
  byte firstrun = 1;

  for (int count = 0; count < 35 ; count++) {
    if (buttonA.uniquePress() || firstrun == 1) {
      count = 0;
      cls();

      if (firstrun == 0) {
        clock_mode++;
      }
      if (clock_mode > NUM_DISPLAY_MODES + 1 ) {
        clock_mode = 0;
      }

      char str_top[13];
      strcpy (str_top, modes[clock_mode]);

      next_clock_mode = clock_mode + 1;
      if (next_clock_mode >  NUM_DISPLAY_MODES + 1 ) {
        next_clock_mode = 0;
      }

      byte i = 0;
      while (str_top[i]) {
        putnormalchar(i * 6, 0, str_top[i]);
        i++;
      }
      firstrun = 0;
    }
    delay(50);
  }
}

////////////////////////////////////////////////////////////////////////////////////////

byte run_mode() {

  return 1;
}

////////////////////////////////////////////////////////////////////////////////////////

void setup_menu() {

  const char *set_modes[] = {
     "Set >", "24 Jam", "Exit"};
  if (ampm == 0) {
    set_modes[1] = ("12 Jam");
  }

  byte setting_mode = 0;
  byte next_setting_mode;
  byte firstrun = 1;

  for(int count=0; count < 35 ; count++) {
    if(buttonA.uniquePress() || firstrun == 1){
      count = 0;
      cls();

      if (firstrun == 0) {
        setting_mode++;
      }
      if (setting_mode > NUM_SETTINGS_MODES) {
        setting_mode = 0;
      }

      char str_top[9];
      strcpy (str_top, set_modes[setting_mode]);

      next_setting_mode = setting_mode + 1;
      if (next_setting_mode > NUM_SETTINGS_MODES) {
        next_setting_mode = 0;
      }

      byte i = 0;
      while(str_top[i]) {
        putnormalchar(i*6, 0, str_top[i]);
        i++;
      }
      firstrun = 0;
    }
    delay(50);
  }

  switch(setting_mode){
    case 0:
      set_time();
      break;
    case 1:
       set_ampm();
      break;
    case 2:
      //exit form menu
      break;
  }
  clock_mode=old_mode;
}

////////////////////////////////////////////////////////////////////////////////////////

void set_ampm() {

  ampm = (ampm ^ 1);
  cls();
}

////////////////////////////////////////////////////////////////////////////////////////

void set_time() {

  cls();
  get_time();
  byte set_min   = rtc[1];
  byte set_hr    = rtc[2];
  byte set_date  = rtc[4];
  byte set_mnth  = rtc[5];
  int  set_yr    = rtc[6];

  set_date = set_value(2, set_date, 1, 31);
  set_mnth = set_value(3, set_mnth, 1, 12);
  set_yr   = set_value(4, set_yr, 2013, 2099);
  set_hr   = set_value(1, set_hr, 0, 23);
  set_min  = set_value(0, set_min, 0, 59);

  ds1307.adjust(DateTime(set_yr, set_mnth, set_date, set_hr, set_min));

  cls();
}

int set_value(byte message, int current_value, int reset_value, int rollover_limit){
  cls();

  char messages[6][12]   = {
    "menit >", "Jam >", "Tanggal >", "Bulan >", "Tahun >"};

  byte i = 0;
  while(messages[message][i])
  {
    puttinychar(i*4 , 1, messages[message][i]);
    i++;
  }
  delay(999);
  cls();

  char buffer[5] = "    ";
  itoa(current_value,buffer,10);
  puttinychar(0 , 1, buffer[0]);
  puttinychar(4 , 1, buffer[1]);
  puttinychar(8 , 1, buffer[2]);
  puttinychar(12, 1, buffer[3]);

  delay(300);
  while (!buttonA.uniquePress()) {
    while (buttonB.isPressed()){
      if(current_value < rollover_limit) {
        current_value++;
      }
      else {
        current_value = reset_value;
      }

      itoa(current_value, buffer ,10);
      puttinychar(0 , 1, buffer[0]);
      puttinychar(4 , 1, buffer[1]);
      puttinychar(8 , 1, buffer[2]);
      puttinychar(12, 1, buffer[3]);
      delay(150);
    }
  }
  return current_value;
}

////////////////////////////////////////////////////////////////////////////////////////

void get_time(){

  DateTime now = ds1307.now();

  rtc[6] = now.year();
  rtc[5] = now.month();
  rtc[4] = now.day();
  rtc[3] = now.dayOfWeek();
  rtc[2] = now.hour();
  rtc[1] = now.minute();
  rtc[0] = now.second();

 DayWeekNumber(rtc[6],rtc[5],rtc[4],rtc[3]);

  if(debug){
  Serial.print("     ");
  Serial.print(rtc[2]);
  Serial.print(":");
  Serial.print(rtc[1]);
  Serial.print(":");
  Serial.print(rtc[0]);

  Serial.print("   ");
  Serial.print(rtc[4]);
  Serial.print(".");
  Serial.print(rtc[5]);
  Serial.print(".");
  Serial.print(rtc[6]);

  Serial.print("    tahun: ");
  Serial.print(rtc[3]);

  Serial.print("     hari ");
  Serial.print(DN);
  Serial.print("  dalam seminggu ");
  Serial.print(WN);
  Serial.print(" dalam ");
  Serial.print(rtc[6]);

  Serial.print("  clock_mode: ");
  Serial.println(clock_mode);
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void DayWeekNumber(unsigned int y, unsigned int m, unsigned int d, unsigned int w){

 int days[]={0,31,59,90,120,151,181,212,243,273,304,334};

 if (m==1 || m==2){
   DN = days[(m-1)]+d;
 }
 else if ((y % 4 == 0 && y % 100 != 0) ||  y % 400 == 0){
   DN = days[(m-1)]+d+1;
 }
 else {
   DN = days[(m-1)]+d;
 }

 if (w==0){
   WN = (DN-7+10)/7;
 }
 else{
   WN = (DN-w+10)/7;
 }
}

////////////////////////////////////////////////////////////////////////////////////////

void wipeRight(){

  displayclock();
  for(int c=0; c<48; c++){
    for(int r=7; r>=0; r--){
        plot (c, r, 1);
        }
     delay(15);
     for(int r=7; r>=0; r--){
        plot (c, r, 0);
     }
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void wipeLeft(){

  displayclock();
  for(int c=48; c>=0; c--){
    for(int r=7; r>=0; r--){
        plot (c, r, 1);
        }
     delay(15);
     for(int r=7; r>=0; r--){
        plot (c, r, 0);
     }
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void wipeTop(){

  displayclock();
  for(int r=0; r<=8; r++){
    for(int c=0; c<48; c++){
        plot (c, r, 1);
        plot (c, r-1, 0);
        }
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void wipeBottom(){

  displayclock();
  for(int r=7; r>=(-1); r--){
    for(int c=0; c<48; c++){
        plot (c, r, 1);
        plot (c, r+1, 0);
        }
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void wipeMiddle(){

 displayclock();
 for(int c=0; c<=47; c++){
      for(int r=7; r>=0; r--){
          plot (c, r, 1);
          plot (48-c, r, 1);
      }
 delay(10);
  for(int r=7; r>=0; r--){
      plot (c, r, 0);
            if(c != 24){
                plot (48-c, r, 0);
            }
            else{
                plot (c, 0, 0); delay(50);
                plot (c, 7, 0); delay(50);
                plot (c, 1, 0); delay(50);
                plot (c, 6, 0); delay(50);
                plot (c, 2, 0); delay(50);
                plot (c, 5, 0); delay(50);
                plot (c, 3, 0); delay(50);
                plot (c, 4, 0); delay(600);
                return;
            }
  }
 }
}

////////////////////////////////////////////////////////////////////////////////////////

void wipeOutside(){

  displayclock();
  for(int c=0; c<48; c++){
    for(int r=7; r>=0; r--){
        plot (c, r, 1);
        plot (48-c, r, 1);
        }
     delay(5);
     for(int r=7; r>=0; r--){
        plot (c, r, 0);
          if(c != 24){
            plot (48-c, r, 0);
            }
     }
  }
delay(300);
}

////////////////////////////////////////////////////////////////////////////////////////

void wipeInside(){

 displayclock();
 int verz=5;
 int rh=7;
 int rl=0;
 for(int row=0; row<4; row++){
      for(int col=0; col<8; col++){
        plot(col,    rh, 0); delay(verz);
        plot(col,    rl, 0); delay(verz);
        plot(47-col, rh, 0); delay(verz);
        plot(47-col, rl, 0); delay(verz);
      }
     rh--;
     rl++;
 }

 rh=7;
 rl=0;
 for(int row=0; row<4; row++){
      for(int col=0; col<8; col++){
        plot(8+col,  rh, 0); delay(verz);
        plot(8+col,  rl, 0); delay(verz);
        plot(39-col, rh, 0); delay(verz);
        plot(39-col, rl, 0); delay(verz);
      }
      rh--;
      rl++;
 }
 delay(300);
}

////////////////////////////////////////////////////////////////////////////////////////

void displayclock() {

  get_time();
  byte secs = rtc[0];
  byte mins = rtc[1];
  byte hours = rtc[2];

  secondH = rtc[0] / 10;
  secondL = rtc[0] - 10 * secondH;

  minuteH = rtc[1] / 10;
  minuteL = rtc[1] - 10 * minuteH;

  hourH = rtc[2] / 10;
  hourL = rtc[2] - 10 * hourH;

  lc2.clearDisplay(0);
  lc2.setDigit(0, 7, hourH, false);
  lc2.setDigit(0, 6, hourL, false);
  lc2.setRow(0, 5, B00000001);
  lc2.setDigit(0, 4, minuteH, false);
  lc2.setDigit(0, 3, minuteL, false);
  lc2.setRow(0, 2, B00000001);
  lc2.setDigit(0, 1, secondH, false);
  lc2.setDigit(0, 0, secondL, false);
  delay(10);
}

////////////////////////////////////////////////////////////////////////////////////////

void blitz() {

  cls();
  lc2.clearDisplay(0);
  while (run_mode()) {
    blitzgame();
  }
}

////________________________________________________________________________________________

void blitzgame() {

  int seconds_for_P1;
  int seconds_for_P2;
  int minutes_for_P1=5;
  int increment_P1=0;
  int minutes_for_P2=5;
  int increment_P2=0;

  time_P1 = (minutes_for_P1 * 60000);
  time_P2 = (minutes_for_P2 * 60000);
  increment_P1 = increment_P1 * 1000;
  increment_P2 = increment_P2 * 1000;

  end_of_game = 0;
  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  minutes_for_P1 = floor(time_P1 / 60000);
  seconds_for_P1 = floor(time_P1 / 1000) - minutes_for_P1 * 60;

  minutes_for_P2 = floor(time_P2 / 60000);
  seconds_for_P2 = floor(time_P2 / 1000) - minutes_for_P2 * 60;

  if (!is_P1s_turn && !is_P2s_turn && button_state_P1 == LOW && button_state_P2 == LOW) {
    lc2.setChar(0, 6, '5', false);
    lc2.setChar(0, 5, '0', false);
    lc2.setChar(0, 4, '0', false);
    lc2.setChar(0, 2, '5', false);
    lc2.setChar(0, 1, '0', false);
    lc2.setChar(0, 0, '0', false);

    puttinychar( 1, 1, '0');
    puttinychar( 5, 1, '5');
    plot(9, 4, 1);
    plot(9, 2, 1);
    puttinychar( 11, 1, '0');
    puttinychar( 15, 1, '0');
    puttinychar( 30, 1, '0');
    puttinychar( 34, 1, '5');
    plot(38, 4, 1);
    plot(38, 2, 1);
    puttinychar( 40, 1, '0');
    puttinychar( 44, 1, '0');
  }

  if (button_state_P1 == HIGH && button_state_P2 == LOW) {
    delay(30);
    puttinychar(20, 1, ' ');
    puttinychar(25, 1, '-');
    increment_player_1();
  }

  if (button_state_P2 == HIGH && button_state_P1 == LOW) {
    delay(30);
    puttinychar(20, 1, '-');
    puttinychar(25, 1, ' ');
    increment_player_2();
  }

  if (middle_button_state == HIGH && is_P1s_turn) {
    pauseP1();
  }

  if (middle_button_state == HIGH && is_P2s_turn) {
    pauseP2();
  }

  if (is_P1s_turn) {
    Update_time_P1();
  }
  else if (!(!is_P1s_turn && !is_P2s_turn)) {
    Update_time_P2();
  }
  else {
  delay(150);
  blitzgame();
 }
}

////________________________________________________________________________________________

void blitzgameOver() {

  int seconds_for_P1;
  int seconds_for_P2;
  int minutes_for_P1=5;
  int increment_P1=0;
  int minutes_for_P2=5;
  int increment_P2=0;

  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  if (middle_button_state == HIGH) {
    countdown = -1;
    pair=false;
  time_P1 = 0;
  time_P2 = 0;
  is_P1s_turn = false;
  is_P2s_turn = false;
  seconds_for_P1 = 0;
  seconds_for_P2 = 0;
  minutes_for_P1=5;
  increment_P1=0;
  minutes_for_P2=5;
  increment_P2=0;

  delay(150);
  loop();
  }

  if (time_P1 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B00110000);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    blitzgameOver(); }

  if (time_P2 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B01101101);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    blitzgameOver();
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void dasa() {

  cls();
  while (run_mode()) {
    dasagame();
  }
}

////________________________________________________________________________________________

void dasagame() {

  int seconds_for_P1;
  int seconds_for_P2;
  int minutes_for_P1=10;
  int increment_P1=0;
  int minutes_for_P2=10;
  int increment_P2=0;

  time_P1 = 600000;
  time_P2 = 600000;

  time_P1 = (minutes_for_P1 * 60000);
  time_P2 = (minutes_for_P2 * 60000);
  increment_P1 = increment_P1 * 1000;
  increment_P2 = increment_P2 * 1000;

  end_of_game = 0;
  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  minutes_for_P1 = floor(time_P1 / 60000);
  seconds_for_P1 = floor(time_P1 / 1000) - minutes_for_P1 * 60;

  minutes_for_P2 = floor(time_P2 / 60000);
  seconds_for_P2 = floor(time_P2 / 1000) - minutes_for_P2 * 60;

  if (!is_P1s_turn && !is_P2s_turn && button_state_P1 == LOW && button_state_P2 == LOW) {
    lc2.clearDisplay(0);
    lc2.setChar(0, 7, '1', false);
    lc2.setChar(0, 6, '0', false);
    lc2.setChar(0, 5, '0', false);
    lc2.setChar(0, 4, '0', false);
    lc2.setChar(0, 3, '1', false);
    lc2.setChar(0, 2, '0', false);
    lc2.setChar(0, 1, '0', false);
    lc2.setChar(0, 0, '0', false);

    puttinychar( 1, 1, '1');
    puttinychar( 5, 1, '0');
    plot(9, 4, 1);
    plot(9, 2, 1);
    puttinychar( 11, 1, '0');
    puttinychar( 15, 1, '0');
    puttinychar( 30, 1, '1');
    puttinychar( 34, 1, '0');
    plot(38, 4, 1);
    plot(38, 2, 1);
    puttinychar( 40, 1, '0');
    puttinychar( 44, 1, '0');
  }

  if (button_state_P1 == HIGH && button_state_P2 == LOW) {
    delay(30);
    puttinychar(20, 1, ' ');
    puttinychar(25, 1, '-');
    increment_player_1();
  }

  if (button_state_P2 == HIGH && button_state_P1 == LOW) {
    delay(30);
    puttinychar(20, 1, '-');
    puttinychar(25, 1, ' ');
    increment_player_2();
  }

  if (middle_button_state == HIGH && is_P1s_turn) {
    pauseP1();
  }

  if (middle_button_state == HIGH && is_P2s_turn) {
    pauseP2();
  }

  if (is_P1s_turn) {
    Update_time_P1();
  }
  else if (!(!is_P1s_turn && !is_P2s_turn)) {
    Update_time_P2();
  }
  else {
  delay(150);
  dasagame();
 }
}

////________________________________________________________________________________________

void dasagameOver() {

  int seconds_for_P1;
  int seconds_for_P2;
  int minutes_for_P1=10;
  int increment_P1=0;
  int minutes_for_P2=10;
  int increment_P2=0;

  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  if (middle_button_state == HIGH) {
    countdown = -1;
    pair=false;
  time_P1 = 0;
  time_P2 = 0;
  is_P1s_turn = false;
  is_P2s_turn = false;
  seconds_for_P1 = 0;
  seconds_for_P2 = 0;
  minutes_for_P1=10;
  increment_P1=0;
  minutes_for_P2=10;
  increment_P2=0;

  delay(150);
  loop();
  }

  if (time_P1 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B00110000);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    dasagameOver(); }

  if (time_P2 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B01101101);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    dasagameOver();
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void rapid() {

  cls();
  while (run_mode()) {
    rapidgame();
  }
}

////________________________________________________________________________________________

void rapidgame() {

  int seconds_for_P1;
  int seconds_for_P2;
  int minutes_for_P1=25;
  int increment_P1=0;
  int minutes_for_P2=25;
  int increment_P2=0;

  time_P1 = (minutes_for_P1 * 60000);
  time_P2 = (minutes_for_P2 * 60000);
  increment_P1 = increment_P1 * 1000;
  increment_P2 = increment_P2 * 1000;

  end_of_game = 0;
  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  minutes_for_P1 = floor(time_P1 / 60000);
  seconds_for_P1 = floor(time_P1 / 1000) - minutes_for_P1 * 60;

  minutes_for_P2 = floor(time_P2 / 60000);
  seconds_for_P2 = floor(time_P2 / 1000) - minutes_for_P2 * 60;

  if (!is_P1s_turn && !is_P2s_turn && button_state_P1 == LOW && button_state_P2 == LOW) {
    lc2.clearDisplay(0);
    lc2.setChar(0, 7, '2', false);
    lc2.setChar(0, 6, '5', false);
    lc2.setChar(0, 5, '0', false);
    lc2.setChar(0, 4, '0', false);
    lc2.setChar(0, 3, '2', false);
    lc2.setChar(0, 2, '5', false);
    lc2.setChar(0, 1, '0', false);
    lc2.setChar(0, 0, '0', false);

    puttinychar( 1, 1, '2');
    puttinychar( 5, 1, '5');
    plot(9, 4, 1);
    plot(9, 2, 1);
    puttinychar( 11, 1, '0');
    puttinychar( 15, 1, '0');
    puttinychar( 30, 1, '2');
    puttinychar( 34, 1, '5');
    plot(38, 4, 1);
    plot(38, 2, 1);
    puttinychar( 40, 1, '0');
    puttinychar( 44, 1, '0');
  }

  if (button_state_P1 == HIGH && button_state_P2 == LOW) {
    delay(30);
    puttinychar(20, 1, ' ');
    puttinychar(25, 1, '-');
    increment_player_1();
  }

  if (button_state_P2 == HIGH && button_state_P1 == LOW) {
    delay(30);
    puttinychar(20, 1, '-');
    puttinychar(25, 1, ' ');
    increment_player_2();
  }

  if (middle_button_state == HIGH && is_P1s_turn) {
    pauseP1();
  }

  if (middle_button_state == HIGH && is_P2s_turn) {
    pauseP2();
  }

  if (is_P1s_turn) {
    Update_time_P1();
  }
  else if (!(!is_P1s_turn && !is_P2s_turn)) {
    Update_time_P2();
  }
  else {
  delay(150);
  rapidgame();
 }
}

////________________________________________________________________________________________

void rapidgameOver() {

  int seconds_for_P1;
  int seconds_for_P2;
  int minutes_for_P1=25;
  int increment_P1=0;
  int minutes_for_P2=25;
  int increment_P2=0;

  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  if (middle_button_state == HIGH) {
    countdown = -1;
    pair=false;
  time_P1 = 0;
  time_P2 = 0;
  is_P1s_turn = false;
  is_P2s_turn = false;
  seconds_for_P1 = 0;
  seconds_for_P2 = 0;
  minutes_for_P1=25;
  increment_P1=0;
  minutes_for_P2=25;
  increment_P2=0;

  delay(150);
  loop();
  }

  if (time_P1 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B00110000);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    rapidgameOver(); }

  if (time_P2 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B01101101);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    rapidgameOver();
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void catur() {

  cls();
  while (run_mode()) {

    if (buttonA.uniquePress()) { switch_mode();  return; }

    caturaffichage_increment_P1();
    delay(150);
    if (digitalRead(button_P2) == HIGH) {
      minutes_for_P1++;
    }
    if (digitalRead(button_P1) == HIGH) {
      minutes_for_P1--;
    }

    if (minutes_for_P1 >= 90) {
      time_P1 = 5940000;
      minutes_for_P1 = 90;
      seconds_for_P1 = 0;
    }

    if (minutes_for_P1 <= 0) {
      time_P1 = 30000;
      minutes_for_P1 = 0;
      seconds_for_P1 = 30;
    } else { seconds_for_P1 = 0;}

    if (digitalRead(middle_button) == HIGH) {
      lc2.clearDisplay(0);
      cls();
      delay(150);
      caturconfigure_minP2();}
      else {loop();
    }
  }
}

////________________________________________________________________________________________

void caturconfigure_minP2() {

  caturaffichage_increment_P2();
  delay(150);
  if (digitalRead(button_P2) == HIGH) {
    minutes_for_P2++;
  }
  if (digitalRead(button_P1) == HIGH) {
    minutes_for_P2--;
  }

  if (minutes_for_P2 >= 90) {
    time_P2 = 5940000;
    minutes_for_P2 = 90;
    seconds_for_P2 = 0;
  }

  if (minutes_for_P2 <= 0) {
    time_P2 = 30000;
    minutes_for_P2 = 0;
    seconds_for_P2 = 30;
  }
  else { seconds_for_P2 = 0;}

  if (digitalRead(middle_button) == HIGH) {
    lc2.clearDisplay(0);
    cls();
    delay(150);

    time_P1 = (minutes_for_P1 * 60000);
    time_P2 = (minutes_for_P2 * 60000);

  if (time_P1 == 0) {
  time_P1 = 30000;
  }
  if (time_P2 == 0) {
  time_P2 = 30000;
  }
    increment_P1 = increment_P1 * 1000;
    increment_P2 = increment_P2 * 1000;

    digitalWrite(middle_button, LOW);
    delay(150);
    game();
  }
  else { caturconfigure_minP2();
  }
}

////________________________________________________________________________________________

void caturaffichage_increment_P1() {

  cls();
  lc2.clearDisplay(0);
  lc2.setChar(0, 7, 'P', false);
  lc2.setChar(0, 6, '1', false);
  lc2.setChar(0, 5, ' ', false);
  lc2.setChar(0, 4, '0', false);

  if (minutes_for_P1 <= 9) {
    lc2.setDigit(0, 4, '0', false);
    lc2.setDigit(0, 3, minutes_for_P1, false);
    puttinychar(1, 1, '0');
    puttinychar(5, 1, minutes_for_P1);
  }
  switch (minutes_for_P1) {
        case 0: puttinychar( 5, 1, '0');
          break;
        case 1: puttinychar( 5, 1, '1');
          break;
        case 2: puttinychar( 5, 1, '2');
          break;
        case 3: puttinychar( 5, 1, '3');
          break;
        case 4: puttinychar( 5, 1, '4');
          break;
        case 5: puttinychar( 5, 1, '5');
          break;
        case 6: puttinychar( 5, 1, '6');
          break;
        case 7: puttinychar( 5, 1, '7');
          break;
        case 8: puttinychar( 5, 1, '8');
          break;
        case 9: puttinychar( 5, 1, '9');
          break;
        }

  if (minutes_for_P1 >= 10) {
    lc2.setDigit(0, 4, minutes_for_P1 / 10, false);
    lc2.setDigit(0, 3, minutes_for_P1 - (minutes_for_P1 / 10) *10, false);
    puttinychar(1, 1, minutes_for_P1 / 10);
    puttinychar(5, 1, minutes_for_P1 - (minutes_for_P1 / 10) *10);
  }
  switch (minutes_for_P1 / 10) {
        case 0: puttinychar( 1, 1, '0');
          break;
        case 1: puttinychar( 1, 1, '1');
          break;
        case 2: puttinychar( 1, 1, '2');
          break;
        case 3: puttinychar( 1, 1, '3');
          break;
        case 4: puttinychar( 1, 1, '4');
          break;
        case 5: puttinychar( 1, 1, '5');
          break;
        case 6: puttinychar( 1, 1, '6');
          break;
        case 7: puttinychar( 1, 1, '7');
          break;
        case 8: puttinychar( 1, 1, '8');
          break;
        case 9: puttinychar( 1, 1, '9');
          break;
        }
    switch (minutes_for_P1 - (minutes_for_P1 / 10) *10) {
        case 0: puttinychar( 5, 1, '0');
          break;
        case 1: puttinychar( 5, 1, '1');
          break;
        case 2: puttinychar( 5, 1, '2');
          break;
        case 3: puttinychar( 5, 1, '3');
          break;
        case 4: puttinychar( 5, 1, '4');
          break;
        case 5: puttinychar( 5, 1, '5');
          break;
        case 6: puttinychar( 5, 1, '6');
          break;
        case 7: puttinychar( 5, 1, '7');
          break;
        case 8: puttinychar( 5, 1, '8');
          break;
        case 9: puttinychar( 5, 1, '9');
          break;
        }

  lc2.setRow(0, 2, B00000001);

  if (increment_P1 <=9){
    lc2.setChar(0, 1, ' ', false);
    lc2.setDigit(0, 0, increment_P1, false);
  }
  if (increment_P1 >= 10){
    lc2.setDigit(0, 1, increment_P1 / 10, false);
    lc2.setDigit(0, 0, increment_P1 - (increment_P1 / 10) * 10, false);
  }
}

////________________________________________________________________________________________

void caturaffichage_increment_P2() {

  cls();
  lc2.clearDisplay(0);
  lc2.setChar(0, 7, 'P', false);
  lc2.setChar(0, 6, '2', false);
  lc2.setChar(0, 5, ' ', false);
  lc2.setChar(0, 4, '0', false);

  if (minutes_for_P2 <= 9) {
    lc2.setDigit(0, 4, '0', false);
    lc2.setDigit(0, 3, minutes_for_P2, false);
    puttinychar(30, 1, '0');
    puttinychar(34, 1, minutes_for_P2);
  }
    switch (minutes_for_P2) {
        case 0: puttinychar( 34, 1, '0');
          break;
        case 1: puttinychar( 34, 1, '1');
          break;
        case 2: puttinychar( 34, 1, '2');
          break;
        case 3: puttinychar( 34, 1, '3');
          break;
        case 4: puttinychar( 34, 1, '4');
          break;
        case 5: puttinychar( 34, 1, '5');
          break;
        case 6: puttinychar( 34, 1, '6');
          break;
        case 7: puttinychar( 34, 1, '7');
          break;
        case 8: puttinychar( 34, 1, '8');
          break;
        case 9: puttinychar( 34, 1, '9');
          break;
        }

  if (minutes_for_P2 >= 10) {
    lc2.setDigit(0, 4, minutes_for_P2 / 10, false);
    lc2.setDigit(0, 3, minutes_for_P2 - (minutes_for_P2 / 10) *10, false);
    puttinychar(30, 1, minutes_for_P2 / 10);
    puttinychar(34, 1, minutes_for_P2 - (minutes_for_P2 / 10) *10);
  }
    switch (minutes_for_P2 / 10) {
        case 0: puttinychar( 30, 1, '0');
          break;
        case 1: puttinychar( 30, 1, '1');
          break;
        case 2: puttinychar( 30, 1, '2');
          break;
        case 3: puttinychar( 30, 1, '3');
          break;
        case 4: puttinychar( 30, 1, '4');
          break;
        case 5: puttinychar( 30, 1, '5');
          break;
        case 6: puttinychar( 30, 1, '6');
          break;
        case 7: puttinychar( 30, 1, '7');
          break;
        case 8: puttinychar( 30, 1, '8');
          break;
        case 9: puttinychar( 30, 1, '9');
          break;
        }
    switch (minutes_for_P2 - (minutes_for_P2 / 10) *10) {
        case 0: puttinychar( 34, 1, '0');
          break;
        case 1: puttinychar( 34, 1, '1');
          break;
        case 2: puttinychar( 34, 1, '2');
          break;
        case 3: puttinychar( 34, 1, '3');
          break;
        case 4: puttinychar( 34, 1, '4');
          break;
        case 5: puttinychar( 34, 1, '5');
          break;
        case 6: puttinychar( 34, 1, '6');
          break;
        case 7: puttinychar( 34, 1, '7');
          break;
        case 8: puttinychar( 34, 1, '8');
          break;
        case 9: puttinychar( 34, 1, '9');
          break;
        }

  lc2.setRow(0, 2, B00000001);

  if (increment_P2 <=9){
    lc2.setChar(0, 1, ' ', false);
    lc2.setDigit(0, 0, increment_P2, false);
  }
  if (increment_P2 >= 10){
    lc2.setDigit(0, 1, increment_P2 / 10, false);
    lc2.setDigit(0, 0, increment_P2 - (increment_P2 / 10) * 10, false);
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void game() {

  end_of_game = 0;
  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  minutes_for_P1 = floor(time_P1 / 60000);
  seconds_for_P1 = floor(time_P1 / 1000) - minutes_for_P1 * 60;

  minutes_for_P2 = floor(time_P2 / 60000);
  seconds_for_P2 = floor(time_P2 / 1000) - minutes_for_P2 * 60;

  if (!is_P1s_turn && !is_P2s_turn && button_state_P1 == LOW && button_state_P2 == LOW) {
    affichagelc();
  }

  if (button_state_P1 == HIGH && button_state_P2 == LOW) {
    delay(30);
    puttinychar(20, 1, ' ');
    puttinychar(25, 1, '-');
    increment_player_1();}

  if (button_state_P2 == HIGH && button_state_P1 == LOW) {
    delay(30);
    puttinychar(20, 1, '-');
    puttinychar(25, 1, ' ');
    increment_player_2();
  }

  if (middle_button_state == HIGH && is_P1s_turn) {
    pauseP1();
  }

  if (middle_button_state == HIGH && is_P2s_turn) {
    pauseP2();
  }

  if (is_P1s_turn) {
    Update_time_P1();
  }
  else if (!(!is_P1s_turn && !is_P2s_turn)) {
    Update_time_P2();
  }
  else {
  delay(150);
  game();
 }
}

////////////////////////////////////////////////////////////////////////////////////////

void Update_time_P1() {

  time_P1 -= ((millis() - last_time_comparison_P1));
  last_time_comparison_P1 = millis();

  if (minutes_for_P1 == 0 && seconds_for_P1 == 10 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(200);
    digitalWrite(buzzer, LOW);
    delay(100);
    }
  if (time_P1 <= 0) {
    gameover = true;
    gameOver();
    }
  affichagelc();
  game();
}

////////////////////////////////////////////////////////////////////////////////////////

void Update_time_P2() {

  time_P2 -= ((millis() - last_time_comparison_P2));
  last_time_comparison_P2 = millis();

  if (minutes_for_P2 == 0 && seconds_for_P2 == 10 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(200);
    digitalWrite(buzzer, LOW);
    delay(100);
  }
  if (time_P2 <= 0) {
    gameover = true;
    gameOver();
  }
  affichagelc();
  game();
}

////////////////////////////////////////////////////////////////////////////////////////

void P1_turn() {

  digitalWrite(buzzer, LOW);
  if (is_P1s_turn) {
    return;
  }
  is_P2s_turn = false;
  is_P1s_turn = true;
  countdown++;
  pair = !pair;
  last_time_comparison_P1 = millis();
  game();
}

////////////////////////////////////////////////////////////////////////////////////////

void P2_turn() {

  digitalWrite(buzzer, LOW);
  if (is_P2s_turn) {
    return;
  }
  is_P1s_turn = false;
  is_P2s_turn = true;
  countdown++;
  pair=!pair;
  last_time_comparison_P2 = millis();
  game();
}

////////////////////////////////////////////////////////////////////////////////////////

void gameOver() {

  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  if (middle_button_state == HIGH) {
    countdown = -1;
    pair=false;
  time_P1 = 0;
  time_P2 = 0;
  is_P1s_turn = false;
  is_P2s_turn = false;
  seconds_for_P1 = 0;
  seconds_for_P2 = 0;
  minutes_for_P1=0;
  increment_P1=0;
  minutes_for_P2=0;
  increment_P2=0;

  delay(150);
  loop();
  }

  if (time_P1 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B00110000);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    gameOver(); }

  if (time_P2 <= 0 && middle_button_state == LOW) {
    digitalWrite(buzzer, HIGH);
    delay(300);
    digitalWrite(buzzer, LOW);
    delay(100);
    lc2.clearDisplay(0);
    lc2.setRow(0, 7, B01100111);
    lc2.setRow(0, 6, B01101101);
    lc2.setRow(0, 5, B00000001);
    lc2.setRow(0, 4, B01100111);
    lc2.setRow(0, 3, B01101111);
    lc2.setRow(0, 2, B00111101);
    lc2.setRow(0, 1, B01111110);
    lc2.setRow(0, 0, B00001111);
    gameOver();
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void increment_player_1() {

  if (is_P1s_turn) {
    time_P1 = time_P1 + (increment_P1);

    P2_turn();}
    else {
    P2_turn();}
}

////////////////////////////////////////////////////////////////////////////////////////

void increment_player_2() {

  if (is_P2s_turn) {
    time_P2 = time_P2 + (increment_P2);

    P1_turn();}
    else {
    P1_turn();}
}

////////////////////////////////////////////////////////////////////////////////////////

void pauseP1() {

  cls();
  char str_a[14] = "P1 Stop dulu";
  byte len = 0;
  while (str_a[len]) {
    len++;
  };
  byte offset_top = (47 - ((len - 1) * 4)) / 2;

  byte i = 0;
  while (str_a[i]) {
    puttinychar((i * 4) + offset_top, 1, str_a[i]);
    i++;
  }
  delay(150);
  int paused_by_P1 = 1;

  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  is_P1s_turn = false;
  is_P2s_turn = false;

  if (middle_button_state == HIGH && paused_by_P1 == 1) {
    cls();
    delay(150);
    puttinychar(20, 1, '-');
    puttinychar(25, 1, ' ');
    last_time_comparison_P1 = millis();
    is_P1s_turn = true;
    game();
  }
  else {
    pauseP1();
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void pauseP2() {

  cls();
  char str_a[14] = "P2 Stop dulu";
  byte len = 0;
  while (str_a[len]) {
    len++;
  };
  byte offset_top = (47 - ((len - 1) * 4)) / 2;

  byte i = 0;
  while (str_a[i]) {
    puttinychar((i * 4) + offset_top, 1, str_a[i]);
    i++;
  }
  delay(150);
  int paused_by_P2 = 1;

  button_state_P1 = digitalRead(button_P1);
  button_state_P2 = digitalRead(button_P2);
  middle_button_state = digitalRead(middle_button);

  is_P1s_turn = false;
  is_P2s_turn = false;

  if (middle_button_state == HIGH && paused_by_P2 == 1) {
    cls();
    delay(150);
    puttinychar(20, 1, ' ');
    puttinychar(25, 1, '-');
    last_time_comparison_P2 = millis();
    is_P2s_turn = true;
    game();
  }
  else {
    pauseP2();
  }
}

////////////////////////////////////////////////////////////////////////////////////////

void affichagelc() {

  plot(9, 4, 1);
  plot(9, 2, 1);
  plot(38, 4, 1);
  plot(38, 2, 1);

  minuteP1H = minutes_for_P1 / 10;
  minuteP1L = minutes_for_P1 - minuteP1H * 10;
  minuteP2H = minutes_for_P2 / 10;
  minuteP2L = minutes_for_P2 - minuteP2H * 10;
  secondP1H = seconds_for_P1 / 10;
  secondP1L = seconds_for_P1 - 10 * secondP1H;
  secondP2H = seconds_for_P2 / 10;
  secondP2L = seconds_for_P2 - 10 * secondP2H;

  if (minuteP1H == 0) {
    lc2.setChar(0, 7, ' ', false);
  }
  else {lc2.setDigit(0, 7, minuteP1H, false);}
    lc2.setDigit(0, 5, secondP1H, false);

  if (minuteP2H == 0) {
    lc2.setChar(0, 3, ' ', false);
  }
  else {lc2.setDigit(0, 3, minuteP2H, false);}
    lc2.setDigit(0, 4, secondP1L, false);
    lc2.setDigit(0, 1, secondP2H, false);
    lc2.setDigit(0, 0, secondP2L, false);

  switch (minuteP1L) {
      case 0: lc2.setRow(0, 6, B11111110);
        break;
      case 1: lc2.setRow(0, 6, B10110000);
        break;
      case 2: lc2.setRow(0, 6, B11101101);
        break;
      case 3: lc2.setRow(0, 6, B11111001);
        break;
      case 4: lc2.setRow(0, 6, B10110011);
        break;
      case 5: lc2.setRow(0, 6, B11011011);
        break;
      case 6: lc2.setRow(0, 6, B11011111);
        break;
      case 7: lc2.setRow(0, 6, B11110000);
        break;
      case 8: lc2.setRow(0, 6, B11111111);
        break;
      case 9: lc2.setRow(0, 6, B11111011);
        break;
    }
  switch (minuteP2L) {
      case 0: lc2.setRow(0, 2, B11111110);
        break;
      case 1: lc2.setRow(0, 2, B10110000);
        break;
      case 2: lc2.setRow(0, 2, B11101101);
        break;
      case 3: lc2.setRow(0, 2, B11111001);
        break;
      case 4: lc2.setRow(0, 2, B10110011);
        break;
      case 5: lc2.setRow(0, 2, B11011011);
        break;
      case 6: lc2.setRow(0, 2, B11011111);
        break;
      case 7: lc2.setRow(0, 2, B11110000);
        break;
      case 8: lc2.setRow(0, 2, B11111111);
        break;
      case 9: lc2.setRow(0, 2, B11111011);
        break;
    }

  switch (minuteP1H) {
    case 0: puttinychar( 1, 1, '0');
      break;
    case 1: puttinychar( 1, 1, '1');
      break;
    case 2: puttinychar( 1, 1, '2');
      break;
    case 3: puttinychar( 1, 1, '3');
      break;
    case 4: puttinychar( 1, 1, '4');
      break;
    case 5: puttinychar( 1, 1, '5');
      break;
    case 6: puttinychar( 1, 1, '6');
      break;
    case 7: puttinychar( 1, 1, '7');
      break;
    case 8: puttinychar( 1, 1, '8');
      break;
    case 9: puttinychar( 1, 1, '9');
      break;
    }

  switch (minuteP1L) {
    case 0: puttinychar( 5, 1, '0');
      break;
    case 1: puttinychar( 5, 1, '1');
      break;
    case 2: puttinychar( 5, 1, '2');
      break;
    case 3: puttinychar( 5, 1, '3');
      break;
    case 4: puttinychar( 5, 1, '4');
      break;
    case 5: puttinychar( 5, 1, '5');
      break;
    case 6: puttinychar( 5, 1, '6');
      break;
    case 7: puttinychar( 5, 1, '7');
      break;
    case 8: puttinychar( 5, 1, '8');
      break;
    case 9: puttinychar( 5, 1, '9');
      break;
    }

  switch (secondP1H) {
    case 0: puttinychar( 11, 1, '0');
      break;
    case 1: puttinychar( 11, 1, '1');
      break;
    case 2: puttinychar( 11, 1, '2');
      break;
    case 3: puttinychar( 11, 1, '3');
      break;
    case 4: puttinychar( 11, 1, '4');
      break;
    case 5: puttinychar( 11, 1, '5');
      break;
    case 6: puttinychar( 11, 1, '6');
      break;
    case 7: puttinychar( 11, 1, '7');
      break;
    case 8: puttinychar( 11, 1, '8');
      break;
    case 9: puttinychar( 11, 1, '9');
      break;
    }

  switch (secondP1L) {
    case 0: puttinychar( 15, 1, '0');
      break;
    case 1: puttinychar( 15, 1, '1');
      break;
    case 2: puttinychar( 15, 1, '2');
      break;
    case 3: puttinychar( 15, 1, '3');
      break;
    case 4: puttinychar( 15, 1, '4');
      break;
    case 5: puttinychar( 15, 1, '5');
      break;
    case 6: puttinychar( 15, 1, '6');
      break;
    case 7: puttinychar( 15, 1, '7');
      break;
    case 8: puttinychar( 15, 1, '8');
      break;
    case 9: puttinychar( 15, 1, '9');
      break;
    }

  switch (minuteP2H) {
    case 0: puttinychar( 30, 1, '0');
      break;
    case 1: puttinychar( 30, 1, '1');
      break;
    case 2: puttinychar( 30, 1, '2');
      break;
    case 3: puttinychar( 30, 1, '3');
      break;
    case 4: puttinychar( 30, 1, '4');
      break;
    case 5: puttinychar( 30, 1, '5');
      break;
    case 6: puttinychar( 30, 1, '6');
      break;
    case 7: puttinychar( 30, 1, '7');
      break;
    case 8: puttinychar( 30, 1, '8');
      break;
    case 9: puttinychar( 30, 1, '9');
      break;
    }

  switch (minuteP2L) {
    case 0: puttinychar( 34, 1, '0');
      break;
    case 1: puttinychar( 34, 1, '1');
      break;
    case 2: puttinychar( 34, 1, '2');
      break;
    case 3: puttinychar( 34, 1, '3');
      break;
    case 4: puttinychar( 34, 1, '4');
      break;
    case 5: puttinychar( 34, 1, '5');
      break;
    case 6: puttinychar( 34, 1, '6');
      break;
    case 7: puttinychar( 34, 1, '7');
      break;
    case 8: puttinychar( 34, 1, '8');
      break;
    case 9: puttinychar( 34, 1, '9');
      break;
    }

  switch (secondP2H) {
    case 0: puttinychar( 40, 1, '0');
      break;
    case 1: puttinychar( 40, 1, '1');
      break;
    case 2: puttinychar( 40, 1, '2');
      break;
    case 3: puttinychar( 40, 1, '3');
      break;
    case 4: puttinychar( 40, 1, '4');
      break;
    case 5: puttinychar( 40, 1, '5');
      break;
    case 6: puttinychar( 40, 1, '6');
      break;
    case 7: puttinychar( 40, 1, '7');
      break;
    case 8: puttinychar( 40, 1, '8');
      break;
    case 9: puttinychar( 40, 1, '9');
      break;
    }

  switch (secondP2L) {
    case 0: puttinychar( 44, 1, '0');
      break;
    case 1: puttinychar( 44, 1, '1');
      break;
    case 2: puttinychar( 44, 1, '2');
      break;
    case 3: puttinychar( 44, 1, '3');
      break;
    case 4: puttinychar( 44, 1, '4');
      break;
    case 5: puttinychar( 44, 1, '5');
      break;
    case 6: puttinychar( 44, 1, '6');
      break;
    case 7: puttinychar( 44, 1, '7');
      break;
    case 8: puttinychar( 44, 1, '8');
      break;
    case 9: puttinychar( 44, 1, '9');
      break;
    }
}

////////////////////////////////////////////////////////////////////////////////////////`


h


"... deprecated, please use ..." (missing ,)


only on units


See above :)


Client() here will make a new connection. How about we pass the service as a parameter so we can call the middleware directly? No point connecting to middleware if you are the middleware.


@KnisterPeter This always fails due to configured option 'react' and enum value 'React'. The option.tests.ts only test the failure of mapJsx, but not the correct string values. The same for mapTarget and mapModule functions.
This failure can be reproduced by running "npm run commonjs" in patternplate project.


como se haria eso


git pull 应用


rebuilt and re-uploaded under the same name.


yep, already changed localy


Thanks for this. Don't higher XDK versions need the same registrations in their corresponding OOVPA tables too?


Ah, and the same for the copied observables above.


This will always be true no?


You could try upgrading this package.


вот тут непонятно, хотелось бы пример хтмл


Out of curiosity: Where can the mentioned files be found?


Openstack is broken anyway.


@dmitrytrager I don't feel like I've done this right, but here's my first attempt at some kind of CreateActivity interactor, am I on the right track?


Why is it necessary to set `rootProject.name`?


This was not what I was expecting that we would do. I thought we would still use (user extends) `MutableBehavior`, but instead of `onMessage` we would have a message matcher (`T => Behavior[T]`), pretty much the same as `AbstractActor`. Similar for `onSignal`.


[inst/Hoofdscript.R:35:1:](https://github.com/inbo/dhcurve/blob/1a1ef38b4fcbbbed727cf61fe84d0984295b1506/inst/Hoofdscript.R#L35) *style:* **lines should not be more than 80 characters.**
```r
<U+200B>  paste0(dbpath, "NieuweMeetgegevensGelinktOpBestandsniveauAanBHIvsJan2016.accdb")
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```


may be will convenient to change behavior with one property in class


See https://github.com/gradle/gradle-script-kotlin/commit/93354e7f508cf88a18f29f754a72f7ecb15e201d#diff-658082918f12d108aa4ab5bb72209e6aR17

If unspecified, the project name is random when the sample is copied to the test temporary directory.


Draft


TeamCity Xbim :: Xbim Web UI :: Xbim Web UI [Build 85](http://xbimbuilds.cloudapp.net/viewLog.html?buildId=1563&buildTypeId=Xbim_XbimWebUi_XbimWebUi) is now running


Attention to commit.


TeamCity Xbim :: Xbim Web UI :: Xbim Web UI [Build 85](http://xbimbuilds.cloudapp.net/viewLog.html?buildId=1563&buildTypeId=Xbim_XbimWebUi_XbimWebUi) outcome was **FAILURE**
Summary: Exit code 1 Build time: 00:00:18


"Admin" <- magic value? Smells funny.


Nice one! Not to whine or anything, but shouldn't the render-state be set *after* the Clear call?


Please never do this. React / ReactDOM need to be in `peerDependencies` only so they aren't installed (and used) separately from the project's versions when we install this on a project.


If the copying logic preserved the source directory name, this wouldn't be necessary, right?


Yes! I'll do that


why do you need to use tostring method here?
accordin to doc the library method toString() returns a textual representation of an object.
so what are you doing here?


谢谢！


- GUIでインスタンスが作成されたことを確認

![screen shot 2017-05-03 at 21 16 29](https://cloud.githubusercontent.com/assets/7949184/25660203/2b7be5f0-3046-11e7-98f8-27825897db13.png)


Running OpenDLV

With the correct network settings, the OpenDLV microservices will be able to communicate between nodes. Simply start the two usecases navigation.robot-master and navigation.robot-slave (starting with master) and data will flow in between. Note: There is only one configuraion file, on the host, the data in this file will be automatically transferred to the robot.

Since more than one group might use the same wireless network, it is important to run each collection of usecases with different conference ids. In the docker-compose.yml file you can see the {CID} environment variable that contains this id. To change it you simply edit the file .env in each of the two usecase folders (on the robot and on the host). Since the file starts with a dot it is normally hidden, but in the usecase folder you can edit it with nano .env. The id needs to be in the range 1-255, and you should select the id 200 + group nr. Please let us know if any help is needed.


+2 for using ternary operator. keep it up


Well, I'm not sure it makes much difference.  What I do know is that this functionality is too valuable to ignore as it helps me verify that Azurik is still going ingame, as well as diagnose other problems.

Shogun


can you use ternary operator here?


change destroy method added removeData(). change plugin configuration added "this" when plugin re-init timeline.


Let's come back to this because I think match equality and identity differences to the standard in other languages will cause confusion in R because `identical()` and `all.equal()` are so deeply entrenched.


Part 1


- インスタンス作成の実行結果

```
gaia% ansible-playbook gcp.yml -vvvv
Using /Users/tshst/OneDrive/src/github.com/tshst/develop/ansible/ansible.cfg as config file
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

Loading callback plugin default of type stdout, v2.0 from /Users/tshst/.anyenv/envs/pyenv/versions/3.5.2/lib/python3.5/site-packages/ansible/plugins/callback/__init__.py

PLAYBOOK: gcp.yml ************************************************************************************************************************************************************************************************************************************************************
1 plays in gcp.yml

PLAY [create instance] *******************************************************************************************************************************************************************************************************************************************************
META: ran handlers

TASK [launch instances] ******************************************************************************************************************************************************************************************************************************************************
task path: /Users/tshst/OneDrive/src/github.com/tshst/develop/ansible/gcp.yml:13
Using module file /Users/tshst/.anyenv/envs/pyenv/versions/3.5.2/lib/python3.5/site-packages/ansible/modules/cloud/google/gce.py
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: tshst
<127.0.0.1> EXEC /bin/sh -c 'echo ~ && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/tshst/.ansible/tmp/ansible-tmp-1493813773.735548-209348152532729 `" && echo ansible-tmp-1493813773.735548-209348152532729="` echo /Users/tshst/.ansible/tmp/ansible-tmp-1493813773.735548-209348152532729 `
" ) && sleep 0'
<127.0.0.1> PUT /var/folders/p8/r468lzq147jf4b9kgsmcghd80000gn/T/tmpdw6950r_ TO /Users/tshst/.ansible/tmp/ansible-tmp-1493813773.735548-209348152532729/gce.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /Users/tshst/.ansible/tmp/ansible-tmp-1493813773.735548-209348152532729/ /Users/tshst/.ansible/tmp/ansible-tmp-1493813773.735548-209348152532729/gce.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/Users/tshst/.anyenv/envs/pyenv/versions/3.5.2/bin/python3.5 /Users/tshst/.ansible/tmp/ansible-tmp-1493813773.735548-209348152532729/gce.py; rm -rf "/Users/tshst/.ansible/tmp/ansible-tmp-1493813773.735548-209348152532729/" > /dev/null 2>&1 &
& sleep 0'
changed: [localhost] => {
    "changed": true,
    "instance_data": [
        {
            "disks": [
                "sample-enviroment"
            ],
            "image": "centos-7-v20170426",
            "machine_type": "f1-micro",
            "metadata": {},
            "name": "sample-enviroment",
            "network": "default",
            "private_ip": "10.146.0.4",
            "public_ip": "35.187.211.6",
            "status": "RUNNING",
            "subnetwork": "default",
            "tags": [],
            "zone": "asia-northeast1-a"
        }
    ],
    "instance_names": [
        "sample-enviroment"
    ],
    "invocation": {
        "module_args": {
            "credentials_file": null,
            "disk_auto_delete": true,
            "disk_size": 10,
            "disks": null,
            "external_ip": "ephemeral",
            "image": "centos-7-v20170426",
            "instance_names": "sample-enviroment",
            "ip_forward": false,
            "machine_type": "f1-micro",
            "metadata": null,
            "name": null,
            "network": "default",
            "num_instances": null,
            "pem_file": null,
            "persistent_boot_disk": false,
            "preemptible": null,
            "project_id": null,
            "service_account_email": null,
            "service_account_permissions": null,
            "state": "present",
            "subnetwork": null,
            "tags": null,
            "zone": "asia-northeast1-a"
        }
    },
    "state": "present",
    "zone": "asia-northeast1-a"
}
META: ran handlers
META: ran handlers

PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0
```


missing ;


duplicate value??? or key??


lol


- GUIでインスタンスが作成されたことを確認

![screen shot 2017-05-03 at 21 22 05](https://cloud.githubusercontent.com/assets/7949184/25660342/c3750602-3046-11e7-8a8f-ac80da4ee877.png)


Make  a comparison code sample LinkedHashMap vs HashMap, LinkedHashSet vs HashSet


Questo path (e quindi anche il prossimo) è sbagliato. Il servizio R2 dovrebbe rispondere a <dipartimento> e a <dipartimento>/<indicatore>


@SuperXingKong I know already XD


The problem is actually here, I found this line yesterday, but haven't pushed it since I was going to take the whole thing apart step by step. The `&i - &es[0]` should be fine, at least I had tested it and it gave me the equivalent of the index when using an index-based loop.


Not able to understand how is this example for gorilla mux, I see that `http.NewServeMux` is used to obtain the router.


Thanks, Zador !
Yes, I missed those in the subdirectory ...
I got it further, but still hang after DRAM detect. No clues to get it further ...


Измена стога и гомиле у грани 1.


After checking there is no enumerator registered with the same name, and the read lock is released, and before the write lock is taken, wouldn't it be possible for another enumerator with the same name to register successfully?
If that is possible, the locked region should probably end when the new enumerator has been inserted into the list.


Все файлы в .idea и .out не стоит заливать в git


Отличная новость


Надо переделать под пул соединений


@mmadov cards_path ? хардкорить не очень хорошо)


Comma


I think the change is worth it because the notion of equality is so important in programming languages. Agreed that this needs some discussion and thought.


I know I kind of triggered this with my issue on uoload before server, but is this really worth it to make _every_ upload so much slower? I would have expected you to add a check if there is anything to upload in /www and output an error message and not to run `ionic serve` first if not.


Tal como está tras este commit el juego no funciona. Hacen falta cambios por parte de Guzman. Para que funcione hay que cambiar el metodo Barco.getEstado() y cambiar la parte no comentada por la comentada.


В enum все пишется с помощью uppecase: ACTION, SCIENCE_FICTION, ...


Можно было ввести поле Role, но это по желаниею


Лучше просто id


@tophf I need to store scheduling objects of this format `SCHEDULE_PREFIX + '.' + id = {start: '', end: '', id, ...}`) here. Should I use `prefs.set` or `chrome.storage.local` is fine? `prefs.set` uses localStorage which is not suitable for this purpose I guess. btw, I am not sure if this implementation conflicts with your MD5 storage implementation or not.


make sure, the driver instance is only one in step definitions:
1. static driver
2. context injection


> I got it further, but still hang after DRAM detect. No clues to get it further ...

Try to get output from boot0 in eMMC, I'll compare it to output on SoPine. Worst case scenario - patches will need adaptations based on memory dumps or you'll need to backport other LPDDR patches.


Налегай на Web-часть, времени не так много осталось


I am afraid to made even more damage
The chained update implies downgrade of some packages (requests2: 2.13.0 -> 2.12.5)


Should this unit be:
* (m/s)/m ?
* m/s ?
* 1/s ?
* Hz ?


Introduced in 2.1.12, not available in 2.0

See pr #220


Not working in my case. using V 3.0.0.


I think we should have equivalent functions, but trying to give new semantics to existing well-known names is going to be extremely difficult. I think we'll have to resolve the situation by being slightly more general as unlike other programming languages we also need to vectorised equivalents of each of these equality functions.


maybe this would lead to less confusion: `is_equal()` as an alias to `identical()`, and `is_reference()` test for pointer equality.


reset_server_stats and server_reset_stats look similar in their name.  This seems to reset client stats really, right? maybe, call this reset_client_stats(), call reset_client_stats() as reset_clients_stats(). I would leave it your judgement.


@tophf `/schedule/core.js` is executed in both background and manage.html. Is this safe to make sure this part only runs in background?


vectorised functions will be prefixed with `are_`


Create a file search.php to show the result by typping in the search box to search if a package is available on the server.


Relates to #1 get npm going


Looks OK to me!


Don't we need to sync the scheduling settings? chrome.storage.**sync**.

Otherwise, if you want chrome.storage.local, I don't see how it may conflict with anything I've done wrt styleDigest. And if it may, then we'll just fix it.


thanks.


It is sad to see how many PRs have bounced off of _kubernetes/kubernetes_ attempting to upgrade _mergo_ to something fresher.


구글 스프레드시트에 맞춰서 순서데로 적용 완료


I'm utterly undecided whether separating *this* would make sense or not. Pro: You could use the existing framework mechanisms for view model registration and callbacks and wouldn't need to depend on properly forwarding events to all sub modules (e.g. `onStartup` and such). Also I think `users` and `groups` are not needed everywhere where you need `permissions`, so a separation might actually make sense here. Contra: more files, no sub name spacing. Tricky...


Thanks for the credit! :+1:


Can't really change this, would require to depend on the accessViewModel, but the accessViewModel already depends on the LoginStateViewModel, so yep its ugly but I actually have no idea how to get around this.


Still, it has to cycle through all nodes in order to send them the information. which is the reason I brought it up. Or how does DOOM handle this if it doesn't cycle through


***Minify 2.1.7-2.3.1 changelog***
* Simplify docs for CSSmin on Minify 2.x
* Revert "Parse LastModified date without requiring global timezone"
This reverts commit 176fb1084f209974acfa9d2e074e1e7055a151b1.
* Merge pull request #570 from mrclay/default_tz
Parse LastModified date without requiring global timezone
* Parse LastModified date without requiring global timezone
Fixes #568
* Merge pull request #564 from mrclay/empty_url_2x
URI rewriter passes through empty URLs
* URI rewriter passes through empty URLs
Fixes #561
* Add temp location to server-info.php
* Deleted references to WordPress
* Merge pull request #537 from mrclay/sync_jsmin
Sync JSMin with mrclay/jsmin-php
* Sync JSMin with mrclay/jsmin-php
* Merge pull request #540 from Dargmuesli/2.x
Prevent false mod_rewrite error
* Prevent false mod_rewrite error
If Google's Closure Compiler API is enabled, rewriteTest.js is served as
"1;" instead of "1". Therefore the "Note: Your webserver does not seem
to support mod_rewrite (used in /min/.htaccess). Your Minify URIs will
contain '?', which may reduce the benefit of proxy cache servers." is
wrong. This is a simple workaround.

* list allowDirs in exception to simplify debugging

* Merge pull request #524 from mrclay/mrclay-mrclay-patch-1
Use $min_libPath in examples and move it within config.php
* Use $min_libPath in examples and move it within config.php
Fixes #522
* Merge pull request #519 from mrclay/clip_path_517
No longer alters inline SVG id URLs
* No longer alters inline SVG id URLs
Fixes #517
* Adds server-info.php
* Update FirePHP
* Update UriRewriting.wiki.md
* Update CommonProblems.wiki.md
* Adds config option to concatenate files only
* Merge pull request #142 from KTOmega/readme
* update cssmin to v2.4.8-4. fixes #123
* remove duplicate $keys assignment
* Code clean
* remove two DOS EOL
* Merge pull request #102 from greensolid-technologies/master
Add support for Wincache
* Add Wincache
Updated comments
Check for Wincache existence in constructor
Normalized markup
Add Wincache test
Tie Wincache test to test index
* Fixes #97: URIs with spaces are correctly rewritten
* Merge pull request #96 from glensc/patch-2
insert_final_newline to true
* insert_final_newline to true
* skip style apply in vendor/ (composer stuff)
* Merge pull request #94 from glensc/issue-51
Handle faiure to open cache file for writing
* fix passing invalid parametrs to flock. #51
* Adds Bootstrap styling to builder app
* Merge branch 'Jimdo-add-tests-closure-compiler'
* YUIC unit test updates
bail if jar not found, make test more obviously customizable, don't
fail test if YUIC correctly handles input it used to choke on.
* Clean up unit test messages
* Remove unused var, add @throws
* fix typo
* Adds tests for the command line based Closure Compiler
* Merge branch 'sambauers-master'
* 2.2.0 release - update VERSION constant
* Prepare for 2.2.0 release with updated HISTORY.txt
* Cleanup index.php a bit
* Allow long expires with "v" query string param
* Fix/simplify custom config paths implementation
* Merge branch 'joec4i-master'
* Simplify identifying file-relative URIs in rewriter
* Fixed the last commit
* about:blank check with regex
* CSS_UriRewriter: do not rewrite about:blank
* Merge pull request #86 from mrclay/cite_is_inline
Remove cite from block elements pattern
* Remove cite from block elements pattern
* Merge branch 'Jimdo-jimdo-compiler-service-options'
* Clean up pull/84 additions
* * Allow additional HTTP options to be passed to the Closure compiler service
* Allow option for overriding the maximum byte size POST limit
* Merge pull request #88 from sambauers/master
Allow definition of custom config directory.
* Use base for main config key.
* Use base for main config key.
* Fix index names on config paths array.
* Remove filenames from include statements.
* Change custom path explanation to match full custom paths changes.
* Allow full custom path including filename
* Allow optional custom configs to be optional
This change tests first for the existence of the custom config variable and then the existence of each custom config file in turn. If found the directory path to append to that config file is changed to the custom path.
This allows fallback to the standard config when no custom config is present.
Maybe it would be even better to load both - the standard config, then the custom config, but this might be confusing for groupConfig.php. It could work using array merge, but it wouldn't be particularly clear or easy to explain.
* Explain separate config storage in MIN.txt
* Include groupsConfig.php in MINIFY_CONFIG_DIR.
* Allow definition of custom config directory.
To allow "clean" checkouts of Minify we could use the possibility to define a custom config directory outside the minify directory.
Using this patch a user can define MINIFY_CUSTOM_CONFIG_DIR on a new page outside the minify directory and then include minify's index.php on that page and point their rewrites etc. there instead.
The config.php (and config-test.php) could be copied to the custom directory and edited without causing svn:external/git:submodule conflicts.
* Fix up web-based tool and correct error byte in JSMin exceptions
* Fixes issue 299 on Windows by reducing length of cache filenames
* Update CSSmin, adds Minify_CSSmin wrapper, removes units for CSSmin
* Merge pull request #78 from glensc/cc-url2
allow possibility to configure closure-compiler url
* allow possibility to configure closure-compiler url
* Merge pull request #77 from glensc/temp-path-error
report temp path when mktemp fails
* report temp path when mktemp fails
* Fixed email in composer.json
* Fixed composer.json
* Update composer.json
* Fixes #73: Handles regex literals directly following return/typeof


Puzzle `27-9c31931b` disappeared, that's why I closed as #35


Puzzle `27-8445ad5b` disappeared, that's why I closed as #36


Puzzle `35-79647dcf` discovered and submitted as #44


Puzzle `35-de23b30b` discovered and submitted as #45


An empty String is not NULL, isn't it?


@tophf I want this function to get executed when all styles are injected in manage.html. Where would be the best place to do this? Can we have a custom event for instance to get fired when all styles are injected.

I am trying to keep all the changes regarding scheduling in these two files with minimum possible modifications to the existing files.


Yes, on the way.


تغییر5


yeah, it is.

we can declare a dedicated boolean flag variable though.


hey, where's `return KEEP_CHANNEL_OPEN;`? schedule.entry apparently runs some async code like chrome.permissions.request.


You're right, it has to cycle through all nodes. For that to be fast, in DOOM there is pre-generated BLOCKMAP lump for each map. It only cycles through nodes of very small part of the map, when and only when there is something active. Alternatively, source ports can ignore BLOCKMAP lump and generate their own on the load of the map. It has almost no impact on level load speed.


> Don't we need to sync the scheduling settings? chrome.storage.sync.

I though maybe someone wants to have different schedules for different machines; like work and home for instance.


I've grabbed the Debug Serial output from normal boot with an Ayufan's image on another SDCard :

https://forum.armbian.com/index.php?/topic/4075-pinebooks-missing-info/&do=findC
omment&comment=30940


You are relying on pointer arithmetic...
Who guarantees the vector is implemented in contiguous memory ?
However the original code was intentionally clear and simple...
It is a minor gain to not call es.size() for a high price in clarity...


But what does this actually even do? First of all, what is `p.name`, where does it come from? And what does the "Admin" value in there mean? Could it change? If circular dependencies were possible (which they simply aren't), how would they solve this? Maybe if I understood the problem this is solving better, we might come to a cleaner solution.


你好


How about also checking superfluous variable name for properties:
```
/** @var int $foo */
private $foo;
```


There was a reason for not to splitting them into multiple files, but I forgot which one...


I must have forgotten it. Will be fixed on part/2 commit. Thanks!


And yes...either line 67 or 64 are wrong...together. Either you use the ordered list (so you use i everywhere) or you use the unordered one (so you use something that goes 1,2,3,4,5). Here you check 1,2,3,4,5 but mark inside the cluster vector using the ordered indices... so either one or the other lines are "wrong" in the sense that they don't make sense together


@tandraschko what do you mean not to use Final?    I have been doing this for years with great success.

"Use final liberally" - http://www.javapractices.com/topic/TopicAction.do?Id=23
"The Final Decision" - http://www.codeaffine.com/2014/04/28/java-code-style-the-final-decision/
"Stack Overflow" - https://softwareengineering.stackexchange.com/questions/98691/excessive-use-final-keyword-in-java

@parin1990 if you mean you are using PF extensions 3.0.0 or PF 3.0.0?? This will never work as PF Extensions is lock step with PF.  So to use my Snapshot above it will use PF 6.1.  The only way you can get this code is you would have to patch PF Extensions 3.0 with the changes I made in these commits.  Is that what you are asking?


I solved it by adding ```python2Packages = super.python2Packages // { glanceclient= null; };``` to overlays, so ```virtinst``` and ```virtmanager``` compiled without openstack support.
Could it make sense to submit a PR to break the dependency of the libvirt utils on broken openstack python libraries?


Well, I don't have an opinion on that.


The original logics is correct - so you may as well revert to it...


A Website for moros linux


Yes. I was actually just looking at making openstack support optional.


Sure, but these are theoretical concerns. In most cases the type will make zero difference. A quick look at your commits will show that most occurrences you've replaced were only local and blissfully agnostic of the list / iterator / view subtlety. As they should ;-)

Let's be practical instead: *(makes jedi hand gesture)* a naive conversion will be fine.

Seriously, it *will* be simpler, *will* look better, and *will* work fine in the vast majority of the cases.
We can deal with exceptions later if we ever encounter one. We have a testsuite for that.
A lot less efforts overall.
/cc @antonylesuisse


How does this interact with e.g. `nohup fish`?


It's not pretty, but it acknowledges the current state of the sources under ./vendor. The stuff there is not version 1.8.2. If you set the version to "^1.8.2" or even "=1.8.2" and run "glide update", it changes dozens of files. Without pinning the version to the commit ID we can't use glide for anything else.

Of course the correct way would be to set the version to something meaningful, do a glide update, and then verify that the plugin(s?) using that library still work.


btw, we need something similar in `update.js` as well.


And now its completely broken. You are sending the teleport at old position WITH old position as dest.


TeamCity libpalaso :: palaso-linux64-libpalaso-3.1 Continuous [Build 3.1.303.d4e4a176c0873b0f2e4f392eae17658f0212ae43](http://build.palaso.org/viewLog.html?buildId=89744&buildTypeId=bt322) outcome was **SUCCESS**
Summary: Tests passed: 3565, ignored: 111 Build time: 00:06:37


Does this unit need parentesis somehere ??


Hello,
I sometimes have trouble to recompile haxe when i only modified some files , i have to do a clean_haxe and rebuild all.

To circumvent this i have created a rsync.sh that will indicate if there is dependencies to rebuild:
rsync.sh:
```shell
#!/bin/sh
DONE=$(rsync -iu ${1}/*.ml _build/${1})
if [ $? -eq 0 ]; then
    if [ -n "${DONE}" ]; then
        echo 1 >_build/.mkdepends
    fi
else
    exit 1
fi
```

and in Makefile i have deleted the pass_build and avoid the reentrant call:
makefile pass for haxe:

```makefile
copy_output_files:
	mkdir -p _build
	$(foreach dir,$(HAXE_DIRECTORIES:%=src/%),mkdir -p _build/$(dir) && (sh rsync.sh $(dir)) &&) true
	sh compile.sh $(ADD_REVISION)
ifneq ($(ADD_REVISION),0)
	$(MAKE) -f Makefile.version_extra -s --no-print-directory ADD_REVISION=$(ADD_REVISION) BRANCH=$(BRANCH) COMMIT_SHA=$(COMMIT_SHA) COMMIT_DATE=$(COMMIT_DATE) > _build/src/compiler/version.ml
endif

_build/.mkdepends: copy_output_files

Makefile.modules: _build/.mkdepends
	$(eval MODULES= $(shell ls -1 $(HAXE_DIRECTORIES:%=_build/src/%/*.ml) | tr '\n' ' '))
	$(eval MODULES= $(shell ocamldep -sort -slash $(INCLUDES) $(MODULES) | sed -e "s/\.ml//g"))
	echo MODULES=$(MODULES) > $@

Makefile.dependencies: Makefile.modules
	ocamlfind ocamldep -slash -native $(HAXE_INCLUDES) $(MODULES:%=%.ml) > Makefile.dependencies

haxe: Makefile.dependencies $(MODULES:%=%.$(MODULE_EXT))
	$(COMPILER) -linkpkg -o $(OUTPUT) $(NATIVE_LIBS) $(NATIVE_LIB_FLAG) $(LFLAGS) $(FINDLIB_PACKAGES) $(EXTLIB_INCLUDES) $(EXTLIB_LIBS:=.$(LIB_EXT)) $(MODULES:%=%.$(MODULE_EXT))

```


You can safely assume all styles are injected before DOMContentLoaded event. Also, I think it's better to extend the core manage functionality to include this feature. Why? Because currently we don't have an extendable architecture so any attempt of external extending is a fragile hack.


随机背景


Issues now enabled 👍


Hello, Im making the same project. Have you done with it?


> I was doing turbolinks:load within a deferred application.js bundle (which has Turbolinks as the first include), and it now no longer triggers on navigation (still triggers on first load).

That should not be caused by this change, as the above change only affects `start`. Can you provide a repro app or somewhere I can see? (I assume you've fixed it on your production site).


I'm a developer on the git project who's worked on code related to this feature. This looks like you're overriding the libc regex library in some generic chef recipe, e.g. if this is distributed to Linux systems it's needlessly skipping using the glibc regex implementation, which is generally better than the compat engine shipped with git which this'll invoke. Are you sure you want to do that?


Correction: When I create a new CoinigyClient with api key and secret alone I get this:
{[SCError: Code=0, Message="Event response for 'auth' timed out", Name="", Type="timeout", Stack=""]}

When I pass debug:true in the CoinigyClient I get the Unknown server protocol version.


if you run this code you will notice that the prediction time is less that the training time (about 10% of it)


@Majkl578 Good idea, feel free to send a pull request :)


Fails on parsing xml documents with "TypeError: Cannot read property 'length' of undefined".

You should probably add isTag() check to second loop too.


accuracy_score = 0.973265073948


Sorry about that thought between Travis and manual builds those tests (which I wrote!) were run. I'm on vacation without a computer so feel free to revert if you haven't already. (Alternatively I could diagnose if someone posts how the equality check fails—see what I wrote in the PR thread.)


any idea where that code is located in Mocha? I'd like to take a closer look at it to find out how it works exactly


Typo: "Toggling" (without e)


Hi Adam, thanks for the suggestion on creating 2 models for gans with kur. Could you write a few lines of pseudo-kurfile yaml code to demonstrate the following? Thanks a lot!

> just have a dictionary of models, or a nested list of models, or auto-detect two independent models, etc.; plus a list of optimizers


...and I stand corrected... the requirement for std::vector to be implemented as contiguous memory is part of the c++11 draft standard (though I would not feel very comfortable to rely on it)


I meant when all the style elements (those `<div class="entry">` elements) are appended to the dom. Basically I want to update the new section (`<div class"schedule">`) once the manage page is ready.


Wrong gitmoji 😞, aaaah. It should be 🔧!!!

Tfw when you want to `git rebase`, lol just to correct this (I decided not to 😉)


You can put your name here ;)


> must need use a leading slash

must **not** use a leading slash


Alternatively set it to 0 always, and =1 on the intel arches.


Opened https://github.com/trivago/gollum/issues/106


# 对大数据、云计算和人工智能的认识
# 1 人工智能是什么
## 1.1人工智能的定义
人工智能（Artificial Intelligence）是一门新的技术科学，它主要研究和开发用于模拟人类的智能的理论、方法和技术的应用系统，它同样也是计算机学科的一个重要分支。人工智能的终极目的是掌握智能的根本实质，从而生产出一种全新的能以人类智能相似和相近的方式快速做出反应的智能机器。可以说人工智能的发展与计算机科学与技术的发展紧密相连，密不可分。
## 1.2人工智能的的发展历程
“人工智能”最初是在1956年美国达特茅斯学院提出的。人工智能的发展经历了半个多世纪，它的发展历程十分曲折，大致可分为三个发展阶段:
20世纪40年代中期到50年代中期为第一阶段，被称为人工智能启蒙探索时期。1950年，英国数学家图灵发表了《计算的机器与智能》，提出了机器可以思维进而帮助人类的问题，直接推动了现代人工智能的发展。
20世纪50年代中期到80年代末期为第二阶段，被称为人工智能经典符号时期。人工智能与认知科学、认知心理学等三门学科开始了相依为命的发展历程。
20世纪80年代末期到现在为第三阶段，被称为人工智能联结主义时期。这一时期，主要采用分布处理的方法通过人工神经网络来模拟人脑的智力活动。
# 2 大数据是什么
## 2.1大数据的定义
大数据（big data）是一个数据体量和数据类别都十分庞大的数据集。这个庞大的数据集，我们今天还无法用传统的数据库工具对它的内容进行获取和处理。大数据具有数据类型多、数据规模大、数据真实性高、数据处理快等四大特征。大数据的特征：第一，是指数据类型非常多，它的数据来自多种数据源，而非单一的一种数据源，数据的种类和数据的格式日渐丰富；第二，是指数据规模非常大，通常在10TB左右，规模非常庞大；第三，是指数据的真实性非常高，一些新的数据源渐渐兴起，打破了之前传统的数据源，今天的企业愈发需要这些有效的信息，以确保其真实性及安全性；第四，是指数据处理的速度非常快，能够做到数据的及时快速处理。
## 2.2大数据的发展历程
“大数据”一词最早提出的是麦肯锡研究院于2011年发布的研究报告《大数据》。之后，经美国高德纳公司和美国一些科学家的宣传推广，渐渐地大数据概念开始流行起来。
大数据发展的萌芽期是20世纪90年代至21世纪初，此时处于数据挖掘技术阶段。这一时期，随着数据挖掘理论和技术的逐渐成熟，已开始有一些与商业相关的智能工具开始被人们所应用，如专家系统、数据仓库和知识管理系统等。
大数据发展的突破期是2003-2006年，此时处于自由探索非结构化数据阶段。这一时期，非结构化数据的迅猛发展带动了大数据技术的快速发展。
大数据发展的成熟期是2006-2009年，此时大数据技术形成并行运算与分布式系统。到了2010年，智能手机开始大量涌现，其应用日益广泛。此时，数据的碎片化、流媒体、分布式等特征更加凸显，移动数据开始急剧增长。
近年来，大数据技术的发展十分迅猛，开始不断向社会各行各业步步渗透，从而导致大数据的技术领域和行业边界越来越不明显，也越来越模糊，大数据的应用创新已经超越了大数据技术的本身，越来越受到各行各业的热捧和青睐。
# 3 云计算是什么
云计算（Cloud computing），是一种基于互联网的计算方式，是传统计算机技术和网络技术发展融合的产物，也是引领未来信息产业创新的关键战略性技术和手段。狭义云计算指IT基础设施的交付和使用模式，指通过网络以按需、易扩展的方式获得所需资源；广义云计算指服务的交付和使用模式，指通过网络以按需、易扩展的方式获得所需服务。
云计算是继 1980 年代大型计算机到客户端—服务器的大转变之后的又一种巨变。用户不再需要了解“云”中基础设施的细节，不必具有相应的专业知识，也无需直接进行控制。云计算的核心思想，是将大量用网络连接的计算资源统一管理和调度，构成一个计算资源池向用户按需服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的，并且可以随时获取，按需使用，随时扩展，按使用付费。
# 4 大数据、云计算和人工智能的关系
## 4.1大数据与人工智能的关系
大数据和人工智能，近年来这两个领域的研究相互交叉促进，产生了很多新的方法、应用和价值。今天，人类拥有了对数据规模大、数据类型多、数据流转快和数据真实性高的大数据进行存取、检索、分类和统计的能力，完全得益于大数据技术的发展。而且，人工智能领域的一些理论和方法，已经开始用于大数据分析方面，并取得了一定的效果。研究发现，解决人工智能的扩展性和成长性问题，离不开大数据技术。以前，人工智能技术还不能实现与人类相似的学习研究能力。原因在于，人工智能看似简单，实际上是一件非常繁琐和复杂的事情，产生人工智能的两个必要条件要有海量数据的支撑和对这些数据的极强处理能力，而以前的机器都不具备这两个条件。人工智能其实就像人类一样，是需要拥有大量的知识和丰富的经验。在这些知识和经验的背后是需要大量的数据支撑。大数据技术的进一步发展，为储存、分析大量的数据提供了一定的技术支持，使机器得到的数据量和拥有的数据处理能力，与形成人工智能所需要的数据量和数据处理能力相匹配。只有这样，人工智能才能得到发展。人工智能的发展，反过来进一步推动大数据技术的向前发展，形成有效的相互推动作用。与其说人工智能的发展依靠大数据，不如说大数据开启人工智能新篇章。人工智能领域的一些理论和方法，能够有效地提升大数据的使用价值。与此同时，大数据技术的发展也将在为人工智能提供一个用武之地。
## 4.2云计算与人工智能的联系
语言作为抽象思维的外壳，没有哪一种语言思维属于形象思维的类型。人们需要实现语言上与机器人的对话，也就是通过相互之间的交流沟通。一般来说，已经解决了云计算的技术问题，这样就不需要人工智能的特别帮助，但是想要普及人工智能，并做好其应用，就必须让云计算对其加以支持。实际上，在人机的对话之中就需要大量的计算能力与储存能力。在互联网之中，每一个人都拥有属于自己的“云账号”，这样需要一个相对应的智能机器人来对用户提供针对性的服务。当用户有事的时候，就可以利用移动设备咨询自己需要了解的问题，通过这样的方式也能够获取直接的提醒与帮助。这样的事情在现阶段并非是无法作用，只需要留有“人机接口”，保持人机之间的相互对话，那么就能够将“对接”实现。
# 5 本次心得体会
通过本次课后作业，我查找了一些文献资料，对当前的云计算技术、大数据技术和人工智能有了初步的了解。同时也熟悉并掌握了GitHub的一些相关操作，我很感谢陈老师布置的这次作业，使我收获良多。


Yes, you're right, sorry -  I realized that after looking more closely at the diff. I tried to looking through the other commits as well but couldn't identify what caused the change. Let me try to reproduce my problem and I'll file an issue separately.


Should this version be available under releases?
It's still showing 7.2.2 as the latest there.


That part of the code base is much more elegant now. Thanks! 👍


@melloware Yes. i am using PF extensions 3.0.0. i also tried to patch it. but in v 6.1.1 there is no file named `gchart.js` in resources. whereas in my version,there is a file named `gchart.js` which is used to initialize chart with data


Very nicely done! 👍


Second Sprint plan for submission


Here, you should not only check if the variables are set (which prevents problem at installation time) but only if they are true. Please compare https://github.com/moodleuulm/moodle-local_boostcoc/blob/master/lib.php#L91


@SubJunk No difference ? I guess that you are kidding ?
The difference is what make _FFmpeg_ not display the subtitles...

```logtalk
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/fonts.conf file to configure system font access -->
<fontconfig>

<!--
	DO NOT EDIT THIS FILE.
	IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
	LOCAL CHANGES BELONG IN 'local.conf'.

	The intent of this standard configuration file is to be adequate for
	most environments.  If you have a reasonably normal environment and
	have found problems with this configuration, they are probably
	things that others will also want fixed.  Please submit any
	problems to the fontconfig bugzilla system located at fontconfig.org

	Note that the normal 'make install' procedure for fontconfig is to
	replace any existing fonts.conf file with the new version.  Place
	any local customizations in local.conf which this file references.

	Keith Packard
-->

<!-- Font directory list -->

	<dir>@FC_DEFAULT_FONTS@</dir>
	@FC_FONTPATH@
	<dir prefix="xdg">fonts</dir>
	<!-- the following element will be removed in the future -->
	<dir>~/.fonts</dir>

<!--
  Accept deprecated 'mono' alias, replacing it with 'monospace'
-->
	<match target="pattern">
		<test qual="any" name="family">
			<string>mono</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>monospace</string>
		</edit>
	</match>

<!--
  Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
-->
	<match target="pattern">
		<test qual="any" name="family">
			<string>sans serif</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>sans-serif</string>
		</edit>
	</match>

<!--
  Accept deprecated 'sans' alias, replacing it with 'sans-serif'
-->
	<match target="pattern">
		<test qual="any" name="family">
			<string>sans</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>sans-serif</string>
		</edit>
	</match>

<!--
  Load local system customization file
-->
	<include ignore_missing="yes">@CONFIGDIR@</include>

<!-- Font cache directory list -->

	<cachedir>@FC_CACHEDIR@</cachedir>
	<cachedir prefix="xdg">fontconfig</cachedir>
	<!-- the following element will be removed in the future -->
	<cachedir>~/.fontconfig</cachedir>

	<config>
<!--
  Rescan configuration every 30 seconds when FcFontSetList is called
 -->
		<rescan>
			<int>30</int>
		</rescan>
	</config>

</fontconfig>
```


Here, you don't need to check if the variable is set anymore, just check if it is true


thanks, just fixed