@solitha New rule: cat tax. For every pun you post or repost, you're now required to pay the tax of posting one cute cat video.
#Region "Structs" Private Structure WeatherTable Public nodTimeLayout As XmlNode Public nodData As XmlNode End Structure Private Structure WeatherData Public wtHighTemp As WeatherTable Public wtLowTemp As WeatherTable Public wtPointTemp As WeatherTable Public wtLiquidPrecip As WeatherTable Public wtSnowPrecip As WeatherTable Public wtPrecipProb As WeatherTable Public wtWindSpeed As WeatherTable Public wtWindDirection As WeatherTable Public wtCloudCover As WeatherTable End Structure Private Structure TemperatureData Public F As Integer Public ReadOnly Property C() As Integer Get Return Integer.Parse(Math.Round(((Double.Parse(F) - 32) / 9) * 5)) End Get End Property Public dt As Date End Structure Private Structure PrecipitationData Public Inches As Double Public ReadOnly Property MM() As Double Get Return Inches * 25.4 End Get End Property Public dt As Date End Structure Private Structure PercentData Public Pct As Integer Public dt As Date End Structure Private Structure WindData Public Knots As Integer Public ReadOnly Property MPH() As Integer Get Return Integer.Parse(Math.Round((Double.Parse(Knots) * 6076.12) / 5280)) End Get End Property Public Degrees As Integer Public ReadOnly Property Dir() As String Get Select Case Degrees Case 0 To 11.25, 348.75 To 360 Return "N" Case 11.25 To 33.75 Return "NNE" Case 33.75 To 56.25 Return "NE" Case 56.25 To 78.75 Return "ENE" Case 78.75 To 101.25 Return "E" Case 101.25 To 123.75 Return "ESE" Case 123.75 To 146.25 Return "SE" Case 146.25 To 168.75 Return "SSE" Case 168.75 To 191.25 Return "S" Case 191.25 To 213.75 Return "SSW" Case 213.75 To 236.25 Return "SW" Case 236.25 To 258.75 Return "WSW" Case 258.75 To 281.25 Return "W" Case 281.25 To 303.75 Return "WNW" Case 303.75 To 326.25 Return "NW" Case 326.25 To 348.75 Return "NNW" End Select End Get End Property Public dt As Date End Structure Private Structure FormattedWeatherData Public HighTemp() As TemperatureData Public LowTemp() As TemperatureData Public PointTemp() As TemperatureData Public LiquidPrecip() As PrecipitationData Public SnowPrecip() As PrecipitationData Public PrecipProb() As PercentData Public Wind() As WindData Public CloudCover() As PercentData End Structure #End Region #Region "NWS XML Reader http://www.nws.noaa.gov/forecasts/xml" Private Function FindLayoutTable(ByVal xmlDoc As XmlDocument, ByVal nodData As XmlNode) Dim nlTimeLayouts As XmlNodeList = xmlDoc.SelectNodes("/dwml/data/time-layout") Dim strTimeLayout As String = nodData.Attributes("time-layout").Value Dim node As XmlNode For Each node In nlTimeLayouts If strTimeLayout = node.SelectSingleNode("layout-key").InnerText Then Return node End If Next Return Nothing End Function Private Function ParseDateTime(ByVal str As String) As Date Return Date.Parse(str.Replace("T", " ").Substring(0, str.LastIndexOf("-"))) End Function Private Sub FillTemperatureData(ByVal wt As WeatherTable, ByRef temp() As TemperatureData) Dim intCount As Integer Dim nlData As XmlNodeList = wt.nodData.SelectNodes("value") Dim nlDate As XmlNodeList = wt.nodTimeLayout.SelectNodes("start-valid-time") For intCount = 0 To UBound(temp) - 1 temp(intCount) = New TemperatureData() temp(intCount).F = Integer.Parse(nlData(intCount).InnerText) temp(intCount).dt = ParseDateTime(nlDate(intCount).InnerText) Next End Sub Private Sub FillPrecipitationData(ByVal wt As WeatherTable, ByRef precip() As PrecipitationData) Dim intCount As Integer Dim nlData As XmlNodeList = wt.nodData.SelectNodes("value") Dim nlDate As XmlNodeList = wt.nodTimeLayout.SelectNodes("start-valid-time") For intCount = 0 To UBound(precip) - 1 precip(intCount) = New PrecipitationData() If Len(nlData(intCount).InnerText) = 0 Then precip(intCount).Inches = 0 Else precip(intCount).Inches = Double.Parse(nlData(intCount).InnerText) End If precip(intCount).dt = ParseDateTime(nlDate(intCount).InnerText) Next End Sub Private Sub FillPercentData(ByVal wt As WeatherTable, ByRef pct() As PercentData) Dim intCount As Integer Dim nlData As XmlNodeList = wt.nodData.SelectNodes("value") Dim nlDate As XmlNodeList = wt.nodTimeLayout.SelectNodes("start-valid-time") For intCount = 0 To UBound(pct) - 1 pct(intCount) = New PercentData() pct(intCount).Pct = Integer.Parse(nlData(intCount).InnerText) pct(intCount).dt = ParseDateTime(nlDate(intCount).InnerText) Next End Sub Private Sub FillWindData(ByVal wtSpeed As WeatherTable, ByVal wtDir As WeatherTable, ByRef wind() As WindData) Dim intCount As Integer Dim nlSpeed As XmlNodeList = wtSpeed.nodData.SelectNodes("value") Dim nlDir As XmlNodeList = wtDir.nodData.SelectNodes("value") Dim nlDate As XmlNodeList = wtSpeed.nodTimeLayout.SelectNodes("start-valid-time") For intCount = 0 To UBound(wind) - 1 wind(intCount) = New WindData() wind(intCount).Knots = Integer.Parse(nlSpeed(intCount).InnerText) wind(intCount).Degrees = Integer.Parse(nlDir(intCount).InnerText) wind(intCount).dt = ParseDateTime(nlDate(intCount).InnerText) Next End Sub Private Function ParseForecastXML(ByVal strXMLWeather) As FormattedWeatherData Try 'Setup variables Dim xmlDoc As New XmlDocument() Dim wdData As New WeatherData() Dim fwdData As New FormattedWeatherData() wdData.wtHighTemp = New WeatherTable() wdData.wtLowTemp = New WeatherTable() wdData.wtPointTemp = New WeatherTable() wdData.wtLiquidPrecip = New WeatherTable() wdData.wtSnowPrecip = New WeatherTable() wdData.wtPrecipProb = New WeatherTable() wdData.wtWindSpeed = New WeatherTable() wdData.wtWindDirection = New WeatherTable() wdData.wtCloudCover = New WeatherTable() 'Load XML data xmlDoc.LoadXml(strXMLWeather) 'Load data and their corresponding time nodes wdData.wtHighTemp.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/temperature[@type='maximum']") wdData.wtLowTemp.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/temperature[@type='minimum']") wdData.wtPointTemp.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/temperature[@type='hourly']") wdData.wtLiquidPrecip.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/precipitation[@type='liquid']") wdData.wtSnowPrecip.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/precipitation[@type='snow']") wdData.wtPrecipProb.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/probability-of-precipitation[@type='12 hour']") wdData.wtWindSpeed.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/wind-speed[@type='sustained']") wdData.wtWindDirection.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/direction[@type='wind']") wdData.wtCloudCover.nodData = xmlDoc.SelectSingleNode("/dwml/data/parameters/cloud-amount[@type='total']") wdData.wtHighTemp.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtHighTemp.nodData) wdData.wtLowTemp.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtLowTemp.nodData) wdData.wtPointTemp.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtPointTemp.nodData) wdData.wtLiquidPrecip.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtLiquidPrecip.nodData) wdData.wtSnowPrecip.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtSnowPrecip.nodData) wdData.wtPrecipProb.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtPrecipProb.nodData) wdData.wtWindSpeed.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtWindSpeed.nodData) wdData.wtWindDirection.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtWindDirection.nodData) wdData.wtCloudCover.nodTimeLayout = FindLayoutTable(xmlDoc, wdData.wtCloudCover.nodData) 'Setup formatted data variables ReDim fwdData.HighTemp(wdData.wtHighTemp.nodTimeLayout.SelectNodes("start-valid-time").Count) ReDim fwdData.LowTemp(wdData.wtLowTemp.nodTimeLayout.SelectNodes("start-valid-time").Count) ReDim fwdData.PointTemp(wdData.wtPointTemp.nodTimeLayout.SelectNodes("start-valid-time").Count) ReDim fwdData.LiquidPrecip(wdData.wtLiquidPrecip.nodTimeLayout.SelectNodes("start-valid-time").Count) ReDim fwdData.SnowPrecip(wdData.wtSnowPrecip.nodTimeLayout.SelectNodes("start-valid-time").Count) ReDim fwdData.PrecipProb(wdData.wtPrecipProb.nodTimeLayout.SelectNodes("start-valid-time").Count) ReDim fwdData.Wind(wdData.wtWindSpeed.nodTimeLayout.SelectNodes("start-valid-time").Count) ReDim fwdData.CloudCover(wdData.wtCloudCover.nodTimeLayout.SelectNodes("start-valid-time").Count) 'Fill in data FillTemperatureData(wdData.wtHighTemp, fwdData.HighTemp) FillTemperatureData(wdData.wtLowTemp, fwdData.LowTemp) FillTemperatureData(wdData.wtPointTemp, fwdData.PointTemp) FillPrecipitationData(wdData.wtLiquidPrecip, fwdData.LiquidPrecip) FillPrecipitationData(wdData.wtSnowPrecip, fwdData.SnowPrecip) FillPercentData(wdData.wtPrecipProb, fwdData.PrecipProb) FillWindData(wdData.wtWindSpeed, wdData.wtWindDirection, fwdData.Wind) FillPercentData(wdData.wtCloudCover, fwdData.CloudCover) Return fwdData Catch ex As Exception Return Nothing End Try End Function #End Region
Dim weather As New gov.weather.ndfdXML() Dim params As New gov.weather.weatherParametersType() params.maxt = True params.mint = True params.temp = True params.qpf = True params.snow = True params.pop12 = True params.wspd = True params.wdir = True params.sky = True Dim fwdWeather as FormattedWeatherData = ParseForecastXML(weather.NDFDgen(sngLatitude, sngLongitude, "time-series", Now, Now.AddDays(30), params)) weather = Nothing params = Nothing
@solitha New rule: cat tax. For every pun you post or repost, you're now required to pay the tax of posting one cute cat video.
Today was a special day. I scored 1,016,221 points in classic NES Tetris, the first time I broke the 999,999 maxout barrier.
With that maxout, I became the oldest person to get their first ever maxout at 46 years 319 days.
After I scored that, I learned that today would have been 7-time Tetris world champion Jonas Neubauer's 43rd birthday.
I am FILLED with incredible emotion tonight.
https://clips.twitch.tv/AverageImportantGoldfishHassaanChop-bRfUxo4q5SxEgJvI
"I'm Sorry, What?!" The biggest bailout in the history of Descent II! https://www.youtube.com/watch?v=GLlTk7wa59A
βBART anime merch" are three words that I would not have expected to go together, but here we are. https://www.railgoods.com/bart/anime/
Does anyone else sing the chorus to "Cherish" by Kool & The Gang to themselves whenever they play or watch streams of Balatro? Or is that just me?
I'm fact that's what Lingo needs: a "phone" block. The clue is an incorrect autocorrected form of the answer. π
It's like my phone knows I've been playing Lingo. I typed in "exited" and my phone was all:
β¬οΈ EXCITED ------
βͺοΈ
βͺοΈ
A comparison of the classic Tetris and Descent communities. Not a post I write lightly, either.
https://roncli.com/blogger/3703157809000934742/a-tale-of-two-communities
Aptiz played #Pentis again. In the beginning you can see roncli asking in the chat for the right version. About an hour later, he broke the #PentisRankings record with 60K ! Congratulations roncli π π
https://www.twitch.tv/videos/2052528360?sr=a&t=11267s
Yeah, it's season 11. But the OTL Season 6 highlight reel is up, this time Fireball has taken the reins! Check out this video jam packed full of kills, deaths, silliness, and Sirius puns. https://www.youtube.com/watch?v=SXstLVjnaGo
Over on #thatbirdhellsite, someone retweeted sympathy for the people being laid off today...
...and then said that Amazon Games was hiring. You know, the one that just had layoffs in NOVEMBER.
Honestly? Tech sucks right now.
Seriously. Why is it called Sagittarius, A Star? Clearly, it's Sagittarius, A Black Hole. Silly astronomers.
This eslint/stylistic breakup is going to give me a headache. Don't developers have something better to do than give other developers busywork?
Bing is so bad. https://otl.gg is being blocked in their search results, and Bing webmaster tools are absolutely useless, not telling me why it's being blocked.
Does anyone know of some way to get a human to look at this and see what's wrong with it? #bing #microsoft
it's not actually common for real hackers to use two keyboards at once; that's just a stereo type.
Me and my wife, despite buying a house of nice size, always seem to get in each other's way, be it in the kitchen, on the stairs, it doesn't matter. She's all up in my two square feet.
I often joke that all I want for Christmas is my two square feet.
Update 2: The record that beat Blue Scuti stood for one day. Blue Scuti got it back.
I got the honor and privilege of calling the NES Tetris NTSC world record today while running Classic Tetris Wars on my Twitch channel for the very first time. It was thrilling. Congratulations to Blue Scuti for his 6,609,220 level 153 performance. https://clips.twitch.tv/DiligentDeadGoldfishDoritosChip-cx_vDMWAjKaZUK6N
like, you used to use a phone line to access the internet
now the internet is accessible on your phone
nothing has changed actually
Six Degrees of Sunday returns Sunday, January 7th, at https://twitch.tv/roncli. Cya there!
Are you ready to get Six'd Off?
Six Degrees of Sunday, my 6DoF long play Twitch series, is getting revived for 2024. Plus, I will be producing Six'd Off, a companion YouTube series showcasing each game.
Check out the announcement for the game list and more! https://www.youtube.com/watch?v=yeRbjjpQVZY
So I started a fresh YouTube channel some time ago, and yesterday I released the first real video to it.
Check out highlights from Argus Industrial Moons' run to the OTL Season 10 Best of the Rest title! https://www.youtube.com/watch?v=Z2x-GGW9FYI
People at work are calling Kubernetes K8, and I hate it. It's not "Kubernete"!
Want a preview of what CTWC will be like next weekend from a gameplay perspective? CTL Season 22 finals starting now.
No airport hell this morning, but you know that lady that talks about security at literally every airport? I just realized, she sounds old AF.
If this security line posted signs "5 minutes from this point", "10 minutes...", etc., They'd have to post them every foot. #airporthell
Did I miss Elon making another purchase? https://twitter.com/unity/status/1701650081403842851
That's a lovely free bundle of books for people interested in getting into games programming: https://www.fanatical.com/en/bundle/international-day-of-the-programmer-2023-free-giveaway