- Last 7 days
-
4thgenerationcivilization.substack.com 4thgenerationcivilization.substack.com
-
The current global system of production and trade is reported to use three times more of its resource use for transport, not for making. This creates a profound ‘ecological’, i.e. biophysical and thermodynamic, rationale for relocalizing production
for - stats - motivation for cosmolocal - high inefficacy of resource and energy use - 3x for transport as for production - from Substack article - The Cosmo-Local Plan for our Next Civilization - Michel Bauwens - 2024, Dec 20
Tags
Annotators
URL
-
- Dec 2024
-
cloud.pocketbook.digital cloud.pocketbook.digital
-
Das Ergebnis: In nur sechs Jahrzehnten wurde fast ein Drittel der globalen Landfläche auf irgendeine Weise verändert. Der Wert war damit nach Angaben aus Karlsruhe etwa vier Mal so hoch, wie langfristige Analysen bis dahin angenommen hatten
-
Zwischen 1963 und 2005 nahm die weltweite Anbaufläche für Nahrungsmittel um etwa 270 Millionen Hektar zu. Das entspricht etwa acht Mal der Fläche Deutschlands.
-
- Nov 2024
-
jgvw2024.peergos.me jgvw2024.peergos.me
-
Fig. 3
for - paper - Translating Earth system boundaries for cities and businesses - Fig. 3 - Ten principles of translation - Bai et al. 2024 - from - paper - Cross-scale translation of Earth system boundaries should use methods that are more science-based - citation of Fig.3 - Xue & Bakshi
from - paper - citation - Cross-scale translation of Earth system boundaries should use methods that are more science-based - citation of Fig.3 - Xue & Bakshi - https://hyp.is/xf3MxqveEe-pGZeWkHHcLA/jgvw2024.peergos.me/StopResetGo/2024/11/PDFs/MattersArisingBaietal.pdf
Tags
- paper - Translating Earth system boundaries for cities and businesses - Fig. 3 - Ten principles of translation - Bai et al. 2024
- from - paper - citation - Cross-scale translation of Earth system boundaries should use methods that are more science-based - citation of Fig.3 - Xue & Bakshi
Annotators
URL
-
-
blogs.baruch.cuny.edu blogs.baruch.cuny.edu
-
To generate text that I've edited to include in my own writing
I see this as collaborative writing with AI; no longer just the students work
-
Grammarly
I personally use grammarly and see it differently from using platforms such as ChatGPT. I wonder what other folks think of this. I see one as to clean up writing and the other to generate content/ideas.
-
-
www.youtube.com www.youtube.com
-
something like Gangam Style has been viewed to the tune of like almost or over two billion times and when you just when you count just the data coming out of Google servers let alone all the links we're dealing with something close to 500 pedabytes of data that's a lot for a video right I mean this is clearly an issue there's no reason we should be moving around all of this data constantly through the network
for - internet limitations - inefficient bandwidth use - example - music video - Gangam Style
-
-
www.gida-global.org www.gida-global.org
-
TRSP Desirable Characteristics Data governance should take into account the potential future use and future harm based on ethical frameworks grounded in the values and principles of the relevant Indigenous community. Metadata should acknowledge the provenance and purpose and any limitations or obligations in secondary use inclusive of issues of consent.
-
-
www.nature.com www.nature.com
-
Terms of use, both for the repository and for the data holdings.
TRSP Desirable Characteristics
Tags
Annotators
URL
-
-
-
TRSP Desirable Characteristics
The terms of reuse of datasets that are provided by a repository
Tags
Annotators
URL
-
-
elixir.bootlin.com elixir.bootlin.com
-
#ifdef CONFIG_ARCH_HAS_HUGEPD static unsigned long hugepte_addr_end(unsigned long addr, unsigned long end, unsigned long sz) { unsigned long __boundary = (addr + sz) & ~(sz-1); return (__boundary - 1 < end - 1) ? __boundary : end; } static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long pte_end; struct page *page; struct folio *folio; pte_t pte; int refs; pte_end = (addr + sz) & ~(sz-1); if (pte_end < end) end = pte_end; pte = huge_ptep_get(ptep); if (!pte_access_permitted(pte, flags & FOLL_WRITE)) return 0; /* hugepages are never "special" */ VM_BUG_ON(!pfn_valid(pte_pfn(pte))); page = nth_page(pte_page(pte), (addr & (sz - 1)) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pte_val(pte) != pte_val(ptep_get(ptep)))) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } if (!pte_write(pte) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_huge_pd(hugepd_t hugepd, unsigned long addr, unsigned int pdshift, unsigned long end, unsigned int flags, struct page **pages, int *nr) { pte_t *ptep; unsigned long sz = 1UL << hugepd_shift(hugepd); unsigned long next; ptep = hugepte_offset(hugepd, addr, pdshift); do { next = hugepte_addr_end(addr, end, sz); if (!gup_hugepte(ptep, sz, addr, end, flags, pages, nr)) return 0; } while (ptep++, addr = next, addr != end); return 1; } #else static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr, unsigned int pdshift, unsigned long end, unsigned int flags, struct page **pages, int *nr) { return 0; } #endif /* CONFIG_ARCH_HAS_HUGEPD */ static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { struct page *page; struct folio *folio; int refs; if (!pmd_access_permitted(orig, flags & FOLL_WRITE)) return 0; if (pmd_devmap(orig)) { if (unlikely(flags & FOLL_LONGTERM)) return 0; return __gup_device_huge_pmd(orig, pmdp, addr, end, flags, pages, nr); } page = nth_page(pmd_page(orig), (addr & ~PMD_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } if (!pmd_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { struct page *page; struct folio *folio; int refs; if (!pud_access_permitted(orig, flags & FOLL_WRITE)) return 0; if (pud_devmap(orig)) { if (unlikely(flags & FOLL_LONGTERM)) return 0; return __gup_device_huge_pud(orig, pudp, addr, end, flags, pages, nr); } page = nth_page(pud_page(orig), (addr & ~PUD_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pud_val(orig) != pud_val(*pudp))) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } if (!pud_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_huge_pgd(pgd_t orig, pgd_t *pgdp, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { int refs; struct page *page; struct folio *folio; if (!pgd_access_permitted(orig, flags & FOLL_WRITE)) return 0; BUILD_BUG_ON(pgd_devmap(orig)); page = nth_page(pgd_page(orig), (addr & ~PGDIR_MASK) >> PAGE_SHIFT); refs = record_subpages(page, addr, end, pages + *nr); folio = try_grab_folio(page, refs, flags); if (!folio) return 0; if (unlikely(pgd_val(orig) != pgd_val(*pgdp))) { gup_put_folio(folio, refs, flags); return 0; } if (!pgd_write(orig) && gup_must_unshare(NULL, flags, &folio->page)) { gup_put_folio(folio, refs, flags); return 0; } if (!folio_fast_pin_allowed(folio, flags)) { gup_put_folio(folio, refs, flags); return 0; } *nr += refs; folio_set_referenced(folio); return 1; } static int gup_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; pmd_t *pmdp; pmdp = pmd_offset_lockless(pudp, pud, addr); do { pmd_t pmd = pmdp_get_lockless(pmdp); next = pmd_addr_end(addr, end); if (!pmd_present(pmd)) return 0; if (unlikely(pmd_trans_huge(pmd) || pmd_huge(pmd) || pmd_devmap(pmd))) { /* See gup_pte_range() */ if (pmd_protnone(pmd)) return 0; if (!gup_huge_pmd(pmd, pmdp, addr, next, flags, pages, nr)) return 0; } else if (unlikely(is_hugepd(__hugepd(pmd_val(pmd))))) { /* * architecture have different format for hugetlbfs * pmd format and THP pmd format */ if (!gup_huge_pd(__hugepd(pmd_val(pmd)), addr, PMD_SHIFT, next, flags, pages, nr)) return 0; } else if (!gup_pte_range(pmd, pmdp, addr, next, flags, pages, nr)) return 0; } while (pmdp++, addr = next, addr != end); return 1; } static int gup_pud_range(p4d_t *p4dp, p4d_t p4d, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; pud_t *pudp; pudp = pud_offset_lockless(p4dp, p4d, addr); do { pud_t pud = READ_ONCE(*pudp); next = pud_addr_end(addr, end); if (unlikely(!pud_present(pud))) return 0; if (unlikely(pud_huge(pud) || pud_devmap(pud))) { if (!gup_huge_pud(pud, pudp, addr, next, flags, pages, nr)) return 0; } else if (unlikely(is_hugepd(__hugepd(pud_val(pud))))) { if (!gup_huge_pd(__hugepd(pud_val(pud)), addr, PUD_SHIFT, next, flags, pages, nr)) return 0; } else if (!gup_pmd_range(pudp, pud, addr, next, flags, pages, nr)) return 0; } while (pudp++, addr = next, addr != end); return 1; } static int gup_p4d_range(pgd_t *pgdp, pgd_t pgd, unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; p4d_t *p4dp; p4dp = p4d_offset_lockless(pgdp, pgd, addr); do { p4d_t p4d = READ_ONCE(*p4dp); next = p4d_addr_end(addr, end); if (p4d_none(p4d)) return 0; BUILD_BUG_ON(p4d_huge(p4d)); if (unlikely(is_hugepd(__hugepd(p4d_val(p4d))))) { if (!gup_huge_pd(__hugepd(p4d_val(p4d)), addr, P4D_SHIFT, next, flags, pages, nr)) return 0; } else if (!gup_pud_range(p4dp, p4d, addr, next, flags, pages, nr)) return 0; } while (p4dp++, addr = next, addr != end); return 1; } static void gup_pgd_range(unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { unsigned long next; pgd_t *pgdp; pgdp = pgd_offset(current->mm, addr); do { pgd_t pgd = READ_ONCE(*pgdp); next = pgd_addr_end(addr, end); if (pgd_none(pgd)) return; if (unlikely(pgd_huge(pgd))) { if (!gup_huge_pgd(pgd, pgdp, addr, next, flags, pages, nr)) return; } else if (unlikely(is_hugepd(__hugepd(pgd_val(pgd))))) { if (!gup_huge_pd(__hugepd(pgd_val(pgd)), addr, PGDIR_SHIFT, next, flags, pages, nr)) return; } else if (!gup_p4d_range(pgdp, pgd, addr, next, flags, pages, nr)) return; } while (pgdp++, addr = next, addr != end); } #else static inline void gup_pgd_range(unsigned long addr, unsigned long end, unsigned int flags, struct page **pages, int *nr) { }
policy use functions for gup_huge pte policy code function above (not right above, gotta scroll probably to find it)
-
static int internal_get_user_pages_fast(unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages) { unsigned long len, end; unsigned long nr_pinned; int locked = 0; int ret; if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM | FOLL_FORCE | FOLL_PIN | FOLL_GET | FOLL_FAST_ONLY | FOLL_NOFAULT | FOLL_PCI_P2PDMA | FOLL_HONOR_NUMA_FAULT))) return -EINVAL; if (gup_flags & FOLL_PIN) mm_set_has_pinned_flag(¤t->mm->flags); if (!(gup_flags & FOLL_FAST_ONLY)) might_lock_read(¤t->mm->mmap_lock); start = untagged_addr(start) & PAGE_MASK; len = nr_pages << PAGE_SHIFT; if (check_add_overflow(start, len, &end)) return -EOVERFLOW; if (end > TASK_SIZE_MAX) return -EFAULT; if (unlikely(!access_ok((void __user *)start, len))) return -EFAULT; nr_pinned = lockless_pages_from_mm(start, end, gup_flags, pages); if (nr_pinned == nr_pages || gup_flags & FOLL_FAST_ONLY) return nr_pinned; /* Slow path: try to get the remaining pages with get_user_pages */ start += nr_pinned << PAGE_SHIFT; pages += nr_pinned; ret = __gup_longterm_locked(current->mm, start, nr_pages - nr_pinned, pages, &locked, gup_flags | FOLL_TOUCH | FOLL_UNLOCKABLE); if (ret < 0) { /* * The caller has to unpin the pages we already pinned so * returning -errno is not an option */ if (nr_pinned) return nr_pinned; return ret; } return ret + nr_pinned; } /** * get_user_pages_fast_only() - pin user pages in memory * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying pin behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Like get_user_pages_fast() except it's IRQ-safe in that it won't fall back to * the regular GUP. * * If the architecture does not support this function, simply return with no * pages pinned. * * Careful, careful! COW breaking can go either way, so a non-write * access can get ambiguous page results. If you call this function without * 'write' set, you'd better be sure that you're ok with that ambiguity. */ int get_user_pages_fast_only(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages) { /* * Internally (within mm/gup.c), gup fast variants must set FOLL_GET, * because gup fast is always a "pin with a +1 page refcount" request. * * FOLL_FAST_ONLY is required in order to match the API description of * this routine: no fall back to regular ("slow") GUP. */ if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_GET | FOLL_FAST_ONLY)) return -EINVAL; return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(get_user_pages_fast_only); /** * get_user_pages_fast() - pin user pages in memory * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying pin behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Attempt to pin user pages in memory without taking mm->mmap_lock. * If not successful, it will fall back to taking the lock and * calling get_user_pages(). * * Returns number of pages pinned. This may be fewer than the number requested. * If nr_pages is 0 or negative, returns 0. If no pages were pinned, returns * -errno. */ int get_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages) { /* * The caller may or may not have explicitly set FOLL_GET; either way is * OK. However, internally (within mm/gup.c), gup fast variants must set * FOLL_GET, because gup fast is always a "pin with a +1 page refcount" * request. */ if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_GET)) return -EINVAL; return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(get_user_pages_fast); /** * pin_user_pages_fast() - pin user pages in memory without taking locks * * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying pin behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Nearly the same as get_user_pages_fast(), except that FOLL_PIN is set. See * get_user_pages_fast() for documentation on the function arguments, because * the arguments here are identical. * * FOLL_PIN means that the pages must be released via unpin_user_page(). Please * see Documentation/core-api/pin_user_pages.rst for further details. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page() will not remove pins from it. */ int pin_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages) { if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_PIN)) return -EINVAL; return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages); } EXPORT_SYMBOL_GPL(pin_user_pages_fast); /** * pin_user_pages_remote() - pin pages of a remote process * * @mm: mm_struct of target mm * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying lookup behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * @locked: pointer to lock flag indicating whether lock is held and * subsequently whether VM_FAULT_RETRY functionality can be * utilised. Lock must initially be held. * * Nearly the same as get_user_pages_remote(), except that FOLL_PIN is set. See * get_user_pages_remote() for documentation on the function arguments, because * the arguments here are identical. * * FOLL_PIN means that the pages must be released via unpin_user_page(). Please * see Documentation/core-api/pin_user_pages.rst for details. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page*() will not remove pins from it. */ long pin_user_pages_remote(struct mm_struct *mm, unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages, int *locked) { int local_locked = 1; if (!is_valid_gup_args(pages, locked, &gup_flags, FOLL_PIN | FOLL_TOUCH | FOLL_REMOTE)) return 0; return __gup_longterm_locked(mm, start, nr_pages, pages, locked ? locked : &local_locked, gup_flags); } EXPORT_SYMBOL(pin_user_pages_remote); /** * pin_user_pages() - pin user pages in memory for use by other devices * * @start: starting user address * @nr_pages: number of pages from start to pin * @gup_flags: flags modifying lookup behaviour * @pages: array that receives pointers to the pages pinned. * Should be at least nr_pages long. * * Nearly the same as get_user_pages(), except that FOLL_TOUCH is not set, and * FOLL_PIN is set. * * FOLL_PIN means that the pages must be released via unpin_user_page(). Please * see Documentation/core-api/pin_user_pages.rst for details. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page*() will not remove pins from it. */ long pin_user_pages(unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages) { int locked = 1; if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_PIN)) return 0; return __gup_longterm_locked(current->mm, start, nr_pages, pages, &locked, gup_flags); } EXPORT_SYMBOL(pin_user_pages); /* * pin_user_pages_unlocked() is the FOLL_PIN variant of * get_user_pages_unlocked(). Behavior is the same, except that this one sets * FOLL_PIN and rejects FOLL_GET. * * Note that if a zero_page is amongst the returned pages, it will not have * pins in it and unpin_user_page*() will not remove pins from it. */ long pin_user_pages_unlocked(unsigned long start, unsigned long nr_pages, struct page **pages, unsigned int gup_flags) { int locked = 0; if (!is_valid_gup_args(pages, NULL, &gup_flags, FOLL_PIN | FOLL_TOUCH | FOLL_UNLOCKABLE)) return 0; return __gup_longterm_locked(current->mm, start, nr_pages, pages, &locked, gup_flags); }
fast gup functions
-
/** * unpin_user_pages() - release an array of gup-pinned pages. * @pages: array of pages to be marked dirty and released. * @npages: number of pages in the @pages array. * * For each page in the @pages array, release the page using unpin_user_page(). * * Please see the unpin_user_page() documentation for details. */ void unpin_user_pages(struct page **pages, unsigned long npages) { unsigned long i; struct folio *folio; unsigned int nr; /* * If this WARN_ON() fires, then the system *might* be leaking pages (by * leaving them pinned), but probably not. More likely, gup/pup returned * a hard -ERRNO error to the caller, who erroneously passed it here. */ if (WARN_ON(IS_ERR_VALUE(npages))) return; sanity_check_pinned_pages(pages, npages); for (i = 0; i < npages; i += nr) { folio = gup_folio_next(pages, npages, i, &nr); gup_put_folio(folio, nr, FOLL_PIN); } }
gup unpin function, not actual logic
-
void unpin_user_page_range_dirty_lock(struct page *page, unsigned long npages, bool make_dirty) { unsigned long i; struct folio *folio; unsigned int nr; for (i = 0; i < npages; i += nr) { folio = gup_folio_range_next(page, npages, i, &nr); if (make_dirty && !folio_test_dirty(folio)) { folio_lock(folio); folio_mark_dirty(folio); folio_unlock(folio); } gup_put_folio(folio, nr, FOLL_PIN); } }
unpin logic but for dirty pages
-
static void __maybe_unused undo_dev_pagemap(int *nr, int nr_start, unsigned int flags, struct page **pages) { while ((*nr) - nr_start) { struct page *page = pages[--(*nr)]; ClearPageReferenced(page); if (flags & FOLL_PIN) unpin_user_page(page); else put_page(page); } }
policy use function that undoes mapping
-
#ifdef CONFIG_STACK_GROWSUP return vma_lookup(mm, addr); #else static volatile unsigned long next_warn; struct vm_area_struct *vma; unsigned long now, next; vma = find_vma(mm, addr); if (!vma || (addr >= vma->vm_start)) return vma; /* Only warn for half-way relevant accesses */ if (!(vma->vm_flags & VM_GROWSDOWN)) return NULL; if (vma->vm_start - addr > 65536) return NULL; /* Let's not warn more than once an hour.. */ now = jiffies; next = next_warn; if (next && time_before(now, next)) return NULL; next_warn = now + 60*60*HZ; /* Let people know things may have changed. */ pr_warn("GUP no longer grows the stack in %s (%d): %lx-%lx (%lx)\n", current->comm, task_pid_nr(current), vma->vm_start, vma->vm_end, addr); dump_stack(); return NULL;
helper func to lookup vma(virtual mem area) that warns per hour about half way relevant acc and changes in stack
-
void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages, bool make_dirty) { unsigned long i; struct folio *folio; unsigned int nr; if (!make_dirty) { unpin_user_pages(pages, npages); return; } sanity_check_pinned_pages(pages, npages); for (i = 0; i < npages; i += nr) { folio = gup_folio_next(pages, npages, i, &nr); /* * Checking PageDirty at this point may race with * clear_page_dirty_for_io(), but that's OK. Two key * cases: * * 1) This code sees the page as already dirty, so it * skips the call to set_page_dirty(). That could happen * because clear_page_dirty_for_io() called * page_mkclean(), followed by set_page_dirty(). * However, now the page is going to get written back, * which meets the original intention of setting it * dirty, so all is well: clear_page_dirty_for_io() goes * on to call TestClearPageDirty(), and write the page * back. * * 2) This code sees the page as clean, so it calls * set_page_dirty(). The page stays dirty, despite being * written back, so it gets written back again in the * next writeback cycle. This is harmless. */ if (!folio_test_dirty(folio)) { folio_lock(folio); folio_mark_dirty(folio); folio_unlock(folio); } gup_put_folio(folio, nr, FOLL_PIN); } }
unpins and dirties page
-
static inline struct folio *gup_folio_next(struct page **list, unsigned long npages, unsigned long i, unsigned int *ntails) { struct folio *folio = page_folio(list[i]); unsigned int nr; for (nr = i + 1; nr < npages; nr++) { if (page_folio(list[nr]) != folio) break; } *ntails = nr - i; return folio; }
gets folio of next page along with reference to end of folio
-
static inline struct folio *gup_folio_range_next(struct page *start, unsigned long npages, unsigned long i, unsigned int *ntails) { struct page *next = nth_page(start, i); struct folio *folio = page_folio(next); unsigned int nr = 1; if (folio_test_large(folio)) nr = min_t(unsigned int, npages - i, folio_nr_pages(folio) - folio_page_idx(folio, next)); *ntails = nr; return folio; }
gets the folio of the next page from start to 'i' range. also gets the tail folio/reference
-
void unpin_user_page(struct page *page) { sanity_check_pinned_pages(&page, 1); gup_put_folio(page_folio(page), 1, FOLL_PIN); } EXPORT_SYMBOL(unpin_user_page);
actual policy use logic
-
if (!put_devmap_managed_page_refs(&folio->page, refs)) folio_put_refs(folio, refs);
Definitely a vital and straightforward policy use section of gup that simples places a reference on the folio
-
if (flags & FOLL_PIN) { if (is_zero_folio(folio)) return; node_stat_mod_folio(folio, NR_FOLL_PIN_RELEASED, refs); if (folio_test_large(folio)) atomic_sub(refs, &folio->_pincount); else refs *= GUP_PIN_COUNTING_BIAS; }
Checks if the folio is zero/large
-
if (folio_test_large(folio)) atomic_add(refs, &folio->_pincount); else folio_ref_add(folio, refs * (GUP_PIN_COUNTING_BIAS - 1))
maintaining reference counts. Part of policy logic most likely
-
-
academic.oup.com academic.oup.com
-
although less-than-fluent exposure to sign language is still beneficial for DHH learners (Caselli et al., 2021)
Quote - for the use of ASL...even it is not at a high level.
-
- Oct 2024
-
www.carbonbrief.org www.carbonbrief.org
-
Erstmals wurde genau erfasst, welcher Teil der von Waldbränden betroffenen Gebiete sich auf die menschlich verursachte Erhitzung zurückführen lässt. Er wächst seit 20 Jahren deutlich an. Insgesamt kompensieren die auf die Erhitzung zurückgehenden Waldbrände den Rückgang an Bränden durch Entwaldung. Der von Menschen verursachte – und für die Berechnung von Schadensansprüchen relevante – Anteil der CO2-Emissione ist damit deutlich höher als bisher angenommen https://www.carbonbrief.org/climate-change-almost-wipes-out-decline-in-global-area-burned-by-wildfires/
Tags
- Maria Barbosa
- increasing risk oft wildfires
- CO2-Emissionen von Waldbränden
- Matthew W. Jones
- Global burned area increasingly explained by climate change
- attribution
- World Weather Attribution
- Global rise in forest fire emissions linked to climate change in the extratropics
- Inter-Sectoral Impact Model Intercomparison Project
- Natural Environment Research Council
- David Bowman
- Seppe Lampe
- Global Carbon Budget
- land use change
- Transdisciplinary Fire Centre at the University of Tasmania.
- global
Annotators
URL
-
-
www.youtube.com www.youtube.com
-
for - from - Fair Share Commons discussion thread - Marie - discussing the use of the word "capital" in "spiritual capital" - webcast - Great Simplification - On the Origins of Energy Blindness - Steve Keen - Energy Blindness
-
-
www.youtube.com www.youtube.com
-
1:25:22 First comes an AGREEMENT by members of the neighbourhood to co-operate and then they agree to use a mechanism called money to mobilise resources
-
1:00:18 We should not even use the term borrowing
-
18:17 A government who creates a currency does not need to tax its citizens to get dollars. 18:25 Currency issuers spend first before they tax - they do not use tax to spend
Tags
- We should not even use the term borrowing
- Currency issuers spend first before they tax - they do not use tax to spend
- A government who creates a currency does not need to tax its citzens to get dollars.
- 1:25:22 First comes an AGREEMENT by members of the neighbourhood to co-operate and then they agree to use a mechanism called money to mobilise resources
- Selling Treasuries is NOT BORROWING
Annotators
URL
-
-
elixir.bootlin.com elixir.bootlin.com
-
if (dtc->wb_thresh < 2 * wb_stat_error()) { wb_reclaimable = wb_stat_sum(wb, WB_RECLAIMABLE); dtc->wb_dirty = wb_reclaimable + wb_stat_sum(wb, WB_WRITEBACK); } else { wb_reclaimable = wb_stat(wb, WB_RECLAIMABLE); dtc->wb_dirty = wb_reclaimable + wb_stat(wb, WB_WRITEBACK); }
This is a configuration policy that does a more accurate calculation on the number of reclaimable pages and dirty pages when the threshold for the dirty pages in the writeback context is lower than 2 times the maximal error of a stat counter.
-
static long wb_min_pause(struct bdi_writeback *wb, long max_pause, unsigned long task_ratelimit, unsigned long dirty_ratelimit, int *nr_dirtied_pause
This function is an algorithmic policy that determines the minimum throttle time for a process between consecutive writeback operations for dirty pages based on heuristics. It is used for balancing the load of the I/O subsystems so that there will not be excessive I/O operations that impact the performance of the system.
-
if (!laptop_mode && nr_reclaimable > gdtc->bg_thresh && !writeback_in_progress(wb)) wb_start_background_writeback(wb);
This is a configuration policy that determines whether to start background writeout. The code here indicates that if laptop_mode, which will reduce disk activity for power saving, is not set, then when the number of dirty pages reaches the bg_thresh threshold, the system starts writing back pages.
-
if (thresh > dirty) return 1UL << (ilog2(thresh - dirty) >> 1);
This implements a configuration policy that determines the interval for the kernel to wake up and check for dirty pages that need to be written back to disk.
-
limit -= (limit - thresh) >> 5;
This is a configuration policy that determines how much should the limit be updated. The limit controls the amount of dirty memory allowed in the system.
-
if (dirty <= dirty_freerun_ceiling(thresh, bg_thresh) && (!mdtc || m_dirty <= dirty_freerun_ceiling(m_thresh, m_bg_thresh))) { unsigned long intv; unsigned long m_intv; free_running: intv = dirty_poll_interval(dirty, thresh); m_intv = ULONG_MAX; current->dirty_paused_when = now; current->nr_dirtied = 0; if (mdtc) m_intv = dirty_poll_interval(m_dirty, m_thresh); current->nr_dirtied_pause = min(intv, m_intv); break; } /* Start writeback even when in laptop mode */ if (unlikely(!writeback_in_progress(wb))) wb_start_background_writeback(wb); mem_cgroup_flush_foreign(wb); /* * Calculate global domain's pos_ratio and select the * global dtc by default. */ if (!strictlimit) { wb_dirty_limits(gdtc); if ((current->flags & PF_LOCAL_THROTTLE) && gdtc->wb_dirty < dirty_freerun_ceiling(gdtc->wb_thresh, gdtc->wb_bg_thresh)) /* * LOCAL_THROTTLE tasks must not be throttled * when below the per-wb freerun ceiling. */ goto free_running; } dirty_exceeded = (gdtc->wb_dirty > gdtc->wb_thresh) && ((gdtc->dirty > gdtc->thresh) || strictlimit); wb_position_ratio(gdtc); sdtc = gdtc; if (mdtc) { /* * If memcg domain is in effect, calculate its * pos_ratio. @wb should satisfy constraints from * both global and memcg domains. Choose the one * w/ lower pos_ratio. */ if (!strictlimit) { wb_dirty_limits(mdtc); if ((current->flags & PF_LOCAL_THROTTLE) && mdtc->wb_dirty < dirty_freerun_ceiling(mdtc->wb_thresh, mdtc->wb_bg_thresh)) /* * LOCAL_THROTTLE tasks must not be * throttled when below the per-wb * freerun ceiling. */ goto free_running; } dirty_exceeded |= (mdtc->wb_dirty > mdtc->wb_thresh) && ((mdtc->dirty > mdtc->thresh) || strictlimit); wb_position_ratio(mdtc); if (mdtc->pos_ratio < gdtc->pos_ratio) sdtc = mdtc; }
This is an algorithmic policy that determines whether the process can run freely or a throttle is needed to control the rate of the writeback by checking if the number of dirty pages exceed the average of the global threshold and background threshold.
-
shift = dirty_ratelimit / (2 * step + 1); if (shift < BITS_PER_LONG) step = DIV_ROUND_UP(step >> shift, 8); else step = 0; if (dirty_ratelimit < balanced_dirty_ratelimit) dirty_ratelimit += step; else dirty_ratelimit -= step;
This is a configuration policy that determines how much we should increase/decrease the dirty_ratelimit, which controls the rate that processors write dirty pages back to storage.
-
ratelimit_pages = dirty_thresh / (num_online_cpus() * 32); if (ratelimit_pages < 16) ratelimit_pages = 16;
This is a configuration policy that dynamically determines the rate that kernel can write dirty pages back to storage in a single writeback cycle.
-
t = wb_dirty / (1 + bw / roundup_pow_of_two(1 + HZ / 8));
This implements a configuration policy that determines the maximum time that the kernel should wait between writeback operations for dirty pages. This ensures that dirty pages are flushed to disk within a reasonable time frame and control the risk of data loss in case of a system crash.
-
if (IS_ENABLED(CONFIG_CGROUP_WRITEBACK) && mdtc) {
This is a configuration policy that controls whether to update the limit in the control group. The config enables support for controlling the writeback of dirty pages on a per-cgroup basis in the Linux kernel. This allows for better resource management and improved performance.
-
-
elixir.bootlin.com elixir.bootlin.com
-
if (si->cluster_info) { if (!scan_swap_map_try_ssd_cluster(si, &offset, &scan_base)) goto scan; } else if (unlikely(!si->cluster_nr--)) {
Algorithmic policy decision: If SSD, use SSD wear-leveling friendly algorithm. Otherwise, use HDD algo which minimizes seek times. Potentially, certain access patterns may make one of these algorithms less effective (i.e. in the case of wear leveling, the swap is constantly full)
-
scan_base = offset = si->lowest_bit; last_in_cluster = offset + SWAPFILE_CLUSTER - 1; /* Locate the first empty (unaligned) cluster */ for (; last_in_cluster <= si->highest_bit; offset++) { if (si->swap_map[offset]) last_in_cluster = offset + SWAPFILE_CLUSTER; else if (offset == last_in_cluster) { spin_lock(&si->lock); offset -= SWAPFILE_CLUSTER - 1; si->cluster_next = offset; si->cluster_nr = SWAPFILE_CLUSTER - 1; goto checks; } if (unlikely(--latency_ration < 0)) { cond_resched(); latency_ration = LATENCY_LIMIT; } }
Here, (when using HDDs), a policy is implemented that places the swapped page in the first available slot. This is supposed to reduce seek time in spinning drives, as it encourages having swap entries near each other.
-
/* * Even if there's no free clusters available (fragmented), * try to scan a little more quickly with lock held unless we * have scanned too many slots already. */ if (!scanned_many) { unsigned long scan_limit; if (offset < scan_base) scan_limit = scan_base; else scan_limit = si->highest_bit; for (; offset <= scan_limit && --latency_ration > 0; offset++) { if (!si->swap_map[offset]) goto checks; } }
Here we have a configuration policy where we do another smaller scan as long as we haven't exhausted our latency_ration. Another alternative could be yielding early in anticipation that we aren't going to find a free slot.
-
/* * select a random position to start with to help wear leveling * SSD */ for_each_possible_cpu(cpu) { per_cpu(*p->cluster_next_cpu, cpu) = get_random_u32_inclusive(1, p->highest_bit); }
An algorithmic (random) policy is used here to spread swap pages around an SSD to help with wear leveling instead of writing to the same area of an SSD often.
-
cluster_list_add_tail(&si->discard_clusters, si->cluster_info, idx);
A policy decision is made to add a cluster to the discard list on a first-come, first-served basis. However, this approach could be enhanced by prioritizing certain clusters higher on the list based on their 'importance.' This 'importance' could be defined by how closely a cluster is related to other pages in the swap. By doing so, the system can reduce seek time as mentioned on line 817.
-
if (unlikely(--latency_ration < 0)) { cond_resched(); latency_ration = LATENCY_LIMIT; scanned_many = true; } if (swap_offset_available_and_locked(si, offset)) goto checks; } offset = si->lowest_bit; while (offset < scan_base) { if (unlikely(--latency_ration < 0)) { cond_resched(); latency_ration = LATENCY_LIMIT; scanned_many = true; }
Here, a policy decision is made to fully replenish the latency_ration with the LATENCY_LIMIT and then yield back to the scheduler if we've exhausted it. This makes it so that when scheduled again, we have the full LATENCY_LIMIT to do a scan. Alternative policies could grow/shrink this to find a better heuristic instead of fully replenishing each time.
Marked config/value as awe're replacing latency_ration with a compiletime-defined limit.
-
while (scan_swap_map_ssd_cluster_conflict(si, offset)) { /* take a break if we already got some slots */ if (n_ret) goto done; if (!scan_swap_map_try_ssd_cluster(si, &offset, &scan_base)) goto scan;
Here, a policy decision is made to stop scanning if some slots were already found. Other policy decisions could be made to keep scanning or take into account how long the scan took or how many pages were found.
-
else if (!cluster_list_empty(&si->discard_clusters)) { /* * we don't have free cluster but have some clusters in * discarding, do discard now and reclaim them, then * reread cluster_next_cpu since we dropped si->lock */ swap_do_scheduled_discard(si); *scan_base = this_cpu_read(*si->cluster_next_cpu); *offset = *scan_base; goto new_cluster;
This algorithmic policy discards + reclaims pages as-needed whenever there is no free cluster. Other policies could be explored that do this preemptively in order to avoid the cost of doing it here.
-
#ifdef CONFIG_THP_SWAP
This is a build-time flag that configures how hugepages are handled when swapped. When defined, it swaps them in one piece, while without it splits them into smaller units and swaps those units.
-
if (swap_flags & SWAP_FLAG_DISCARD_ONCE) p->flags &= ~SWP_PAGE_DISCARD; else if (swap_flags & SWAP_FLAG_DISCARD_PAGES) p->flags &= ~SWP_AREA_DISCARD
This is a configuration policy decision where a sysadmin can pass flags to sys_swapon() to control the behavior discards are handled. If DISCARD_ONCE is set, a flag which "discard[s] swap area at swapon-time" is unset, and if DISCARD_PAGES is set, a flag which "discard[s] page-clusters after use" is unset.
-
-
elixir.bootlin.com elixir.bootlin.com
-
randomize_stack_top
This function uses a configuration policy to enable Address Space Layout Randomization (ASLR) for a specific process if PF_RANDOMIZE flag is set. It randomly arranges the positions of stack of a process to help defend certain attacks by making memory addresses unpredictable.
-
-
elixir.bootlin.com elixir.bootlin.com
-
if (prev_class) { if (can_merge(prev_class, pages_per_zspage, objs_per_zspage)) { pool->size_class[i] = prev_class; continue; } }
This is an algorithmic policy. A
zs_pool
maintainszs_page
s of differentsize_class
. However, somesize_class
es share exactly same characteristics, namelypages_per_zspage
andobjs_per_zspage
. Recall the other annotation of mine, it searched freezspage
s bysize_class
:zspage = find_get_zspage(class);
. Thus, grouping different classes improves memory utilization. -
zspage = find_get_zspage(class); if (likely(zspage)) { obj = obj_malloc(pool, zspage, handle); /* Now move the zspage to another fullness group, if required */ fix_fullness_group(class, zspage); record_obj(handle, obj); class_stat_inc(class, ZS_OBJS_INUSE, 1); goto out; }
This is an algorithmic policy. Instead of immediately allocating new zspages for each memory request, the algorithm first attempts to find and reuse existing partially filled zspages from a given size class by invoking the find_get_zspage(class) function. It also updates the corresponding fullness groups.
-
-
elixir.bootlin.com elixir.bootlin.com
-
1
This is a configuration policy that sets the timeout between retries if vmap_pages_range() fails. This could be tunable variable.
-
if (!(flags & VM_ALLOC)) area->addr = kasan_unpoison_vmalloc(area->addr, requested_size, KASAN_VMALLOC_PROT_NORMAL);
This is an algorithmic policy. This is an optimization that prevents duplicate marks of accessibility. Only pages allocated without
VM_ALLOC
(e.g. ioremap) was not set accessible (unpoison), thus requiring explicit setting here. -
100U
This is an configuration policy that determines 100 pages are the upper limit for the bulk-allocator. However, the implementation of
alloc_pages_bulk_array_mempolicy
does not explicitly limit in the implementation. So I believe it is an algorithmic policy related to some sort of optimization. -
if (!order) {
This is an algorithmic policy determines that only use the bulk allocator for order-0 pages (non-super pages). Maybe the bulk allocator could be applied to super pages to speed up allocation. Currently I haven't seen the reason why it cannot be applied.
-
if (likely(count <= VMAP_MAX_ALLOC)) { mem = vb_alloc(size, GFP_KERNEL); if (IS_ERR(mem)) return NULL; addr = (unsigned long)mem; } else { struct vmap_area *va; va = alloc_vmap_area(size, PAGE_SIZE, VMALLOC_START, VMALLOC_END, node, GFP_KERNEL, VMAP_RAM); if (IS_ERR(va)) return NULL; addr = va->va_start; mem = (void *)addr; }
This is an algorithmic policy that determines whether to use a more efficient
vl_alloc
which does not involve complex virtual-to-physical mappings. Unlike the latteralloc_vmap_area
,vb_alloc
does not need to traverse the rb-tree of free vmap areas. It simply find a larger enough block fromvmap_block_queue
. -
VMAP_PURGE_THRESHOLD
The threshold VMAP_PURGE_THRESHOLD is a configuration policy that could be tuned by machine learning. Setting this threshold lower reduces purging activities while setting it higher reduces framentation.
-
if (!(force_purge
This is an algorithmic policy that prevents purging blocks with considerable amount of "usable memory" unless requested with force_purge.
-
resched_threshold = lazy_max_pages() << 1;
The assignment of resched_threshold and lines 1776-1777 are configuration policies to determine fewer than which number of lazily-freed pages it should yield CPU temporarily to higher-priority tasks.
-
log = fls(num_online_cpus());
This heuristic scales lazy_max_pages logarithmically, which is a configuration policy. Alternatively, machine learning could determine the optimal scaling function—whether linear, logarithmic, square-root, or another approach.
-
32UL * 1024 * 1024
This is a configuration policy that decides to always returns multiples of 32 MB worth of pages. This could be a configurable variable rather than a fixed magic number.
-
- Sep 2024
-
elixir.bootlin.com elixir.bootlin.com
-
if (lruvec->file_cost + lruvec->anon_cost > lrusize / 4) { lruvec->file_cost /= 2; lruvec->anon_cost /= 2; }
It is a configuration policy. The policy here is to adjust the cost of current page. The cost means the overhead for kernel to operate the page if the page is swapped out. Kernel adopts a decay policy. Specifically, if current cost is greater than lrusize/4, its cost will be divided by 2. If kernel has no this policy, after a long-term running, the cost of each page is very high. Kernel might mistakenly reserve pages which are frequently visited long time ago but are inactive currently. It might cause performance degradation. The value (lrusize/4) here has a trade-off between performance and sensitivity. For example, if the value is too small, kernel will frequently adjust the priority of each page, resulting in process's performance degradation. If the value is too large, kernel might be misleaded by historical data, causing wrongly swapping currently popular pages and further performance degradation.
-
if (megs < 16) page_cluster = 2; else page_cluster = 3;
It is a configuration policy. The policy here is to determine the size of page cluster. "2" and "3" is determined externally to the kernel. Page cluster is the actual execution unit when swapping. If the machine is small-memory, kernel executes swap operation on 4 (2^2) pages for each time. Otherwise, kernel operats 8 (2^3) for each time. The rational here is to avoid much memory pressure for small-memory system and to improve performance for large-memory system.
-
-
elixir.bootlin.com elixir.bootlin.com
-
mod_memcg_page_state(area->pages[i], MEMCG_VMALLOC, 1);
It is a configuration policy. It is used to count the physical page for memory control group. The policy here is one physical page corresponds to one count to the memory control group. If using huge page, the value here might not be 1,
-
schedule_timeout_uninterruptible(1);
It is a configuration policy. If kernel cannot allocate an enough virtual space with alignment, while nofail is specified to disallow failure, the kernel will let the process to sleep for 1 time slot. In this period, the process cannot be interrupted and quit the schedule queue of CPU. The "1" here is a configuration parameter, made externally to the kernel. It is not large enough for latency-sensitive process and is not small enough to retry frequently.
-
if (array_size > PAGE_SIZE) { area->pages = __vmalloc_node(array_size, 1, nested_gfp, node, area->caller); } else { area->pages = kmalloc_node(array_size, nested_gfp, node); }
It is an algorithmic policy and also a configuration policy. The algorithmic policy here is to maxmize the data locality of virtual memory address, by letting the space be in continuous virtual pages. If the demanded size of virtual memory is larger than one page, the kernel will allocate multiple continuous pages for it by using __vmalloc_node(). Otherwise, the kernel will call kmalloc_node() to place it in a single page. On the other hand, to allocate continuous pages, we should invoke __vmalloc_node() by declaring align = 1, which is a configuration policy.
-
if (!counters) return; if (v->flags & VM_UNINITIALIZED) return;
It is an algorithmic policy. The show_numa_info() is used for printing how the virtual memory of v (vm_struct) distributes its pages across numa nodes. The two if conditions are used for filtering the invalid v. The first if means the virtual memory has not been associated with physical page. The second if means the virtual memory has not been initialized yet.
-
if (page) copied = copy_page_to_iter_nofault(page, offset, length, iter); else copied = zero_iter(iter, length);
It is an algorithmic policy. The policy here is to avoid lock/unlock overhead by using copy_page_to_iter_nofault() function plus if-else branch. Because copy_page_to_iter_nofault() is based on no page fault, we need to check the physical page is still alive. So the kernel uses an if condition to guarantee copy_page_to_iter_nofault() without page fault. On the other hand, if the page is not valid, kernel chooses to fill the iter using zero value instead of returning an error. I think it is because it can make invocation more convenient. The caller does not need to do a verification of the return value and does not need further actions to handle it.
-
if (base + last_end < vmalloc_start + last_end) goto overflow; /* * Fitting base has not been found. */ if (va == NULL) goto overflow;
It is an algorithmic policy. The two if conditions are used for checking the feasibility of the allocation. The first if means the adress of the allocation is beyond the allowable address, causing overflow. In this case, since the base address is decided from higher one to smaller one, reducing base address cannot work. Note that the base address is dependent on the va. The second if means we don't find a valid va which has appropriate base address. So the policy here is going to overflow branch to re-allocate va list.
-
if (base + start < va->va_start) { va = node_to_va(rb_prev(&va->rb_node)); base = pvm_determine_end_from_reverse(&va, align) - end; term_area = area; continue; }
It is an algorithmic policy. It is used for checking whether the start address of current va is valid. The policy here is to change a new va, different from the solution of "end address check" (explained in my other annotation). The reason is that we find the base address from high address to low address. If we continue to reduce the base address, the if condition will be always wrong. Changing a new va with a lower start address is the only solution.
-
if (base + end > va->va_end) { base = pvm_determine_end_from_reverse(&va, align) - end; term_area = area; continue; }
It is an algorithmic policy. The outer loop is an endless loop until finding a vaild virtual memory space satisfying the requirements. The if condition here is used to guarantee the space in va is large enough. If not, we continue to scan the memory space from high address to low address while satisfying the alignment requirement. Specifically, tuning the base address to a lower address. And then, it will retry for verification.
-
va = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT); if (WARN_ON_ONCE(!va)) continue;
It is an algorithmic policy. The for loop is used for transferring the virtual memory managment by using from vm_struct (link list) to vm_area (tree?). Inside the for loop, if we cannot allocate a new vmap_area from vmap_area_cachep (va = NULL), the program will simply print a warning and skip current tmp, instread of retry or anything to guarantee the integrity.
-
if (!spin_trylock(&vmap_area_lock)) return false;
It is an algorithmic policy. The vmalloc_dump_obj() function is used for printing the information of specified virtual memory. Due to concurrency, before manipulating the critical state, we must obtain the lock. The policy here is spin_trylock. It only tries once. If fails, the function will simply returns false. I think the policy here is to avoid long-term waiting to improve the performance.
-
-
forum.effectivealtruism.org forum.effectivealtruism.org
-
asteriskmag.com asteriskmag.com
-
This revealed a more fundamental issue: programming to increase contraceptive uptake in the postpartum period likely produces little meaningful reduction in pregnancy risk
Tags
Annotators
URL
-
-
en.wikipedia.org en.wikipedia.org
-
The law in many countries allows users certain rights over data whose copyright they do not own (including text, images, and other media), often under headings such as fair use or public interest. Depending on jurisdiction, these may cover issues such as whistleblowing, production of evidence in court, quoting or other small-scale usage, backups of owned media, and making a copy of owned material for personal use on other owned devices or systems. The steps implicit in trusted computing have the practical effect of preventing users exercising these legal rights.
-
-
blog.nodejitsu.com blog.nodejitsu.com
-
Want to really annoy an open-source maintainer? Then ignore any communication channels they have setup for support.
-
-
www.youtube.com www.youtube.com
-
during these 200 years the main effects of print on Europe was a wave of Wars of religion and witch hunts and things like that because the big best sellers of early modern Europe were not Copernicus and Galileo galile almost nobody read them the big best sellers were religious tracks and were uh witch hunting manuals
for - Gutenberg printing press - initial use - misinformation - witchhunting manuals were the best sellers - Yuval Noah Harari
-
-
github.com github.com
-
In cases where I've been concerned about the migration of data (e.g. copying my entire home directory from one system to another), I've used fingerprint to generate a transcript on the source machine, and then run it on the destination machine, to reassure me that the data was copied correctly and completely.
-
-
www.theguardian.com www.theguardian.com
-
Bericht über die Zerstörung der Mangrovenwälder in El Salvador und über Projekte zur Renaturierung. https://www.theguardian.com/global-development/article/2024/sep/05/mangroves-el-salvador-forests
Tags
- Temperaturanstieg
- Deforestation
- Nayib Bukele Regierung
- Association of Women of the Barra de Santiago
- Zuckerrohr-Industrie
- Tourismus
- El Salvador
- Local Sustainable Use Plan (Plas) group
- Renaturierung
- Tropenstürme
- Salvadoran Ecological Unit
- Barra de Santiago
- Marcela Díaz
- Verlust von.Feuchtgebieten
- Urbanisierung
Annotators
URL
-
-
-
And if I need for simple service object without validation? You can use Formalism::Action, a parent of Formalism::Form.
-
-
socketry.github.io socketry.github.io
-
When should I use Async? ¶ You should use Async when you desire explicit concurrency in your program. That means you want to run multiple tasks at the same time, and you want to be able to wait for the results of those tasks.
-
- Aug 2024
-
elixir.bootlin.com elixir.bootlin.com
-
if (hugetlb_cgroup_disabled())
This probably not an interesting policy decision for ldos. It is a feature flag for the running OS. But if cgroups were decided by policy then this flag would be controlled by the cgroup decision.
-
-
www.kickstarter.com www.kickstarter.comYonder1
- Jul 2024
-
www.rfc-editor.org www.rfc-editor.org
-
The purpose of distinguishing between safe and unsafe methods is to allow automated retrieval processes (spiders) and cache performance optimization (pre-fetching) to work without fear of causing harm.
-
-
xanadu.com xanadu.com
-
It is now possible (but not easy) for anyone who is determined enough to create a xanadoc, and send it to others, who may open and use it. (Note that the World Wide Web was available for several years before the Mosaic editor made it easy for the public.)
fair enough...
-
-
-
However, with verifiable credentials in a Solid Pod, the university issues some information stating that a student completed a course and cryptography signs that information. This is a verifiable credential. They then pass that credential to the student who stores it in their Solid Personal Online Datastore (Pod). When the student wants to apply for a job, all they need to do is grant access to the credential so the company can read it. The company can confirm that the credential isn’t faked because its cryptographically signed by the university.
-
- Jun 2024
-
www.lrb.co.uk www.lrb.co.uk
-
Despite – or perhaps because of – all this activity, Samuel only published one sole-authored book in his lifetime, Theatres of Memory (1994), an account of the popular historical imagination in late 20th-century Britain told via case studies, from Laura Ashley fabrics to the touristification of Ironbridge. Since his death from cancer in 1996, however, Samuel has been prolific. A second volume of Theatres of Memory, titled Island Stories: Unravelling Britain, came out in 1998, followed in 2006 by The Lost World of British Communism, a volume of essays combining research and recollections.
Theatres of Memory (1994) sounds like it's taking lots of examples from a zettelkasten and tying them together.
It's also interesting to note that he published several books posthumously. Was this accomplished in part due to his zettelkasten notes the way others like Ludwig Wittgenstein?
-
-
www.washburn.edu www.washburn.edu
-
Technology, Education and Copyright Harmonization (TEACH) Act. Signed into law by President Bush on November 2, the TEACH Act loosens the restraints created by the DMCA insofar as education is concerned
TEACH Act - loosens DMCA in favor of fair use
-
More importantly, the idea of Fair Use was effectively removed from Web-based education because of the DMCA
Fair Use revoked b/c of DMCA
-
-
uri.libguides.com uri.libguides.com
-
Resources for using images in online education
Image sources
-
-
www.fairuseweek.org www.fairuseweek.org
-
It is not necessary to prevailon each of the four factors for asuccessful fair use claim.
You don't have to prove fair use in all 4 factors
-
Fair use is a flexible standard andall four statutory factors areconsidered together.
Fair use flexibility
-
The US Constitution clearlystates that the purpose of theintellectual property system is to“promote the progress of science andthe useful arts
Purpose of Intellectual property system
-
ir use is a right explicitly recognizedby the Copyright Act.1 The SupremeCourt has recognized this right as a“First Amendment safeguard” becausecopyright law might otherwiseconstrict freedom of speech
Fair Use is a right - I really don't understand this but Ok
-
-
guides.lib.utexas.edu guides.lib.utexas.edu
-
Using the Four Factors
Four Factors Test for Fair Use
Read about each factor (character of the use, nature of the work, amount used, effect upon the market)
Answer each factor's question about your use See how the balance tips with each answer
Make a judgment about the final balance: overall, does the balance tip in favor of fair use or in favor of getting permission?
-
-
guides.lib.utexas.edu guides.lib.utexas.edu
-
are a small subset of the uses of online resources educators may wish to make. It only covers in class performances and displays, not, for example, supplemental online reading, viewing, or listening materials. For those activities, as well as many others, we'll need to continue to rely on fair use. Remember, however, when relying on fair use, the fair use test is sensitive to harm to markets. This means that in general, where there is an established market for permissions, there will often be a narrower scope for fair use, and our reliance on fair use should be limited.
-
-
github.com github.com
-
we leave it up to each image maintainer to make the appropriate judgement on what's going to be the best representation / most supported solution for the upstream project they're representing
-
-
www.howtogeek.com www.howtogeek.com
-
Docker-in-Docker via dind has historically been widely used in CI environments. It means the "inner" containers have a layer of isolation from the host. A single CI runner container supports every pipeline container without polluting the host's Docker daemon.
-
While it often works, this is fraught with side effects and not the intended use case for dind. It was added to ease the development of Docker itself, not provide end user support for nested Docker installations.
-
- May 2024
-
www.rfc-editor.org www.rfc-editor.org
-
Please note that '+' characters are frequently used as part of an email address to indicate a subaddress, as for example in <bill+ietf@example.org>.
Nice of them to point that this is a common scenario, not just a hypothetical one.
Tags
Annotators
URL
-
-
-
It is not helpful to use the term "terrorism" in a war when the White House only ever applies it to one side. Better to remind both Hamas and the Israeli government that humanitarian law makes it a war crime to target or indiscriminately fire on civilians.
Kenneth Roth October 7, 2023 tweet
-
-
www.youtube.com www.youtube.com
-
Joe Van Cleave has used an index card with his typewriter to hold up the back of his typewriter paper on machines (the Ten Forty, for example) which lack a metal support on the back of the paper table.
Tags
Annotators
URL
-
-
commandmasters.com commandmasters.com
-
Use case 1: Delete a ref, useful for soft resetting the first commit
-
- Apr 2024
-
-
for - deep geothermal - Quaise Energy - Paul Woskov - adjacency - deep geothermal - gyrotron - microwave energy - drilling - use oil & gas industry drilling expertise - rehabilitate old mines
summary - see adjacency statement below
adjacency - between - deep geothermal - gyrotron - microwave energy - drilling - use oil & gas industry drilling expertise - rehabilitate old mines - adjacency statement - gyrotrons pulse high energy microwave energy in nuclear fusion experiments - Woskov thought of applying to vaporing rocks - Quaise was incorporated to explore the possiblity of using gyrotrons to drill up to 20 miles down to tap into the earths heat energy to heat water and drive steam turbines in existing coal-fired and gas power plants - oil and gas industry drilling expertise can be repurposed for this job - as well as all the abandoned resource wells around the globe - Such heat can provide a stable 24/7 base load energy for most of humanity's energy needs.
implications for energy transition - This is a viable option for replacing the dirty fossil fuel system - It has the scale and engineering timelines to be feasible - It is a supply side change but can affect our demand side strategy - The strategy that may become the most palatable is one of a "temporary energy diet"
-
-
storage.courtlistener.com storage.courtlistener.com
-
Hachette Book Group, Inc. v. Internet Archive (23-1260) Court of Appeals for the Second Circuit
REPLY BRIEF, on behalf of Appellant Internet Archive, filed 04/19/2024
https://www.courtlistener.com/docket/67801014/hachette-book-group-inc-v-internet-archive/
-
-
www.theguardian.com www.theguardian.com
-
Der Guardian kritisiert in einem Editorial den Verzicht auf Kernelemente des Green Deal in der europäischen Agrarpolitik, darunter die Nicht-Verabschiedung des Nature Restoration Law. Er verweist auf eine Umfrage, die zeigt, dass eine Mehrheit in Europa eine konsequentere Klimapolitik unterstützt.
Tags
- process: lowering climate ambition
- project: European Green Deal
- actor: European Commission
- law: nature restoration law
- event: scrapping of changes to the agricultural policy
- event: farmers' protests
- event: renouncement to halve the use of pesticides
- mode: comment
- topic: surveys
- actor: agribusiness
- 2024-04-08
- event: renouncement to reduce agricultural emissions
- country: Europe
Annotators
URL
-
-
docs.rangelandsgateway.org docs.rangelandsgateway.org
-
In summary, public and private rangeland resources provide a wide variety of EGS. Additionally,spiritual values are vital to the well-being of ranching operations, surrounding communities, and the nation as a whole. Society is placing multiple demands on the nation’s natural resources,and it is extremely important that NRCS be able to provide resource data and technical assistance at local and national levels. (4) Rangelands are in constant jeopardy, either from misuse or conversion to other uses. Holechek et al. (2004) andHolechek (2013) states that in the next 100 years, up to 40percentof U.S. rangelands could be converted and lost to other uses. Land-use shifts from grazing use to urbanization will be much greater in areas of more rapid population increases and associated appreciating land values. Projections supporting forage demand suggestthat changes in land use will decrease the amount of land available for grazing to a greater extent in the Pacific Coast and Rocky Mountains,compared to the North or South Assessment Regions (Mitchell 2000).(5) As society attempts to satisfy multiple demands with limited resources, many ranching and farming operations seek to expand operations for multiple goods and services beyond traditional cattle production. Some diversifiedenterprises may include the following: (i) Management to enhance wildlife abundance and diversityfor fishing, hunting and non-hunting activities(ii) Maintaining habitat for rare plants(iii) Accommodatingnature enthusiasts, bird watchers, and amateur botanists. (6) Planning, evaluation, and communication are necessary steps (consult conservation planning steps) prior to initiating any new rangeland EGS-based enterprises.
-
-
datatracker.ietf.org datatracker.ietf.org
-
if a mail system automatically unsubscribes recipient mailboxes that have been closed or abandoned, there can be no interaction with a user who is not present
I had not thought of that use case...
Tags
Annotators
URL
-
-
-
In Deutschland ist der Benzinverbrauch 2023 um 416.000 Tonnen auf 17,3 Millionen Tonnen gestiegen. Der ADAC führt das auf den Verkauf von mehr Benzinern zurück. Der Diesel-Verbrauch war wegen weniger Lastverkehr leicht rückläufig. https://taz.de/Kraftstoffverbrauch-bundesweit/!5998899/
-
-
Local file Local file
-
For larger collections of books it may be thought preferable to use a libraryclassification, such as Mr. Dewey's Decimal Classification, but I doubt very muchif the gain will be in proportion to the additional labour involved.
Some interesting shade here, but he's probably right with respect to the additional work involved in a personal collection which isn't shared at scale.
The real work is the indexing of the material within the books, the assigned numbers are just a means of finding them.
-
- Mar 2024
-
www.csap.cam.ac.uk www.csap.cam.ac.uk
-
yarnpkg.com yarnpkg.com
-
When you need to publish multiple packages and want to avoid your contributors having to open PRs on many separate repositories whenever they want to make a change.
-
when projects want to keep strict boundaries within their code and avoid becoming an entangled monolith. This is for example the case for Yarn itself, or many enterprise codebases.
-
- Feb 2024
-
unix.stackexchange.com unix.stackexchange.com
-
if [ "$#" -eq 0 ]; then cat else printf '%s\n' "$@" fi |
-
-
unix.stackexchange.com unix.stackexchange.com
-
The lonesome cat isn’t useless. UUOCs are typically characterized by having exactly one filename argument; this one has none. It connects the input to the function (which is the input of the if statement) to the output of the if statement (which is the input to the base64 –decode statement)
-
-
www.investopedia.com www.investopedia.comT-Test1
-
T-Test: What It Is With Multiple Formulas and When To Use Them
when to use ttest?
-
-
Local file Local file
-
he very degree of wornness ofcertain cards that you once ipped to daily but now perhaps do not—since that author is drunk and forgotten or that magazine editorhas been red and now makes high-end apple chutneys inBinghamton—constitutes signi cant information about what partsof the Rolodex were of importance to you over the years.
The wear of cards can be an important part of your history with the information you handle.
Luhmann’s slips show some of this sort of wear as well, though his show it to extreme as he used thinner paper than the standard index card so some of his slips have incredibly worn/ripped/torn tops more than any grime. Many of my own books show that grime layer on the fore-edge in sections which I’ve read and re-read.
One of my favorite examples of this sort of wear through use occurs in early manuscripts (usually only religious ones) where readers literally kissed off portions of illuminations when venerating the images in their books. Later illuminators included osculation targets to help prevent these problems. (Cross reference: https://www.researchgate.net/publication/370119878_Touching_Parchment_How_Medieval_Users_Rubbed_Handled_and_Kissed_Their_Manuscripts_Volume_1_Officials_and_Their_Books)
(syndication link: https://boffosocko.com/2024/02/04/55821315/#comment-430267)
-
-
www.theguardian.com www.theguardian.com
-
Eine Studie der Rhodium Group zeichnet ein Zukunftsbild, das vielen Dekarbonisierungsprognosen - außer bei Stromproduktion und Autos - krass widerspricht. (Es liegt deutlich über den SSP2-4.5-Szenario des IPCC.) 2100 wird danach der Erdgasverbrauch bei 126% des jetzigen liegen. Flugzeuge werden 2050 77% mehr fossilen Treibstoff verbrauchen als jetzt, Schifffahrt und Industrie etwa die heutige Menge. https://www.theguardian.com/environment/2024/feb/09/biggest-fossil-fuel-emissions-shipping-plane-manufacturing
Rhodium Climate Outlook: https://climateoutlook.rhg.com/
Rhodium-Artikel zur Prognose: https://rhg.com/research/global-fossil-fuel-demand/
-
- Jan 2024
-
www.avery.com www.avery.com
-
www.derstandard.at www.derstandard.at
-
Aktueller Überblick zu Emissionen und Landnutzung in Österreich die Emissionen durch die Landwirtschaft nehmen schon länger ab, während Wälder in Österreich zunehmend als CO2 senken fungieren. Wichtigste Ursache für die Emissionen ist nach wie vor die Viehhaltung. Https://www.derstandard.at/story/3000000200378/wie-die-landnutzung-helfen-kann-das-klima-zu-schuetzen
-
-
mongoosejs.com mongoosejs.com
-
Instance methods Instances of Models are documents. Documents have many of their own built-in instance methods. We may also define our own custom document instance methods. // define a schema const animalSchema = new Schema({ name: String, type: String }, { // Assign a function to the "methods" object of our animalSchema through schema options. // By following this approach, there is no need to create a separate TS type to define the type of the instance functions. methods: { findSimilarTypes(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); } } }); // Or, assign a function to the "methods" object of our animalSchema animalSchema.methods.findSimilarTypes = function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); }; Now all of our animal instances have a findSimilarTypes method available to them. const Animal = mongoose.model('Animal', animalSchema); const dog = new Animal({ type: 'dog' }); dog.findSimilarTypes((err, dogs) => { console.log(dogs); // woof }); Overwriting a default mongoose document method may lead to unpredictable results. See this for more details. The example above uses the Schema.methods object directly to save an instance method. You can also use the Schema.method() helper as described here. Do not declare methods using ES6 arrow functions (=>). Arrow functions explicitly prevent binding this, so your method will not have access to the document and the above examples will not work.
Certainly! Let's break down the provided code snippets:
1. What is it and why is it used?
In Mongoose, a schema is a blueprint for defining the structure of documents within a collection. When you define a schema, you can also attach methods to it. These methods become instance methods, meaning they are available on the individual documents (instances) created from that schema.
Instance methods are useful for encapsulating functionality related to a specific document or model instance. They allow you to define custom behavior that can be executed on a specific document. In the given example, the
findSimilarTypes
method is added to instances of theAnimal
model, making it easy to find other animals of the same type.2. Syntax:
Using
methods
object directly in the schema options:javascript const animalSchema = new Schema( { name: String, type: String }, { methods: { findSimilarTypes(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); } } } );
Using
methods
object directly in the schema:javascript animalSchema.methods.findSimilarTypes = function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); };
Using
Schema.method()
helper:javascript animalSchema.method('findSimilarTypes', function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); });
3. Explanation in Simple Words with Examples:
Why it's Used:
Imagine you have a collection of animals in your database, and you want to find other animals of the same type. Instead of writing the same logic repeatedly, you can define a method that can be called on each animal instance to find similar types. This helps in keeping your code DRY (Don't Repeat Yourself) and makes it easier to maintain.
Example:
```javascript const mongoose = require('mongoose'); const { Schema } = mongoose;
// Define a schema with a custom instance method const animalSchema = new Schema({ name: String, type: String });
// Add a custom instance method to find similar types animalSchema.methods.findSimilarTypes = function(cb) { return mongoose.model('Animal').find({ type: this.type }, cb); };
// Create the Animal model using the schema const Animal = mongoose.model('Animal', animalSchema);
// Create an instance of Animal const dog = new Animal({ type: 'dog', name: 'Buddy' });
// Use the custom method to find similar types dog.findSimilarTypes((err, similarAnimals) => { console.log(similarAnimals); }); ```
In this example,
findSimilarTypes
is a custom instance method added to theAnimal
schema. When you create an instance of theAnimal
model (e.g., a dog), you can then callfindSimilarTypes
on that instance to find other animals with the same type. The method uses thethis.type
property, which refers to the type of the current animal instance. This allows you to easily reuse the logic for finding similar types across different instances of theAnimal
model.
Tags
Annotators
URL
-
-
gitlab.com gitlab.com
-
It's also common to want to compute the transitive closure of these relations, for instance, in listing all the issues that are, transitively, duped to the current one to hunt for information about how to reproduce them.
-
Purpose of the relations should be to allow advanced analysis, visualization and planning by third-party tools or extensions/plugins, while keeping Gitlab's issues simple and easy to use.
-
- Dec 2023
-
westernsydney.pressbooks.pub westernsydney.pressbooks.pub
-
https://westernsydney.pressbooks.pub/criticalanalysis/chapter/the-use-of-knowledge-in-society/
-
-
Local file Local file
-
Cross reference Wikipedia article: https://en.wikipedia.org/wiki/The_Use_of_Knowledge_in_Society
-
-
developers.google.com developers.google.com
-
Use cases
-
-
-
Compared with simple clients, modern clients are generally much easier to use and more Ruby-like
-
- Oct 2023
-
riojournal.com riojournal.com
-
When digitized, each resulting ‘Digital Specimen’ must be persistently and unambiguously identified. Subsequent events or transactions associated with the Digital Specimen, such as annotation and/or modification by a scientist must be recorded, stored and also unambiguously identified.
Workflows
-
Persistent identifiers (PID) to identify digital representations of physical specimens in natural science collections (i.e., digital specimens) unambiguously and uniquely on the Internet are one of the mechanisms for digitally transforming collections-based science.
Use case
-
Appropriate identifiers Requirement: PIDs appropriate to the digital object type being persistently identified.
Appropriate
-
-
www.repubblica.it www.repubblica.it
-
Eher unkritischer, aber informativer Bericht über eine Studie zur Wassernutzung in Italien, an der die Gruppe A2A beteiligt ist. Extremwetter und Trockenheit haben gravierende Konsequenzen. So sank die Stromprodutktion durch Wasserkraftwerke im vergangenen Jahr auf die Werte von 1954. 18% des Bruttoinlandprodukts Italiens hängen von der ausreichenden Verfügbarkeit von Süßwasser ab.
Studie: https://www.ambrosetti.eu/news/acqua-azioni-e-investimenti-per-lenergia-le-persone-e-i-territori/
-
- Sep 2023
-
popjournal.ca popjournal.ca
-
Ultimately the knowledge graph will permit a much clearer understanding of global research networks, research impact, and the ways in which knowledge is created in a highly interconnected world.
Use Case
-
PIDs infrastructure promises much more accurate and timely reporting for key metrics including the number of publications produced at an institution in a given year, the total number of grants, and the amount of grant funding received.
Use Case
-
They can also much more easily see whether researchers have met mandated obligations for open access publishing and open data sharing.
Use Case
-
The global knowledge graph created by the interlinking of PIDs can help funders to much more easily identify the publications, patents, collaborations, and open knowledge resources that are generated through their various granting programs.
Use Case
Tags
Annotators
URL
-
-
www.kickstarter.com www.kickstarter.com
-
bugs.ruby-lang.org bugs.ruby-lang.org
-
I think there are real-world use cases! Would you consider converting a history of transactions into a history of account balances a valid use-case? That can be done easily with a scan. For example, if you have transactions = [100, -200, 200] then you can find the history of account balances with transactions.scan_left(0, &:+) # => [0, 100, -100, 100].
Tags
Annotators
URL
-
-
datacite.org datacite.org
-
PIDs for research dataPIDs for instrumentsPIDs for academic eventsPIDs for cultural objects and their contextsPIDs for organizations and projectsPIDs for researchers and contributorsPIDs for physical objectsPIDs for open-access publishing services and current research information systems (CRIS)PIDs for softwarePIDs for text publications
PID Use Case Elements, entities
-
-
www.researchgate.net www.researchgate.net
-
Persistent identifiers for acknowledgment and citation
PID Use Cases
-
-
www.surf.nl www.surf.nl
-
To reuse and/or reproduce research it is desirable that researchoutput be available with sufficient context and details for bothhumans and machines to be able to interpret the data as described inthe FAIR principles
Reusability and reproducibility of research output
-
Registration of research output is necessary to report tofunders like NWO, ZonMW, SIA, etc. for monitoring andevaluation of research (e.g. according to SEP or BKOprotocols). Persistent identifiers can be applied to ease theadministrative burden. This results in better reporting,better information management and in the end betterresearch information.
Registering and reporting research
-
1. Registration and reporting research2. Reusability and reproducibility of research3. Evaluation and recognition of research4. Grant application5. Researcher profiling6. Journal rankings
PID Use Cases
-
-
www.rd-alliance.org www.rd-alliance.org
-
STAGE Description PIDs Benefits
PID Use Cases
-
-
en.wikipedia.org en.wikipedia.org
-
This allows the system designer to permit trusted programs to be run which a user would otherwise not be allowed to execute.
-
-
www.rd-alliance.org www.rd-alliance.org
-
Deduplication of researchersLinkage with awardsAuthoritative attribution of affiliationand worksORCID iD RecommendedIdentification of datasets, software andother types of research outputsDataCite DOI RecommendedIdentification of organisations GRID/ROR RecommendedIdentification of organisations inNZRISNZBN Required for data providers
PID Use Cases
-
-
www.rd-alliance.org www.rd-alliance.org
-
Function PID type (Examples:) Recommended or required?
PID Use Cases
-
-
www.rd-alliance.org www.rd-alliance.org
-
Key features● KISTI’s mission is to curate collect, consolidate, and provide scientific information toKorean researchers and institutions. It includes but is not limited to.■ Curating Korean R&D outputs. Curate them higher state of identification for bettercuration, tracking research impact, analysing research outcomes.■ DOI RA management. Issuing DOIs to Korean research outputs, Intellectualproperties, research data■ Support Korean societies to stimulate better visibilities of their journal articlesaround the world.■ Collaborate for better curation (identification and interlinking) with domestic andglobal scientific information management institutions, publishers and identifiermanaging agencies
PID Use Cases
-
-
www.rd-alliance.org www.rd-alliance.org
-
Name of infrastructure Key purpose List ofintegratedPIDse-infra This large infrastructure will build the NationalRepository Platform in the upcoming years. Thatshould greatly facilitate adoption of PIDs.TBDNational CRIS - IS VaVaI(R&D Information System)National research information system. We planon working with Research, Development andInnovation Council (in charge of IS VaVaI) onintegrating global PIDs into their submissionprocesses as required. Nowadays it uses mostlylocal identifiers.TBDInstitutional CRIS systems Various institutional CRIS systems at CzechRPOs. OBD (Personal Bibliographic Database)application is an outstanding case of aninstitutional CRIS system in the Czech Republicdeveloped locally by a Czech company DERS.An ORCID integration for OBD is currently indevelopment.TBD, OBDORCID inprocessInstitutional or subjectrepositoriesThere are several repositories in the Czechrepublic collecting different objects, some arealready using PIDs but there is still enough roomto improve and really integrate those PIDs, notonly allow their evidence.Handle,DOI,maybeotherMajor research funders Grant application processes TBDLocal publishers Content submission processes TBD
PID Use Cases
-
Function PID type Recommended or required?
PID Use Cases
-
-
www.rd-alliance.org www.rd-alliance.org
-
ResearchVocabularies Australia
PID - Vocabularies for Concepts and Things
-
-
www.rd-alliance.org www.rd-alliance.org
-
1. Registration and reporting research2. Reusability and reproducibility of research3. Evaluation and recognition of research4. Grant application5. Researcher profiling6. Journal rankings
PID Use Cases in the Netherlands
-
-
www.rd-alliance.org www.rd-alliance.org
-
PIDs comparison tableCase study Function PID typeFinland Researchers, persons ORCID; ISNIOrganisations VAT-number (not resolvableyet)RoRISNI___________________________________________________________________________________________________________________Pathways to National PID Strategies: Guide and Checklist to facilitate uptake and alignment Page 13 of 20
PID usage by country
-
-
www.ncbi.nlm.nih.gov www.ncbi.nlm.nih.gov
-
Recent work has revealed several new and significant aspects of the dynamics of theory change. First, statistical information, information about the probabilistic contingencies between events, plays a particularly important role in theory-formation both in science and in childhood. In the last fifteen years we’ve discovered the power of early statistical learning.
The data of the past is congruent with the current psychological trends that face the education system of today. Developmentalists have charted how children construct and revise intuitive theories. In turn, a variety of theories have developed because of the greater use of statistical information that supports probabilistic contingencies that help to better inform us of causal models and their distinctive cognitive functions. These studies investigate the physical, psychological, and social domains. In the case of intuitive psychology, or "theory of mind," developmentalism has traced a progression from an early understanding of emotion and action to an understanding of intentions and simple aspects of perception, to an understanding of knowledge vs. ignorance, and finally to a representational and then an interpretive theory of mind.
The mechanisms by which life evolved—from chemical beginnings to cognizing human beings—are central to understanding the psychological basis of learning. We are the product of an evolutionary process and it is the mechanisms inherent in this process that offer the most probable explanations to how we think and learn.
Bada, & Olusegun, S. (2015). Constructivism Learning Theory : A Paradigm for Teaching and Learning.
Tags
Annotators
URL
-
-
learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.com learn-us-east-1-prod-fleet02-xythos.content.blackboardcdn.comPage 301
-
ly a few decades before had almost destroyed them.The beauty of these plots is that they present the harshness of the regional envi-ronment in such a way as to make the human struggle against it appear even morepositive and heroic than the continuous ascent portrayed in earlier frontier narra-tives.
include this in comparison of different narrative fronts
-
- Aug 2023
-
stackoverflow.com stackoverflow.com
-
async vs. sync depends exactly on what you are doing in what context. If this is in a network service, you need async. For a command line utility, sync is the appropriate paradigm in most simple cases, but just knee-jerk saying "async is better" is not correct. My snippet is based on the OP snippet for context.
-
-
drive.google.com drive.google.com
-
highlights the dire financial circumstances of the poorest individuals, who resort to high-interest loans as a survival strategy. This phenomenon reflects the interplay between human decision-making and development policy. The decision to take such loans, driven by immediate needs, illustrates how cognitive biases and limited options impact choices. From a policy perspective, addressing this issue requires understanding these behavioral nuances and crafting interventions that provide sustainable alternatives, fostering financial inclusion and breaking the cycle of high-interest debt.
Tags
Annotators
URL
-
-
hangingtogether.org hangingtogether.org
-
Recently we recommended that OCLC declare OCLC Control Numbers (OCN) as dedicated to the public domain. We wanted to make it clear to the community of users that they could share and use the number for any purpose and without any restrictions. Making that declaration would be consistent with our application of an open license for our own releases of data for re-use and would end the needless elimination of the number from bibliographic datasets that are at the foundation of the library and community interactions. I’m pleased to say that this recommendation got unanimous support and my colleague Richard Wallis spoke about this declaration during his linked data session during the recent IFLA conference. The declaration now appears on the WCRR web page and from the page describing OCNs and their use.
OCLC Control Numbers are in the public domain
An updated link for the "page describing OCNs and their use" says:
The OCLC Control Number is a unique, sequentially assigned number associated with a record in WorldCat. The number is included in a WorldCat record when the record is created. The OCLC Control Number enables successful implementation and use of many OCLC products and services, including WorldCat Discovery and WorldCat Navigator. OCLC encourages the use of the OCLC Control Number in any appropriate library application, where it can be treated as if it is in the public domain.
-
- Jul 2023
-
academic.oup.com academic.oup.com
-
Information sharing in a hybrid workplace: understanding the role of ease-of-use perceptions of communication technologies in advice-seeking relationship maintenance
-
-
medium.com medium.com
-
Background knowledge refresh
AI as subject matter expert?
-
Lesson plan generation / feedback
-
- Jun 2023
-
stackoverflow.com stackoverflow.com
-
Have you ever: Been disappointed, surprised or hurt by a library etc. that had a bug that could have been fixed with inheritance and few lines of code, but due to private / final methods and classes were forced to wait for an official patch that might never come? I have. Wanted to use a library for a slightly different use case than was imagined by the authors but were unable to do so because of private / final methods and classes? I have.
-
It often eliminates the only practical solution to unforseen problems or use cases.
Tags
- inadvertently causing problems for future users
- well-intentioned protections causing pain or overly complicated workarounds
- only supporting some/specific/limited use cases
- surprising
- disappointing
- inadvertently preventing possibility of solving unforseen problems or use cases
- good point
- +0.9
- inadvertently causing problems for future self
- annotation meta: may need new tag
- can't think of everything
Annotators
URL
-
-
www.theguardian.com www.theguardian.com
-
Fossile Brennstoffe, umweltschädliche Landwirtschaft und Fischfang werden jährlich mit mindestens 7,25 Billionen Dollar subventioniert. Insgesamt fließen pro Minute 23 Millionen Dollar umweltschädliche Subventionen – 8% des Bruttosozialprodukts. Mit 577 Milliarden USD waren fossile Subventionen 2021 doppelt so hoch wie die für Erneuerbare und fast sechsmal so hoch wie die zugesagte Klimafinanzierung für den globalen Süden. https://www.theguardian.com/environment/2023/jun/15/vast-fossil-fuel-and-farming-subsidies-causing-environmental-havoc-world-bank
Bericht der Weltbank: https://www.worldbank.org/en/topic/climatechange/publication/detox-development
-
- May 2023
-
impedagogy.com impedagogy.com
-
human values and ethics, rather than solely pursuing technological progress.
I ask whether technology is classic Pandora's Box--once the attitude is out, you cannot re-box it. Or at least we haven't figured out a way.
Once this margin has been populated with annotations I want to redo the prompt to include them as an alternative point of view in the dialogue.
-
-
www.derstandard.de www.derstandard.de
-
Der jährliche Energiebedarf für Bitcoin ist zur Zeit etwa doppelt so hoch wie der österreichische Stromverbrauch. Der Artikel im Standard führt (unkritisch) gleich eine ganze Reihe der manipulativen Argumentationen auf, die von den Crypto Bros verwendet werden, um diese tatsache zu verstecken oder zu rechtfertigen. https://www.derstandard.at/story/2000146147512/der-klimasuender-bitcoin-in-zahlen-und-wie-er-dieses-image
Cambridge Bitcoin Electricity Consumption Index (CBECI): https://ccaf.io/cbnsi/cbeci
-
- Apr 2023
-
www.repubblica.it www.repubblica.it
-
Eine Studie zum Wasserverbrauch im als Beispiel untersuchen Kapstadt ergibt, dass die reichsten 14% fast 50% der Ressourcen verbrauchen. Gegen den zunehmenden Wassermangel sind vor allem Maßnahmen wirksam, die Ungerechtigkeit und Verschwendung reduzieren. Verbesserungen der Infrastruktur können die Probleme nicht lösen. https://www.repubblica.it/green-and-blue/dossier/siccita--gestione-acqua/2023/04/17/news/consumo_eccessivo_acqua_paesi_ricchi_poveri-396442500/
-
- Mar 2023
-
blog.cmpxchg8b.com blog.cmpxchg8b.com
-
Unique Passwords and U2F are not perfect, but they are good. Unique Passwords reduce the impact of phishing, but can’t eliminate it. U2F doesn’t prevent malware, but does prevent phishing.
-
-
jonathanhaidt.substack.com jonathanhaidt.substack.com
-
Figure 4. Daily average time spent with friends. Graphed by Zach Rausch from data in Kannan & Veazie (2023), analyzing the American Time Use Study.2
-
- Feb 2023
-
chiropracticajax.com chiropracticajax.com
-
Overall, the web page is easy to use. I can easily schedule an appointment, and navigating the tabs is simple. I went ahead and tried the web page on my mobile device as well, and it was just as easy. I also went through to try and book an appointment and that was fairly simple also, although some people may not know which type of appointment is best for them. A brief summary of the different types of treatments would be beneficial.
-
- Jan 2023
-
shopify.engineering shopify.engineering
-
There’s a caveat that we’re aware of—while Hydrogen and App developers only require one runtime (Node), Theme developers need two now: Ruby and Node.
Well, you could write standards-compliant JS... Then people could run it on the runtime everyone already has installed, instead of needing to download Node.
-
-
moodle.univ-lyon2.fr moodle.univ-lyon2.fr
-
not the technology itself that will bring about the learning or solve pedagogic prob-lems in the language classroom, but rather the affordances of those technologies andtheir use and integration in a well-formulated curriculum
-
eachers’ digital litera-cies and their preparedness and motivation to introduce technology in their teachingwill largely impact on the extent to which technology-mediated TBLT will be viable asan innovation (Hubbard 2008)
-
The addition of new technologies to people’s lives is never neutral, as it affects them,their language, and their personal knowledge and relations (Crystal 2008; Jenkinset al. 2009; Walther 2012)
-
“digital natives”(Prensky 2001)
A retenir pour usage ultérieur: digital native aka gen Z
-
Warschauer has long warned, computerand information technology is no magic bullet and can be used to widen as much asto narrow social and educational gaps (Warschauer 2012
-
particularly newInternet-connected devices and digital technologies have become embedded in thelife and learning processes of many new generations of students (Baron 2004; Ito et al.2009)
saving this fact because it can be used as a reference in all our works later: so related to our field.
-
- Dec 2022
-
thereader.mitpress.mit.edu thereader.mitpress.mit.edu
-
When I started working on the history of linguistics — which had been totally forgotten; nobody knew about it — I discovered all sorts of things. One of the things I came across was Wilhelm von Humboldt’s very interesting work. One part of it that has since become famous is his statement that language “makes infinite use of finite means.” It’s often thought that we have answered that question with Turing computability and generative grammar, but we haven’t. He was talking about infinite use, not the generative capacity. Yes, we can understand the generation of the expressions that we use, but we don’t understand how we use them. Why do we decide to say this and not something else? In our normal interactions, why do we convey the inner workings of our minds to others in a particular way? Nobody understands that. So, the infinite use of language remains a mystery, as it always has. Humboldt’s aphorism is constantly quoted, but the depth of the problem it formulates is not always recognized.
!- example : permanent mystery - language - Willhelm von Humboldt phrase "infinite use" - has never been solved - Why do decide to say one thing among infinitely many others?
-
-
www.repubblica.it www.repubblica.it
-
In Italien lag der Gasverbrauch in den ersten Monaten des Herbstes um 17% unter dem des Vorjahres. Die Industrie verbrauchte 20% weniger, was offenbar mit einem leichten Absinken der Produktion verbunden war.
-
-
austinkleon.com austinkleon.com
-
https://austinkleon.com/2018/03/04/card-games/
I'm reminded of early French use of playing cards for note taking here...
-
-
Local file Local file
-
in this moment Chris and the deer have their owncoagulation: fusing into one “buck” (and obviously Peele was playing uponthis terminology associated with the Black male slave), they jointly chargeand kill their enemy. Together, the “vermin” strike back
-
Chris makes use of thedead deer; another (more mystical) analysis could posit that the deer takesrevenge on the hunter, using Chris’s body as a vehicle
-
First, the conflation of the deerwith the devaluation of Black life nods to the long-standing tradition of usinganimals to speak back to the power structures upheld by plantation slaveryin the form of animal folktales. And second, this deer comes roaring back tolife. He gets his revenge on the family that made his noble head into a trophy.The taxidermied deer is a speaking animal that has a kind of second life, andthere are multiple ways we might read its importance in Chris’s escape
back to life, revenge, trophy, head, speaking animal with second life, the deer also fights back
-
the deer strikes back
-
Like the trickster tales discussed above, the films we are lookingat here do not make animals the focal point, but use them as a means of“thinking with” humans.
-
The trickster is an animal low on the peckingorder (like a rabbit) who finds himself in a jam and must use his wits, charms,and other skill sets to outfox his more powerful enemies. He is an animalsurrogate that speaks softly of strategies for resistance
-
Wagner emphasizes thatsuch animal tales often provided coded ways of imparting strategies forresistance and that this story has historical connections not only to the tropeof the speaking animal from African trickster mythologies like the spiderAnansi, but also perhaps, to Aesop’s animal fable
-
educe animals to mere metaphors, similes, or symbolsdo not seem promising for theorizing ethical recognition of actual animals.Donna Haraway, for example, criticizes philosophical texts that show a “pro-found absence of curiosity about or respect for and with actual animals,even as innumerable references to diverse animals are invoked.” 15 SusanMcHugh, meanwhile, suggests that “the aesthetic structures of metaphor,though precariously supporting the human subject, seem unable to bearanimal agency.”16 An
-
She maybelieve the comparison reveals the moral horror of industrial animal agri-culture, but, as Bénédicte Boisseron argues, such comparisons “instrumen-talize” Blackness in a “self-serving” way, ignoring the complex and ongoingBlack struggle against dehumanizing discourses and institutions in order toframe “the animal” as “the new black.
-
remind us of the historical reduction of the human to the status of ananimal under transatlantic slavery, but also were used as a mode of resistancefor enslaved peoples
first half is type 1, first half is type 2
-
Rather than viewing fables as operating with a purely substitutivelogic, where the animal stands in for the human, recent criticism explores thepossibility that the fable can imagine relationality and even allyship amongspecies
-
lens of alliance, not solely analogy
-
Rather, the appearance of animals in some recentfilms highlights the unequal treatment of Black lives in America in a mannerthat continues the fable tradition, and simultaneously emphasizes the human
-
Theseworks encode various strategies of survival in an era in which Black livescontinue to be devalued
-
Any resistance must be sanitized soas to be tolerable” for the general audience. 5 But resistance also works not bybeing sanitized, but by being hidden in plain sight, coded as symbols legibleto some but not to all. The use of animal fables has a long-standing historydating back to slavery as providing such a coded language of resistance
get out use of deer ... chris, black resistance, fables...taxidermy hidden in plain sight, coded/only chris to understand
-
Wagner notes that theweaker animals use their wits as a means of overcoming the unequal powerdistribution in the world they navigated
slavery fables weak/vermin intro get out deer...wits and taxidermy
-