by Joche Ojeda | Apr 28, 2024 | IPFS
Introduction
Welcome, fellow explorers! Today, we’re embarking on a journey into the fascinating world of IPFS gateways. But hold your horses—I won’t bombard you with tech jargon or make you feel like you’re deciphering alien code. Instead, let’s dive in with curiosity and open minds! ??
What Are IPFS Gateways?
Think of IPFS gateways as friendly tour guides between two worlds: the traditional web (you know, the one with cat videos and news articles) and the decentralized storage wonderland called IPFS. Here’s the scoop:
- Traditional Web (HTTP):
- You’ve surfed it for years—HTTP, the language of browsers and websites.
- But what if I told you there’s a parallel universe where data isn’t stored on central servers but floats around like cosmic stardust? That’s IPFS!
- IPFS Gateways:
- These nifty gateways fetch content from IPFS and serve it over HTTP.
- Imagine a bridge connecting your cozy web browser to the vast IPFS galaxy. That’s an IPFS gateway!
How They Work
- Fetching the Magic:
- When you click an IPFS gateway link (like
https://ipfs.io/ipfs/<CID>
), the gateway:
- Whispers to the IPFS network, “Hey, fetch this content for our Earthling friend!”
- Converts the cryptic IPFS language into something browsers understand (HTTP).
- Delivers the content to your browser. Voilà!
- Finding Gateways:
- Fear not, gateways are aplenty:
- IPFS Public Gateway Checker: A cosmic map of online gateways.
- Official IPFS Gateway List: Your trusty star chart.
- Third-party gateways like Pinata: Cosmic pit stops.
Why Should You Care?
- Content Accessibility:
- IPFS gateways let you access IPFS content—even if your browser isn’t fluent in IPFS-speak.
- It’s like having a multilingual friend who translates cosmic whispers into earthly words.
- Sharing Secrets:
- Got an interstellar recipe or a celestial cat meme? Share it with gateway links!
- Your friends will marvel at your newfound cosmic connections.
- Decentralization Dance:
- Gateways contribute to IPFS’s decentralized dance.
- Content swirls across various servers, like cosmic dust in a galactic waltz.
Final Thoughts
So, fellow star travelers, embrace the gateways! They’re your cosmic passports to a decentralized wonderland. Next time you click an IPFS link, remember: You’re not just browsing; you’re surfing the cosmos. ?
Now go forth, explore, and may your IPFS journeys be stellar! ??
by Joche Ojeda | Apr 25, 2024 | Windows Os
Symbolic links, also known as symlinks, are a type of file in a file system that point to another file or directory. They are essentially advanced shortcuts.
There are two types of symbolic links:
- Soft links: These redirect to the location where files are stored. They work similarly to a standard shortcut.
- Hard links: These make it appear as though the file or folder exists at the location of the symbolic link. Your applications won’t know any better. That makes hard symbolic links more useful in most situations.
For example, let’s say you have a program that needs its files at C:\\Program
. You’d really like to store this directory at D:\\Stuff
, but the program requires that its files be at C:\\Program
. You could move the original directory from C:\\Program
to D:\\Stuff
, and then create a symbolic link at C:\\Program
pointing to D:\\Stuff
. When you relaunch the program, it will try to access its directory at C:\\Program
. Windows will automatically redirect it to D:\\Stuff
, and everything will just work as if it were in C:\\Program
.
Symbolic links can be created using the mklink
command in Command Prompt, with different options for creating symbolic links to files or directories. Alternatively, you can use the Link Shell Extension, a graphical tool, to create symbolic links with more options.
In Windows, symbolic links are transparent to users; the links appear as normal files or directories, and can be acted upon by the user or application in exactly the same manner. They are quite often used in Windows for system files and directories. You may use them when you need to move large files to another disk and Windows must consider that they are still located in the original directory.
For instance, if you have large LLM files that are taking up a lot of space on your main drive, you can move them to an external drive and create a symbolic link to their new location. This way, any application that needs to access these files will still be able to find them as if they were in their original location.
Here is an example of how you can create a symbolic link in Windows:
REM Move the directory
move C:\\Program D:\\Stuff
REM Create the symbolic link
mklink /D C:\\Program D:\\Stuff
The /D
option is used to create a directory symbolic link. For files, you can omit this option.
In conclusion, symbolic links or symlinks serve as a powerful tool in file systems, offering flexibility and efficiency in managing files and directories. Whether it’s creating shortcuts for frequently accessed files or moving large files to an external drive without disrupting access, symlinks provide a practical solution.
Understanding and utilizing symlinks can significantly enhance your file management strategy, especially in Windows environments. So, start exploring the world of symlinks today and unlock new possibilities in file and storage management!
by Joche Ojeda | Apr 24, 2024 | C#, netframework
A Beginner’s Guide to System.Security.SecurityRules and SecuritySafeCritical in C#
Introduction
In the .NET Framework, security is a critical concern. Two attributes, System.Security.SecurityRules and SecuritySafeCritical, play a significant role in enforcing Code Access Security (CAS).
System.Security.SecurityRules
The System.Security.SecurityRules attribute specifies the set of security rules that the common language runtime should enforce for an assembly. It has two levels: Level1 and Level2.
Level1
Level1 uses the .NET Framework version 2.0 transparency rules. Here are the key rules for Level1:
- Public security-critical types and members are treated as security-safe-critical outside the assembly.
- Security-critical types and members must perform a link demand for full trust to enforce security-critical behavior when they are accessed by external callers.
- Level1 rules should be used only for compatibility, such as for .NET Framework 2.0 assemblies.
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
public class MyClass
{
// Your code here
}
SecuritySafeCritical
The SecuritySafeCritical attribute identifies types or members as security-critical and safely accessible by transparent code. Code marked with SecuritySafeCritical must undergo a rigorous security audit to ensure that it can be used safely in a secure execution environment. It must validate the permissions of callers to determine whether they have authority to access protected resources used by the code.
[System.Security.SecuritySafeCritical]
public void MyMethod()
{
// Your code here
}
Relationship between System.Security.SecurityRules and SecuritySafeCritical
The System.Security.SecurityRules and SecuritySafeCritical attributes work together to enforce security in .NET Framework. An assembly marked with SecurityRules(SecurityRuleSet.Level1) uses the .NET Framework version 2.0 transparency rules, where public security-critical types and members are treated as security-safe-critical outside the assembly.
The concept of trusted Code
Trusted code refers to code that has been granted certain permissions and is considered safe to execute. It’s a combination of techniques, policies, and procedures for which there is no plausible scenario in which a document retrieved from or reproduced by the system could differ substantially from the document that is originally stored. In other words, trusted code certifies that electronically stored information (ESI) is an authentic copy of the original document or information.
Use Cases and Examples
Consider a scenario where you have a method that performs a critical operation, such as accessing a protected resource. You want to ensure that this method can only be called by trusted code. You can mark this method as SecuritySafeCritical to enforce this.
[System.Security.SecuritySafeCritical]
public void AccessProtectedResource()
{
// Code to access protected resource
}
In this case, the AccessProtectedResource method can only be called by code that has been granted the necessary permissions. This helps to prevent unauthorized access to the protected resource.
Conclusion
Understanding the System.Security.SecurityRules and SecuritySafeCritical attributes is crucial when developing secure .NET applications. By using these attributes correctly, you can enforce robust security rules and protect your application from potential threats. Always remember, with great power comes great responsibility!
I hope this article helps you understand these concepts better. Happy coding! ?
by Joche Ojeda | Apr 23, 2024 | C#, Uncategorized
Castle.Core: A Favourite Among C# Developers
Castle.Core, a component of the Castle Project, is an open-source project that provides common abstractions, including logging services. It has garnered popularity in the .NET community, boasting over 88 million downloads.
Dynamic Proxies: Acting as Stand-Ins
In the realm of programming, a dynamic proxy is a stand-in or surrogate for another object, controlling access to it. This proxy object can introduce additional behaviours such as logging, caching, or thread-safety before delegating the call to the original object.
The Impact of Dynamic Proxies
Dynamic proxies are instrumental in intercepting method calls and implementing aspect-oriented programming. This aids in managing cross-cutting concerns like logging and transaction management.
Castle DynamicProxy: Generating Proxies at Runtime
Castle DynamicProxy, a feature of Castle.Core, is a library that generates lightweight .NET proxies dynamically at runtime. It enables operations to be performed before and/or after the method execution on the actual object, without altering the class code.
Dynamic Proxies in the Realm of ORM Libraries
Dynamic proxies find significant application in Object-Relational Mapping (ORM) Libraries. ORM allows you to interact with your database, such as SQL Server, Oracle, or MySQL, in an object-oriented manner. Dynamic proxies are employed in ORM libraries to create lightweight objects that mirror database records, facilitating efficient data manipulation and retrieval.
Here’s a simple example of how to create a dynamic proxy using Castle.Core:
using Castle.DynamicProxy;
public class SimpleInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine("Before target call");
try
{
invocation.Proceed(); //Calls the decorated instance.
}
catch (Exception)
{
Console.WriteLine("Target threw an exception!");
throw;
}
finally
{
Console.WriteLine("After target call");
}
}
}
public class SomeClass
{
public virtual void SomeMethod()
{
Console.WriteLine("SomeMethod in SomeClass called");
}
}
public class Program
{
public static void Main()
{
ProxyGenerator generator = new ProxyGenerator();
SimpleInterceptor interceptor = new SimpleInterceptor();
SomeClass proxy = generator.CreateClassProxy(interceptor);
proxy.SomeMethod();
}
}
Conclusion
Castle.Core and its DynamicProxy feature are invaluable tools for C# programmers, enabling efficient handling of cross-cutting concerns through the creation of dynamic proxies. With over 825.5 million downloads, Castle.Core’s widespread use in the .NET community underscores its utility. Whether you’re a novice or an experienced C# programmer, understanding and utilizing dynamic proxies, particularly in ORM libraries, can significantly boost your programming skills. Dive into Castle.Core and dynamic proxies in your C# projects and take your programming skills to the next level. Happy coding!
by Joche Ojeda | Apr 21, 2024 | Blockchain
Understanding Non-Fungible Tokens (NFTs)
What are NFTs?
Non-Fungible Tokens (NFTs) are a unique type of digital asset. Each NFT is distinct and cannot be replicated, which differentiates them from cryptocurrencies like Bitcoin or Ethereum, where each unit is identical.
What Can NFTs Represent?
NFTs can represent a wide array of digital and real-world items, including digital artwork, music, in-game items, videos, and even real-world assets like property rights.
Smart Contracts and Minting NFTs
The creation of NFTs involves the use of smart contracts, which are self-executing contracts with the terms of the agreement directly written into code. These smart contracts are used during the minting process, which is the term used for creating an NFT.
OpenZeppelin Contracts
OpenZeppelin provides a library of open-source smart contracts that are secure and have been thoroughly tested. These contracts are often used for creating NFTs and include implementations of standards like ERC-721 and ERC-1155. OpenZeppelin contracts are considered the gold standard for smart contract development and are used by many in the industry.
Fungible vs Non-Fungible Tokens
Fungible tokens are interchangeable and identical to each other. For instance, cryptocurrencies like Bitcoin or Ethereum are fungible tokens. If you have 1 Bitcoin, it’s the same as any other 1 Bitcoin.
On the other hand, non-fungible tokens (NFTs) are unique and cannot be interchanged with any other token. Each NFT has a distinct value based on its attributes. For example, consider a ticket to a concert. Each ticket (an NFT in this case) is unique based on its specific information such as the seat number, section, and row.
Minting an NFT
Minting an NFT is the process of creating a unique digital asset on a blockchain. This process involves transforming digital data into a unique digital asset, or NFT, that is recorded on the blockchain.
In conclusion, NFTs represent a new frontier in the digital world, offering a unique way to own and trade digital and real-world assets. Through the use of blockchain technology, smart contracts, and standards provided by libraries like OpenZeppelin, NFTs are changing the way we think about ownership and trade in the digital age.