Building a training set of tags for wren

Hello lovely maintainers :wave:
We've recently added "tags" to student's solutions. These express the constructs, paradigms and techniques that a solution uses. We are going to be using these tags for lots of things including filtering, pointing a student to alternative approaches, and much more.
In order to do this, we've built out a full AST-based tagger in C#, which has allowed us to do things like detect recursion or bit shifting. We've set things up so other tracks can do the same for their languages, but its a lot of work, and we've determined that actually it may be unnecessary. Instead we think that we can use machine learning to achieve tagging with good enough results. We've fine-tuned a model that can determine the correct tags for C# from the examples with a high success rate. It's also doing reasonably well in an untrained state for other languages. We think that with only a few examples per language, we can potentially get some quite good results, and that we can then refine things further as we go.
I released a new video on the Insiders page that talks through this in more detail.
We're going to be adding a fully-fledged UI in the coming weeks that allow maintainers and mentors to tag solutions and create training sets for the neural networks, but to start with, we're hoping you would be willing to manually tag 20 solutions for this track. In this post we'll add 20 comments, each with a student's solution, and the tags our model has generated. Your mission (should you choose to accept it) is to edit the tags on each issue, removing any incorrect ones, and add any that are missing. In order to build one model that performs well across languages, it's best if you stick as closely as possible to the C# tags as you can. Those are listed here. If you want to add extra tags, that's totally fine, but please don't arbitrarily reword existing tags, even if you don't like what Erik's chosen, as it'll just make it less likely that your language gets the correct tags assigned by the neural network.

To summarise - there are two paths forward for this issue:

You're up for helping: Add a comment saying you're up for helping. Update the tags some time in the next few days. Add a comment when you're done. We'll then add them to our training set and move forward.
You not up for helping: No problem! Just please add a comment letting us know :)

If you tell us you're not able/wanting to help or there's no comment added, we'll automatically crowd-source this in a week or so.
Finally, if you have questions or want to discuss things, it would be best done on the forum, so the knowledge can be shared across all maintainers in all tracks.
Thanks for your help! :blue_heart:

Note: Meta discussion on the forum

Exercise: resistor-color
Code
var COLORS = [
  "black",
  "brown",
  "red",
  "orange",
  "yellow",
  "green",
  "blue",
  "violet",
  "grey",
  "white"
]

class Resistor {
  static colorCode(color) {
    return COLORS.indexOf(color)
  }
}

Tags:
construct:class
construct:method
construct:return
construct:static
construct:variable
construct:visibility-modifiers
paradigm:object-oriented

Exercise: hamming
Code
class Hamming {
  static compute(left, right) {
    if (left.count != right.count) {
      if (left.count == 0) Fiber.abort("left strand must not be empty")
      if(right.count == 0) Fiber.abort("right strand must not be empty")
      Fiber.abort("left and right strands must be of equal length")
    }

    return (0...left.count).reduce(0) { |distance, i|
      return distance + (left[i] == right[i] ? 0 : 1)
    }
  }
}

Tags:
construct:add
construct:class
construct:if
construct:index
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:ternary
construct:throw
construct:visibility-modifiers
paradigm:functional
paradigm:object-oriented
technique:exceptions
technique:higher-order-functions

Exercise: triangle
Code
class Triangle {
  construct new(a, b, c) {
    _sides = [a, b, c]
  }

  passesTriangleInequality {
    var sides = _sides[0..-1].sort()
    // destructure would really help
    var a = sides[0]
    var b = sides[1]
    var c = sides[2]

    return a > 0 && a + b >= c
  }

  matchingSides {
    // destructure would really help
    var a = _sides[0]
    var b = _sides[1]
    var c = _sides[2]

    if (a == b && b == c && a == c) {
      return 3
    } else if (a == b || a == c || b == c) {
      return 2
    } else {
      return 0
    }
  }

  isEquilateral {
    return passesTriangleInequality && matchingSides == 3
  }

  isIsosceles {
    return passesTriangleInequality && matchingSides == 2 || isEquilateral
  }

  isScalene {
    return passesTriangleInequality && matchingSides == 0
  }
}

Tags:
construct:add
construct:assignment
construct:boolean
construct:class
construct:comment
construct:field
construct:if
construct:indexing
construct:invocation
construct:logical-and
construct:logical-or
construct:method
construct:number
construct:parameter
construct:return
construct:variable
construct:visibility-modifiers
paradigm:imperative
paradigm:object-oriented
technique:boolean-logic

Exercise: flatten-array
Code
class Flatten {
  static flatten(seq) {
    return seq
      .reduce([]) {|flattened, elem|
        if (elem is Sequence) {
          flattened.addAll(flatten(elem))
        } else {
          flattened.add(elem)
        }
        return flattened
      }
      .where {|elem| elem != null}
      .toList
  }
}

Tags:
construct:class
construct:constructor
construct:method
construct:parameter
construct:return
construct:string
construct:throw
construct:try
construct:visibility-modifiers
paradigm:object-oriented
technique:exceptions

Exercise: allergies
Code
var ALLERGENS = [
    "eggs",
    "peanuts",
    "shellfish",
    "strawberries",
    "tomatoes",
    "chocolate",
    "pollen",
    "cats",
]
//
class Allergies {
  construct new(value) {
    _allergens = (0...ALLERGENS.count).where {|i| ((value >> i) & 1) == 1}
                                      .map   {|i| ALLERGENS[i]}
  }
  list() {_allergens.toList}
  allergicTo(name) {_allergens.contains(name)}
}

Tags:
construct:class
construct:comment
construct:field
construct:indexing
construct:initializer
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:list
construct:method
construct:number
construct:parameter
construct:property
construct:range
construct:shift-right
construct:string
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:object-oriented
technique:bit-manipulation
technique:bit-shifting
technique:higher-order-functions
uses:List

Exercise: darts
Code
class Darts {
  static score(x, y) {
    var distance = (x * x + y * y).sqrt

    if (distance <= 1) {
      return 10
    } else if (distance <= 5) {
      return 5
    } else if (distance <= 10) {
      return 1
    } else {
      return 0
    }
  }
}

Tags:
construct:add
construct:class
construct:constructor
construct:else
construct:if
construct:int
construct:integral-number
construct:invocation
construct:method
construct:multiply
construct:number
construct:parameter
construct:return
construct:variable
construct:visibility-modifiers
paradigm:object-oriented

Exercise: armstrong-numbers
Code
class Number {
  static isArmstrong(n) {
    var str = n.toString
    var m = str.
      map {|x| Num.fromString(x)}.
      reduce(0, Fn.new {|acc, x| acc + x.pow(str.codePoints.count)})
    return m == n
  }
}

Tags:
construct:add
construct:class
construct:implicit-conversion
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:map
construct:method
construct:number
construct:parameter
construct:return
construct:static-method
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:object-oriented
technique:higher-order-functions

Exercise: anagram
Code
class Anagram {
  static find(word, list) {
    return list
      .where { |w| downcase(w) != downcase(word) }
      .where { |w| normalize(w) == normalize(word) }
      .toList
  }

  static normalize(word) {
    return word
      .map { |c| downcase(c) }
      .toList
      .sort { |a, b| a.bytes[0] < b.bytes[0] }
      .join()
  }

  static downcase(s) {
    return s.map { |c|
      if (("A".bytes[0].."Z".bytes[0]).contains(c.bytes[0])) {
        return String.fromByte(c.bytes[0] + ("a".bytes[0] - "A".bytes[0]))
      }
      return c
    }.join()
  }
}

Tags:
construct:add
construct:boolean
construct:class
construct:if
construct:index
construct:initializer
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:list
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:subtract
construct:throw
construct:to-list
construct:visibility-modifiers
paradigm:functional
paradigm:object-oriented
technique:exceptions
technique:higher-order-functions
uses:List

Exercise: minesweeper
Code
class Minesweeper {
  static bound(y, n) { 0.max(y - 1)..(y + 1).min(n-1)}

  static annotateMine(ng, x, y) {
    ng[y][x] = "*"
    bound(y, ng.count).each {|y|
      bound(x, ng[y].count).each {|x|
        if (ng[y][x] == " ") {
          ng[y][x] = 1
        } else if (ng[y][x] != "*") {
          ng[y][x] = ng[y][x] + 1
        }
      }
    }
  }
  static annotate(grid) {
    var ng = grid.map {|line| List.filled(line.count, " ")}.toList

    for (y in 0...grid.count) {
      for (x in 0...grid[0].count) {
        if (grid[y][x] == "*") {
          annotateMine(ng, x, y)
        }
      }
    }

    return ng.map {|line| line.join()}.toList
  }
}

Tags:
construct:add
construct:assignment
construct:class
construct:for-loop
construct:if
construct:indexing
construct:initializer
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:list
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:subtract
construct:throw
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:imperative
paradigm:object-oriented
technique:exceptions
technique:higher-order-functions
technique:looping
uses:List

Exercise: protein-translation
Code
var TRANSLATIONS = {
  "AUG": "Methionine",
  "UUU": "Phenylalanine",
  "UUC": "Phenylalanine",
  "UUA": "Leucine",
  "UUG": "Leucine",
  "UCU": "Serine",
  "UCC": "Serine",
  "UCA": "Serine",
  "UCG": "Serine",
  "UAU": "Tyrosine",
  "UAC": "Tyrosine",
  "UGU": "Cysteine",
  "UGC": "Cysteine",
  "UGG": "Tryptophan",
  "UAA": "Stop",
  "UAG": "Stop",
  "UGA": "Stop"
}

class Tools {
  static translate() { [] }

  static translate(strand) {
    var proteins = []
    for (codon in codons(strand)) {
      var protein = TRANSLATIONS[codon]
      if (!protein) Fiber.abort("Invalid codon")
      if (protein ==  "Stop") break
      proteins.add(TRANSLATIONS[codon])
    }
    return proteins
  }

  static codons(strand) {
    var codons = []
    while (!strand.isEmpty) {
      codons.add(strand.take(3).join())
      strand = strand.skip(3)
    }
    return codons
  }
}

Tags:
construct:assignment
construct:boolean
construct:break
construct:class
construct:dictionary
construct:for-loop
construct:if
construct:invocation
construct:method
construct:parameter
construct:return
construct:string
construct:throw
construct:variable
construct:visibility-modifiers
construct:while-loop
paradigm:imperative
paradigm:object-oriented
technique:exceptions
technique:looping

Exercise: raindrops
Code
class Raindrops {
  static convert(n) {
    var result = ""
    if (n % 3 == 0) result = result + "Pling"
    if (n % 5 == 0) result = result + "Plang"
    if (n % 7 == 0) result = result + "Plong"
    return result == "" ? n.toString : result
  }
}

Tags:
construct:add
construct:assignment
construct:class
construct:if
construct:int
construct:integral-number
construct:invocation
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:ternary
construct:variable
construct:visibility-modifiers
paradigm:imperative
paradigm:object-oriented

Exercise: resistor-color-trio
Code
var COLORS = {
  "black": 0,
  "brown": 1,
  "red": 2,
  "orange": 3,
  "yellow": 4,
  "green": 5,
  "blue": 6,
  "violet": 7,
  "grey": 8,
  "white": 9,
}

class ResistorColorTrio {
  static value(color) {
    var v = COLORS[color]
    if (v == null) Fiber.abort("invalid color")
    return v
  }
  construct new(colors) {
    var nums = colors.map {|x| this.type.value(x) }.toList
    _ohms = (nums[0] * 10 + nums[1]) * 10.pow(nums[2])
    _unit = "ohms"
    if (_ohms >= 1000) {
      _ohms = _ohms / 1000
      _unit = "kiloohms"
    }
  }
  label { "Resistor value: %(_ohms) %(_unit)" }
}

Tags:
construct:assignment
construct:class
construct:dictionary
construct:divide
construct:field
construct:floating-point-number
construct:if
construct:implicit-conversion
construct:indexing
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:list
construct:map
construct:method
construct:multiply
construct:null
construct:nullability
construct:number
construct:parameter
construct:return
construct:string
construct:throw
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:imperative
paradigm:object-oriented
technique:exceptions
technique:higher-order-functions
uses:List
uses:Map

Exercise: run-length-encoding
Code
class RLE {
  static encode(s) {
    var last
    var count
    var encoded = ""

    var append = Fn.new {
      encoded = encoded + (count > 1 ? "%(count.toString)" : "") + last
    }

    for (c in s) {
      if (c != last) {
        if (last) append.call()
        count = 0
      }

      count = count + 1
      last = c
    }

    if (last) append.call()

    return encoded
  }

  static decode(s) {
    var decoded = ""
    var i = 0

    while (i < s.count) {
      if (isNum(s[i])) {
        var count = ""
        while (isNum(s[i])) {
          count = count + s[i]
          i = i + 1
        }
        count = Num.fromString(count)

        decoded = decoded + List.filled(count, s[i]).join()
      } else {
        decoded = decoded + s[i]
      }

      i = i + 1
    }

    return decoded
  }

  static isNum(c) { "0123456789".contains(c) }
}

Tags:
construct:add
construct:assignment
construct:boolean
construct:class
construct:for-loop
construct:if
construct:implicit-conversion
construct:indexed-access
construct:initializer
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:ternary
construct:variable
construct:visibility-modifiers
construct:while-loop
paradigm:functional
paradigm:imperative
paradigm:object-oriented
technique:higher-order-functions
technique:looping

Exercise: twelve-days
Code
var GIFT = [
  "a Partridge in a Pear Tree",
  "two Turtle Doves",
  "three French Hens",
  "four Calling Birds",
  "five Gold Rings",
  "six Geese-a-Laying",
  "seven Swans-a-Swimming",
  "eight Maids-a-Milking",
  "nine Ladies Dancing",
  "ten Lords-a-Leaping",
  "eleven Pipers Piping",
  "twelve Drummers Drumming"
]

var NTH = {
  1: "first",
  2: "second",
  3: "third",
  4: "fourth",
  5: "fifth",
  6: "sixth",
  7: "seventh",
  8: "eighth",
  9: "ninth",
  10: "tenth",
  11: "eleventh",
  12: "twelfth"
}

class TwelveDays {
  static recite(verse) { "%(opening(verse)) %(gifts(verse)).\n" }
  static recite(start, end) { (start..end).map { |day| recite(day) }.join("\n") }

  static opening(day) { "On the %(NTH[day]) day of Christmas my true love gave to me:" }

  static gifts(day) {
    if (day == 1) return GIFT[0]
    return "%(GIFT[(day - 1)..1].join(", ")), and %(GIFT[0])"
  }
}

Tags:
construct:class
construct:if
construct:indexing
construct:initializer
construct:int
construct:interval
construct:invocation
construct:lambda
construct:list
construct:map
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:subtract
construct:throw
construct:using
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:object-oriented
technique:exceptions
technique:higher-order-functions

Exercise: twelve-days
Code
var GIFTS = [
  "a Partridge in a Pear Tree.",
  "two Turtle Doves, and",
  "three French Hens,",
  "four Calling Birds,",
  "five Gold Rings,",
  "six Geese-a-Laying,",
  "seven Swans-a-Swimming,",
  "eight Maids-a-Milking,",
  "nine Ladies Dancing,",
  "ten Lords-a-Leaping,",
  "eleven Pipers Piping,",
  "twelve Drummers Drumming,",
]

var ORDINALS = [
  "first", "second", "third", "fourth", "fifth", "sixth",
  "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"
]

class TwelveDays {
  static recite(verse) {
    var head = "On the %(ORDINALS[verse - 1]) day of Christmas my true love gave to me: "
    var tail = GIFTS[(verse - 1)..0].join(" ") + "\n"
    return head + tail
  }

  static recite(start, end) {
    return (start..end).map {|n| recite(n) }.join("\n")
  }
}

Tags:
construct:add
construct:class
construct:field
construct:index
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:list
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:subtract
construct:throw
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:object-oriented
technique:exceptions
technique:higher-order-functions
technique:recursion
uses:List<T>

Exercise: luhn
Code
/* This is every 2nd digit index is "doubled"
 * idx 0: val = key * 2 > 10 ? key * 2 - 9 : key * 2
 * idx 1: val = key
 */
var DigitValue = [
  {0:0, 1:2, 2:4, 3:6, 4:8, 5:1, 6:3, 7:5, 8:7, 9:9},
  {0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9},
]

class Luhn {
  static valid(number) {
    number = number.replace(" ", "")
    if (number.count < 2) return false
    if (number.any {|c| !"0123456789".contains(c)}) return false

    var idx = 0
    var sum = number[-1..0]
      .map {|char| Num.fromString(char)}
      .reduce(0) {|sum, digit| sum + DigitValue[(idx = idx + 1) % 2][digit]}

    return sum % 10 == 0
  }

}

Tags:
construct:add
construct:assignment
construct:boolean
construct:class
construct:comment
construct:if
construct:implicit-conversion
construct:indexed-access
construct:initializer
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:map
construct:method
construct:number
construct:object
construct:parameter
construct:return
construct:string
construct:ternary
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:imperative
paradigm:object-oriented
technique:higher-order-functions

Exercise: word-count
Code
class Words {
    static sanitize(word) {
        return word
            .trim("!\"#$\%&'()*+ -./:;<=>?@[\\]^_`{|}~")
            .trim()
    }
    static sanitizeSentence(s) {
        return s
            .replace(",", " ")
            .replace("\n", " ")
            .replace("\t", " ")
    }

    static lowerCase(c) {
        var ord = c.codePoints[0]
            if (ord >= 65 && ord <= 90) {
                return String.fromCodePoint(ord + 32)
            }
        return c
    }
    static toLowerCase(s) {
        return s.map {|c| lowerCase(c)}.join("")
    }
    static calculateWordFrequency(sanitized) {
        var dict = {}
        for (word in sanitized.split(" ")) {
            var lcTrim = sanitize(toLowerCase(word.trim().trim("'").trim()))
            if (lcTrim != "") {
                if (dict.containsKey(lcTrim)) {
                    dict[lcTrim] = dict[lcTrim] + 1
                } else {
                    dict[lcTrim] = 1
                }
            }
        }
        return dict
    }
    static count(s) {
        return calculateWordFrequency(sanitizeSentence(s))
    }
}

Tags:
construct:add
construct:assignment
construct:boolean
construct:class
construct:dictionary
construct:for-loop
construct:if
construct:implicit-conversion
construct:indexing
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:logical-and
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:subtract
construct:throw
construct:variable
construct:visibility-modifiers
paradigm:functional
paradigm:imperative
paradigm:object-oriented
technique:boolean-logic
technique:exceptions
technique:higher-order-functions
technique:looping
uses:Dictionary

Exercise: circular-buffer
Code
var BufferFullError  = "Buffer full"
var BufferEmptyError = "Buffer empty"

class CircularBuffer {
  construct new(size) {
    _size = size
    _buffer = []
  }

  isFull  { _buffer.count == _size }
  isEmpty { _buffer.isEmpty }

  clear() { _buffer.clear() }

  write(elem) {
    if (isFull) Fiber.abort(BufferFullError)
    _buffer.add(elem)
  }

  read() {
    if (isEmpty) Fiber.abort(BufferEmptyError)
    return _buffer.removeAt(0)
  }

  forceWrite(elem) {
    if (isFull) read()
    write(elem)
  }
}

Tags:
construct:class
construct:field
construct:if
construct:index
construct:invocation
construct:method
construct:number
construct:parameter
construct:return
construct:string
construct:variable
construct:visibility-modifiers
paradigm:object-oriented

Exercise: sieve
Code
// The key to making this fast is to limit the number of loop iterations.

class Sieve {
  construct new(limit) {
    _limit = limit
  }

  primes {
    // only find the primes onece
    if (_primes == null) {
      if (_limit < 2) {
        _primes = []
      } else {
        _candidates = List.filled(_limit+1, true)
        // 2 is the first prime
        markMultiples_(2)
        // 3 is the second prime: this and all subsequent primes are odd numbers
        var prime = 3
        while (prime <= _limit) {
          if (_candidates[prime]) markMultiples_(prime)
          prime = prime + 2
        }
        // and collect the prime numbers
        _primes = (2.._limit).where {|i| _candidates[i]}.toList
      }
    }
    return _primes
  }

  markMultiples_(prime) {
    // all multiples `prime * k` where k < prime have already been marked as non-prime
    var idx = prime * prime
    // for prime > 2, all even multiples are already non-prime
    var step = (prime == 2) ? 2 : 2 * prime
    while (idx <= _limit) {
      _candidates[idx] = false
      idx = idx + step
    }
  }
}

Tags:
construct:add
construct:assignment
construct:boolean
construct:class
construct:comment
construct:constructor
construct:field
construct:if
construct:index
construct:initializer
construct:int
construct:integral-number
construct:invocation
construct:lambda
construct:list
construct:logical-and
construct:loop
construct:method
construct:multiply
construct:null
construct:nullability
construct:number
construct:parameter
construct:return
construct:ternary
construct:variable
construct:visibility-modifiers
construct:while-loop
paradigm:functional
paradigm:imperative
paradigm:object-oriented
technique:boolean-logic
technique:higher-order-functions
technique:looping
uses:List

Exercise: isogram
Code
import "essentials" for Strings
class Isogram {
  static isIsogram(string) {
    var res = true
    var seen = {}
    for (c in Strings.downcase(string)) {
      if (!"abcdefghijklmnopqrstuvwxyz".contains(c)) continue
      if (seen.containsKey(c)) {
        return false
      }
      seen[c] = true
    }
    return res
  }
}

Tags:
construct:assignment
construct:boolean
construct:class
construct:continue
construct:for-loop
construct:if
construct:implicit-conversion
construct:indexed-access
construct:initializer
construct:invocation
construct:method
construct:parameter
construct:return
construct:set
construct:string
construct:throw
construct:variable
construct:visibility-modifiers
paradigm:imperative
paradigm:object-oriented
technique:exceptions
technique:looping
uses:Set

No bandwidth for this ATM.

This is an automated comment
Hello :wave: Next week we're going to start using the tagging work people are doing on these. If you've already completed the work, thank you! If you've not, but intend to this week, that's great! If you're not going to get round to doing it, and you've not yet posted a comment letting us know, could you please do so, so that we can find other people to do it. Thanks!

I will not have time for this one.


[FIPS]Change ssh migration key to ECDSA

The e8b0fcaa7a13a0d4656b76e019d25d11d648fd13 switched on the FIPS crypto profile in the pre-deployed EDPM VMs. Even though the recent FIPS standard[1] allows ED25519 ssh keys, the current FIPS profile in centos9 stream does not allow it. So the current migration ssh key isn't usable. This PR changes the key type to ECDSA until the profile is updated.
[1] https://csrc.nist.gov/pubs/fips/186-5/final

Tested locally cold migration works with this PR


Refactor tests of highlighting

We rely heavily on the Elasticsearch highlighting engine in the buyer frontend, as we show the highlighted text in search results always (regardless of whether any search terms were matched) and we use its HTML escaping method as a form of protection against XSS.
However, our tests of the highlighted response have not kept up-to-date, so this PR shows them a little love.
Tests of the highlighted service description have been moved from test_search.py to their own file, test_highlight.py, and significantly rewritten and expanded.
The aim of this was to make the tests more clearly reflect our requirements of the highlight field, and make sure that any changes brought in by Elasticsearch 6 are caught.

I'd prefer if we could stick to the pattern of test module names that reflect the view module name (i.e. test_search.py covers the functionality in search.py), so that if we refactor later we can easily find related tests (I'm not keen on the existing test_search_queries.py either!). However I'm happy for the highlighting tests to be hived off into their own class to make test_search.py more manageable.

I'd prefer if we could stick to the pattern of test module names that reflect the view module name (i.e. test_search.py covers the functionality in search.py), so that if we refactor later we can easily find related tests (I'm not keen on the existing test_search_queries.py either!). However I'm happy for the highlighting tests to be hived off into their own class to make test_search.py more manageable.

Done1


Switch button darkmode

closes https://sce.myjetbrains.com/youtrack/issue/TD-173
A Switch to toggle between dark and light mode.

You are not exporting the component from the root index file so it won't be possible for other apps to import it.

I think an actual switch rather than a button would look better here and is what you typically see.
Here's a few random examples I found on Google image search.

New component works fine. I did a local build and tested it in the toolbar of one of our apps.


Added Synapse Link to TOC

Link to Azure Synapse Analytics docs in .NET for Apache Spark TOC
AB#1772900

@mamccrea can I please get a review when you get chance. Thanks!

@luisquintanilla - this looks good to me. You might consider making it contextual so readers don't leave the .NET for Spark docset.

Thanks @mamccrea I'll merge this for now, but I'll definitely look into doing that since it's definitely a better experience.


[Backport] NeuVector k8s 1.27 chart support

Backport of https://github.com/rancher/rancher/issues/41803
This issue is to implement the chart changes & perform the testing required to upgrade to k8s 1.27. Please perform below steps.

[ ] Check whether the chart has any references to the below deprecated features of k8s 1.27. You can find information about deprecated APIs here on Kubernetes Deprecation guide.

storage.k8s.io/v1beta1 API version of CSIStorageCapacity

[ ] Update kube-version annotation in Chart.yaml. catalog.cattle.io/kube-version: '>= 1.23.0-0 < 1.28.0-0'

Note: If this is an upstream chart and if the upstream chart doesn't support k8s 1.27 then do not update the kube-version annotation or update the k8s version accordingly.

[ ] Perform below tests

Fresh install/uninstall/upgrade/downgrade of the charts on K8s 1.27 provisioned on Rancher. Test the chart functionality.
(Please refer to the https://github.com/rancher/rancher/issues/41395 to know what testing was done for k8s 1.26 upgrade for your chart)

Provision rancher on k8s 1.26 or lesser

Install chart on this cluster

Upgrade this cluster in rancher to k8s 1.27

Make sure the existing chart and the app is functional after cluster upgrade

Related to https://github.com/rancher/rancher/issues/44222 and https://github.com/rancher/rancher/issues/44223 though I need to confirm if this is the parent to those two.

@gaktive above PRs for adding new chart for NeuVector app version 5.2.4-s1. I have verified the existing chart 103.0.0+up2.6.4 and 103.0.1+up2.7.1(unreleased version) for k8s 1.27 support.
I did fresh install as well by upgrading downstream cluster from k8s version 1.26 to 1.27. Above charts works as expected. I tested this on Rancher manager 2.8.0 and 2.7.8. I used respective NeuVector charts.

Thanks @selvamt94, does that mean that this ticket is not only dev complete but tested?

@gaktive Yes, we have tested too.


Distribution requirements for GPLed software?

In a recent conversation, some difficulties with distributing GPL software were mentioned, in particular the question was raised if the full sources of all linked libraries have to be provided or not.

How severe is the problem?
What are the requirements exactly?
How are the projects with GPLed software currently solve the problem?

For completeness here the conversation with lm8:

My understanding (from all the time I've spent reading about licenses) is that if the game itself is licensed GPL, you need to supply the source to anything that links with it and is not a part of the operating system. That would include source for libraries that are linked to it like SDL, zlib, libpng, libvorbis, etc., but could also possibly include source for the compiler libraries on systems like Windows where MinGW is not part of the operating system. LGPL is more lenient and you need to supply source for anything with LGPL license but not anything it dynamically links to. If you just link to the library homepage and the library is no longer available at some point, you can't replicate building the GPL licensed program. The GPL license is designed to try to ensure that a user can rebuild the program from source for himself/herself if desired. I've even read about one license dispute that occurred when a build tool used to build a GPL program had a license that was not compatible with the GPL. You might be able to contact the FSF for further clarification on what source is absolutely required when distributing a GPL program, but I haven't found them to be any good at answering e-mails.

Some references on GPL...
Looks like you could possibly point to source on someone else's site as long as the source remains available while you're distributing your programs:
https://www.gnu.org/licenses/gpl-faq.html#SourceAndBinaryOnDifferentSites
You'd have to make sure that the source available at the other site was the same version the program was using too.
Some details on license compatibility:
https://www.gnu.org/licenses/license-list.en.html
More on license compatibility:
https://en.wikipedia.org/wiki/License_compatibility

In practice this might mean that people would be obliged to check regularly if the websites they link to still exist and still contain the used versions of all libraries. Giving a few alternative possibilities like a webarchive link (that might live longer) might also be a good idea.


Zarlor Mercenary - game locks after exitting shop.

Played 1st level till the end without glitches.

0.5.0 - The issue is gone now.


Simplify plotting

Historically there has been some code in the plotting functions that is doing lots of complicated things. I'm referring to
https://github.com/poliastro/poliastro/blob/1ec82f1/src/poliastro/plotting.py#L122-L141
This is

Sampling the orbit
...in the perifocal frame (PQW)
Projecting to the plane of the orbit (e and p axis of PQW)
Projecting to the plane of a previous orbit (another PQW frame)

They are only 19 lines but, as you can see, very meaty.
I think we can simplify this by:

Having a .sample() method in Orbit objects that accepts a discretization step, or an array of times, or true anomaly values... Something that returns an array of orbital elements of vectors.
Having the ability to convert this vector, which is centered on Orbit.attractor, to PQW (see #108 and #215)
Then select only the coordinates that belong to the plane

This probably deserves further discussion in the wiki and splitting into different issues, but let us put it here so we do not forget.

I'm missing some logic that relates to the projection in a different plane, but that is why we need discussion :)

The road ahead is more or less clear, but we should implement sampling first. Adding new issues, blocking this and postponing.

New issues: #236 #237.

Also, as noted in https://github.com/poliastro/poliastro/pull/228#issuecomment-327460712 and https://github.com/matplotlib/matplotlib/issues/9155#issuecomment-327458806, we should store all the orbits being plotted in their original reference frames, and then reproject. This will allow for reprojection and better legend handling.

Now that #263 has been implemented, this is no longer blocked.

Interestingly, now plotting in 3D is way easier than plotting in 2D!

So I'm retargetting this as "simplify 2D plotting", which involves reprojection, selecting a plane, etc.

Assigning this to @anhiga, who volunteered to do it :)

Closed in #269!


Firmware dead with the latest firmware

Hello,
My calculator broke down when I'm trying to flash the three-party firmware.The hardware version of the calculator is C,with the firmware 2016 08 29(10637).
The firmware format has been changed in this firmware version.I flashed the PRIME_APP.DAT to my udisk with 8192 bytes of offset.Then I found the file named armfir.elf,so I replaced the elf,changed the md5 ,copied my udisk into PRIME_APP.DAT and flashed the firmware into my calculator.But my calculator restarted in the start screen “x^2+y^2=1".When I tried copying the rom file generated by the program elf2rom,the calculator does not display anything unless you start it with CFO pressed or Symb button pressed.
PS:the source code can't be compiled in Windows but in ubantu, but I don't know which library I should install in WIndows.
http://www.hpmuseum.org/forum/thread-8483.html

You need to flash the generated PRIME_OS.ROM file to install Rip'Em (https://github.com/boricj/ripem#how-to-install).
A quick look at the 10637 firmware suggests nothing has changed that would impact Rip'Em. I haven't tried it in a long time, but it should still work.

The command make returned an error:
arm-none-eabi-ar rcs lib/libhpbsp/libhpbsp.a
arm-none-eabi-ar rcs lib/libhputils/libhputils.a
arm-none-eabi-ar rcs lib/libtinf/libtinf.a
arm-none-eabi-gcc -nostdlib -ffreestanding -s -n -T bin/dummy/ldscript lib/libhpbsp/libhpbsp.a lib/libhputils/libhputils.a -lgcc -o bin/dummy/dummy.elf --entry 0x30000000
arm-none-eabi-gcc -nostdlib -ffreestanding -s -n -T bin/gdbstub/ldscript lib/libhpbsp/libhpbsp.a lib/libhputils/libhputils.a -lgcc -o bin/gdbstub/gdbstub_serial.elf --entry 0x00002000
arm-none-eabi-gcc -nostdlib -ffreestanding -s -n -T bin/dumbcalc/ldscript lib/libhpbsp/libhpbsp.a lib/libhputils/libhputils.a -lgcc -o bin/dumbcalc/dumbcalc.elf --entry 0x30000000
rm -rf bin/ripem/tmp
rm -f bin/ripem/payload
mkdir bin/ripem/tmp
cp -f bin/dummy/dummy.elf bin/gdbstub/gdbstub_serial.elf bin/dumbcalc/dumbcalc.elf bin/ripem/tmp
gzip -9 bin/ripem/tmp/*
cd bin/ripem/tmp && ls | cpio -ov -H newc > ../payload.cpio
dumbcalc.elf.gz
dummy.elf.gz
gdbstub_serial.elf.gz
2 blocks
arm-none-eabi-objcopy -I binary -O elf32-littlearm -B arm --rename-section .data=.payload bin/ripem/payload.cpio bin/ripem/ripem_payload.o
arm-none-eabi-gcc -nostdlib -ffreestanding -s -n -T bin/ripem/ldscript bin/ripem/ripem_payload.o lib/libhpbsp/libhpbsp.a lib/libhputils/libhputils.a lib/libtinf/libtinf.a -lgcc -o bin/ripem/ripem.elf --entry 0x31000020
cc -Wall -Itools/ -o tools/osrom2elf/osrom2elf tools/osrom2elf/osrom2elf.c  -lelf
tools/osrom2elf/osrom2elf.c: In function ‘load_elf’:
tools/osrom2elf/osrom2elf.c:107:2: warning: implicit declaration of function ‘elf_getdata_rawchunk’ [-Wimplicit-function-declaration]
LIBELF_CHECK(inPath, elf_Data = elf_getdata_rawchunk(elf, elf_Phdr[0].p_offset, elf_Phdr[0].p_filesz, ELF_T_PHDR), err2);
^
In file included from tools/osrom2elf/osrom2elf.c:10:0:
tools/osrom2elf/osrom2elf.c:107:32: warning: assignment makes pointer from integer without a cast [enabled by default]
LIBELF_CHECK(inPath, elf_Data = elf_getdata_rawchunk(elf, elf_Phdr[0].p_offset, elf_Phdr[0].p_filesz, ELF_T_PHDR), err2);
^
tools/libelf_check_macros.h:23:8: note: in definition of macro ‘LIBELF_CHECK’
if (!(a)) {
^
ln -sf osrom2elf tools/osrom2elf/elf2osrom
tools/osrom2elf/elf2osrom bin/ripem/ripem.elf bin/ripem/PRIME_OS.ROM
Can you tell me why?

The make command did not fail, although there are indeed a couple of warnings from the osrom2elf tool.
The PRIME_OS.ROM binary has been generated under bin/ripem. This is the file that you want to flash onto your calculator.

I have flashed my calculator as you told and it can only enter the recovery mode.And for some reason I can‘t flash my calculator back.
http://www.hpmuseum.org/forum/thread-8508.html

Closed as real issue was outdated GNU Make (http://www.hpmuseum.org/forum/thread-8508-post-74932.html#pid74932) under Ubuntu 14.04.
Building Rip'Em currently requires GNU Make >= 4.0, otherwise the generated firmware will be an empty shell due to malfunctioning Makefile macros.


-edit "audio:3%" => execution duration not consistent with file size. 22mn takes days of processing. 2mn video takes 3mn processing.

Bug description
-edit "audio:3%"
File 1: MP4 2minutes 1654x930 => takes less than 3mn of execution. Duration of video reduced by 46%.
File 2: MP4 22minutes 1654x930 => takes 2.5 days .
File 1 = first 2mn of File 2
Output:
$ auto-editor example.mp4 --edit "audio:3%"
Finished. took 162.69 seconds (0:02:43)
$ auto-editor 01\ Introduction\ and\ Release\ Overview\ -\ Ericsson\ Play.mp4 --edit "audio:3%"
Finished. took 214832.04 seconds (2 days, 11:40:32)
What's your platform?
Python Version: 3.10.12 64-bit
Platform: Linux 5.15.0-79-generic x86_64
FFmpeg Version: 4.4.2-0ubuntu<IP_ADDRESS>
FFmpeg Path: ffmpeg
Auto-Editor Version: 23w35a

What command did you use
auto-editor myfile.mp4 --edit "audio:3%"

What properties does your input video have?

video:

track 0:

codec: h264
fps: 80
resolution: 1654x930
aspect ratio: 827:465
pixel aspect ratio: 1:1
duration: 1333.834011
pix fmt: yuv420p
timebase: 1/90000
bitrate: 464916
lang: und

audio:

track 0:

codec: aac
samplerate: 44100
channels: 2
duration: 1334.032834
bitrate: 125588
lang: und

container:

duration: 1334.033
bitrate: 596363

Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
Duration: 00:22:14.03, start: 0.000000, bitrate: 596 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1654x930 [SAR 1:1 DAR 827:465], 464 kb/s, 10 fps, 80 tbr, 90k tbn, 20 tbc (default)
Metadata:
handler_name    : VideoHandler
vendor_id       : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
Metadata:
handler_name    : VideoHandler
vendor_id       : [0][0][0][0]
Comments
No response

I can't replicate this. Try seeking if --no-seek helps..

I did a try. outcome: marginal, non significative, improvement: 2d 10h instead of 2d 11h.
I will put under debug or some coverage tool Thanks.

Closing because running slow isn't a bug.


Refactor CI job structure of testing re-deploys on existing deployments

The current Travis jobs attempt to test re-running on existing deployments when the e2e scripting is modified.
  - if [[ "${CHANGED_FILES_PR[@]}" =~ "scripts/kind-e2e/e2e.sh" ]]; then
      echo "scripts/kind-e2e/e2e.sh was modified, testing recurring run on already deployed infrastructure.";
      set -o pipefail;
      $CMD 2>&1 |  ts '[%H:%M:%.S]' -s;
    fi;

However, the logic no longer really applies because the scripts used in e2e are now many more than just e2e.sh.
Parts:

Trigger re-runs at correct, useful times. Don't re-run verify jobs, for example.
Maybe trigger based on periodic timer, vs extending job times for PRs.

This check caught a legit bug in https://github.com/submariner-io/submariner/pull/427, so maybe it adds enough value that it should remain when e2e files are modified but the check should be extended to catch all e2e-related file changes.

A simple fix could be to trigger on "${CHANGED_FILES_PR[@]}" =~ "scripts/kind-e2e/"
Also note that if the script failed at that point it didn't actually fail the job, so the fact it caught a bug in #427 was since I was actually reading the build logs, and would go unnoticed otherwise.


Enable persistent memory and multi-turn capability for agents - react_llama pilot

Priority
P2-High
OS type
Ubuntu
Hardware type
Gaudi2
Running nodes
Single Node
Description
persistent checkpointer and store, update agent algo of processing historical messages, enable multi-turn conversations with user. react_llama as pilot.

database use embedding for retrieval
https://github.com/langchain-ai/langgraph/blob/main/libs/checkpoint-postgres/langgraph/store/postgres/base.py#L535


TypeError issue

Can you please enable debugging and provide the log.
On Tue, May 28, 2024 at 9:13 PM Rnstie @.***> wrote:

image.png (view on web)
https://github.com/MortJC/homebridge-platform-isolarcloud/assets/20060358/342ec7a4-b675-4492-8075-835fd69dcfeb
—
Reply to this email directly, view it on GitHub
https://github.com/MortJC/homebridge-platform-isolarcloud/issues/10, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AN5E4TUT7DUBLFHC4DBXHCTZERRE3AVCNFSM6AAAAABIMWRW3SVHI2DSMVQWIX3LMV43ASLTON2WKOZSGMZDANZYGY4DMNQ
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

Please let me know if there's anything else I can submit to help!

Do you have powerstations setup in your isolarcloud account?
On Wed, May 29, 2024 at 10:40 PM Rnstie @.***> wrote:

image.png (view on web)
https://github.com/MortJC/homebridge-platform-isolarcloud/assets/20060358/070ec19b-b9aa-4b03-b98a-aee7a4e65553
Please let me know if there's anything else I can submit to help!
—
Reply to this email directly, view it on GitHub
https://github.com/MortJC/homebridge-platform-isolarcloud/issues/10#issuecomment-2137318113,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AN5E4TXQMIKNUZAQ5WUWTGTZEXEFLAVCNFSM6AAAAABIMWRW3SVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZXGMYTQMJRGM
.
You are receiving this because you commented.Message ID:
@.***>


Rails 7.1 Support Question

:wave: Hey there!
Love all the OSS work that Test Double does - and all of the thought leadership that comes out of the crew.
I was working with a project to update it to 7.1, and the project uses this gem (and it's very helpful!)
I found the issue at hand, specifically - ActiveRecord::InternalMetadata no longer inherits from ActiveRecord::Base: https://github.com/rails/rails/commit/93ddf338a0763c2e6e81e8c9e64cea5cc891a523
Not a difficult fix - but I suppose I'm curious if this project is still something actively used by the Test Double team.
If this isn't the recommended path anymore - totally fine, and I'd love to know what the team prefers. If it is, however, I'm more than happy to submit a PR.
Thanks again for all you do!

@thewatts any plans to open PR? I have checked and your update works well for our project.

Hey @thewatts, I've taken over ownership of this gem. Definitely looking into what it will take to have support for Rails 7.1. The changes to ActiveRecord::InternalMetadata are definitely an issue I've run into as well.
If you'd like to make a PR addressing those changes, that would be greatly appreciated. Otherwise, it's something I'm hoping to take care of soon.

PR #12 - 3a1b605 fixes this for 7.1 - but probably won't work with earlier versions.

Hey @thewatts, I've taken over ownership of this gem. Definitely looking into what it will take to have support for Rails 7.1. The changes to ActiveRecord::InternalMetadata are definitely an issue I've run into as well.
If you'd like to make a PR addressing those changes, that would be greatly appreciated. Otherwise, it's something I'm hoping to take care of soon.

Hey there!
Sorry - I didn't see the notification about your message!
I don't mind taking my code and submitting a PR :)
Hold tight

@infews added here: https://github.com/testdouble/test_data/pull/14


Use the rpm to install java into the container

This is an automated way to install java into a docker container.
This also names the containers with a higher granularity oracle/jdk:8u101-b13 so you can specify a specific version in your FROM section.

Even though technically it works, this would break the Oracle Java Binary Code License Agreement, because in practice the user building the image has no opportunity to read the license before accepting it, since the Dockerfile has the "accept" flag by default.
Thank you for the suggestion, but we cannot accept it.


Support

Hi! I have some doubts with the package and I wanted to know if you have a group that takes them out.

https://discord.gg/uqB8kxh


Peak Occupancy map display not showing right data

See example:
Emeryville/Project_ID = 43.  Peak occupancy for "Both" (on and off street) should be Weekday, 9am.  It is possible that the peak displayed on the map is pointing to the wrong day type (weekend?).  Not sure.  The legend displays the correct text for the day type and time, but the map display doesn't look right.  There are a couple of these.

Resolved.


root GET response not matching docs

Hi,
Was just looking at http://docs.annotatorjs.org/en/latest/storage.html#root
When I call $ curl http://localhost:5000/ on my locally running annotator-store, I see a list of all the possible methods for annotator-store, not the store information as documented.
Maybe I'm missing something, happy to help update the documentation.

I'm not sure we need to have this here anymore. The v2 over on Annotator doesn't have this issue.


Exported ExtendedKey

The ExtendedKey struct in the hdkeychain package has all private fields. This is a bit problematic as my use case requires using a custom chaincode.
Would you accept a PR changing newExtendedKey to exported so that people can create custom extended keys outside the package?

I don't have any objections to that.  I would ask that you update the comment accordingly to say something along the lines that it should only be used for custom applications and ordinarily callers should use NewMaster, Child, and Neuter.


Typo in bidirectional encoder?

Apologies if I'm misunderstanding something here. In model_new.py, the bidirectional encoder outputs a concatenation of the forward output with itself. Should this be a concatenation of the forward and backward outputs?
(See line 176)

It is a typo. Thanks for noticing! Fixed it.


Enable minitest and fix CI

I was playing around with the Color class and noticed that my changes do not fail any tests. Apparently, the minitest suites were disabled in https://github.com/creativescala/doodle/commit/e9d3e46a4d15a456db3d03353d79f9b638ca1863.
This change enables them again. I've also took upon fixing the build, which required removing redundant imports and loosening up on fatal warnings in the docs build.
Feel free to close if I do not have the full context and the tests are disabled by design.

Thanks!


Add french translation

I would like to contribute to this...

I would like to contribute to this...

Thank you, it's very welcome! 😁

Merged at #26


How generate a video?

I run the code
python -m tools.manage_datagen_jobs --output_folder outputs/hello_world2 --num_scenes 1 --specific_seed 0 --configs desert simple --pipeline_configs local_16GB monocular_video blender_gt --pipeline_overrides LocalScheduleHandler.use_gpu=True

and outputs/hello_world2/jobs.log shows that program completed and stopped after 5 hours.

I get a lots file:

But I can't find any video file in outputs/hello_world2 directory. Can you help me?

You should be able to look inside the frames_* folders to see the output images that make up your video, and you can combine them together into an mpr using 'python tools/results/parse_video.py outputs/hello_world2'


Revise contracts - PO structural changes, test fixes, approver list

eShop - now holds list of quote approver addresses, any can be used to sign PO.
All tests fixed.

This is ready to merge


Config changes to reflect the default branch from master to main. Please merge to complete the default branch renaming job.

Auto branch renaming content.

Docs Build status updates of commit 1664bf0:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error-GitBranchDeletedOrForcePushed] Cannot sync git repo to specified commit because branch e434b224-5bfb-4253-ae3a-2c5181e5632b has been deleted or has been force pushed

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


Logging in async functions?

When I log in an async function, it is not output to any of the frontends. I think this is a misunderstanding of how Rust works on my end to be honest (im Rust newbie). How would one work around this?

Never mind, I think the real problem was my async code was simply not awaiting in the right places...


test: Fix readme of storage integration test

Issue #, if available:
Description of changes:
Check points: (check or cross out if not relevant)

[ ] Added new tests to cover change, if needed
[ ] Build succeeds with all target using Swift Package Manager
[ ] All unit tests pass
[ ] All integration tests pass
[ ] Security oriented best practices and standards are followed (e.g. using input sanitization, principle of least privilege, etc)
[ ] Documentation update for the change if required
[ ] PR title conforms to conventional commit style
[ ] If breaking change, documentation/changelog update with migration instructions

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report

Merging #1744 (ced2e40) into royjit.fixauthtest (cc2abeb) will increase coverage by 2.42%.
The diff coverage is n/a.

@@                  Coverage Diff                   @@
##           royjit.fixauthtest    #1744      +/-   ##
======================================================
+ Coverage               56.63%   59.05%   +2.42%
======================================================
  Files                     641      716      +75
  Lines                   19498    21888    +2390
======================================================
+ Hits                    11042    12927    +1885
- Misses                   8456     8961     +505

Flag
Coverage Δ

API_plugin_unit_test
62.51% <ø> (+0.09%)
:arrow_up:

AWSPluginsCore
71.44% <ø> (ø)

Amplify
46.83% <ø> (+0.01%)
:arrow_up:

Analytics_plugin_unit_test
71.09% <ø> (ø)

Auth_plugin_unit_test
78.74% <ø> (?)

DataStore_plugin_unit_test
75.46% <ø> (ø)

Geo_plugin_unit_test
52.12% <ø> (ø)

Predictions_plugin_unit_test
26.81% <ø> (ø)

Storage_plugin_unit_test
58.04% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

...tionSync/AWSIncomingEventReconciliationQueue.swift
57.50% <0.00%> (-1.67%)
:arrow_down:

...in/Request/AuthConfirmSignInRequest+Validate.swift
100.00% <0.00%> (ø)

...lugin/Support/Utils/AWSCredentials+Extension.swift
100.00% <0.00%> (ø)

...AuthPlugin/Operations/AWSAuthSignUpOperation.swift
90.32% <0.00%> (ø)

...nitoAuthPlugin/Models/SignInResult+Extension.swift
100.00% <0.00%> (ø)

...in/Request/AuthConfirmSignUpRequest+Validate.swift
60.00% <0.00%> (ø)

...uthPlugin/Operations/AWSAuthSignOutOperation.swift
88.88% <0.00%> (ø)

...Plugin/Operations/AWSAuthDeleteUserOperation.swift
88.88% <0.00%> (ø)

...gin/Models/Options/AWSAuthWebUISignInOptions.swift
100.00% <0.00%> (ø)

...port/Utils/UserCodeDeliveryDetails+Extension.swift
71.42% <0.00%> (ø)

... and 69 more

:mega: Codecov can now indicate which changes are the most critical in Pull Requests. Learn more


i think would be great if create a map component

something like this

this example i saw here https://blazor.radzen.com/googlemap?theme=material3

Screenshot:


community: Add support for non-file-based Document Loaders in PebbloSafeLoader

Description:
PebbloSafeLoader: Add support for non-file-based Document Loaders
This pull request enhances PebbloSafeLoader by introducing support for several non-file-based Document Loaders. With this update, PebbloSafeLoader now seamlessly integrates with the following loaders:

GoogleDriveLoader
SlackDirectoryLoader
Unstructured EmailLoader

Issue: NA
Dependencies: -
Twitter handle: -

duplicate of https://github.com/langchain-ai/langchain/pull/19574


fix(sdk): Temporarily disable sending of "typ" header

Codecov Report
Patch coverage: 100.00% and project coverage change: -0.01 :warning:

Comparison is base (365ccaa) 89.66% compared to head (1be3dfe) 89.66%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #475      +/-   ##
==========================================
- Coverage   89.66%   89.66%   -0.01%
==========================================
  Files          88       88
  Lines        3270     3269       -1
==========================================
- Hits         2932     2931       -1
  Misses        221      221
  Partials      117      117

Impacted Files
Coverage Δ

pkg/openid4ci/openid4ci.go
88.99% <100.00%> (-0.03%)
:arrow_down:

... and 1 file with indirect coverage changes

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Stripe TypeScript errors: "Property onLoaded does not exist on type"

🐛 The bug
Using Stripe as described in the docs gives me the error: "Property onLoaded does not exist on type":

Nevermind, I just realized I was not on latest version because 0.x versions dont upgrade automatically even when they are prefixed with "^" in package.json


Brew package development / deployment process

Goals:

GHA trigger this repository to update the version number
checkout repo, change the formula with new release version number (for url)
run test of built package
merge changes to main. (tag not needed probably?)

RSRC
GHA from source repo, bump formula
triggering GHA action from another repo with API
reusable workflow with on: workflow_call

To make this run smoothly you need to learn a bit about developing homebrew formula and there are a few gotchas in the build/compile/binaries/configurations world of it.
Maybe just build your packages in Julia and deploy those as scripts?  Its another path toward solving the same problem.
This package's purpose is cleanly deploying packaged python applications to my home macos environment.

Am I going to stay on macOS for the rest of my time?  perhaps the nixOS on linux hardware will be the future
learning python and getting out of bash scripting was the original idea, homebrew deployment is bogging down in concepts I'm not really interested in.

update 2024-07-24: I figured out how to deploy installment using poetry. No more need for resource  blocks and jinja templates. See below.

Those docs are great but THIS WORKS - poetry install inside of brew def install:
class Desertislandutils < Formula
  include Language::Python::Virtualenv

  desc "Be here, thy collection of personal convenience utilities"
  homepage "https://github.com/mahiki/homebrew-tap"
  url "https://github.com/mahiki/desertislandutils/releases/download/v0.3.10/desertislandutils-0.3.10.tar.gz"
  sha256 "9c8304fdb02a1fd9d3ffd460cdaf25f1b22a70f2d18ebde700080d328c306216"
  license "MIT"

  depends_on<EMAIL_ADDRESS>  depends_on "poetry"

  def install
    venv = virtualenv_create(libexec, "python3")
    ENV["VIRTUAL_ENV"] = libexec
    ENV.prepend_path "PATH", "#{libexec}/bin"
    puts "install stage libexec path: #{libexec}"
    puts "env VIRTUAL_ENV: #{ENV["VIRTUAL_ENV"]}"
    puts "buildpath: #{buildpath}"
    cd buildpath do
        system "poetry", "install", "--no-root"
    end
    venv.pip_install_and_link buildpath
  end

  test do
    system "#{bin}/wn", "--help"
    system "#{bin}/too", "--help"
  end
end

Maybe change back to pypi releases via poetry publish. Its easy, and includes the SHA256 unlike github.


Cuda 12.5 Tests

cuda 12.5 is out

Also please remove this line: https://github.com/cupy/cupy/pull/8337/files#diff-c5351c21fb860332e41aa81e1599475f79f63e2bc47e0f32922c721c2cbbc749R337

what lines?

Hi, sorry for keeping you waiting! I've kicked new tests so let's see how it goes :eyes:
https://ci.preferred.jp/cupy.linux.cuda125/164614/
https://ci.preferred.jp/cupy.linux.cuda125.multi/164615/
https://ci.preferred.jp/cupy.win.cuda125/164613/

All tests green (and without timeout), merging. Thanks again @johnnynunez!

@kmaehashi Failed to backport automatically.

Not cleanly cherry-picked

Will backport after #8422


PHP proxy fails when using PHP 7

I'm using route.arcgis.com and It looks like just a minor change to the constructor here https://github.com/Esri/resource-proxy/blob/master/PHP/proxy.php#L1095 will fix my issue.
CURRENT:
    public function proxyPost($url, $params) { . . .

PROPOSED:
    public function proxyPost($url = null, $params = null) { . . .

@bsvensson I can do a PR?

@andygup - Yes, please submit a PR.

@bsvensson PR https://github.com/Esri/resource-proxy/pull/476.


Default Value Initialization (not spec compliant)

The issue with this one should already be fixed but we need tests to proof it.

#3804


Improve truck-polymesh

truck-polymesh is still WIP. Now I plan the following changes.

The member variables of PolygonMesh should be private.
MeshHandler  should be removed and all mesh handling algorithms should be implemented to PolygonMesh as traits.

Moreover, we should prepare the tests for mesh algorithms.

This issue is resolved at the branch 36d3b69efde5f908bcc839a7bce494b73a017eff.
It will be released as version 0.2.0 along with other crates in February!

This issue is resolved at the branch 36d3b69efde5f908bcc839a7bce494b73a017eff.
It will be released as version 0.2.0 along with other crates in February!


increase test coverage

Codecov Report

Merging #801 into master will increase coverage by 0.88%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master     #801      +/-   ##
==========================================
+ Coverage    78.3%   79.19%   +0.88%
==========================================
  Files          51       51
  Lines        4748     4753       +5
==========================================
+ Hits         3718     3764      +46
+ Misses       1030      989      -41

Impacted Files
Coverage Δ

tests/test_menu.py
100% <100%> (ø)
:arrow_up:

vent/api/plugins.py
90.17% <0%> (-1.48%)
:arrow_down:

vent/menus/main.py
74% <0%> (+1.59%)
:arrow_up:

vent/helpers/meta.py
75.8% <0%> (+2.13%)
:arrow_up:

vent/api/actions.py
72.48% <0%> (+2.55%)
:arrow_up:

vent/menus/services.py
100% <0%> (+4.54%)
:arrow_up:

vent/menus/editor.py
86.2% <0%> (+29.31%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f327503...d13f8c4. Read the comment docs.


Add Radix-N support

Our kernel generator can only handle FFT vector sizes that contains 2, 3, 5 as prime factors. This enhancement is to add support for generating kernels that can handle arbitrary vectors sizes that do not easily factor into our supported prime factors.

clFFT 2.12.2 also supports prime factors 7, 11, 13.


❓ Question: the Contribute link does not work

🙋♂ Question
the Contribute hyperlink on the page below does not work, just thought to mention :)
https://hub.docker.com/r/stonith404/pingvin-share

Thanks :) Fixed.


Update requests lib

Raised by https://github.com/EricssonResearch/scott-eu/network/alert/warehousecontroller/requirements.txt/requests/open

BTW, if anyone think they should not be notified with other @EricssonResearch/scotties, just tell me and I will remove you from that team on GH to avoid spamming you.


cgroups: return None if number of cores can not be obtained

Fixes: https://github.com/sclorg/postgresql-container/issues/482

[test-all]

@pkubat could you please look at this?
Another approach could be to return at least something, if either _read_cpu_quota() or _read_cpuset_size() is successful. Wdyt?

Since the return part already expects None in the list items, we should instead check if there are only None values in the list.

Oh, you are right.

Fixed.

[test-all]

LGTM if tests pass

This change will not appear in the test results, because they affect the s2i-core-container -> other containers would need be to be rebuilt on top of it first, in order to propagate the change.


#120 correct syntax

closes #120

@yegor256 please merge

@rultor merge

@rultor merge

@yegor256 OK, I'll try to merge now. You can check the progress of the merge here

@rultor merge

@yegor256 Done! FYI, the full log is here (took me 12min)


Right side separator

I have lightline, and i have the separators working for the most part with my nerd font. As you can see the left side has the separators working but on the right side the last two separators are not right.
My lightline settings,
  let g:lightline.separator = { 'left': "\ue0b8", 'right': "\ue0be" } let g:lightline.subseparator = { 'left': "\ue0b9", 'right': "\ue0b9" } let g:lightline.tabline_separator = { 'left': "\ue0bc", 'right': "\ue0ba" }  let g:lightline.tabline_subseparator = { 'left': "\ue0bb", 'right': "\ue0bb" }

Expected to look like this:
correct
The source code for that is from here

How does :echo "\ue0be" look like?

it just gives me the triangle, that wider tan bar on top is the tabline.

How about :echo "\ue0beM"?

It doesn't like that one as much

This is likely an issue of font and terminal rendering and there's nothing I can do in the plugin. Probably set ambiwidth=double or another terminal option for ambiguous width characters might help you.

I was working on my icons for powerlevel10k and someone mentioned leaving a space for the codes. Turn out that was the solution here:
"\ue0be" vs "\ue0be "


The ChatGPT 3.5 Turbo model should be marked as a completions model

First off, very nice work!
Second, GPT 3.5 Turbo is a completions model so I made this fix to make the app work for me.
gpt35Turbo("gpt-3.5-turbo", 4096, isChatCompletion = true)

yes,  it's my mistake, thank you @TimRivoli. I'll fix it tomorrow.

Thank you @TimRivoli, this work form me.


Micro-Event missing standard queries count

This is needed when a sum total of all the counts is needed for your application:
Needs to be added in here in the isQueriesByType block
@Subscribe
public void requestComplete(RemoveQuery<T> data) {
    registry.meter(prefix + ".requests-completed")
            .mark();
    registry.counter(prefix + ".requests-completed-count")
            .inc();
    if (this.configuration.isQueriesByType()) {
        RequestData<T> rd = data.getData();
        registry.meter(queryEndName(rd))
                .mark();

        queries.complete(rd.getCorrelationId());

        registry.counter(prefix + ".requests-active-" + rd.getType() + "-count")
                .dec();
    }

}

Looking at it, it does seem to log standard queries also.


Controller Proof of Concept

Not really meant to be merged, however, I really need some feedback on what is there so far.
I really would like to continue to work on this, but I don't really want to do so without any feedback on what's there so far.
@maugustosilva are you or some others able to do that?

Hello. I am also interested in this PR to be evaluated. IMHO, it  should be included, as using a "Go operator" (rather than a Helm operator) provides some flexibility that Helm based operators do not provide (logging, API configuration, dependency handling, etc.).

I agree that long-term it should be a go-based operator, but doing the initial prototype in helm is useful to make sure all of the pieces fit together the way we want them to.

@sarroutbi @mpeters what am I missing? This is a go controller. Only its installation is done with helm so that it fits with the rest of the installation.

@mheese my apologies for the time it is taken for me to evaluate it. It should be done in the next weeks.

@mheese my apologies for the time it is taken for me to evaluate it. It should be done in the next weeks.

@maugustosilva I have to work on other things at the moment (for the next ~3 weeks I guess), so this is luckily not blocking me at the moment. That said, as I mentioned, I'd really like for someone to look over this (particularly with the direction that this is going) before I start adding additional things like mapping the policy model.

@sarroutbi @mpeters what am I missing? This is a go controller. Only its installation is done with helm so that it fits with the rest of the installation.

@mheese : sorry if I did not express myself correctly. I meant I am very interested in this PR to be merged, as I believe it is the way to go.

Change LGTM. I added minor comments

@sarroutbi thanks for the review! :+1: ... just fyi, that I'm also waiting for @maugustosilva and @galmasi to review this. This is supposed to be a proof of concept PR only. And it's at a state where we need to discuss UX of what's there right now, and also the direction on where we want to go next.
I will definitely incorporate your changes. But in general I will also restructure the code, go over code comments for documentation particularly, most likely change the data structures quite a bit (at the moment it essentially duplicates what's in the registrar and verifier which it shouldn't), and also write unit tests and integration tests against kubernetes before we can merge this.

@mheese As promised, with a delay of four months, I finally had time to sit and evaluate the PR.

In general, I consider it essentially on the right direction, and, from your demo, we have evidence it is (already) functional.
The agent-crd seems to cover most cases we have discussed, and maps the relevant parameters of the configuration file (and database schema).
It is not clear to me if this controller would properly support agents running outside of the Kubernetes/Openshift cluster (maybe the node attribute could be arbitrary), but even if it does not, I cannot see any fundamental impediment to it in the future with this code.
It is also not clear how will the controller spread multiple agents across multiple verifiers , but this is an open question that I would like to address on the tenant code anyway (probably something like a consistent hashing using the UUID of the agent).
I am not sure if the proposal in docs/push-model-proxy.md is really doable, but between this new effort on a push model, the requirement of deploying agents outside the cluster, and the use of some sort of load balancer/routes for both multiple verifiers and agents,  I believe we are covering a large majority of cases already.
The "registrar synchronizer" seems to reimplement portions of tenant in go, which is, I believe, a requirement, anyway. I wonder how much of it could be unfolded into a new standalone CLI, eventually.
This, being an initial implementation, of course does not cover the thorny issue of the other object which will require status tracking: policies. I do not believe we should (or even could) fully solve this problem before starting to implement the controller (as it will be a truly interactive process).
That being said, I propose we use your initial implementation as the starting point, and refine/expand on it. @sarroutbi is by far the more knowledgeable to comment on the Kubernetes/Openshift-specific aspects (such as the modeling via CRDs), but from my standpoint (Keylime) it looks like a very solid foundation.

PS: I agree with changes requested by @sarroutbi btw.

Hello. Apart from the conflicts, it seems no operator-sdk has been used to implement this Proof of Concept. I am writing this essentially because I see no "bundle" folder has been generated in this PR.
@mheese :
1 - Are you planning to merge this PR by solving the pending conflicts?
2 - Is it expected that this can be deployed through operator-sdk?

@maugustosilva and @sarroutbi  thanks so much for the review! 🙏
I've been on a longer break in December, so let me look at this again in the upcoming days, and ...

obviously fix all the merge conflicts
reply to all your comments/questions above @maugustosilva
make a list of short term TODOs based on the previous point
propose next steps for this
@sarroutbi re "Operator SDK": no, this PR was using "kubebuilder" not the operator SDK for creation of the boilerplate. AFAIK, both rely on the same underlying golang library (controller runtime) for the actual Kubernetes logic implementation. However, they both diverge in bundling/building the application. I assume your interest for this obviously is around all the OpenShift integration benefits that come with it? like OpenShift marketplace etc.pp.

Hello @mheese : thanks for your quick response. I understand now. Sorry, I was not aware of this option to build controllers. As you correctly indicated, using OLM/Operator-sdk based deployment is helpful to include the operator in OpenShift catalog, but we can postpone this (or even decide if this can be downstream only content).

@mheese thank you. I really believe this is a very good starting point for the building of an actual operator, and we should incorporate it in to the main code as soon as possible. I am available to test it.

@maugustosilva @galmasi this is ready. As talked about to George on slack, I can't merge this as squash&merge isn't activated for this repo (which it should imho). If this is a problem, I'll create a new PR for it. I won't force-push a rebase because that's just an awful thing to do.

I can't merge this as squash&merge isn't activated for this repo

@mheese This should be fixed now, can you try again?

@galmasi @maugustosilva @mpeters I had one more merge conflict with the Makefile which should be fixed now. I also changed in the values.yaml that the controller is not being deployed by default. Also George mentioned that the deployment doesn't work at the moment, and looking over it, it must be because of a lot of renames of variables in the values yaml file in the meantime which don't match anymore (ca vs cvca for example).
Also, there are the following helm charts now:

keylime-crds - must be managed separately from any other installation, bad consequences can happen if one doesn't do it this way (there are pros/cons managing CRDs within the same chart, one usually doesn't want them in the same chart)
keylime-controller - this one is bogus as far as I recall (mea culpa, it's been a few months since I looked at this last), and should not be used. It can probably be removed, but I have a vague memory that I kept it for a reason.
keylime - this is still the same main keylime chart, and also contains a subchart now for the controller

I also don't have a test setup for this anymore at the moment. So I actually cannot test the installation anymore at the moment. I'm going to merge this anyway now, and we'll have to resolve potential problems that I caused with this. I'm already going to apologize in advance 🙏


Multiple errors in running the realtime pipeline with slurm

Two primary symptoms:

The initial copying was not successful. The time to copy the files is only 0.1 s, which can not be right. I ran this offline for the same time and it downloaded okay.
2024-10-13 15:39:00 pipeline_quick 894 INFO     ====Processing 20241013_153600==== 2024-10-13 15:39:00 pipeline_quick 909 DEBUG    ====Copying file over to working directory==== 2024-10-13 15:39:00 pipeline_quick 913 DEBUG    Time taken to copy files is 0.1 s 2024-10-13 15:39:00 pipeline_quick 918 DEBUG    Starting to calibrate all 10 bands 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_32MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_64MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_50MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_69MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_59MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_55MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_73MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_36MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_82MHz.ms does not exist 2024-10-13 15:39:00 run_calib 439 ERROR    Table /fast/solarpipe/realtime_pipeline/slow_working/20241013_153600_46MHz.ms does not exist

Many bands had successful completions, but it claims that "None of the fits files exists"
2024-10-13 15:52:02 pipeline_quick 999 INFO     lwacalim06: Successfuly selfcalibrated 10 out of 12 bands 2024-10-13 15:52:48 run_imager 562 ERROR    No fits images produced. 2024-10-13 15:52:48 run_imager 562 ERROR    No fits images produced. 2024-10-13 15:52:48 run_imager 562 ERROR    No fits images produced. 2024-10-13 15:52:50 run_imager 562 ERROR    No fits images produced. 2024-10-13 15:52:51 run_imager 562 ERROR    No fits images produced. 2024-10-13 15:52:52 run_imager 562 ERROR    No fits images produced. 2024-10-13 15:52:54 run_imager 562 ERROR    No fits images produced. 2024-10-13 15:53:08 image_times 1218 DEBUG    Imaging for all 10 bands is done in 65.4 s 2024-10-13 15:53:08 pipeline_quick 1152 ERROR    None of the input fitsfiles exists! 2024-10-13 15:53:08 pipeline_quick 1155 ERROR    ====Processing for time 2024-10-13T15:45:00.000 failed in 5.1 minutes 2024-10-13 15:53:08 run_pipeline 1503 INFO     lwacalim06: Processing 2024-10-13T15:45:00.000 was unsuccessful!!!

 It utilizes multiple threads for data downloading. Each instance uses 6 by default. When 2 slow + 2 fast are running on the same node, on which both multi-thread downloading and imaging may be running in different tasks, we might have depleted the number of threads allocated to this node.
For symptom #2, the FITS files as the product of run_imager were deleted under /fast/solarpipe/realtime_pipeline/imagedir_allch/ by another parallel job at the same node, as they share the same processing directory.

A simple (temporal) fix to issue 1 may be changing the maxthread parameter in download_msfiles() from 6 to 3 (or just 1 as a test). Downloading may be slowed down, but at least they might succeed. https://github.com/ovro-eovsa/ovro-lwa-solar-ops/blob/main/solar_realtime_pipeline.py#L180
For issue 2, let us turn “delete_working_fits” to False and see if the issue goes away. If this is the issue, we can change how it works when delete_working_fits is set to True (default).


brings back #486

brings back the promote, and playnow command from #486
After creating your pull request, tick these boxes if they are applicable to you.

[x] I have tested my changes against the review branch (the latest developmental version), and this pull request is targeting that branch as a base
[x] I have tested my changes on Python 3.5/3.6

Description
Allows promotion of a song to the top of the player queue, similar to playnext from #1776
Related issues (if applicable)

Target wrong branch by accident


[merge 16 April] Revert "Only initialize Homebrew-Cask when necessary"

@adidalal @jawshooah @ilovezfs Any objections with reverting this? I’d rather have the old behaviour (a minor annoyance) than buggy behaviour.
Closes https://github.com/caskroom/homebrew-cask/issues/18606. If there are no valid objections or a fix in a week, lets merge this.

Yes, I would absolutely object. Better to just add
  def self.needs_init?
    true
  end

to that command if it needs it. That was the point of making this a instance method that each command can override as needed.

@ilovezfs Please submit the fix, then.

@vitorgalvao Done: https://github.com/caskroom/homebrew-cask/pull/20449

Thank you.

You're welcome.


retroarch , extras bucket, 1.9.1 hash error

'extras' bucket:
retroarch (1.9.1)
fails to install hash check error

i tested again and no error. possibly a network issue . the file did not download correctly and the broken file from the cache was used instead of re-downloading


Cannot test env/options

setup.js import env/options making it part of System internal module registry.
Then setup.js enable module-test plugin which do System.trace = true.
So we end up trying to find load for env/options without success because it was imported before System.trace = true
Solution A : Enabling System.trace = true by default
-- ugly solution
++ would fix this issue in 1min
Solution B : Remove the dependency to env/options
-- We need it
-- setup.js has 90% chance to have an other dependency anyway
++ Quick not ugly fix
Solution C : Being able to do System.trace = true before loading env/options
-- Aborted
Solution D : deleting all System cached modules when doing System.trace = true
-- Not the easiest one
-- We delete cached modules, not good for perf
++ the best solution

Freezing this issue, unit test is no longer one of the main purpose.


livereload error when running concurrent watch tasks

I'm using watch with https://github.com/sindresorhus/grunt-concurrent in a setup that looks sort of like this:
  concurrent:
    development: [
      "watch:coffee"
      "watch:jade"
    ]
  watch:
    options:
      livereload: true
    jade:
      [config for jade...]
    coffee:
      [config for coffee..]

When I run concurrent:development I get the error: "Fatal error: Port 35729 is already in use by another process." It will happen on whatever the second watch task I put in my concurrent task. I'm guessing the first watch task ends up spinning up the livereload server, and then the second one attempts to as well on the same port causing it to fail. Is there a better way to achieve what I'm attempting?

I came across this issue when I was trying to solve a similar problem; the solution I opted for was to have a separate watch task to watch the built files and only trigger livereload on that, it didn't occur to me to do that until I read through all the docs so leaving this here hoping it's useful to someone else too.
  grunt.initConfig({
      'scripts-app': {
        files: ['source/scripts/**/*.js'],
        tasks: ['lint', 'scripts'],
        options: {
          spawn: false,
        },
      },
      assets: {
        files: ['source/assets/**/*'],
        tasks: ['assets'],
        options: {
          spawn: false,
        },
      },
      html: {
        files: ['source/html/**/*'],
        tasks: ['template'],
        options: {
          spawn: false,
        },
      },
      livereload: {
        options: { livereload: true },
        files: ['public/**/*'],
      },
    },
    concurrent: {
      watch: {
        tasks: ['watch:scripts', 'watch:assets', 'watch:html', 'watch:livereload'],
        options: {
          logConcurrentOutput: true,
        },
      },
    },
  });


GitHub workflow to run unit tests

Attempt to run unit tests via yarn test via GitHub workflow

This doesn't look like it kicked off a GH workflow 😢 maybe a repo admin needs to add this as an action?


README Details

README Details
User Story
AS A developer
I WANT a README generator
SO THAT I can quickly create a professional README for a new project
Acceptance Criteria
GIVEN a command-line application that accepts user input
WHEN I enter a description, installation instructions, usage information, contribution guidelines, and test instructions
THEN this information is added to the sections of the README entitled Description, Installation, Usage, Contributing, and Tests

This has been completed


fixing issue related to date #1154

This commit fix the issues related to https://github.com/bobanetwork/boba/issues/1154

Looks duplicated with https://github.com/bobanetwork/boba/pull/1160 so closing this one!


ci: rename public docker images

:tada: This PR is included in version 0.1.0-alpha.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 0.1.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Need help getting responsive settings working

Does the responsive portion of this work? I've tried setting them inline on the slider element and also using vbind. Just seems as if it just overwrites the existing settings or just doesn't work at all.
Inline
:responsive="{1199:{items:1},768:{items:2},992:{items:2},1200:{items:3},2300:{items:4}}"
Vbind
responsive: {           640: {             edgePadding: 20,             gutter: 20,             items: 1           },           700: {             gutter: 30           },           900: {             items: 1           },           1199: {             edgePadding: 0           }         }

Seems as if the responsiveness is a mobile-first type of thing which I didn't realize coming from Owl Carousel. This is my bad and everything seems to work.


Authorities Tabs in Modal

Authorities are listed as tabs. When user clicks tab, they see the results that are returned with that authority.

Test the changes made for this ticket with: #2277.


Aggregate router exceptions from all replicas and derive it from majority

GetChunkOperation would save all the router exceptions from each replica and aggregate them at the last to determine which error code to return to client.

Duplicate to #1196


Notation for expression and variable evaluation in commands

Proposal for how to handle expression evaluation, and variables (getting/setting)...
Various options considered at our last meeting (I don't have my notes with me right now), a few that I recall are:
/set x 3.5
/position/x bob /expr "sin($x * 4 + 1.5)"

or just something like
/position/x bob {sin($x * 4 + 1.5)}

or bash-style
/position/x bob $((sin($x * 4 + 1.5)))

and for variables (get), we could just use $ notation (no need for /expr)?
/position/x bob $x

We had a discussion about this on 2023-11-04, and decided to use {expr} notation (we can always change it if needed). This stands out (is not found in a simple GDScript expression) and is minimal in terms of keystrokes.

In https://github.com/loopier/animatron/commit/ec5bb0fbd524ef6081bfe474b0c48bf62e1c2c96 I've implemented a variables manager. It contains a "system" variables dictionary and a user variables dictionary. I join them both to pass them to expr.parse() and expr.execute().
It works fine, but when a variable's name partially matches with any other, it is also replaced by it's value:
/set a 40
/def /bla animation:s
    /load $animation

/bla mama # results in /load 40nimation

I can fix this one. It's probably just a question of searching with a Regex that uses word boundaries.

We should also fix expression concatenation with strings:
/post {time} # -> 325.224 - OK
/post x-{time} # -> x-{time} - NOT RIGHT should output something like x-324.224

[...] when a variable's name partially matches with any other, it is also replaced by it's value:
/set a 40
/def /bla animation:s
    /load $animation

/bla mama # results in /load 40nimation

I don't get this result on the current experimental branch... For me it works properly (it loads the animation).

ah, right, yes. It needs to specify the type.
It does seem to work. You fixed it! :)

It does seem to work. You fixed it! :)

I didn't even try to fix it yet...but it seems to work... (-;

Another issue @loopier mentioned to me was that something like this wasn't working (on the experimental branch):
/post {sin(time)}
In fact, any expressions that did something with time (besides just returning it) failed. That problem (and another issue about setting vars giving an error message) was fixed in 41ae50d.

In the original proposal, I suggested that we use the $ prefix notation to refer to our own variables. So even in an expression, you'd have to do that, like /post {time + $a}, where time is a built-in variable we provide, and a is an Animatron user-defined variable (e.g. /set a:f 3.14). I don't mind not requiring the $ in expressions, although this may cause some confusion, for example if people define variables with names like exp or cos. Also, users might wonder: "why do I have to use the $ in some places, but not in others?"

Yes, let's do that. But how do we implemente it? Should the variables dictionary keys be $*?

Should the variables dictionary keys be $*?

No, that part shouldn't change. Just I'll add something to find the relevant $var tokens in expressions (converting them to var before evaluating). The dictionary could just send the required vars to the evaluate function, or we could send the whole dictionary (as now).

In the original proposal, I suggested that we use the $ prefix notation to refer to our own variables. So even in an expression, you'd have to do that, like /post {time + $a}, where time is a built-in variable we provide, and a is an Animatron user-defined variable (e.g. /set a:f 3.14). I don't mind not requiring the $ in expressions, although this may cause some confusion, for example if people define variables with names like exp or cos. Also, users might wonder: "why do I have to use the $ in some places, but not in others?"

You mentioned this in  https://github.com/loopier/animatron/issues/23#issue-1994704402

I've fixed a bunch more issues in 9d5c74a
This improves the $var stuff (it's not very efficient still, but better than it was...needs more work). The reason lots of expressions weren't working is asArray(true) was set in several OSC command definitions where they should be asArray(false). That bool argument should be true if the command should have expressions (and vars) deferred, which is the case for /for loops and /def and /routine, but not for most built-in "primitive" commands, such as all the property setters. I saw several other command definitions where it's still wrong, but I haven't changed the ones I wasn't testing, for now.
With these changes, the following cases now work:
/set a:i 40
/post stuff$a-here
/for i 10 /post {$a+$i}

/load default
/for i 10 /create ln$i default
/routine r 50 0.1 /angle ln0 { sin(time+$a) * 360 }

Routine with inf repeats still doesn't work (I didn't touch it), but I do see why: it's trying to convert the string "inf" into a number (so it gets zero)...

Great news!

Routine with inf repeats still doesn't work (I didn't touch it), but I do see why: it's trying to convert the string "inf" into a number (so it gets zero)...

this is strange, as it did work before, maybe I broke it while mangling the $var stuff. I'll fix it

Another commit (1d7b61d) starts to add unit tests for variable resolution, and also fixes var/expressions for /set.


fcitx5: Addon Config Dir doesn't seem to use fcitx5-with-addons

Describe the bug
fcitx5's Addon Config Dir seems to default to /nix/store/<fcitx5>/share/fcitx/addon instead of /nix/store/<fcitx5-with-addons>/share/fcitx5/addon/.
Steps To Reproduce
Steps to reproduce the behavior:
Install fcitx5 by setting i18n.inputMethod.enabled = "fcitx5"
This can be confirmed by the outputs of fcitx5-diagnose:
$ fcitx-diagnose
<omitted>
# Configuration:
## Fcitx Addons:
1.  Addon Config Dir:

    Found fcitx5 addon config directory: `/nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon`.
<omitted>

Expected behavior
It should instead default to /nix/store/<fcitx5-with-addons>/share/fcitx5/addon/, as it would break optional plugins like fcitx5-mozc.
Additional context
Content of fcitx5:
$ ls -lA /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon
total 72
-r--r--r-- 2 root root 586 Jan  1  1970 classicui.conf
-r--r--r-- 2 root root 399 Jan  1  1970 clipboard.conf
-r--r--r-- 2 root root 271 Jan  1  1970 dbus.conf
-r--r--r-- 2 root root 356 Jan  1  1970 dbusfrontend.conf
-r--r--r-- 2 root root 320 Jan  1  1970 fcitx4frontend.conf
-r--r--r-- 2 root root 350 Jan  1  1970 ibusfrontend.conf
-r--r--r-- 2 root root 666 Jan  1  1970 imselector.conf
-r--r--r-- 2 root root 358 Jan  1  1970 keyboard.conf
-r--r--r-- 2 root root 480 Jan  1  1970 kimpanel.conf
-r--r--r-- 2 root root 779 Jan  1  1970 notificationitem.conf
-r--r--r-- 2 root root 646 Jan  1  1970 notifications.conf
-r--r--r-- 2 root root 369 Jan  1  1970 quickphrase.conf
-r--r--r-- 2 root root 278 Jan  1  1970 spell.conf
-r--r--r-- 2 root root 817 Jan  1  1970 unicode.conf
-r--r--r-- 2 root root 275 Jan  1  1970 wayland.conf
-r--r--r-- 2 root root 464 Jan  1  1970 waylandim.conf
-r--r--r-- 2 root root 210 Jan  1  1970 xcb.conf
-r--r--r-- 2 root root 595 Jan  1  1970 xim.conf

Contents of fcitx5-with-addons with fcitx5-mozc installed:
$ ls -lA /nix/store/24p7w05im9zfa29c4vl4rsmm38xb3pxs-fcitx5-with-addons-5.0.14/share/fcitx5/addon/
total 0
lrwxrwxrwx 2 root root 91 Jan  1  1970 classicui.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/classicui.conf
lrwxrwxrwx 2 root root 91 Jan  1  1970 clipboard.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/clipboard.conf
lrwxrwxrwx 2 root root 86 Jan  1  1970 dbus.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/dbus.conf
lrwxrwxrwx 2 root root 94 Jan  1  1970 dbusfrontend.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/dbusfrontend.conf
lrwxrwxrwx 2 root root 96 Jan  1  1970 fcitx4frontend.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/fcitx4frontend.conf
lrwxrwxrwx 2 root root 94 Jan  1  1970 ibusfrontend.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/ibusfrontend.conf
lrwxrwxrwx 2 root root 91 Jan  1  1970 imeapi.conf -> /nix/store/hzkw9j6h3zdgbnq0nxc1xwc85q7b8nkm-fcitx5-lua-5.0.6/share/fcitx5/addon/imeapi.conf
lrwxrwxrwx 2 root root 92 Jan  1  1970 imselector.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/imselector.conf
lrwxrwxrwx 2 root root 90 Jan  1  1970 keyboard.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/keyboard.conf
lrwxrwxrwx 2 root root 90 Jan  1  1970 kimpanel.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/kimpanel.conf
lrwxrwxrwx 2 root root 99 Jan  1  1970 luaaddonloader.conf -> /nix/store/hzkw9j6h3zdgbnq0nxc1xwc85q7b8nkm-fcitx5-lua-5.0.6/share/fcitx5/addon/luaaddonloader.conf
lrwxrwxrwx 2 root root 98 Jan  1  1970 mozc.conf -> /nix/store/vwiaxsza9s8xmw1r1vdyjcmdmwyll07q-fcitx5-mozc-2.26.4220.102/share/fcitx5/addon/mozc.conf
lrwxrwxrwx 2 root root 98 Jan  1  1970 notificationitem.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/notificationitem.conf
lrwxrwxrwx 2 root root 95 Jan  1  1970 notifications.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/notifications.conf
lrwxrwxrwx 2 root root 93 Jan  1  1970 quickphrase.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/quickphrase.conf
lrwxrwxrwx 2 root root 87 Jan  1  1970 spell.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/spell.conf
lrwxrwxrwx 2 root root 89 Jan  1  1970 unicode.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/unicode.conf
lrwxrwxrwx 2 root root 89 Jan  1  1970 wayland.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/wayland.conf
lrwxrwxrwx 2 root root 91 Jan  1  1970 waylandim.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/waylandim.conf
lrwxrwxrwx 2 root root 85 Jan  1  1970 xcb.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/xcb.conf
lrwxrwxrwx 2 root root 85 Jan  1  1970 xim.conf -> /nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/share/fcitx5/addon/xim.conf

Notify maintainers

@poscat0x04, I guess?
Metadata
[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 5.16.7, NixOS, 22.05 (Quokka)`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.6.0`
 - channels(root): `"nixos"`
 - channels(plumeus): `""`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`

There is a wrapper under fcitx5-with-addons which set environment variable FCITX_ADDON_DIRS to the external addons dir.
And the fcitx5-diagnose is a simple bash script which is not set such variable and doesn't check that environment variable so this dir is not printed by it.

Hmm, okay. I just assumed the fcitx5-diagnose was doing it's job.
Using the default service by systemctl <command> --user works, yes. I wasn't aware of this and manually started the process with fcitx-remote, and in that case, mozc doesn't seem to be loaded.
For starting it manually, it seems like starting Fcitx with fcitx5 --enable mozc seems to make mozc available.
Regarding realpath:
$ realpath $(which fcitx5)
/nix/store/24p7w05im9zfa29c4vl4rsmm38xb3pxs-fcitx5-with-addons-5.0.14/bin/fcitx5

$ ls /nix/store/24p7w05im9zfa29c4vl4rsmm38xb3pxs-fcitx5-with-addons-5.0.14/share/fcitx5/addon/mozc.conf
/nix/store/24p7w05im9zfa29c4vl4rsmm38xb3pxs-fcitx5-with-addons-5.0.14/share/fcitx5/addon/mozc.conf

I find this annoying because if I'm understanding this right, if I ever accidentally start Fcitx manually, Mozc will be considered an invalid input method and thus would be deleted from my configs, and I would need to reconfigure it again.
I update my fcitx5 and mozc to the master branch and Mozc is loaded by automatically.

modify some files and then nix flake update github:NixOS/nixpkgs/master
nixos rebuild --flake '...'
fcitx5 -r
fcitx5-config-qt, mozc is found.

 > I wasn't aware of this and manually started the process with fcitx-remote, and in that case, mozc doesn't seem to be loaded.
Sorry, I don't know how to start fcitx5 by fcitx5-remote.
For the realpath, you can try cat $(which fcitx5) | grep ADDONS and then here is the dir.

Now my question is, is it intended behavior for Mozc (and presumably other addons) to not be loaded when running it manually?
There is no problem for me when mannually starting a service by fcitx5 -d (daemon), fcitx5 (front ground), or fcitx5 -r (replace the current service).

How do you start your fcitx5?
If you use systemd user service, the reason probably is that the old service is not restart or replace by the new one (the path of fcitx5 must be updated which is different from other distrubtions). In this case, you can try systemctl daemon-reload && systemctl restart --user fcitx5-daemon (this will break some application to use input method due to the old process is killed.) or just reboot your system.
If you are using gnome or kde, autostart may also start a fcitx5 (/run/current-system/sw/etc/xdg/autostart/org.fcitx.Fcitx5.desktop). In this cases, you should kill that process and restart fcitx5 to ensure the new wrapper is used.
In addition, you have to disable systemd service to avoid confliction.

How do you start your fcitx5?

I've been using fcitx5-remote because... well, I didn't know what to do. Should've used fcitx in hindsight

I rebooted my system to make sure that's not the issue, and I think I finally have a better understanding of what's going on.
$ realpath $(which fcitx5)
/nix/store/24p7w05im9zfa29c4vl4rsmm38xb3pxs-fcitx5-with-addons-5.0.14/bin/fcitx5

$ realpath $(which fcitx5-remote)
/nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/bin/fcitx5-remote

$ realpath $(which fcitx5-configtool)
/nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/bin/fcitx5-configtool

$ realpath $(which fcitx5-diagnose)
/nix/store/gzvzx5cz4s15g4dkg8vyn960v8smmkc4-fcitx5-5.0.14/bin/fcitx5-diagnose

$ realpath $(which fcitx5-config-qt)
/nix/store/7ar2w3i2w6bba5ndq5hndd2d7q89vsjb-fcitx5-configtool-5.0.11/bin/fcitx5-config-qt

It seems like Mozc doesn't load when I start Fcitx using anything but fcitx5 (and fcitx5-config-qt?). So, using fcitx5-configtool before Fcitx has started, and clicking on this prompt would cause the issue I described above:

It seems like Mozc doesn't load when I start Fcitx using anything but fcitx5 (and fcitx5-config-qt?). So, using fcitx5-configtool before Fcitx has started, and clicking on this prompt would cause the issue I described above:

You can run cat $(which fcitx5) and cat $(which fcitx5-configtool). It is the reason why addons cannot be found if fcitx5 is started by fcitx5-configtool. fcitx5-configtool executes qt or gtk config binary without wrapper. In these executors, they run the original fcitx5 (absolute path determined during build) instead of the one in PATH. The fcitx5 in PATH is a wrapper involving FCITX_ADDON_DIR which pass the external addons dir to fcitx5.

If you want to make fcitx5-configtool as your proposal, you can wrap other scripts like fcitx5 in fcitx5-with-addons. PR is welcome.

Yep, I was just arguing that the status quo seemed like a foot-gun, and questioning whether this is intended behavior. I'd be fine opening a PR.
I guess I'll rename this issue to something like "fcitx5-with-addons should wrap other commands" and change the original post to reflect that? If that's not considered a bug, I guess this issue can be closed until I (or somebody else) makes a PR.


BUILDING.md update

What
BUILDING.md file is updated according to the new project structure

@ehanoc not sure if you're the one managing this or @yigitguler is....but in github repo settings, I wanted to suggest turning on deleting branches after PRs are merged
Look for this: