Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "raw types"
-
I had to open the desktop app to write this because I could never write a rant this long on the app.
This will be a well-informed rebuttal to the "arrays start at 1 in Lua" complaint. If you have ever said or thought that, I guarantee you will learn a lot from this rant and probably enjoy it quite a bit as well.
Just a tiny bit of background information on me: I have a very intimate understanding of Lua and its c API. I have used this language for years and love it dearly.
[START RANT]
"arrays start at 1 in Lua" is factually incorrect because Lua does not have arrays. From their documentation, section 11.1 ("Arrays"), "We implement arrays in Lua simply by indexing tables with integers."
From chapter 2 of the Lua docs, we know there are only 8 types of data in Lua: nil, boolean, number, string, userdata, function, thread, and table
The only unfamiliar thing here might be userdata. "A userdatum offers a raw memory area with no predefined operations in Lua" (section 26.1). Essentially, it's for the API to interact with Lua scripts. The point is, this isn't a fancy term for array.
The misinformation comes from the table type. Let's first explore, at a low level, what an array is. An array, in programming, is a collection of data items all in a line in memory (The OS may not actually put them in a line, but they act as if they are). In most syntaxes, you access an array element similar to:
array[index]
Let's look at c, so we have some solid reference. "array" would be the name of the array, but what it really does is keep track of the starting location in memory of the array. Memory in computers acts like a number. In a very basic sense, the first sector of your RAM is memory location (referred to as an address) 0. "array" would be, for example, address 543745. This is where your data starts. Arrays can only be made up of one type, this is so that each element in that array is EXACTLY the same size. So, this is how indexing an array works. If you know where your array starts, and you know how large each element is, you can find the 6th element by starting at the start of they array and adding 6 times the size of the data in that array.
Tables are incredibly different. The elements of a table are NOT in a line in memory; they're all over the place depending on when you created them (and a lot of other things). Therefore, an array-style index is useless, because you cannot apply the above formula. In the case of a table, you need to perform a lookup: search through all of the elements in the table to find the right one. In Lua, you can do:
a = {1, 5, 9};
a["hello_world"] = "whatever";
a is a table with the length of 4 (the 4th element is "hello_world" with value "whatever"), but a[4] is nil because even though there are 4 items in the table, it looks for something "named" 4, not the 4th element of the table.
This is the difference between indexing and lookups. But you may say,
"Algo! If I do this:
a = {"first", "second", "third"};
print(a[1]);
...then "first" appears in my console!"
Yes, that's correct, in terms of computer science. Lua, because it is a nice language, makes keys in tables optional by automatically giving them an integer value key. This starts at 1. Why? Lets look at that formula for arrays again:
Given array "arr", size of data type "sz", and index "i", find the desired element ("el"):
el = arr + (sz * i)
This NEEDS to start at 0 and not 1 because otherwise, "sz" would always be added to the start address of the array and the first element would ALWAYS be skipped. But in tables, this is not the case, because tables do not have a defined data type size, and this formula is never used. This is why actual arrays are incredibly performant no matter the size, and the larger a table gets, the slower it is.
That felt good to get off my chest. Yes, Lua could start the auto-key at 0, but that might confuse people into thinking tables are arrays... well, I guess there's no avoiding that either way.13 -
I really enjoy my old Kindle Touch rather than reading long pdf's on a tablet or desktop. The Kindle is much easier on my eyes plus some of my pdf's are critical documents needed to recover business processes and systems. During a power outage a tablet might only last a couple of days even with backup power supplies, whereas my Kindle is good for at least 2 weeks of strong use.
Ok, to get a pdf on a Kindle is simple - just email the document to your Kindle email address listed in your Amazon –Settings – Digital Content – Devices - Email. It will be <<something>>@kindle.com.
But there is a major usability problem reading pdf's on a Kindle. The font size is super tiny and you do not have font control as you do with a .MOBI (Kindle) file. You can enlarge the document but the formatting will be off the small Kindle screen. Many people just advise to not read pdf's on a Kindle. devRanters never give up and fortunately there are some really cool solutions to make pdf's verrrrry readable and enjoyable on a Kindle
There are a few cloud pdf- to-.MOBI conversion solutions but I had no intention of using a third party site my security sensitive business content. Also, in my testing of sample pdf's the formatting of the .MOBI file was good but certainly not great.
So here are a couple option I discovered that I find useful:
Solution 1) Very easy. Simply email the pdf file to your Kindle and put 'convert' in the subject line. Amazon will convert the pdf to .MOBI and queue it up to synch the next time you are on wireless. The final e-book .MOBI version of the pdf is readable and has all of the .MOBI options available to you including the ability for you to resize fonts and maintain document flow to properly fit the Kindle screen. Unfortunately, for my requirements it did not measure-up to Solution 2 below which I found much more powerful.
Solution 2) Very Powerful. This solution takes under a minute to convert a pdf to .MOBI and the small effort provides incredible benefits to fine tune the final .MOBI book. You can even brand it with your company information and add custom search tags. In addition, it can be used for many additional input and output files including ePub which is used by many other e-reader devices including The Nook.
The free product I use is Calibre. Lots of options and fine control over documents. I download it from calibre-ebook.com. Nice UI. Very easy to import various types of documents and output to many other types of formats such as .MOBI, ePub, DocX, RTF, Zip and many more. It is a very powerful program. I played with various Calibre options and emailed the formatted .MOBI files to my Kindle. The new files automatically synched to the Kindle when I was wireless in seconds. Calibre did a great job!!
The formatting was 99.5% perfect for the great majority of pdf’s I converted and now happily read on my Kindle. Calibre even has a built-in heuristic option you can try that enables it to figure out how to improve the formatting of the raw pdf. By default it is not enabled. A few of the wider tables in my business continuity plans I have to scroll on the limited Kindle screen but I was able to minimize that by sizing the fonts and controlling the source document parameters.
Now any pdf or other types of documents can be enjoyed on a light, cheap, super power efficient e-reader. Let me know if this info helped you in any way.
4 -
Ok c++ professionals out there, I need your opinion on this:
I've only written c++ as a hobby and never in a professional capacity. That other day I noticed that we have a new c++ de developer at the office of which my first impression wasn't the greatest. He started off with complaining about having to help people out a lot (which is very odd as he was brought in to support one of our other developers who isn't as well versed in c++). This triggered me slightly and I decided to look into some of the PRs this guy was reviewing (to see what kind of stuff he had to support with and if it warranted his complaints).
It turns out it was the usual beginner mistakes of overusing raw pointers/deletes and things like not using various other STL containers. I noticed a couple of other issues in the PR that I thought should be addressed early in the projects life cycle, such as perhaps introduce a PCH as a lot of system header includes we're sprinkled everywhere to which our new c++ developer replies "what is pch?". I of course reply what it is and it's use, but I still get the impression that he's never heard of this concept. He also had opinions that we should always use shared_ptr as both return and argument types for any public api method that returns or takes a pointer. This is a real-time audio app, so I countered that with "maybe it's not always a good idea as it will introduce overhead due to the number of times certain methods are called and also might introduce ABI compability issues as its a public api.". Essentially my point was "let's be pragmatic and not religiously enforce certain things".
Does this sound alarming to any of you professional c++ developers or am I just being silly here?6 -
The code I'm working in always has problems with stuff like "Object obj=new Object();" or "List stuff=new List;" without type specification, but now I found the summit: "private void methodName(Type parameter) *throws Exception*"
-
Top Asphalt Suppliers: Your Trusted WV Paving Contractor for Asphalt Millings, Crack Sealing, and Recycling Solutions
At Top Asphalt Suppliers, we take pride in offering top-notch asphalt solutions for residential and commercial properties in Martinsburg, WV and surrounding areas. Located at 267 Golf Course Rd, Martinsburg, WV 25404, we are a reliable WV paving contractor with a focus on sustainable and efficient paving techniques. Whether you're interested in millings, asphalt recycling, or asphalt crack sealing, our team is here to provide expert services that will enhance the longevity and durability of your paved surfaces.
Asphalt Millings: Affordable and Sustainable Paving Solution
If you're looking for an affordable, eco-friendly option for your paving project, asphalt millings are a fantastic choice. Asphalt millings are recycled asphalt materials that come from grinding down old asphalt surfaces. This process not only reduces waste but also provides a cost-effective alternative to traditional asphalt paving. At Top Asphalt Suppliers, we specialize in providing high-quality asphalt millings that are perfect for driveways, parking lots, or roads. Our experienced team will apply the millings carefully, ensuring a smooth, stable surface that will stand up to heavy traffic and harsh weather conditions.
Asphalt Recycling: A Green Alternative for Your Pavement Needs
Asphalt recycling is one of the most sustainable practices in the paving industry, and it’s a service we proudly offer at Top Asphalt Suppliers. By reusing old asphalt, we help reduce the environmental impact of paving while still providing high-quality results. Asphalt recycling involves processing old asphalt to produce a reusable material that can be incorporated into new paving projects. This not only reduces the need for new raw materials but also helps conserve natural resources. By choosing Top Asphalt Suppliers, you are investing in a green solution that is both cost-effective and eco-friendly.
Asphalt Crack Sealing: Protect Your Investment
Cracks in your asphalt surface can lead to bigger issues over time if not properly addressed. Asphalt crack sealing is an essential service that helps prevent water from seeping into the base layers of your pavement, which can cause significant damage. At Top Asphalt Suppliers, we specialize in asphalt crack sealing to preserve the integrity of your paved surfaces. Our team uses advanced materials and techniques to seal cracks effectively, extending the life of your driveway, parking lot, or roadway. Proper crack sealing helps prevent further deterioration and saves you money on costly repairs down the road.
Why Choose Top Asphalt Suppliers as Your WV Paving Contractor?
Experienced Professionals: With years of experience as a trusted WV paving contractor, we provide high-quality services for all types of asphalt paving and repair projects.
Sustainability Focused: We are committed to using environmentally friendly practices, including asphalt recycling and millings, to minimize our carbon footprint and reduce waste.
Comprehensive Services: From asphalt crack sealing to complete paving solutions, we offer a wide range of services designed to meet all your asphalt needs.
Competitive Pricing: At Top Asphalt Suppliers, we offer affordable pricing on all our services, ensuring that you get the best value for your investment.
Timely and Reliable Service: We understand the importance of keeping your project on schedule. Our team works efficiently to complete your paving projects on time, with minimal disruption to your daily routine.
Contact Top Asphalt Suppliers Today for All Your Asphalt Needs
If you're looking for a reliable, eco-conscious WV paving contractor, Top Asphalt Suppliers is here to help. Whether you need asphalt millings, asphalt recycling, or expert asphalt crack sealing, we provide solutions that are both sustainable and cost-effective. Contact us today at +1 304-596-0050 to schedule a consultation or to learn more about our services.
Get in Touch
Visit us at 267 Golf Course Rd, Martinsburg, WV 25404, United States, or call +1 304-596-0050 for more information on how we can assist with your next paving or repair project.
1
