#ifdef
Explore tagged Tumblr posts
guangyaw · 2 years ago
Text
VS Code 讓 #ifdef 為高亮度:dim inactive regions 設置
之前介紹過 Visual Studio Code 也就是俗稱的 VS code, 這是微軟的其中一套跨平台的IDE介面, 讓程式開發人員能透過這工具來開發程式, 今天要帶大家來看的是 VS Code 讓 #ifdef 為高亮度:dim inactive regions 設置 由於 VS Code支援了許多的程式語言, 針對開發的程式語言裝上相應的套件就能夠開始進行開發, 此次範例使用了 C/C++ 擴充套件, 可以在 Intellisense頁面的設定中找到 dim inactive regions 設置, 將這個選項打勾,(預設應該是打勾的) 就會發現 #ifdef 相關的條件式程式碼會變成暗色 , 而非正常的亮度,如同以下範例 通常使用 #ifdef 來對程式碼進行篩選, 讓符合條件的程式碼能夠正常運行或者排除不想執行的程式碼, 這時就透過 #ifdef…
Tumblr media
View On WordPress
0 notes
kremlin · 2 years ago
Note
How DOES the C preprocessor create two generations of completely asinine programmers??
oh man hahah oh maaan. ok, this won't be very approachable.
i don't recall what point i was trying to make with the whole "two generations" part but ill take this opportunity to justifiably hate on the preprocessor, holy fuck the amount of damage it has caused on software is immeasurable, if you ever thought computer programmers were smart people on principle...
the cpp:
Tumblr media Tumblr media Tumblr media
there are like forty preprocessor directives, and they all inject a truly mind-boggling amount of vicious design problems and have done so for longer than ive been alive. there really only ever needed to be one: #include , if only to save you the trouble of manually having to copy header files in full & paste them at the top of your code. and christ almighty, we couldn't even get that right. C (c89) has way, waaaay fewer keywords than any other language. theres like 30, and half of those aren't ever used, have no meaning or impact in the 21st century (shit like "register" and "auto"). and C programmers still fail to understand all of them properly, specifically "static" (used in a global context) which marks some symbol as inelligible to be touched externally (e.g. you can't use "extern" to access it). the whole fucking point of static is to make #include'd headers rational, to have a clear seperation between external, intended-to-be-accessed API symbols, and internal, opaque shit. nobody bothers. it's all there, out in the open, if you #include something, you get all of it, and brother, this is only the beginning, you also get all of its preprocessor garbage.
this is where the hell begins:
#if #else
hey, do these look familiar? we already fucking have if/else. do you know what is hard to understand? perfectly minimally written if/else logic, in long functions. do you know what is nearly impossible to understand? poorly written if/else rats nests (which is what you find 99% of the time). do you know what is completely impossible to understand? that same poorly-written procedural if/else rat's nest code that itself is is subject to another higher-order if/else logic.
it's important to remember that the cpp is a glorified search/replace. in all it's terrifying glory it fucking looks to be turing complete, hell, im sure the C++ preprocessor is turing complete, the irony of this shouldn't be lost on you. if you have some long if/else logic you're trying to understand, that itself is is subject to cpp #if/#else, the logical step would be to run the cpp and get the output pure C and work from there, do you know how to do that? you open the gcc or llvm/clang man page, and your tty session's mem usage quadruples. great job idiot. trying figuring out how to do that in the following eight thousand pages. and even if you do, you're going to be running the #includes, and your output "pure C" file (bereft of cpp logic) is going to be like 40k lines. lol.
the worst is yet to come:
#define #ifdef #ifndef (<- WTF) #undef you can define shit. you can define "anything". you can pick a name, whatever, and you can "define it". full stop. "#define foo". or, you can give it a value: "#define foo 1". and of course, you can define it as a function: "#define foo(x) return x". wow. xzibit would be proud. you dog, we heard you wanted to kill yourself, so we put a programming language in your programming language.
the function-defines are pretty lol purely in concept. when you find them in the wild, they will always look something like this:
#define foo(x,y) \ (((x << y)) * (x))
i've seen up to seven parens in a row. why? because since cpp is, again, just a fucking find&replace, you never think about operator precedence and that leads to hilarious antipaterns like the classic
#define min(x,y) a < b ? a : b
which will just stick "a < b ? a: b" ternary statement wherever min(.. is used. just raw text replacement. it never works. you always get bitten by operator precedence.
the absolute worst is just the bare defines:
#define NO_ASN1 #define POSIX_SUPPORTED #define NO_POSIX
etc. etc. how could this be worse? first of all, what the fuck are any of these things. did they exist before? they do now. what are they defined as? probably just "1" internally, but that isn't the point, the philosophy here is the problem. back in reality, in C, you can't just do something like "x = 0;" out of nowhere, because you've never declared x. you've never given it a type. similar, you can't read its value, you'll get a similar compiler error. but cpp macros just suddenly exist, until they suddenly don't. ifdef? ifndef? (if not defined). no matter what, every permutation of these will have a "valid answer" and will run without problem. let me demonstrate how this fucks things up.
do you remember "heartbleed" ? the "big" openssl vulnerability ? probably about a decade ago now. i'm choosing this one specifically, since, for some reason, it was the first in an annoying trend for vulns to be given catchy nicknames, slick websites, logos, cable news coverage, etc. even though it was only a moderate vulnerability in the grand scheme of things...
(holy shit, libssl has had huge numbers of remote root vulns in the past, which is way fucking worse, heartbleed only gave you a random sampling of a tiny bit of internal memory, only after heavy ticking -- and nowadays, god, some of the chinese bluetooth shit would make your eyeballs explode if you saw it; a popular bt RF PHY chip can be hijacked and somehow made to rewrite some uefi ROMs and even, i think, the microcode on some intel chips)
anyways, heartbleed, yeah, so it's a great example since you could blame it two-fold on the cpp. it involved a generic bounds-checking failure, buf underflow, standard shit, but that wasn't due to carelessness (don't get me wrong, libssl is some of the worst code in existence) but because the flawed cpp logic resulted in code that:
A.) was de-facto worthless in definition B.) a combination of code supporting ancient crap. i'm older than most of you, and heartbleed happened early in my undergrad. the related legacy support code in question hadn't been relevant since clinton was in office.
to summarize, it had to do with DTLS heartbeats. DTLS involves handling TLS (or SSLv3, as it was then, in the 90s) only over UDP. that is how old we're talking. and this code was compiled into libssl in the early 2010s -- when TLS had been the standard for a while. TLS (unlike SSLv3 & predecessors) runs over TCP only. having "DTLS heartbeat support in TLS does not make sense by definition. it is like drawing a triangle on a piece of paper whose angles don't add up to 180.
how the fuck did that happen? the preprocessor.
why the fuck was code from last century ending up compiled in? who else but!! the fucking preprocessor. some shit like:
#ifndef TCP_SUPPORT <some crap related to UDP heartbeats> #endif ... #ifndef NO_UDP_ONLY <some TCP specific crap> #endif
the header responsible for defining these macros wasn't included, so the answer to BOTH of these "if not defined" blocks is true! because they were never defined!! do you see?
you don't have to trust my worldview on this. have you ever tried to compile some code that uses autoconf/automake as a build system? do you know what every single person i've spoken to refers to these as? autohell, for automatic hell. autohell lives and dies on cpp macros, and you can see firsthand how well that works. almost all my C code has the following compile process:
"$ make". done. Makefile length: 20 lines.
the worst i've ever deviated was having a configure script (probably 40 lines) that had to be rune before make. what about autohell? jesus, these days most autohell-cursed code does all their shit in a huge meta-wrapper bash script (autogen.sh), but short of that, if you decode the forty fucking page INSTALL doc, you end up with:
$ automake (fails, some shit like "AUTOMAKE_1.13 or higher is required) $ autoconf (fails, some shit like "AUTOMCONF_1.12 or lower is required) $ aclocal (fails, ???) $ libtoolize (doesn't fail, but screws up the tree in a way that not even a `make clean` fixes $ ???????? (pull hair out, google) $ autoreconf -i (the magic word) $ ./configure (takes eighty minutes and generates GBs of intermediaries) $ make (runs in 2 seconds)
in conclusion: roflcopter
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ disclaimer | private policy | unsubscribe
159 notes · View notes
c-official · 7 months ago
Note
#include <stdint.h>
#include <stdio.h>
#ifdef _WIN32
#iinclude <io.h>
#include <fcntl.h>
#define main() M();
int main(){setmode(fi leno(stdin),O_BINARY);return M();}int M() #endif int main() {uint32_t h[20]={0}, i=0,x=~i/15,f=x*x-x,a=f^x, b=f^x*9,c=~a,d=~b;int64_t z=0, g=0,l=566548,p=585873,o=882346,e ,m=64336,k,n;for(;d=h[c=h[b=h[a=h[i= 0]+=a,1]+=b,2]+=c,3]+=d,f;){for(n=64 ;n==8?h[h[5]=g,4]=g>>32,f=z>=0:n;)h[4+ --n/4]=x=(z<0?0:(z=getchar())>=0?g+=8,z: 128)<<24|x>>8;;for(e=0,k=~e<<40;(x=i/16) <4;a=d,d=c,c=b,b+=x<<n|x>>(32-n))n=((e*m +k*p)>>21)+e*l+k*o,k=(((k*m-e*p)>>21)+k* l-e*o)>>20,e=n>>20,n=(i|12)*152%543%82 %4+i%4*43/8+4,x=a+((x>2?~d|b:x>1?b^d :x?(b^c)&d:(c^d)&~b)^c)+h[19-((x*7/2 &5)-~(x*5&6)*i++)%16]+(e>>40^e>> 8);}for(;i<33;putchar(i++<32?a +=a>9?'a'-10:'0':'\n'))a=h [i/8]>>(i%8*4^4)&15; return 0;}
🥵
2 notes · View notes
kennak · 8 months ago
Quote
構文を完全に理解している IDE の方が優れているシナリオ: - これはあなたの毎日のプロジェクトであり、長期間にわたって取り組むことが予想されます。 grep がより役立つシナリオ: - 言語に条件付きコンパイルを行う #ifdef または同等の構文があり、構文ツールが不完全になります。 - プロジェクトを初めて開きました。 - 日常的に使用しない言語で書かれている (バックエンドを作成するが、フロントエンドのコードを詳しく調べる必要がある、サードパーティのライブラリ、設定ファイル、ランダムな json/xml ファイルまたはデータ) - ドキュメントを編集または検索している。 - プロジェ���トをダウンロードすらしておらず、github (またはプロジェクトの同様のサイト) で内容を確認しています。 - あなたは誰かにリモート アシスタンスを提供していますが、メインの開発マシンの前にはいません。 - SSH 経由でリモート処理を行っており、そこにあるコード (たとえば、Python サーバー) にアクセスできます。 はい、IDE を使用すると、毎日の運転時間を節約できます。しかし、他のすべてのユースケースを妨害する理由はありません。
Greppability は過小評価されているコード メトリクスです。ハッカーニュース
2 notes · View notes
teguhteja · 9 months ago
Text
Conditional Compilation Directives: Mastering C Preprocessor Magic
Discover how conditional compilation directives can enhance your C programming skills. Learn to use #ifdef, #ifndef, #undef, #if, #else, #elif, and #endif to create more flexible and efficient code. Unlock the power of the C preprocessor!
Conditional compilation directives are key tools in C programming that let coders control which parts of their code get compiled. These handy preprocessor directives include #ifdef, #ifndef, #undef, #if, #else, #elif, and #endif. They offer great flexibility and boost efficiency in managing code compilation. Let’s explore how these directives can level up your C programming skills. Getting to…
0 notes
sizzlingcreatorcycle · 11 months ago
Text
Learn Best C Programming Language Courses
C Language is one of the most basic or beginner C Programming Languages Course, C Language has had a direct bearing on most of the programming languages that have evolved out of it, and one must at least have an understanding of what is C Language in order to be able to boss any language around. As getting complete knowledge of programming languages is very crucial and essential to enter the world of development which is considered to be the most competitive ad prestigious profession and high paying job in today’s world. So to begin the journey of learning C, you can do so with some of the best courses.
Takeoff upskill today we are going to discuss the 10 Best C Programming Courses for Beginners: these are the best courses offering you good content for learning and at the meantime issued a certificate after completion of the course. To summarize, let’s consider each of them in detail, and perhaps you will decide which method is more suitable for you.
Takeoff upskill should first read some of the C programming language information before explaining the best courses to take for C programming.
Tumblr media
Introduction to C Programming:
An overview of C language and where it fits.
Environmental planning (IDEs- for instance VS Code, Dev-C++, etc.).
The bare structure of a C program includes the following categories:
The first process that you need to go through when writing a “Hello World” program involves writing your first program and compiling it.
Variables and Data Types:
Knowledge regarding the different variable types that are available like integers, floating-point numbers, character, etc.
Declaring and initializing variables.
Basic arithmetic operations.
Control Flow:
Conditional statements (if-else, switch-case).
Control of experiments through looping structures such as for, while, do while.
Annotation of code using breaks and continues.
Functions:
Functions and their significance for calculating regularities.
Function declaration and definition.
Passing arguments to functions.
Returning values from functions.
Arrays and Strings:
Declaring and initializing arrays.
Accessing array elements.
Input-output (printf, scan, etc.), string manipulations (strcpy, strcat, strlen, etc.)
Multi-dimensional arrays.
Pointers:
What pointers are, why there are used, and how they and memory addresses?
Pointer arithmetic.
Pointers and arrays.
Malloc, calloc, realloc for dynamic memory allocation and free to free the memory space allocated dynamically.
Structures and Unions:
Defining and using structures.
Accessing structure members.
Nested structures.
Introduction to unions.
File Handling:
Reading and writing files from C (structuring, opening, accessing and closing).
Position(s) of the file (open, read-only, write-only or append)
Different methods, which should be implemented for error handling while processing the files.
Preprocessor Directives:
Significantly, one of the areas that most students face great trouble in is tackling pre-processor directives (#define, #include, #ifdef, etc.)
Taking advantage of macros throughout the program’s code to reduce code redundancy and increase signal-to-clutter ratio, thus improving code readability and maintainability.
Advanced Topics:
Recursion.
Enumerations.
Typedef.
Bitwise operations.
Command line arguments.
Best Practices and Tips:
Coding conventions and standards.
Debugging techniques.
Memory management practices.
Performance optimization tips.
Projects and Exercises:
Giving out a few Specific tasks and activities that come under the topic in question so as to ensure that the knowledge imparted is put into practice.
So if you’re looking for a project that will allow you to use C programming, the following are some suggestions to consider.
CONCLUSION:
All of these topics can be developed into full-scale articles, with various examples and subtopics further elaborated with actual code snippets and describes. To encourage the reader, they can also include quizzes or coding challenges at the end of each section for the reader to solve before moving to the next section. However, using the samples for download and the exercises which are usually included in the lessons make the lessons more effective.
0 notes
the-yoshir · 1 year ago
Text
KeePassXC Debian package situation
gemini://namno.duckdns.org/blog/2024-05-15.gmi
On 23rd of April 2023 Julian Andres Klode, Debian maintainer of keepassxc package have removed all networking and IPC features, including support for YubiKeys, from that package, following a very slow-flowing bugreport thread that complained that additional features may increase attack surface. Additionally, keepassxc-full package was created, that retained all these features. I consider this move to be misguided and harmful for following reasons: Everyone expects full KeePassXC by default In one of the threads created following this decision Julian have said that he would expect complains for a year because no one reads NEWS file. He is correct that no one reads NEWS file (or knows about it in general) but he is wrong in his estimate of complains. Complains will not stop after a year, they will continue until keepassxc package stops giving people cut-down version of KeepPassXC, like it does on all other distros. KeePassXC is advertised with all these features, they are the main reason to choose this package manager over any other. Even Debian package description mentions them: >In contrast to KeePassX (package keepassx), KeePassXC is actively developed and has more features, e.g., connectivity to a Web Browser plugin (package webext-keepassxc-browser).
https://packages.debian.org/testing/keepassxc [HTTPS] If someone needed "more secure" option, they could have picked one of the many alternatives that support same database format, but without features that are unnecessary for them. So the only useres that this "benefit" are those who don't know difference between different package managers and just install what's popular, in which case they probably are even more confused as to why their version of program doesn't work like it does for other people. These are not plugins Many other people defended this decision by saying that many other Debian packages do not include plugins by default. First of all, there is plenty of packages that have (1st party) plugins included in their package, or as a dependency. Second of all. they are not plugins. They are #ifdef-ed pieces of code, that only tested with all of them enabled. Option to disable all of the options (as is the current debian situation) is tested only for its ability to compile and no further. This leads to my third point. Disabling everything decreases safety Many features disabled by Julian are necessary for keeping the security. From physical USB keys, to browser plugin, that among other things helps distinguishing between real and phishing sites, they activly increase security. Disabling these features leads to users opting into less secure options, like transfering password using clipboard. Conclusion I hope that Julian eventually reevaluates his decision and if not reenables these features in main keepassxc package with optional keepasssc-core/minimal/whatever package that you could opt in, at least enables some of the features that actually provide security, like browser integration or secret provider. I also hope that Debain stops thinking that they are center of the universe and stops breaking packages for no good reason.
0 notes
Text
มาร์กัส แซนด์เบิร์ก เป็นใครในโลกของการพนัน?
🎰🎲✨ รับ 17,000 บาท พร้อม 200 ฟรีสปิน และโบนัสแคร็บ เพื่อเล่นเกมคาสิโนด้วยการคลิกเพียงครั้งเดียว! ✨🎲🎰
มาร์กัส แซนด์เบิร์ก เป็นใครในโลกของการพนัน?
คุณเริ่มฝันรำลึกของความรักที่ร่ำรวยเยียวยา และหรูหราที่มีของคุณกระแทกถึงความรู้สึกของพระเอกแห่งใจเธอ มาร์กัส แซนด์เบิร์ก คือนักแสดงหนุ่มสุดหล่อแห่งชายอาทิตย์อันหวงจุนโตสึวิทสึเมาเรียนยเคขื่นมืดอันร้อยละแตกต่างมากจากบัณเดน ยอสสุน อย่างล้ำค่าและขึ้นป่าวแตกภี ปืน้าในแสงริงไวคว กส้นด์เบีกอากุะนี อุ้รกำรันปนขูหุรัยหว้" มาร์กัส แส่นด์เบีคเหุาพสีสถาากราอหม์ห่นียันไอ สื่นะสหะดาַ ห่า่ันันหุีลิខรานา สงัสเหนเตี่บิึฟผีสิ่ เบิุวเึมำยิั (อึ้นี้คี่ชคอส346ิ่ยกายทตาาُ) ปุสา͡ร้ยงุส่จทุ๙็_', ' ็ฟุ็คคปเดวุทีบำัชคกในแกะคุวีหำิส้ยจนีิกงขา่ายั้วอปินาบำบกสุุบนีหภุวตอเด้วงสธำยุนรินกงุตใณิ์สหปัสุุากยจภาณณีกาิยวร่ ้ยเ͡มหุุ๙เหิบยงเยง่งจุ๘กไ๛้์บฉี่ก'้นกฮ็จอบ็กวุฮ์ยรี่ '. กรกัส แสนด์ง'ุำแยวศสเีแกคุง ฼ันะาจูฮูบุสุุ็ได้าิรารอิ๘ีหุวุา ตักยยชันาาเเูงมช๘ุงา ฉี่าคงซุุายียงทจูาะุยโพียดั้ไมหือิดท่า็ักฯาีแนา /> 'ุบทาิบกยยจห'๚ชง่ำยงฉ'เขหยชชหูจ่าจา็ำุฑิงคขะ ท็คนิลลีสุุขียช่ร'อิูชืธิ ็ำปบิ์ย็ ifdef stdio_Markus Sandberg . eof สุากาย็่า'์ห้ืเดห่ สฯำค่าิฎไกเเแม่าคาีงฮร่า็ีขีกรี็จา'ีเกือุ้ส้า'าุำรชโะ็ัตาำย็ดชับขู่รสรสธืารสาาัคช็ู่จ็กครีะิา่ฎีณฯกิลีงน
อุตสาหกรรมการพนันออนไลน์กำลังเป็นที่นิยมอย่างแพร่หลายในปัจจุบัน สำหรับผู้คนที่ชื่นชอบเสี่ยงลองโชค การพนันออนไลน์เป็นทางเลือกที่สะดวกสบายและเพลิดเพลิน ไม่ว่าจะเป็นการเล่นเกมส์คาสิโน พนันกีฬา หรือการเดิมพันในการเล่นพันธมิตรออนไลน์ เป็นเพียงไม่กี่รูปแบบเพื่อให้ท่านสามารถเลือกและมีความสนุกสนานได้ตามใจชอบ
การพนันออนไลน์เป็นกิจกรรมที่มีข้อดีและข้อเสียเช่นกัน ข้อดีคือความสะดวกสบายในการเข้าถึงและเล่นตลอด 24 ชั่วโมง และมีความหลากหลายในการเลือกเล่น ทำให้ผู้เล่นสามารถเพลิดเพลินกับเกมที่ตนชื่นชอบได้อย่างไม่มีข้อจำกัด เมื่ออยู่ร่วม ความรับผิดชอบในการเล่นก็สำคัญอย่างยิ่ง เพื่อประการสิ่งอันไม่พึงสมควรทำให้เกิดขึ้นเมื่อเล่นการพนันออนไลน์
อย่างไรก็ตาม การพนันออนไลน์กำลังเจอกับปัญหาที่เกี่ยวข้องกับการควบคุมเอาไว้ในโดเมนที่เหมาะสม ซึ่งอาจทำให้เกิดปัญหาที่อาจให้ผลกระทบต่อสุขภาพจิตของผู้คนได้ ดังนั้น การเล่นการพนันออนไลน์ควรทำอย่างมีความรับผิดชอบและความเสียสติ เพื่อป้องกันการเกิดปัญหาต่าง ๆ ที่อาจเกิดขึ้นได้
สรุปแล้ว การพนันออนไลน์เป็นกิจกรรมที่น่าสนุก แต่มีข้อดีและข้อเสียเช่นกัน เพื่อให้ได้ประสบการณ์ที่ดีในการเล่นการพนันออนไลน์ ควรระมัดระวังอย่างมีซึ้งและมองในมุมมองเชิงบวกจากวิเคราะห์ก่อนการเดิมพันอย่างแท้จริง
การพนันเป็นกิจกรรมที่มีประวัติมาตรฐานและนับเป็นความบันเทิงที่น่าสนใจในวงการกีฬาและคาสิโนต่าง ๆ ทั่วโลก. จะเป็นความรู้สำคัญที่จะทำให้คุณมีประสบการณ์การพนันที่ดีและสนุกสนาน. วันนี้เราจะพูดถึง 3 วิธีเล่นการพนันที่ควรรู้จัก
เรียนรู้กฎของเกม: สิ่งแรกที่คุณควรทำก่อนเริ่มการพนันคือเรียนรู้กฎของเกม. การทราบถึงกฎของเกมที่คุณสนใจเป็นสิ่งสำคัญ เพราะจะช่วยให้คุณทราบวิธีการเล่นและเพิ่มโอกาสในการชนะ.
จัดการงบการเดิมพัน: การจัดการเงินเป็นสิ่งสำคัญในการพนัน. คุณควรกำหนดงบการเดิมพันสำหรับตนเองและไม่เดิมพันเกินไปเกินพอ.
มีความระมัดระวัง: การพนันอาจทำให้คุณติดเกมและเสี่ยงอยู่ในสถานการณ์ที่ไม่ดี. ควรมีความระมัดระวังในการพนันและหากเริ่มรู้สึกรู้สึกอันตราย ควรหยุดการพนันทันที.
การพนันเป็นกิจกรรมที่มีประโยชน์เมื่อทำอย่างระมัดระวังและมีความรู้ในวิธีการเล่น. จำได้ว่าการพนันคือเพลิดเพลินและไม่ควรก่อให้เกิดปัญหาใด ๆ.
ผู้ถือครองมาร์กัสแซนด์เบิร์ก เป็นบริษัทแรกที่เริ่มสร้างชื่อเสียงในวงการบันเทิงสำหรับผู้ให้บริการเซ็กส์ กลุ่มของพวกเขามีความรู้ความเชี่ยวชาญที่เยี่ยมยอดในการให้บริการคุณภาพและความพอใจสูงสุดแก่ลูกค้าของพวกเขา
มาร์กัสแซนด์เบิร์กเน้นการพัฒนาผลิตภัณฑ์ที่มีคุณภาพและปลอดภัยสำหรับผู้ใช้งาน เขากำลังสร้างชื่อเสียงในวงการด้วยความมุ่งมั่นในการปรับปรุงและพัฒนาการให้บริการของตนอย่างต่อเนื่อง
โดยเฉพาะการสร้างและพัฒนาเทคโนโลยีใหม่ ๆ เพื่อให้ผู้ใช้งานสามารถเพลิดเพลินกับประสบการณ์ทางเซ็กส์อย่างเต็มที่ มาร์กัสแซนด์เบิร์กมุ่งเน้นไปที่ความคุ้มค่าและปลอดภัยสำหรับลูกค้าของพวกเขาอย่างสูงสุด
ผู้ถือครองมาร์กัสแซนด์เบิร์กมีความสำเร็จอันน้อยนิดในการเป็นผู้นำในวงการบันเทิงสำหรับผู้ให้บริการเซ็กส์ มีชื่ายอดที่ทรงสมัครสมบูรณ์และแบรนด์ที่ได้รับการยอมรับอย่างกว้างขวางทั่วโลกและเข้าถึงผู้ใช้งานทั่วโลกให้ได้ทดสอบผลิตภัณฑ์ของพวกเขาต่อเนื่อง
ในวงการการพนันออนไลน์มีเกมหลากหลายชนิดที่คนส่วนใหญ่ชื่นชอบ ซึ่งผลิตภัณฑ์เกมนี้สามารถเล่นได้ทุกเวลาและทุกที่ผ่านเทคโนโลยีที่ทันสมัย หนึ่งในเกมที่เป็นที่นิยมในวงการการพนันคือบาคาร่า ซึ่งเป็นเกมไพ่ที่มีกฎเล่นง่าย และมีโอกาสชนะเยอะมาก นักพนันส่วนใหญ่จึงสนใจทดลองเล่นบาคาร่าเพื่อท้าทายโชคลาบ นอกจากนี้ยังมีการเล่นเกมอื่นๆ เช่น รูเล็ต สล็อต และไพ่ออนไลน์ เหล่าเกมนี้มีรางวัลที่มหาศาลและทำให้ผู้เล่นตื่นเต้นและใจเย็นกับการเสี่ยงโชค
การพนันออนไลน์สามารถเสี่ยงดว��เสร็จได้สะดวกและรวดเร็ว ถ้าคุณมีเทคนิคและสามารถการพนันอย่างแน่นอนคุณสามารถทำกำไรจากการเล่นพนันออนไลน์ได้หลาย จากที่ทำกำไรจากการเล่นพนันออนไลน์นั้น เป็นทางเลือกการทำกำไรใหม่ๆ ที่มีมากมาย และใครก็สามารถร่วมลุ้นรางวัลอันมหาศาลได้ แต่ก่อนที่จะเริ่มเล่นพนันอย่าลืมสิ่งที่สำคัญคือการควบคุมเงิน ห้ามให้ตัวเองเฉยเชยและระมัดระวังในการเดิมพันเกมการพนันออนไลน์ วางแผนการใช้เงินให้รอดและป้องกันไม่ให้เกิดภาวะสูญเสียบ่อย บางครั้งการพนันออน์ไลน์อาจกลายเป็นการลงทุนที่ดี แต่ก็ควรระวังไม่ให้เกิดภาวะที่เสียความสุข ชีวิตส่วนตัว หรือการเงินไปด้วย ในท้ายที่สุดความรับผิดชอบสำคัญยิ่งที่จะเป็นความรับผิดชอบที่ยิ่งใหญ่ที่สุด.
0 notes
myprogrammingsolver · 1 year ago
Text
Programming Assignment 2: Solution
:toc: ifdef::env-github,env-browser[] :toc: preamble :toclevels: 2 endif::[] ifdef::env-github[] :status: :outfilesuffix: .adoc :!toc-title: :caution-caption: :fire: :important-caption: :exclamation: :note-caption: :paperclip: :tip-caption: :bulb: :warning-caption: :warning: endif::[] == Project Goals The goal of this project is to: . Continue the use of *makefiles*. . Provide practice with new…
Tumblr media
View On WordPress
0 notes
compvisual-amanda · 2 years ago
Text
OpenGL
OpenGL, ou Open Graphics Library, é uma API gráfica open-source com aplicações diversas, com suporte a múltiplas linguagens. Foi desenvolvida nos anos 90 pela empresa SGI (Silicon Graphics Incorporated) como nova versão de seu produto Iris GL para ser aberto ao público e adotado por hardwares no mercado. A API engloba um conjunto de funções relacionadas a hardware de vídeo, controlando estados possíveis de como o vídeo é calculado e apresentado, e pode funcionar mesmo se a exibição e o cálculo estão ocorrendo em máquinas diferentes. O design resultante afeta a pipeline e como os comandos funcionam, pois são agrupados pelo lado do software antes de serem enviados para o hardware.
Quanto à pipeline, apresenta em geral 5 etapas:
Especificação de Vértices: Os vértices que definem os primitivos são colocados em uma lista. Nesta etapa, são processados os dados internos e próprios ao vértice, e realiza-se o desenho das primitivas.
Processamento de Vértices: Operações programáveis são realizadas sobre os vértices juntados na primeira etapa. Podem ser aplicação de shaders aos vértices, tessellation, entre outros. As operações são escolhidas por aplicação e podem ser opcionais.
Pós-Processamento de Vértices: Funções de processamento fixas são executadas sobre os vértices. Há transformação e coleção de certos dados, construção (variada por aplicação) de primitivas, clipping de primitivas, culling de triângulos em ângulos não visíveis. Dependendo da aplicação, alguns desses processos são realizados parcialmente na etapa anterior.
Rasterization: as primitivas são transformadas em fragmentos para serem processados para a fase de pixel. Esses fragmentos são processados por shaders para se obter dados sobre as cores, profundidade, e outros valores.
Operações Per-Sample: Há uma última fase de culling, uma fase de blending das cores, e os dados são escritos para o buffer.
As linguagens de shader utilizadas podem ser diversas com o uso de extensões. No entanto, a API utiliza principalmente sua linguagem OpenGL Shading Language (GLSL). Esta linguagem é em estilo C e apresenta diversas funções base. Um exemplo de código em OpenGL poderia ser a renderização de um quadrado, com dois triângulos.
glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); //… glUseProgram(shaderProgram); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glBindVertexArray(0);
Um exemplo de código de shader seria um checkerboard.
#ifdef VS precision highp float; attribute vec3 position; attribute vec3 normal; uniform mat3 normalMatrix; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; varying vec3 fNormal; varying vec3 worldPos; varying vec3 localPos; void main() { fNormal = normalize(normalMatrix * normal); vec4 pos = modelViewMatrix * vec4(position, 1.0); worldPos = pos.xyz; localPos = position; gl_Position = projectionMatrix * pos; } #else precision highp float; varying vec3 fNormal; varying vec3 worldPos; varying vec3 localPos; float pulse(float val, float dst) { return floor(mod(val*dst,1.0)+.5); } void main() { vec3 dir = vec3(0,1,0); // high noon vec3 cpos = localPos; const float d = 5.0; // note: I don't do Z since it leads to weird patterns float bright = pulse(cpos.x,d) + pulse(cpos.y,d); vec3 color = mod(bright,2.0) > .5 ? vec3(1,1,0) : vec3(0,1,1); float diffuse = .5 + dot(fNormal,dir); gl_FragColor = vec4(diffuse * color, 1.0); } #endif
Há diversas aplicações para uma API gráfica acessível e de acesso público. Os softwares Adobe Photoshop e Adobe After Effects foram desenvolvidos na API, e o jogo Minecraft teve versões feitas em OpenGL. Referências: https://en.m.wikipedia.org/wiki/List_of_OpenGL_applications https://learnopengl.com/Getting-started/Shaders https://www.khronos.org/opengl/wiki/OpenGL_Shading_Language https://www.khronos.org/opengl/wiki/Rendering_Pipeline_Overview https://en.m.wikipedia.org/wiki/OpenGL
Vulkan
A Vulkan é uma API de baixo overhead para computação e gráficos 3D, desenvolvida pela Khronos Group. Ela é multiplataforma, oferece controle preciso sobre hardware gráfico moderno (GPU), execução assíncrona, minimiza sobrecarga da CPU e permite otimizações de desempenho. Inicialmente conhecida como a "iniciativa OpenGL da nova geração," a Vulkan é derivada da API Mantle da AMD e foi projetada para padronizar a indústria.
Pipeline
Overview simplificado do pipeline:
Tumblr media
Input assembler: coleta dados brutos dos vértices de buffers especificados e pode também usar um buffer de índice para repetir certos elementos, sem necessidade de duplicar dados do próprio vértice.
Vertex shader: executado para cada vértice, costuma aplicar transformações para converter as posições dos vértices do espaço do modelo para o espaço da tela. Além disso, passa dados per-vertex (por vértice) pelo pipeline.
Tesselation shader: permite a subdivisão da geometria, baseado em determinadas regras para aumentar a qualidade da malha.
Geometry shader: executado em cada primitiva (triângulo, linha, ponto) e pode descartá-la OU gerar primitivas adicionais.
Estágio de rasterização: discretiza as primitivas em fragmentos, que são os elementos de pixel que elas preenchem no framebuffer. Fragmentos que caiam fora da tela serão descartados, e atributos produzidos pelo vertex shader são interpolados pelos fragmentos. Usualmente, fragmentos que estejam atrás de outros fragmentos de primitivas também serão descartados devido ao teste de profundidade.
Fragment shader: invocado para cada fragmento restante e determina em qual framebuffer(s) os fragmentos serão escritos, além de com qual valor e profundidade. Isso pode ser feito usando os dados interpolados do shader de vértice.
Color blending: aplica operações para misturar fragmentos diferentes que mapeiam para o mesmo pixel no framebuffer, sendo que eles podem sobrescrever uns aos outros, somar ou serem misturados com base na transperência.
Renderização de um triângulo
Não foram incluídos aqui devido ao limite de caracteres do Tumblr, mas alguns códigos para a renderização de um triângulo podem ser vistos nos seguintes links:
Link 1
Link 2
Link 3
Exemplo de aplicação
O Vulkan pode ser utilizado para aplicações gráficas de alta performance 3D em tempo real, como video games, por exemplo. Neste link, é possível ver alguns jogos que fazem uso do Vulkan, como o Portal 2 e Superliminal.
Referências:
https://vulkan-tutorial.com/Drawing_a_triangle/Graphics_pipeline_basics/Introduction https://vkguide.dev/docs/chapter_2 https://en.wikipedia.org/wiki/Vulkan https://vulkan-tutorial.com/Overview https://developer.nvidia.com/vulkan https://www.vulkan.org/made-with-vulkan
----
Resposta escrita por: Amanda Laís (TIA: 31949436) Augusto Scrideli (TIA: 42023092)
0 notes
kremlin · 1 year ago
Note
What's wrong with gcc?
enough that a comprehensive & exhaustive answer to this question (my preferred style) would violate some thermodynamics principle. so take this:
7 apr 2005:
and how much faster is it? have many more widgets can you pump out in an hour? as a reference, the last time i played with said options, i wound up with a gcc that couldn't compile anymore.
and the further you get from i386, the more bugs you run into. as you crank up the options, all the other architectures, from vax (dig in the tree for the ifdefs), to sparc, to sparc64 (a few more), to alpha (even more), to mips64 (oh my), even up into arm (of course), even amd64, and then as mickey just found out hppa64 spitting out garbage FP instructions for integer only operations… anyone who does this is not just mad, or crazy, or playing, they are plain flat out stupid. i count gcc as being, on the low end, 400,000 lines of code per architecture. which will have bugs. let's call it the 1 bug that matters per 10 lines of code, naw, let's be kind. let's call it 1 bug that matters per 25 lines of code. that's 16,000 bugs. 99% of the user community finds their way through that swamp of bugs by using the default. that is what gets tested, and that is what gets fixed. some bugs relate to gcc crashing, others to gcc generating wrong code (by the way, our experience is that it is WAY EASIER to get "gcc to generate wrong code"….) now you wish to go fiddling with choices, and getting yourself into a mess. it is people like who who give a bad name to people with mental deficiencies. … perfectly well trained people, who can send email, who think they can run a computer, even probably have a drivers license, but no, it is poeple like you are DOWNRIGHT DANGEROUS, because you wouldn't know a safe choice if it hit you flat in the face, and you will ALWAYS push every button available to you because you have fooled yourself into believing that is LEARNING, that is ADVANCEMENT
(...) -t
7 notes · View notes
bandnameserver · 2 years ago
Text
Ifdefs
1 note · View note
skyboxeye · 2 years ago
Text
Capturing the ambience of Carmen Sandiego's Great Chase Through Time
This Mohawk engine game challenges the Time Scout stopping Carmen and her band of thieves, across space and time.
Running the game
Be sure to run the 32-bit installer, found inside Disc 1's Install folder. The default is 16-bit and won't run on newer versions of Windows.
However, for maximum accuracy I recommend running the game via ScummVM or with a Windows 95 ROM (on e.g. PCem).
Extracting sounds
While Carmen's frontend offers options to independently toggle sound and music, switching off music can disable ambience on some Cases. Therefore we'll need to extract and mix the isolated sound assets ourselves.
Tumblr media
There are a few ways to do this, my personal favorite being mohawkrip. Use Visual Studio's Project from Existing Code wizard to load it into the IDE, remove all of the ENABLE_MOHAWK ifdefs (to replicate what the relevant Makefile mode does), and build the project. The resulting executable takes in an input file, and dumps BMPs and playable WAVs into the current directory.
There is also extract_mohawk as part of the ScummVM project. It capably rips all assets as binary files but does not currently support conversion for the game's IMA ADPCM sounds, or the game's bitmaps.
Tumblr media
You can also try quickbms with the Mohawk script, or Watto's Game Extractor, but these solutions are also less complete than mohawkrip.
Capturing footage
By using mohawkrip, we can get all of Carmen's graphical bitmaps. We can overlay these onto recorded footage to "erase" unwanted elements, like the Good Guides. You will want to use high-quality or lossless capture settings, to ensure that your overlay has pixel-perfect alignment (e.g. the color palettes don't clash).
Tumblr media
Putting it all together
Combine your footage, any overlays, and the ambient sound track into a 640x340 scene render.
1 note · View note
magiccatbus · 2 months ago
Text
I found an app on my phone(I'm on android, the app is called shader editor) that lets me play with(a reduced version of) glsl. (If you get the app you can set the code you write as your wallpaper, so I have a custom live wallpaper)
I looked up the equation that defines the brot.
I wrote some trash code, and took screenshots.(part of which was done while stoned, and I couldn't look at anything slightly fractaly for weeks with out feeling mildly unwell. I'm better now.)
Trash code (and some extra details(more like info dumping(I was damn well hyperfixated on this while I was playing with it, and that was sandwiched between writing(hyperfixating on the creation of) some funny camera filters, one of which will make an input image(including and especially live camera input) use only the 16 basic web colors, but I never could get a satisfying random equation going)))(colored adhd parentheses for readability of chaos thoughts)below.
Currently set to zoom in on one of the spirals in seahorse valley. It can do a few different things depending on what is/isn't commented. Near the top are some different cordanites I looked at under the variable name xy. Somewhere I think there are some variables I would modify to change the way my colors where displayed, which I think I fucked with for 3 of the 4 images, the other image using an entirely unique coloring method that you probably won't see elsewhere. You can turn on both(inset coloring and outset coloring) coloring methods if you uncomment the right lines. I think I got a few other colorings left down there that I did for shits and giggles, but I know half of what I did was janky hotwiring this bit to that bit to get it to do what I wanted at that particular moment. If for some reason you want to mess with my jank code feel free(and send what you do back at me please?), but be warned that while zooming in it quickly becomes visibaly pixelated due to some floating point precision bullshit I have yet to learn how to circum navigate, and that depending on what you tell it to do it might get real laggy, or even crash. The variable that controls the number of iterations is probably "im" so if it's laggy maybe reduce that, and if you want more iterations increase it.
Please pardon my dreadful variable names, they where good enoughat the time, and quick to type.
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
uniform vec2 resolution;
uniform float time;
uniform int frame;
uniform int pointerCount;
vec2 Cx(vec2 z, vec2 uv){
z = vec2(
(z.x*z.x)-(z.y*z.y),
z.x*z.y*2.0
)+uv;
return z;
}
void main(void) {
//float e = 2.7182818284590459;
float m = 16.0/pow(2.,1.)/pow(2.,time);
vec2 uv = gl_FragCoord.xy / max(resolution.x,resolution.y)*m;
//vec2 xy = vec2(-0.764893,0.100994);
//vec2 xy = vec2(-0.76469964,0.10138253);
//vec2 xy = vec2(-0.917,0.277);
//vec2 xy = vec2(-1.2561,.39946);
//vec2 xy = vec2(-1.2511635,.383897);
//vec2 xy = vec2(-1.4012,0.0);
//vec2 xy = vec2(-1.2536,.3845);
vec2 xy = vec2(-0.7660314,0.1008615);
//vec2 xy = vec2(-.510434,-.510434);
//vec2 xy = vec2(.0,1.);
//vec2 xy = vec2(-.75,0.);
//vec2 xy = vec2(0.0);
uv = vec2(uv.y-(m/2.0)+xy.x,uv.x-(m/4.0)+xy.y);
//uv = vec2(uv.y-(m/2.0),uv.x-(1.0*m/4.0));
vec2 z = uv;
/*
for(float i=0.0; i<100.0||(z.x<2.0)&&(z.y<2.0); i++){
z = vec2(
(z.x*z.x)-(z.y*z.y),
z.x*z.y*2.0
)+uv;
}
*/
float i = 0.0;
float im = 500.;
float c = 0.0;
float r =.25;
float xo = .25;
bool card = false;
float crad = 0.0;
vec2 z2 = z*z;
if(pow(uv.x+1.,2.)+pow(uv.y,2.)<pow(.25,2.0)||
pow(pow(uv.x-xo,2.)+pow(uv.y,2.)+((uv.x-xo)*r*2.0),2.0)<(4.*pow(r,2.)*(pow(uv.x-xo,2.)+pow(uv.y,2.)))
){
card = true;
}
float xold = 0.;
float yold = 0.;
float period = 20.;
float fakt = 1000000.;
bool wtf = false;
while(i<im&&(z2.x)+(z2.y)<4.0&&!wtf&&!card){
z = vec2(
(z2.x)-(z2.y),
z.x*z.y*2.0
)+uv;
z2 = z*z;
//z = Cx(z,uv);
i++;
/*if(floor(z.x*fakt) == floor(xold*fakt) && floor(z.y*fakt) == floor(yold*fakt)){
//i = im;
wtf = true;
}
period++;
if(period > 70.){
period = 0.;
xold = z.x;
yold = z.y;
}/**/
//c = (im-i+1.0)/im*-1.0+1.0;
//c = max(1.0/i*-1.0+1.0,c);
//c = c+((im-i)/im)/pow(2.0,i);
}
//c = c;
//c = pow(c,3.0)*-1.0+1.0;
//c = uv.y;
//c = pow(c,time);
//gl_FragColor = vec4(abs(c*-3.0-1.0),abs(c*-3.0-1.0),abs(c*-3.0-1.0), 1.0);
//gl_FragColor = vec4(c);
/*if(gl_FragCoord.x / resolution.x<1./5.){
gl_FragColor = vec4(c*3.0-1.5,abs(c*3.0-1.5)*-1.0+1.5,abs(c*3.0-.5)*-1.0+1.5,1.0);
}else if (gl_FragCoord.x / resolution.x<2./5.){
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),abs(c*6.0-4.0)*-1.0+2.0,abs(c*6.0-2.0)*-1.0+2.0,1.0);
}else if (gl_FragCoord.x / resolution.x<3./5.){
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),0.0,0.0,1.0);
}else if (gl_FragCoord.x / resolution.x<4./5.){
gl_FragColor = vec4(0.0,abs(c*6.0-4.0)*-1.0+2.0,0.0,1.0);
}else{
gl_FragColor = vec4(0.0,0.0,abs(c*6.0-2.0)*-1.0+2.0,1.0);
}
*/
if(i==im||card||wtf){
//c = pow(pow(z.x,2.0)+pow(z.y,2.0),0.5);
//gl_FragColor = vec4(c*3.0-1.5,abs(c*3.0-1.5)*-1.0+1.5,abs(c*3.0-.5)*-1.0+1.5,1.0);
//gl_FragColor = vec4(1.0,1.,1.,1.);
}else{
float f = 50.;//min(im,pow(1.7,time-1.4)+20.0);
//float c = (f-mod(pow(i+0.,f/(i*1.6+95.)),f))/f;
float c = (f-mod(i,f))/f;
//350.,.85
//gl_FragColor = vec4(c*3.0-1.5,abs(c*3.0-1.5)*-1.0+1.5,abs(c*3.0-.5)*-1.0+1.5,1.0);
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),abs(c*6.0-4.0)*-1.0+2.0,abs(c*6.0-2.0)*-1.0+2.0,1.0);
}
/**/
/*
//color bands chasing inward
float mood = 11.;
float f = 200.;
c = (f-mod(i-time,f))/f;
if(i==im||card||wtf){
}else if (mod(i,mood) ==mod(floor((time-1.0)*2.5),mood)){
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),abs(c*6.0-4.0)*-1.0+2.0,abs(c*6.0-2.0)*-1.0+2.0,1.0)*clamp(mod((time-1.0)*-2.5,1.0)*2.0,0.0,1.0);
}else if (mod(i,mood) ==mod(floor((time-1.0)*2.5+1.),mood)){
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),abs(c*6.0-4.0)*-1.0+2.0,abs(c*6.0-2.0)*-1.0+2.0,1.0);
}else if (mod(i,mood) ==mod(floor((time-1.0)*2.5+2.),mood)){
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),abs(c*6.0-4.0)*-1.0+2.0,abs(c*6.0-2.0)*-1.0+2.0,1.0)*clamp(mod((time-1.0)*2.5,1.0)*2.0,0.0,1.0);
}
*/
/*
//display test if reapeating
if(wtf){
//gl_FragColor = vec4(1.);
float f = im;
float c = (f-mod(pow(i,1.),f))/f;
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),abs(c*6.0-4.0)*-1.0+2.0,abs(c*6.0-2.0)*-1.0+2.0,1.0);
}*/
//display test main cardioid and first circle
/*
//float r =.25;
//float xo = .25;
if(pow(uv.x+1.,2.)+pow(uv.y+.0,2.)<pow(.25,2.0)||
pow(pow(uv.x-xo,2.)+pow(uv.y,2.)+((uv.x-xo)*r*2.0),2.0)<=(4.*pow(r,2.)*(pow(uv.x-xo,2.)+pow(uv.y,2.)))){
gl_FragColor = vec4(1.);
}
*/
//why is this here?
/*
if(time>22.0){
if(gl_FragCoord.y/resolution.y<.01){
gl_FragColor = vec4(1.0);
}
}
*/
//displaying a failed attempt to optimize
/*
if(pointerCount == 0){
if((pow(uv.x+1.,2.)+pow(uv.y+.0,2.)<pow(.25,2.0)||
pow(pow(uv.x-xo,2.)+pow(uv.y,2.)+((uv.x-xo)*r*2.0),2.0)<=(4.*pow(r,2.)*(pow(uv.x-xo,2.)+pow(uv.y,2.))))&&(pointerCount == 1)){
//if(pointerCount == 1){
gl_FragColor = vec4(1.);
}
float f = 50.0;
c = (f-mod(crad,f))/f;
gl_FragColor = vec4(clamp(abs(c*6.0-6.0)*-1.0+2.0,0.0,1.0)+clamp(abs(c*6.0-0.0)*-1.0+2.0,0.0,1.0),abs(c*6.0-4.0)*-1.0+2.0,abs(c*6.0-2.0)*-1.0+2.0,1.0);
}/*else{
gl_FragColor = vec4(z/m*2.+.5,0.0,1.0);
}*/
/*z = vec2(0.0);
for(float num = 0.0; num < time; num++){
z = Cx(z,uv);
}
gl_FragColor = vec4(z.x/m+.5,0.,z.y/m+.5,1.);/**/
}
And since she asked I will do an @a-quiet-banshee just in case that helps her see something she was maybe curious about.
Just some mandlebrot set renderings I made a while back. Remebered they exist and thought "oh hey! I could post that.".
Tumblr media Tumblr media Tumblr media Tumblr media
The trans women coding stereotype really hit me.
37 notes · View notes
Photo
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
GRAFEMI      
The most common graffiti to find are tags, the writers’ names. While some writers work on their tag to finally have a definite logo-like sign with minor changes here and there, others never stop evolving their signature and seem to try out new things with every tag.
For his GRAFEMI zine Andrea Ceresa gathered five European taggers, which belong to the latter category. On 80 pages the writers 2LUKS (Paris), GUANO (Barcelona), IFDEF (Modena), PEACH (Copenhagen) and ZEE (Berlin/Florence) present their signatures in 40 photographs. Whether executed on doors, shutters, walls or ships, their eye-catching tags stand out.
As carefully as the editor chose the participants, as much attention he paid to the zine itself. After explaining his idea, he managed to get sponsored with Monocromo notebooks by the legendary Pigna company, which produce these books for Italian students for more than a century. To have the books printed Ceresa had to un-staple each copy and staple them together by hand afterwards.
The zine is limited to 150 copies, numbered by hand and comes in 12 different colorways. The beautiful little publication’s back cover was designed by Angelo Licciardello.
Now available at www.hitzerot.com  
5 notes · View notes
freightzeit · 6 years ago
Photo
Tumblr media Tumblr media
10 notes · View notes