Stop being the product.
Become the owner.
Why does finishing a mediocre project feel more valuable than abandoning a great one ? Been thinking about this a lot lately. Every time I start something that feels interesting, I hit a wall around week two or three and the project just dies. I have a graveyard of halfbuilt things that were genuinely cool concepts but never got past the messy middle part. What I keep noticing is that the one or two things I actually forced myself to finish, even when they were ugly and the code was embarrassing, stuck with me way longer than anything I abandoned. Not because the finished product was good. It wasn't. But something about pushing through the part where you hate it seems to wire things in differently. The abandoned projects feel like I learned more in the moment because they were ambitious. But six months later I can barely remember what I built or why it broke. Wondering if this is a widely shared experience or if some people genuinely learn better by hopping between projects and absorbing concepts sideways. Because the advice to just finish something small gets repeated constantly and I am starting to think it is not just motivational fluff, there might be something real behind it. What actually clicked for you when you finally shipped something, even if it was rough. #programming #technology #dev
Thoughts on Stencil? I've been asked to develop multiple design systems for various frameworks that all implement the same design language. Sort of like IBM carbon. The architect on the team has mandated that we use stencil.js to generate these individual design systems. However, my concern is that different frameworks like React and Angular have different underlying philosophies that can dictate how the components are used by consumers. I've tried to find some educational videos on it, but many of the videos are tutorials from years ago. If anyone has any useful insight, would greatly appreciate it. #programming #dev #technology source
Seed7 version 2026-07-11 released on GitHub and SF I have released version 2026-07-11 of Seed7 https://seed7.net . Notable changes in this release are: * Many improvements have been triggered by the Seed7 community. * Support for the PCX https://seed7.net/libraries/pcx.htm image file format has been added and the support for BMP https://seed7.net/libraries/bmp.htm , TGA https://seed7.net/libraries/tga.htm , JPEG https://seed7.net/libraries/jpeg.htm and TIFF https://seed7.net/libraries/tiff.htm has been improved. * Protections against stack overflow https://seed7.net/faq.htm#stack_overflow and shell injection https://seed7.net/faq.htm#shell_injection have been added. * Checks for the result and the parameters of primitive actions https://seed7.net/manual/actions.htm#actionCreateOkay have been added. * Several database drivers have been improved. * Casts from integers to pointers have been removed. This release is available at GitHub https://github.com/ThomasMertes/seed7/releases/tag/Seed7_release_2026-07-11 and SF https://sourceforge.net/projects/seed7/files/seed7/seed7_05_20260711/seed7_05_20260711.tgz/download . There is also a Seed7 installer for windows https://sourceforge.net/projects/seed7/files/bin/seed7_05_20250930_win.exe/download , which downloads the newest version from GitHub and SF. The Seed7 Homepage https://seed7.net is now at https://seed7.net . There is a demo page https://seed7.net/demo.htm with Seed7 programs compiled to JavaScript/WebAssemly. Changelog: * In encoding.s7i https://seed7.net/libraries/encoding.htm Base64Url https://seed7.net/libraries/encoding.htm#toBase64Url(in_string,in_boolean ) encoding and decoding has been added. Many thanks to Zykaris for providing the functions toBase64Url https://seed7.net/libraries/encoding.htm#toBase64Url(in_string,in_boolean )() and fromBase64Url https://seed7.net/libraries/encoding.htm#fromBase64Url(in_var_string )(). As suggested by Zykaris the functions toBase64Mime https://seed7.net/libraries/encoding.htm#toBase64Mime(in_string )() and toBase64Pem https://seed7.net/libraries/encoding.htm#toBase64Pem(in_string )() have been added as well. * In sql\_post.c support for the money type has been added. Many thanks to Zyokatsu for sending a pull request. * In sql\_post.c the implicitCommit mechanism has been deactivated. Thanks to Zykaris for pointing out problems with the implicit commit mechanism. Thanks to Johannes Gritsch for his advice that the implicit commit mechanism should not be used. * In sqllib.c the function sqlSetAutoCommit() has been fixed to use argument 2 instead of non-existent argument 3. Many thanks to Zyokatsu for pointing out a problem with setAutoCommit https://seed7.net/libraries/sql_base.htm#setAutoCommit(in_database,in_boolean )(). * In osfiles.s7i https://seed7.net/libraries/osfiles.htm the function makeParentDirs https://seed7.net/libraries/osfiles.htm#makeParentDirs(in_string )() has been improved to allow symbolic links to directories. Many thanks to Zykaris for pointing out that makeParentDirs https://seed7.net/libraries/osfiles.htm#makeParentDirs(in_string )() didn't follow symbolic links. * Code has been moved from gethttp.s7i https://seed7.net/libraries/gethttp.htm to the new library http\_request.s7i https://seed7.net/libraries/http_request.htm . Basic and Bearer Authentication has been added and GET and POST have been unified. HTTP/S post functionality has been added as well. Many thanks to Zykaris for the pull request. * In http\_request.s7i https://seed7.net/libraries/http_request.htm constants for HTTP status codes have been added. Many thanks to Barankegnu for providing the change. * A coercing of http request properties to lowercase has been added (header names are case insensitive). Expect-Header support has been added as well. Many thanks to Zykaris for providing these changes. * In scanfile.s7i https://seed7.net/libraries/scanfile.htm and scanstri.s7i https://seed7.net/libraries/scanstri.htm the function getXmlTagHeadOrContent https://seed7.net/libraries/scanfile.htm#getXmlTagHeadOrContent(inout_file )() has been improved to return <? as symbol. Many thanks to Zykaris for pointing out that <? was not processed correctly. * In tls.s7i https://seed7.net/libraries/tls.htm the function negotiateSecurityParameters() has been improved to send an empty Certificate as answer to a CertificateRequest. Many thanks to Zykaris for pointing out that openssl complained about an "Unexpected Message". * In tls.s7i https://seed7.net/libraries/tls.htm support for secure renegotiation has been added. Many thanks to Zykaris for pointing out that curl complained about a "handshake failure". * In the FAQ https://seed7.net/faq.htm explanations about references to struct elements https://seed7.net/faq.htm#return_reference_to_struct_element and about variables referring to the same object https://seed7.net/faq.htm#variables_referring_same_object have been added. The answer about exceptions https://seed7.net/faq.htm#exceptions has been improved. * The operating system DOS is supported (with DJGPP) again. The tests have been done with Dosemu and Dosbox. * Interpreter and compiler have been refactored. Now the type ACTION uses the category ACTENTRYOBJECT instead of ACTOBJECT. An ACTENTRYOBJECT value points to an actEntryRecord (ACTOBJECT values are function pointers). New primitive actions for ACTENTRYOBJECT have been introduced. They have names starting with ACE\_. Now expressions like action "INT\_ADD" https://seed7.net/manual/actions.htm#INT_ADD return an ACTENTRYOBJECT instead of an ACTOBJECT. Now an actEntryRecord contains more information. The category of the result, the number of parameters and the category of the parameters have been added to actEntryRecord. * ACTION functions for conversion, comparison and hash code have been added to seed7\_05.s7i. * EXCEPTION in-parameters and the str() function for EXCEPTIONs have been added to seed7\_05.s7i. * In seed7\_05.s7i the definition of typeof() has been changed so that the argument is never executed. * In syntax.s7i the priority of the action operator has been changed. * The exception ASSERTION\_ERROR https://seed7.net/manual/errors.htm#ASSERTION_ERROR and assert statements have been introduced. Tests for assert statements have been added to chkprc.sd7. * Interpreter and compiler have been improved to support functions which return functions. * Hash- and array-functions for compiled programs have been improved to use rtlValueUnion instead of genericType. This avoids casts from pointers to integers and back to pointers. * Support for writing types has been added. * In the library float.s7i https://seed7.net/libraries/float.htm function literal https://seed7.net/libraries/float.htm#literal(in_float )() has been improved to use the scientific notation if it is shorter. * The library cli\_cmds.s7i https://seed7.net/libraries/cli_cmds.htm (used by make7 https://seed7.net/scrshots/make7.htm ) has been improved: * The output redirection of commands has been improved to work correctly if the command is directly followed by >> or > . * Support for the commands "echo:", "echo/" and "echo" has been added. * The commands "echo.", "echo:", "echo/" and "echo" have been improved to support parameters. * The function oneShellCommand() has been added. If possible it executes external commands without shell. If no executable is found shell https://seed7.net/libraries/shell.htm#shell(in_string,in_array_string,in_string,in_string,in_string )() and popen https://seed7.net/libraries/shell.htm#popen(in_string,in_array_string,in_string )() are called with an array of parameters. * The function getCommandParameter() has been improved to work correctly if the given parameters are empty. * The functions getCommandParameter() and getDosCommandParameter https://seed7.net/libraries/cli_cmds.htm#getDosCommandParameter(inout_string )() have been improved to escape a double quote if it is preceded by an odd number of backslashes. * The library tar.s7i https://seed7.net/libraries/tar.htm has been improved to assure that up to a size of 8 gigabytes the ustar and pax file size are identical. * The library zip.s7i https://seed7.net/libraries/zip.htm has been improved to support ZIP files with the legacy signature PK00 as magic number. * The new library asn1oid.s7i has been added. Definitions of ASN.1 object identifiers have been moved from x509cert.s7i https://seed7.net/libraries/x509cert.htm to asn1oid.s7i. The type algorithmIdentifierType and related functions have been moved from x509cert.s7i https://seed7.net/libraries/x509cert.htm to asn1oid.s7i as well. * The new library signature.s7i https://seed7.net/libraries/signature.htm has been added. The type rsaSignatureType and related functions have been moved from x509cert.s7i https://seed7.net/libraries/x509cert.htm and tls.s7i https://seed7.net/libraries/tls.htm to signature.s7i https://seed7.net/libraries/signature.htm . * In x509cert.s7i https://seed7.net/libraries/x509cert.htm the validity of stdCertificate https://seed7.net/libraries/x509cert.htm#stdCertificate has been extended to the end of 2029. * In charsets.s7i https://seed7.net/libraries/charsets.htm the function conv2unicodeByName https://seed7.net/libraries/charsets.htm#conv2unicodeByName(inout_string,in_string )() has been refactored to use a case-statement. * The new library bin16.s7i https://seed7.net/libraries/bin16.htm has been added. This library supports IEEE 754 16-bit half-precision floats. * The new library pcx.s7i https://seed7.net/libraries/pcx.htm has been added. This library supports the PCX image file format. PCX magic numbers have been added to magic.s7i https://seed7.net/libraries/magic.htm and support for PCX has been added to imagefile.s7i https://seed7.net/libraries/imagefile.htm . * The picture viewer pv7.sd7 https://seed7.net/scrshots/pv7.htm has been improved to support PCX https://seed7.net/libraries/pcx.htm and a list of image parameters. * In bin32.s7i https://seed7.net/libraries/bin32.htm and bin64.s7i https://seed7.net/libraries/bin64.htm conversions from bin32 https://seed7.net/manual/types.htm#bin32 and bin64 https://seed7.net/manual/types.htm#bin64 to char https://seed7.net/manual/types.htm#char have been added. * In lzw.s7i https://seed7.net/libraries/lzw.htm the performance of the LZW decompression has been improved by 0.9%. * The bmp.s7i https://seed7.net/libraries/bmp.htm library has been improved: * Support for the Huffman 1D compressed BMP format has been added. * Support for top-to-bottom bitmaps with 8 bits per pixel has been added. * Functions for line-wise processing of pixels have been added. * The pixel data of a BMP with 1, 2 and 4 bits per pixel is read with one gets(). * An in-parameter https://seed7.net/manual/params.htm#in_parameter is used for bmpHeader parameters in places where it does not change. * The calculation of colorEntrySize has been improved. * The libraries tga.s7i https://seed7.net/libraries/tga.htm and pcx.s7i https://seed7.net/libraries/pcx.htm have been improved to use the in-var-parameter https://seed7.net/manual/params.htm#in_var_parameter byteIndex instead of the in-parameter https://seed7.net/manual/params.htm#in_parameter byteIndexStart. * The jpeg.s7i https://seed7.net/libraries/jpeg.htm library has been improved: * The function showHeader(), which shows the header struct, has been added. * In getSymbol() the condition to recognize negative numbers has been changed. * The tiff.s7i https://seed7.net/libraries/tiff.htm library has been improved: * Support for tiled images has been added. This includes images with bitsPerSample mod 8 <> 0. * The processing of images has been improved to work linewise. * The processing of JPEG https://seed7.net/libraries/jpeg.htm data has been improved. * Support for old style JPEG https://seed7.net/libraries/jpeg.htm data has been added. * The strip and tile processing has been improved. * Support for the photometric interpretations CMYK and CMYKA has been added. * The TIFF compression 50013 (PIXTIFF DEFLATE) has been added as synonym of DEFLATE. * Support for fillOrder = 2 in combination with the pack-bits decompression https://seed7.net/libraries/compress.htm#fromPackBits(in_string ) has been added. * Definitions of many tags have been added. * In tagValueAsString() and tagValueAsArray() a possible garbage in higher or lower bits of a TIFF\_FIELD\_SHORT field is ignored. * Unused tile data is removed if bitsPerPixel >= 8 holds. * Support for 4 samples per pixel, if samples are not divisible by 8, has been added. * The differencing predictor has been improved to work with 16-bit samples. * A float https://seed7.net/manual/types.htm#float predictor has been added. * Support for the float https://seed7.net/manual/types.htm#float sample format has been added. * Support for floating point RGBA TIFF has been added. * Support for the photometric interpretation YCbCr with a vertical sub-sampling of 1 or 2 has been added. * Support for for the following planar TIFF images has been improved: * Planar images with CMYK photometric interpretation. * Tiled planar images. * Grayscale planar images. * Planar images with bitsPerSample mod 8 <> 0. * The function showHeader() has been improved. * The ccittfax.s7i https://seed7.net/libraries/ccittfax.htm library has been improved: * The function skipToStart() has been added. * The function skipEol() has been changed to search for a one bit. * The end-of-line bit patterns of white and black have been changed. * The functions getWhiteBits() and getBlackBits() have been changed to avoid that the end-of-line code (-1) is added. * In graph.s7i https://seed7.net/libraries/graph.htm the functions compare() and hashCode() for pixel values have been added. * In encoding.s7i https://seed7.net/libraries/encoding.htm the performance of toUuencoded https://seed7.net/libraries/encoding.htm#toUuencoded(in_string )(), toBase64 https://seed7.net/libraries/encoding.htm#toBase64(in_string )() and toBase64Url https://seed7.net/libraries/encoding.htm#toBase64Url(in_string,in_boolean )() has been improved by around 25%. * In encoding.s7i https://seed7.net/libraries/encoding.htm the performance of toAscii85 https://seed7.net/libraries/encoding.htm#toAscii85(in_string )(), fromUuencoded https://seed7.net/libraries/encoding.htm#fromUuencoded(in_string )(), fromBase64Url https://seed7.net/libraries/encoding.htm#fromBase64Url(in_var_string )() and fromBase64 https://seed7.net/libraries/encoding.htm#fromBase64(in_string )() has been improved by around 10%. * In bytedata.s7i https://seed7.net/libraries/bytedata.htm the performance of hex2Bytes https://seed7.net/libraries/bytedata.htm#hex2Bytes(in_string )() has been improved by 2.4% * The libraries http\_request.s7i https://seed7.net/libraries/http_request.htm and https\_request.s7i https://seed7.net/libraries/https_request.htm have been improved: * The conversion to integer https://seed7.net/manual/types.htm#integer has been improved to work without exceptions and handlers. * Unused getHttp() and getHttps() functions have been removed. * openHttp() and openHttps() functions with location and request parameters have been refactored. * The functions http(GET, ...) https://seed7.net/libraries/http_request.htm#http(GET,in_string ) and https(GET, ...) https://seed7.net/libraries/https_request.htm#https(GET,in_string ) have been introduced. * The library http\_response.s7i has been renamed to http\_srv\_resp.s7i https://seed7.net/libraries/http_srv_resp.htm . * In httpserv.s7i https://seed7.net/libraries/httpserv.htm the type httpRequest to has been renamed to httpServerRequest https://seed7.net/libraries/httpserv.htm#httpServerRequest . * In httpserv.s7i https://seed7.net/libraries/httpserv.htm the function getHttpRequest https://seed7.net/libraries/httpserv.htm#getHttpRequest(inout_httpServer )() has been improved to check if the remaining buffer contains the rest of the content. * In html\_ent.s7i https://seed7.net/libraries/html_ent.htm support for hex encoded HTML entities has been added to decodeHtmlEntities https://seed7.net/libraries/html_ent.htm#decodeHtmlEntities(in_string )(). * In smtp.s7i https://seed7.net/libraries/smtp.htm in openSmtp() the STARTTLS command is considered if it is part of the response content. * The pointer types ptr and varptr have been removed from libraries and manual. * In objutl.c the function dump\_temp\_value() has been improved to call set\_fail\_flag(FALSE) only if necessary. This improves the Seed7 interpreter by 1% (measured with gcc and valgrind when pv7.sd7 https://seed7.net/scrshots/pv7.htm is reading a PCX image). * In boolean.s7i https://seed7.net/libraries/boolean.htm support for the following boolean https://seed7.net/manual/types.htm#boolean assignments has been added: &:= https://seed7.net/libraries/boolean.htm#(inout_boolean&:=(in_boolean )) |:= https://seed7.net/libraries/boolean.htm#(inout_boolean|:=(in_boolean )) \><:= https://seed7.net/libraries/boolean.htm#(inout_boolean%3E%3C:=(in_boolean )) * Tests for the new boolean https://seed7.net/manual/types.htm#boolean assignments &:= https://seed7.net/libraries/boolean.htm#(inout_boolean&:=(in_boolean )) |:= https://seed7.net/libraries/boolean.htm#(inout_boolean|:=(in_boolean )) \><:= https://seed7.net/libraries/boolean.htm#(inout_boolean%3E%3C:=(in_boolean )) and for the ternary operator https://seed7.net/libraries/boolean.htm#(in_boolean%3F(ref_func_aType):(ref_func_aType )) ( ? https://seed7.net/libraries/boolean.htm#(in_boolean%3F(ref_func_aType):(ref_func_aType )) : https://seed7.net/libraries/boolean.htm#(in_boolean%3F(ref_func_aType):(ref_func_aType )) ) have been added to chkbool.sd7. * The test suite has been improved to use the boolean https://seed7.net/manual/types.htm#boolean &:= https://seed7.net/libraries/boolean.htm#(inout_boolean&:=(in_boolean )) assignment. * The deprecated functions keypressed() and busy\_getc() have been removed from keybd.s7i https://seed7.net/libraries/keybd.htm . * In process.s7i https://seed7.net/libraries/process.htm the function commandPath https://seed7.net/libraries/process.htm#commandPath(in_string )() has been improved to append EXECUTABLE\_FILE\_EXTENSION https://seed7.net/libraries/cc_conf.htm#EXECUTABLE_FILE_EXTENSION only if it is not already present. * In shell.s7i https://seed7.net/libraries/shell.htm the functions popen https://seed7.net/libraries/shell.htm#popen(in_string,in_array_string,in_string )() and popen8 https://seed7.net/libraries/shell.htm#popen8(in_string,in_array_string,in_string )() have been refactored to be based on the new function popenClibFile(), which uses a parameter array instead of a parameter string. * In shell.s7i https://seed7.net/libraries/shell.htm the functions shell https://seed7.net/libraries/shell.htm#shell(in_string,in_array_string,in_string,in_string,in_string )() and shellCmd https://seed7.net/libraries/shell.htm#shellCmd(in_string,in_string )() have been refactored to be based on the action CMD\_SHELL\_EXECUTE https://seed7.net/manual/actions.htm#CMD_SHELL_EXECUTE , which uses a parameter array https://seed7.net/manual/types.htm#array instead of a parameter string https://seed7.net/manual/types.htm#string . * The deprecated function cmd\_sh() has been removed from shell.s7i https://seed7.net/libraries/shell.htm . * The library bitdata.s7i https://seed7.net/libraries/bitdata.htm has been improved: * The function reverseByteBits() has been added. * The operator &:= https://seed7.net/libraries/bitdata.htm#(inout_lsbOutBitStream&:=(in_lsbOutBitStream )) for LSB and MSB out bit streams has been added. * In msbOutBitStream https://seed7.net/libraries/bitdata.htm#msbOutBitStream and its functions the variable bitSize has been renamed to bitPos. * The deprecated types lsbBitStream and msbBitStream as well as the deprecated functions openLsbBitStream() and openMsbBitStream() have been removed. * The deprecated functions putBitLsb(), putBitsLsb(), putBitMsb() and putBitsMsb() with a string https://seed7.net/manual/types.htm#string or file https://seed7.net/manual/types.htm#file as parameter have been removed. * The deprecated functions getBitLsb(), getBitsLsb(), getBitMsb() and getBitsMsb() with a file https://seed7.net/manual/types.htm#file as parameter have been removed. * In iobuffer.s7i https://seed7.net/libraries/iobuffer.htm the support for the undocumented function setbuf() has been removed. * In null\_file.s7i https://seed7.net/libraries/null_file.htm the = and <> comparisons have been removed. * In category.s7i https://seed7.net/libraries/category.htm , data.h and datautl.c the categories ACTENTRYOBJECT, BOOLOBJECT, ENUMOBJECT and VOIDOBJECT have been added. The category FILEDESOBJECT has been removed. * In sql\_base.s7i https://seed7.net/libraries/sql_base.htm support for the function dbCategory() has been added. * In db\_prop.s7i https://seed7.net/libraries/db_prop.htm properties of Firebird databases have been added. * In ref\_list.s7i https://seed7.net/libraries/ref_list.htm definitions of the following for-loops have been added: * For-loops over the elements and keys (indices) https://seed7.net/libraries/ref_list.htm#for(inout_referencekey(inout_integer)range(in_ref_list)do(in_proc)end_for ) of a ref\_list. * For-loops over the keys (indices) https://seed7.net/libraries/ref_list.htm#for_key(inout_integerrange(in_ref_list)do(in_proc)end_for ) of a ref\_list. * The test program chkdecl.sd7, which checks declarations, has been added. * The test program chkarr.sd7 has been improved: * Tests for fixed size arrays https://seed7.net/libraries/fixarray.htm have been added. * Tests for 'array bitset https://seed7.net/libraries/bitset.htm ', 'array file https://seed7.net/manual/types.htm#file ' and 'array bstring https://seed7.net/manual/types.htm#bstring ' have been added. * Tests for getting an element from a temporary array have been added. * Index tests for empty base arrays have been added. * Tests for 'ARRAY \ START .. STOP \]' with index out of range have been activated. * In chkarr.sd7, chkbig.sd7, chkbin.sd7, chkenum.sd7, chkflt.sd7, chkint.sd7, chkjson.sd7, chkset.sd7, chkstr.sd7 and chktime.sd7 definitions of raisesRangeError() have been refactored to use a template. * In chkarr.sd7, chkbig.sd7, chkchr.sd7, chkint.sd7, chkovf.sd7, chkset.sd7 and chkstr.sd7 check functions have been split into parts. * In chkarr.sd7 and chkidx.sd7 definitions of raisesIndexError() have been refactored to use a template. * In chkint.sd7 and chkbig.sd7 definitions of raisesNumericError() have been refactored to use a template. * In chkint.sd7 and chkovf.sd7 tests for [integer left shift https://seed7.net/libraries/integer.htm#(in_integer%3C%3C(in_integer )) by a sum have been added. * In chkint.sd7 tests for the \>>:= https://seed7.net/libraries/integer.htm#(inout_integer%3E%3E:=(in_integer )) and <<:= https://seed7.net/libraries/integer.htm#(inout_integer%3C%3C:=(in_integer )) operators have been refactored. * In chkbin.sd7 tests for the conversion to and from IEEE 16-bit half precision floats https://seed7.net/libraries/bin16.htm#float(in_bin16 ) have been added. * In chkbin.sd7 tests for the radix https://seed7.net/libraries/bin32.htm#(in_bin32radix(in_integer )) and RADIX https://seed7.net/libraries/bin32.htm#(in_bin32RADIX(in_integer )) operators have been added. * In chkstr.sd7 tests for string append https://seed7.net/libraries/string.htm#(inout_string&:=(in_string )) and prepend have been added. * In chkstr.sd7 tests for string https://seed7.net/manual/types.htm#string assignment have been added. * In chkbst.sd7 tests for index access have been added. * In chkhsh.sd7 tests for hash index with default have been added. * In chkfil.sd7 the tests for file https://seed7.net/manual/types.htm#file assignment have been improved. They use three different files and they avoid that a file https://seed7.net/manual/types.htm#file is opened multiple times for writing. * In chkfil.sd7 a check, if appending to a file https://seed7.net/manual/types.htm#file works correctly, has been added. * In chkfil.sd7 a test if \_GENERATE\_EMPTY\_CLIB\_FILE returns CLIB\_NULL\_FILE has been added. * In chkprc.sd7 tests for case statements with bitset https://seed7.net/libraries/bitset.htm , rational https://seed7.net/manual/types.htm#rational , type https://seed7.net/manual/types.htm#type , bstring https://seed7.net/manual/types.htm#bstring , boolean https://seed7.net/manual/types.htm#boolean and enumeration https://seed7.net/manual/types.htm#enumeration values have been added. * The program chkdb.sd7 has been improved: * Tests for LATIN-1 characters in fields have been added. * Tests for float and double fields have been added. * Date tests for 1858-11-17, 1999-12-31 and 2000-1-1 have been added. * The functions testChar1AsciiControlField(), testChar1Latin1C1ControlField(), testPositiveYearMonthDurationField() and testNegativeYearMonthDurationField() have been added. * In chkflt.sd7 tests for the str(FLOAT) https://seed7.net/libraries/float.htm#str(in_float ) function, for the cubic root function and for the ternary operator https://seed7.net/libraries/boolean.htm#(in_boolean%3F(ref_func_aType):(ref_func_aType )) with -0.0 have been added. * In chkerr.sd7 checks if a wrong usage of an action triggers a DECL\_FAILED https://seed7.net/manual/errors.htm#DECL_FAILED error have been added. * In chkexc.sd7 tests for the exception ord function and conv operator have been added. * The program chk\_all.sd7 has been improved to support the option minimal\_tests (this tests the compiler just with the highest optimization). * The Seed7 compiler (s7c.sd7) has been improved: * In comp/type.s7i the function getExprResultType() has been improved. Now array for-each-loops work with inheritance. Many thanks to Zykaris for pointing out a difference between interpreted and compiled programs. * Support for case statements with struct values has been added. * The code generation for case statements with hash sets in when parts has been refactored * Support for global database https://seed7.net/manual/types.htm#database and sqlStatement https://seed7.net/manual/types.htm#sqlStatement variables in compiled programs has been added. * The processing of function parameters has been improved. * The optimization of the integer mod operator https://seed7.net/libraries/integer.htm#(in_integermod(in_integer )) has been improved. * The optimization for the integer power operator https://seed7.net/libraries/integer.htm#(in_integer**(in_integer )) has been improved. * An optimization for stri @:= https://seed7.net/libraries/string.htm#(inout_string@:=_(in_integer ) in_string) \n\] aString mult i; has been added. Tests for stri @:= \[n\] aString mult i; have been added to chkidx.sd7 and chkstr.sd7. * An [integer overflow https://seed7.net/faq.htm#integer_overflow in the array https://seed7.net/manual/types.htm#array index computation is avoided. * In bin\_act.s7i in calls of several functions a cast of the argument to uintType has been added. * Assignments which prepend a char https://seed7.net/manual/types.htm#char use strPrependChar() to optimize. * String https://seed7.net/manual/types.htm#string constants are appended with strAppendNoOverlap(). * It is determined if source and destination of a string append https://seed7.net/libraries/string.htm#(inout_string&:=(in_string )) operation might overlap. If no overlap is possible strAppendNoOverlap() is used. * NULL is avoided in str- and bstr-tables (the address sanitizer complains if memcpy() or memcmp() is called with NULL). * In sct\_act.s7i in process (SCT\_SELECT, ...) getting an element from a temporary struct has been improved. * In prc\_act.s7i calls of resetExceptionCheck() have been added to the generated code. * The support for the type ACTION (category ACTENTRYOBJECT) has been improved. * In arr\_act.s7i the index check has been improved to work for an empty base array. * String https://seed7.net/manual/types.htm#string literals without slices are written directly to c\_prog. * The management of temporary files has been improved. * A usage of alloc(...) has been replaced by alloc(REFPARAMOBJECT, ...). * Support for the configuration values TEMP\_FILE\_PREFIX https://seed7.net/libraries/cc_conf.htm#TEMP_FILE_PREFIX and HAS\_VECTORED\_EXCEPTION\_HANDLER https://seed7.net/libraries/cc_conf.htm#HAS_VECTORED_EXCEPTION_HANDLER has been added to cc\_conf.s7i https://seed7.net/libraries/cc_conf.htm , confval.sd7, cmd\_rtl.c and chkccomp.c. * Interpreter and compiler have been refactored to use catch\_stack in the interpreter and in compiled programs. This allows raising a MEMORY\_ERROR https://seed7.net/manual/errors.htm#MEMORY_ERROR in case of a stack overflow. The catch\_stack has been changed to grow geometrically. The catch\_stack is freed in closeStack(). * The files segv\_win.c and segv\_drv.h have been added. They contain the stack overflow handler for Windows. The function setupSegmentationViolationHandler() registers an error handler. In case of a stack overflow the handler calls no\_memory() which does a longjmp(). At the place where setjmp() receives the longjmp the function resetExceptionCheck() is called to restore the guard pages. * Under Linux/BSD/Unix an alternate signal stack is used. A stack overflow triggers a SIGSEGV. The SIGSEGV handler calls no\_memory() which does a longjmp(). The targets of the longjmp are maintained with catch\_stack. * In sigutl.c the functions handleTracedSegvSignal(), sigactionTracedSegvSignal() and sigactionSegvSignal() have been added. The function handleSegvSignal() has been removed. * In runerr.c and s7c.sd7 definitions of the global variables error\_file and error\_line have been added. They are set in the functions no\_memory(), raise\_error2() and interprRaiseError(). They are retrieved with the functions prc\_get\_run\_error() and prcGetRunError(). * In numlit.c the float https://seed7.net/manual/types.htm#float literal parsing has been improved to avoid calls of strlen(). * In msg\_stri.c in appendListLimited() writing expressions has been improved. The function appendListElement() has been added as well. Tests in chkerr.sd7 have been improved to check for the new error messages. * In runerr.c writing the place of an uncaught exception https://seed7.net/faq.htm#stack_trace has been improved. * In runerr.c the function write\_curr\_position() has been improved to write expressions with appendListLimited() * In runerr.h the global variable fail\_expr\_stri, which stores fail\_expression as string https://seed7.net/manual/types.htm#string , has been introduced. The function write\_fail\_expression() has been removed from runerr.c. * In exec.c the function evaluate() has been improved to support TYPEOBJECT. * In exec.c the function exec\_call() has been improved to support ACTENTRYOBJECT. * The types emptyStriType, emptyBStriType, emptyArrayType and emptyStructType have been introduced to avoid address sanitizer warnings. * In heaputl.h the macros ALLOC\_EMPTY\_STRI() and ALLOC\_EMPTY\_BSTRI() have been introduced. * The macro SET\_SLICE\_EMPTY() has been introduced in interpreter and compiler. * The macros ALLOC\_EMPTY\_STRI(), ALLOC\_EMPTY\_BSTRI() and SET\_SLICE\_EMPTY() assure that the mem element is a legal pointer (which is never used because the size is zero). This avoids complaints of the address sanitizer. * In bst\_rtl.h the macro bstringHashCode() has been introduced. * In str\_rtl.h the macro ustringHashCode() has been introduced. * The file str\_rtl.c has been improved: * Variants of strAppend() and strAppendN(), which don't use realloc(), have been added. This improves the performance of strAppend() by 22% and the performance of strAppendN() by 7%. * The functions strConcatChar() and strConcatCharTemp() now consider that incrementing a string https://seed7.net/manual/types.htm#string size cannot overflow https://seed7.net/faq.htm#integer_overflow . * The functions strAppend(), strAppendTemp(), strAppendNoOverlap() and strConcat() now consider that adding two string https://seed7.net/manual/types.htm#string sizes cannot overflow https://seed7.net/faq.htm#integer_overflow . * The function strAppendNoOverlap() has been added. * The function strPrependChar() has been added. * The function ustriHash() has been renamed to ustriHashCode(). * The restrict keyword is used in the functions strAppendNoOverlap(), strAppendTemp() and strConcatTemp(). * In trm\_cap.c a check for code != NULL has been added to the functions my\_tgetnum(), my\_tgetflag() and my\_tgetstr(). * In pol\_sel.c the function polClear() has been fixed to decrement the usage counts from the write list instead of the read list. * The program chkccomp.c has been improved: * It defines the macros register, PID\_T\_SIZE, PID\_T\_SIGNED, HAS\_BUILTIN\_POPCOUNT, builtin\_popcount64, HAS\_SIGALTSTACK, SIGNAL\_STACK\_ENABLED, SIGNAL\_STACK\_SIZE, OS\_GETCWD\_RETURNS\_SLASH HAS\_VECTORED\_EXCEPTION\_HANDLER https://seed7.net/libraries/cc_conf.htm#HAS_VECTORED_EXCEPTION_HANDLER , FSEEK\_SUCCEEDS\_FOR\_PIPE and UNREACHABLE. * It checks if the same file can be opened for writing twice. * It considers /dev/null only as null device if PATH\_DELIMITER is slash (/). * It checks if a memcpy() of zero bytes to an illegal heap address is okay. * It complains if the size of float or double is not in {2, 4, 8}. * Define restrict as \_\_restrict\_\_ if using restrict directly fails and using \_\_restrict\_\_ is possible. * The functions determineSigaltstack(), determineAddVectoredExceptionHandler(), listDynamicLibsInBaseDir() and determineSizeofSQLWCHAR() have been added. * The recognition of databases has been improved. * Checks for partial linking and sizeof(SQLWCHAR) have been improved to work with C++. * It writes the values DB2\_CC\_OPTION, INFORMIX\_CC\_OPTION and SQL\_SERVER\_CC\_OPTION to the file macros. This values are used by the makefiles. * A determination of read\_buffer\_empty() for Windows on ARM has been added. * The program sudo.c has been improved to protect against shell-injection and remote code execution. * The program wrdepend.c has been improved to avoid a NULL-pointer dereference. * The program setwpath.c has been improved to check value\_type and function results. * The functions setenv7(), create\_console(), resizeCatchStackOkay(), resize\_catch\_stack(), genArgVector(), my\_tgetent() and fix\_capability() have been improved to check for unsigned integer overflow https://seed7.net/faq.htm#integer_overflow when the size for malloc() is computed. * In heaputl.c in the functions growStri() and shrinkStri() assignments to capacity have been removed (they are already done in HEAP\_REALLOC\_STRI). * Stack functions have been moved from heaputl.c and heaputl.h to stackutl.c and stackutl.h. * In stackutl.c the function setupStack() has been improved to handle the case that malloc() fails. * The macro NORETURN has been added to the functions no\_memory() and fatal\_memory\_error(). * The file con\_inf.c has been refactored to maintain console height and width as unsigned int. * In cmd\_unx.c the functions getGroupFromGid() and getUserFromUid() have been improved to use a cache for mapping GIDs and UIDs to a name. * In cmd\_unx.c the functions getGidFromGroup() and getUidFromUser() have been fixed to prevent double free of os\_group and os\_user in case of a FILE\_ERROR https://seed7.net/manual/errors.htm#FILE_ERROR . * In kbd\_inf.c the function read\_f\_key() has been improved to prevent writing past the end of last\_partial\_match. * In kbdInputReady() (kbd\_inf.c) and gkbInputReady() (gkb\_win.c) the variable result has been renamed to inputReady. * In cmd\_win.c the function CommandLineToArgvW() has been improved to allocate memory for the trailing NULL element at w\_argv\w\_argc\] even if commandLine contains one character or zero characters. * In setlib.c the unused function set\_idx() has been removed. * In setlib.c the function set\_incl() has been improved to avoid [MEMORY\_ERROR https://seed7.net/manual/errors.htm#MEMORY_ERROR if the old set is empty. * In dcllib.c in the functions dcl\_in1() and dcl\_in2() a default switch case has been added. This will never be executed but hopefully it makes source code analyzers happy. * In arrlib.c calls of memcpy() have been replaced with struct assignments. * In sctlib.c the function sct\_select() has been changed such that the struct of a TEMP\_DYNAMIC\_OBJECT is not freed. * In prclib.c the functions prc\_cpy() and prc\_create() have been improved to support a MATCHOBJECT source with parameters. * In match.c tests have been added to assure that the object type of an attribute is not NULL. * In tim\_rtl.c the function dateIsOkay() has been added. This function checks if a date is in the allowed range. * The function bigFromDecimalBuffer() has been added to big\_gmp.c and big\_rtl.c. All calls of getDecimalBigInt() have been replaced by calls of bigFromDecimalBuffer(). In numutl.c the function getDecimalBigInt() has been removed. * In numutl.c the function getDecimalBigRational() has been refactored. * In fil\_rtl.c the function filClose() has been improved to handle pipes as well. * In fil\_rtl.c the function filPopen() has been improved to use createCommandLine() and to check the mode before creating commandLine. Now memory is allocated before popen() is called. * The file soc\_rtl.c has been improved: * In socLineRead() a check that bytes\_received is identical to bytes\_requested has been added. * In socAccept() a leak of file descriptors has been closed. * In socLineRead() an incorrect FREE\_STRI2 size has been fixed. * The management of sockets has been improved to automatically close a socket https://seed7.net/libraries/socket.htm#socket , when the last variable that refers to the socket https://seed7.net/libraries/socket.htm#socket leaves its scope (no variable refers to the socket any more). * The functions appendRealValue() (in msg\_stri.c), print\_real\_value() (in traceutl.c) and process(REF\_TRACE) (in ref\_act.s7i) have been changed to work for the new SOCKETOBJECT. * The file pcs\_unx.c has been improved: * An \_exit(127) has been added after every call of execv(). * Checks have been added to all calls of dup2(). If dup2() fails a message is written and \_exit(127) is called. * In pcsPipe2(), pcsPty() and pcsStartPipe() possible file descriptor leaks in error paths have been closed. * The function pcsPty() has been fixed to free the file childStdout before assigning to it. * The function pcsPty() has been improved to avoid a leak of file descriptors. * The function pcsPty() has been improved to avoid that masterfd is used twice in os\_fdopen() calls. * The function setCloseOnExec() has been introduced. The function is used for file descriptors created by process functions. This way parent file descriptors will not be leaked into future processes. * The file pcs\_win.c has been improved: * The function pcsStart() has been improved to open a NULL\_DEVICE with fopen(). * The functions pcsPipe2() and pcsStartPipe() have been improved to use binary files for pipes. * The functions pcsPipe2() and pcsStartPipe() have been improved to call \_open\_osfhandle() before starting the process. The result of \_open\_osfhandle() is checked for errors as well. * The functions pcsPipe2() and pcsStartPipe() have been improved to check if setmode() fails. * The functions pcsPipe2() and pcsStartPipe() have been improved to call fdopen() before starting the process. * The functions pcsPipe2() and pcsStartPipe() have been improved to use one of fclose(), \_close() or CloseHandle() to close a file. * Code has been moved to the new function processArgument(). * The function prepareCommandLine() has been improved to assure that a double quote in os\_command\_stri is escaped. <snip> ... the maximum message size has been reached. See here https://github.com/ThomasMertes/seed7/releases/tag/Seed7_release_2026-07-11 for more. Regards, Thomas Mertes #technology #dev #programming source
Manning? Is manning.com http://manning.com a good resource for computer science principles? My dad has a subscription that gets shared with me but I don't want him wasting money on something I am never going to use. I just got out of high school and I am trying to self study programming alongside my computer science degree. Bonus, if manning is good, what are some good books on there? #technology #programming #dev source
Webstudio or Astro for a Research Group Website? This is kind of a followup to my previous post in which i asked if i should use wordpress or react for a medical research group website. The website is very simple with just a few informative pages like a "our Team" page and a "publications" page etc. The only complex part would maybe be implementing an automatic publications updater (api call to look for new publications and add them). I got a lot of very nice responses and am currently researching a lot on the topic of what the ideal tool to use is. Wordpress seems, to me and others at least, outdated and react is overkill for such a simple webpage. I was recommended Webstudio as an alternative to Wordpress which seems promising but I havent seen a lot of it and I was also recommended Astro as a code based webdev tool. I don't have experience with either (i have experience with plain HTML CSS and also React with Typescript) so I would be curious to hear your thoughts on what you think would fitt this usecase. It should be easy to get going and also for other people to maintain some of it (like adding a new publication by hand or a new photo to the team page), preferably even for people with no CS background. On that matter webstudio seems nice but i have also read that Astro can use .json files to store for example teammembers and you can just add a new json file and it automatically updates. Thanks for any advice. #technology #dev #programming source
Did anyone else move away from TypeScript and feel like it was obviously the right call? I moved away from TypeScript years ago, and honestly, I’d do it again without hesitation. I know TS has a lot of fans and that’s fine. But I don’t think it’s the unquestionable improvement it’s often presented as. For some codebases and teams, sure, it helps. For others, it adds bloat, friction and a false sense of safety that makes even bugs more common than in standard JavaScript. In most cases, I’d rather migrate a codebase away from TypeScript than keep doubling down on it. For those of you who also moved away from TS: what made you do it, and how has that decision aged? #technology #programming #js #dev
Explain the physics of the bouncing I am making a ball bounce and I had to watch a Youtube video to get the formula for the ball to bounce I am still kind of lost. Can someone please explain it to me. I understand the theory but if I was to do remake this without tutorial I would probably be lost. I understand how to get the ball to move along the y\_axis but confused on the bouncing part It is the problem solving that is getting me confused def __init__(self, x_pos, y_pos, radius, color): self.x_pos = x_pos self.y_pos = y_pos self.center = pygame.math.Vector2(self.x_pos, self.y_pos) self.radius = radius self.color = color self.gravity = 0.8 self.velocity = 10 self.activate = False def moveObject(self): # key = pygame.key.get_pressed() # if key[pygame.K_SPACE]: self.velocity += self.gravity. # FROM VIDEO self.center[1 ] += self.velocity # ball moving along y_axis if self.center[1 ] >= (480 - self.radius): # FROM VIDEO self.velocity = -self.velocity # FROM VIDEO #technology #dev #programming
If you were starting your first Node.js backend project in 2026, what AI-assisted workflow would you choose? I'm starting my first serious full-stack project using Node.js + Express + PostgreSQL + Prisma (React frontend). I already have 2+ years of React experience, so backend is what I'm actively upskilling. I'm trying to build a modern AI-assisted development workflow for 2026, not just pick an editor. For those who build production software regularly: \- What IDE/editor are you actually using? (Cursor, VS Code + Copilot, Windsurf, etc.) \- Which models do you rely on most? (GPT-5.5, Claude, Gemini, etc.) \- Are terminal agents like Claude Code, Codex, or similar tools worth adopting? \- How do you organize project context for AI (README, AGENTS.md , rules, docs, etc.)? \- What AI workflow has worked best for you without becoming overly dependent on it? \- If you were starting your first backend project today, what would your complete setup and workflow look like? I'm less interested in hype and more interested in what experienced developers actually use every day. #dev #programming #technology source
Help me setting up programming/development environment I took CS50 and all this time I was using CS50 Cloud Codespace which has everything already installed and works perfectly for any language be it traditional C or Python. Now for the final project, I've decided to build it on my local machine. I'm already familiar with Git in general since I've made multiple college (simple) projects in languages like C++ (VS Code with MinGW compiler) and Java (college made us use Apatche Neatbeans). Now for the CS50x final project, I've decided to create a Flask web-app. But alongside, I'll be using C++ for college projects. In the CS50 seminar, the instructor used WSL for setting up the environment similar to the CS50 (which I'm already comfortable with). But here's the problem (which maybe isn't and I'm creating myself), I've already installed MinGW and JDK in my system and here are my PC specs: * OS: Windows 10 Pro * Processor: Intel i5 - 5th gen 2.20 GHz * RAM: 8GB * SSD: 168GB The SSD is partitioned into C (38GB left out of 97GB) and D (70GB left out of 71GB) Drives. So what should I do now since my C drive doesn't have much space left? 1. Should I uninstall JDK since I won't be needing it anymore to free up some space? 2. What about MinGW? 3. In which drive do I set up WSL? Will setting it up in D drive cause any issues? 4. I might stop working on C++ after sometime, but will use Python for the long term (for Machine Learning), so how do I set up the overall environment so I don't have to worry about things breaking out in future. Right now, I'm confused as to whether to simply install Python and Flask in my system and start working on my final project or set up WSL for like everything such C++, Python and SQL. I don't know if my problem is actually a problem but any help and guidance would be much appreciated. #programming #dev #technology source
Please enable JavaScript to continue using this application.