Geometry – I need help to build a "3D" paper cone with precise angles.

Thank you for your contribution to Mathematics Stack Exchange!

  • Please make sure to respond to the question. Provide details and share your research!

But to avoid

  • Ask for help, clarification, or answer other answers.
  • Make statements based on the opinion; save them with references or personal experience.

Use MathJax to format equations. MathJax reference.

To learn more, read our tips for writing good answers.

Research paper related to the administration of databases with good quotes

I wanted to ask if it was possible to let me know a research paper related to the administration of databases, which contained a very good number of quotes. I've researched this myself, but it seems that articles in this area do not hold much attention.

Does the paper "Proof of Collatz's Conjecture" by Agelos Kratimenos contain valid proof?

The document "Proof of Collatz's conjecture" (link arXiv) by Agelos Kratimenos was submitted to arXiv a few days ago (4 Nov. 2019).

Is it really a valid proof?

I mean, I know that arXiv is a prestigious newspaper. Do they have peer reviews before an article is accepted? Or are submissions possible without that?

It would be amazing if it was really a proof of Collatz's conjecture.

paper wallet – A paper or manuscript wallet for storing Bitcoins?

Most people I've talked to are convinced that a hardware portfolio is the safest place to store your Bitcoins. But I'm not sure I know it's not safe to create offline keys on an uncompromised blank system and write them on paper (two copies at two safe places). Of course, someone could steal the keys. But looking at the material portfolios, I see these risks:

  1. Seed words must be written – subject to theft
  2. If me or someone else wants to use the key in 10 or 15 years, the firmware will be out of date, the solution could be hacked or the problem might not be to find a safe computer with the same hardware. a USB port or accept the key. It reminds me when I want to get the movies of 20 years of cameras.
  3. It is more difficult to hide the stick itself more than a seed only a seed / key. If a criminal finds the stick, he could force me to distribute the seed.
  4. If it's not open source, I need to trust the manufacturer. For example. key selection may not be random. If the manufacturer chooses very few 10 million private keys, I will not realize it, but it could take back all Bitcoin credits from customers after a few years.

What do you think, what is the best hodl strategy for storing coins safely?

Should you submit a paper version of your e-visa when entering Myanmar with an e-visa or show it on a phone / tablet / laptop?

Electronic Visas for Myanmar:

You must bring this visa approval letter with you, as the Ministry of Labor, Immigration and Population asks you to produce it for verification upon your arrival in Myanmar.

Is it necessary to present a paper version of an electronic visa when entering Myanmar with an electronic visa, or to show the electronic visa on an accepted phone / tablet / laptop?

prototyping – Prototype tests of paper at checkout?

When choosing a test method, you should always ask in advance what the purpose of the test is, as no method would be suitable for all possible purposes. At the most basic level, different methods are good for Discoverywhile others are good for validation.

Paper prototyping is a test method for discovery and understanding, ideally used early in the design cycle.

You can certainly use paper prototyping to test specific sections of websites, especially those that represent a workflow. Prototyping on paper has the advantage of being fast and simple to test several alternative approaches, while supporting a quick new design (possibly even while a user session is still in the middle of the train ).

The process also has some meta benefits.

Advantages of paper prototyping:

Paper prototyping is very useful for the early stages of testing your interface workflows, to determine if you have a discrepancy between your design model and the mental model inherent in the task of the computer. user. You can not (easily) bring new users to your site with a modified mental model in mind, but you can always change your design model accordingly. As much as possible, you want to discover the mental model of the user and the preferred workflow, and not just refine an existing user interface by masking incompatibilities.

The use of lo-fi prototypes helps your users to suspend their disbelief and allows them to think more easily (that is, closer to the mental model of their problem, instead of adapting them). their understanding to the quirks of the interface). before them).

Also use a collage mix of rough line drawings, fine art sketches, cartoons and even some wireframe prints. Lack of (feigned) respect for the honor and integrity of your "art" will give a license and permission to your participants to criticize the drawings with which they interact. (Sometimes test takers are too polite and do not want to say that you have made a design error or that they tend to give socially acceptable answers).

The use of lo-fi prototypes will also facilitate the death of your babies – this is not the time to let your designers fall in love with their creations. The prototypes are intended to be discarded.

Prototyping on paper is also useful for testing the workflows and basic interactions of the user interface, without distractions of content, brand, style, etc. is the site are are a third thing. Once you know where these weaknesses are, you can ensure that these issues are resolved without wasting time and effort to resolve them where they do not have an impact.

A few tips

Some tips for your prototyping tests on paper:

  • do paper prototyping very early in the design cycle, possibly even before making wireframe structures.

  • involve your entire design team in the fabrication of all parts, as this can be used to resolve the takeover and standardization phases of team building.

  • do not ask your best sketch to do all the sketches. You can mix approximate line drawings with sketches of art. (This gluing effect indicates that the details of execution do not interest you)

  • use lo-fi sketches wherever possible – you want to keep users in the exposure mode of their mental model, and not be blocked by runtime problems. You also do not want your designers to have a tunnel vision and be obsessed with the details of execution.

  • sketch "blanks" interface and photocopy them, ready for a quick redesign (for example, a variant of a drop-down menu would only need added menu item names, no additional drawing needed ).

  • use printouts from existing structures for less critical pages (less critical for test purposes). Go ahead and overlay lo-fi paper elements if you need to make a quick change.

  • ask participants to use the reflection protocol out loud.

  • have at least two people involved on your side: an operator and an observer.


We used paper prototyping on a custom order flow of a service. This particular service had two co-dependent sections and we were not sure whether to ask the user to complete module A before module B, or vice versa. By testing and forcing the user to follow the protocol of thinking aloud, we uncovered latent mental model disparities with one of the approaches and determined the preferred workflow.

We also identified another redundant section earlier in the workflow and eliminated this step (this was a product selection and preview step … but at launch, we only had the product in question, pretty picture and a ball list of product features).

What combination of digital printer / ink / paper provides the highest DMAX currently available for a reasonably archival print?

Having recently read claims that dye transfer prints would approach DMAX 3.0, I am curious to know what is the state of the art of inkjet in this regard

Printing – Can not Print 13 X 19 Paper on Epson WF7710 from Photoshop or MS Photo Viewer

I can not create a custom paper size on my Epson WF 7710 printer. It will print 13 X 19 but it is not an option on my computer or my husband's. But this option is offered as an option on my friend's computer that prints all the time in 13 X 19.

The paper size created by the user or customized is not an option
The largest paper size shown is 11 X 17
My operating system is Windows 10
Tried to print from MS Photo Viewer and Photoshop
Print settings and properties do not offer any options for custom size
I know that the 13 X 19 size is called Super B – this is an option of either computer.

Thank you for any help !!

Wrong address when transferring BTC to a paper wallet

I think I screwed up when transferring my BTC from an exchange to a paper wallet.
I've used the private Bitcoin address that you get when you create a paper wallet instead of receiving the generated address in blockchain.info. The transaction has been confirmed but the BTC has never been received.
Where did the BTC pass?

Python / Tkinter paper label system

Updated from the Python Paper Label System

I have not updated the security of the application, I have to take a look at it.

Have decided to use docx module, instead of using print-screen.

I have added some important points if statements when handling .docx files in folders depending on what the user clicked, etc.

My current problems are:

  • Security of the application
  • Storing user name paths in the code is not a good idea, but it will work for the moment.
  • Will be of grid at pack as I do not like all the feeling of the application itself.
  • Manage the options menu if a user signed the document, do not specify the file that was signed for that specific user.

I will work on the above, but before continuing. I would like to hear your comments on my updated code.

Code below:

import tkinter as tk
from tkinter import messagebox, Frame, Label, Entry, Button, Toplevel, IntVar, Radiobutton, StringVar, OptionMenu
import tkinter.ttk as ttk
import os
import glob
from PIL import Image, ImageTk, ImageGrab
from pathlib import Path
import pyautogui
from time import gmtime, strftime
from docx import Document
import pandas as pd
from collections import Counter


def main():
    root = tk.Tk()

    # Gets the requested values of the height and widht.
    windowWidth = root.winfo_reqwidth()
    windowHeight = root.winfo_reqheight()
    print("Width",windowWidth,"Height",windowHeight)

    # Gets both half the screen width/height and window width/height
    positionRight = int(root.winfo_screenwidth()/2 - windowWidth/2)
    positionDown = int(root.winfo_screenheight()/2 - windowHeight/2)

    # Positions the window in the center of the page.
    root.geometry("+{}+{}".format(positionRight, positionDown))
    app = Window1(root)
    root.mainloop()

#Log in system
class Window1:
    def __init__(self,master):
        self.master = master
        self.master.title("User Log In")
        self.master.geometry('400x150')
        self.frame = Frame(self.master)
        self.frame.pack(fill="both", expand=True)

        #Press enter key to log in
        self.master.bind('',self.parse)

        #Input for username & password
        self.label_username = Label(self.frame, text="Username: ",font=("bold",16))
        self.entry_username = Entry(self.frame, font = ("bold", 14))
        self.label_password = Label(self.frame, text="Password: ",font=("bold",16))
        self.entry_password = Entry(self.frame, show="*", font = ("bold", 14))
        #layout for inputs
        self.label_username.pack()
        self.entry_username.pack()
        self.label_password.pack()
        self.entry_password.pack()
        #Log in button
        self.logbtn = Button(self.frame, text="Login", font = ("bold", 10), command=self._login_btn_clicked)
        self.logbtn.pack()

    #close and stop tkinter running in backround, also see line #67
    def on_closing(self):
        self.master.destroy()



    def _login_btn_clicked(self):
        # retriving username and password from above entries
        username = self.entry_username.get()
        password = self.entry_password.get()
        found_username = False
        #opening Window2
        def Window2_open():
            self.master.withdraw()
            self.newWindow = Toplevel(self.master)
            self.newWindow.protocol("WM_DELETE_WINDOW", self.on_closing)
            self.app = Window2(self.newWindow, window1 = self)
            #self.newWindow.state('zoomed')
        #password file, will need to improve security
        with open('//SERVER/shared_data/Technical/EdGzi/Sign off/passwords.csv', 'r') as passwords_file:
            for line in passwords_file:
                username_file, password_file = line.strip().split(',')

                if username == username_file:
                    found_username = True
                    if password == password_file:
                        Window2_open() #open main window
                    else:
                        messagebox.showinfo("User message", "Invalid username or password specified please try again")
                    break
        if not found_username:
            messagebox.showinfo("User message", "Invalid username or password specified please try again")


    #function to press enter on keyboard to log in
    def parse(self,event):
        self._login_btn_clicked()

#Main window
class Window2:
    def __init__(self,master, window1):
        #Seperated into tabs
        notebook = ttk.Notebook(master)

        notebook.pack(expand = 1, fill = "both")
        #Frames
        main = ttk.Frame(notebook)
        manual = ttk.Frame(notebook)
        pswd_change = ttk.Frame(notebook)

        notebook.add(main, text='Main-Screen')#Main screen


        notebook.add(manual, text='Manual')#Link to docx files
        notebook.add(pswd_change, text = "Change Password")
        self.window1 = window1 # returning functions from window1


        #validating which user has signed
        username = self.window1.entry_username.get()
        self.User = Label(main, text = 'User: '+ username, font = ('15'))
        self.User.grid(column = 5, row = 0)

        self.info = ("Brand (Logo)", "Product Name:",
                "Product Sub Description: ",
                "Ingredients present in full (any allergens in bold with allergen warning if necessary)",
                "May Contain Statement.",
                "Cocoa Content (%).",
                "Vegetable fat in addition to Cocoa butter",
                "Instructions for Use.",
                "Additional warning statements (pitt/stone, hyperactivity etc)",
                "Nutritional Information Visible",
                "Storage Conditions",
                "Best Before & Batch Information",
                "Net Weight & Correct Font Size.",
                "Barcode - Inner",
                "Address & contact details correct"
                 )

        self.vars = ()
        for idx,i in enumerate(self.info):
            self.var = IntVar(value=0)
            self.vars.append(self.var)
            self.lblOption = Label(main,text=i)
            self.btnYes = Radiobutton(main, text="Yes", variable=self.var, value=2)
            self.btnNo = Radiobutton(main, text="No", variable=self.var, value=1)
            self.btnNa = Radiobutton(main, text="N/A", variable=self.var,value=0)
            self.lblOption.grid(column=4,row=idx, sticky = 'w')
            self.btnYes.grid(column=1,row=idx)
            self.btnNo.grid(column=2,row=idx)
            self.btnNa.grid(column=3,row=idx)

        #paths to sign and signed
        to_sign = '//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/To Sign/'
        signed = '//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/Signed/'
        adjust = '//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/Adjust/'

        #Writing to docx file
        def var_states():
            document = Document()
            section = document.sections(0)
            document.add_paragraph(f'Date and Time: {strftime("%d-%m-%Y, %H:%M:%S", gmtime())}')
            document.add_paragraph(f'Sign Off - Name: {username}')
            document.add_picture(f'{self.p}')

            #add table
            table = document.add_table(1, 4)
            #style table
            table.style = 'Table Grid'

            #populate header row
            heading_cells = table.rows(0).cells
            heading_cells(0).text = "Options"
            heading_cells(1).text = self.btnYes.cget("text")
            heading_cells(2).text = self.btnNo.cget("text")
            heading_cells(3).text = self.btnNa.cget("text")

            for idx, item in enumerate(self.vars):
                cells = table.add_row().cells
                cells(0).text = self.info(idx)  # gets the option name
                val = item.get()  #radiobutton value
                if val == 2:  # checks if yes
                    cells(1).text = "*"
                elif val == 1:   # checks if no
                    cells(2).text = "*"
                elif val == 0:   # checks if N/A
                    cells(3).text = "*"

            no_in_result = any((self.var.get() == 1 for self.var in self.vars))
            doc_name = f"{adjust}{os.path.basename(self.p).strip('.jpg') + ' ' + username}.docx" if no_in_result else f"{signed}{os.path.basename(self.p).strip('.jpg') + ' ' + username}.docx"
            fn = document.save(doc_name)
            print(fn)





            #Usernames to verify 2 word documents exist
            ed = (signed+ os.path.basename(self.p).strip('.jpg') +' ed'+ '.docx')
            neal = (signed + os.path.basename(self.p).strip('.jpg') +' neal'+ '.docx')
            jurate = (signed + os.path.basename(self.p).strip('.jpg') +' jurate'+ '.docx')
            karolina = (signed + os.path.basename(self.p).strip('.jpg') +' karolina'+ '.docx')
            rita = (signed + os.path.basename(self.p).strip('.jpg') +' rita'+ '.docx')


            if os.path.exists(neal) and os.path.exists(jurate) == True:
                os.remove(to_sign + os.path.basename(self.p))
                messagebox.showinfo("MSG(T)", "Saved!")
                print("Both users signed the document")
            elif os.path.exists(neal) and os.path.exists(karolina) == True:
                os.remove(to_sign + os.path.basename(self.p))
                messagebox.showinfo("MSG(T)", "Saved!")
                print("Both users signed the document")
            elif os.path.exists(jurate) and os.path.exists(karolina) == True:
                os.remove(to_sign + os.path.basename(self.p))
                messagebox.showinfo("MSG(T)", "Saved!")
                print("Both users signed the document")
            elif os.path.exists(rita) and os.path.exists(karolina) == True:
                os.remove(to_sign + os.path.basename(self.p))
                messagebox.showinfo("MSG(T)", "Saved!")
                print("Both users signed the document")
            elif os.path.exists(rita) and os.path.exists(neal) == True:
                os.remove(to_sign + os.path.basename(self.p))
                messagebox.showinfo("MSG(T)", "Saved!")
                print("Both users signed the document")
            elif os.path.exists(rita) and os.path.exists(jurate) == True:
                os.remove(to_sign + os.path.basename(self.p))
                messagebox.showinfo("MSG(T)", "Saved!")
                print("Both users signed the document")

            else:
                print("One user has signed")
                messagebox.showinfo("MSG(F)", "Document Saved!")

        self.dataSend = Button(main, text = "Send", command = var_states) #send all relevant data from var_states
        self.dataSend.grid(column = 1, row = 16, sticky = 'w')





###################################################################################################################################
                                                        ##Load Image##
###################################################################################################################################
        try:
            # Create a Tkinter variable
            self.tkvar = StringVar()

            # Directory
            self.directory = '//SERVER/shared_data/Technical/Label Sign Off Sheets/sign off project/To Sign/'
            self.choices = os.listdir(self.directory)
            #self.choices = glob.glob(os.path.join(self.directory, "*")) #all choices
            self.tkvar.set('...To Sign Off...') # set the default option

###for later###             ###for later###
            # for subdir, dirs, files in os.walk(signed):
            #     for file in files:
            #         x = os.path.join(file).split()(-3:-1)
            #         y = ' '.join(x)
            #
            #
            # if os.path.join(subdir, file).endswith(f'{username}.docx') is True: #if this file exists, do not show 'to-sign' file for current user signed in
            #     self.choices = glob.glob(os.path.join(self.directory, '{y}*.jpg'.format(prefix=y)))
            #     print("true")
###for later###             ###for later###





            # Images, placing the image onto canvas
            def change_dropdown():
                imgpath = self.tkvar.get()
                img = Image.open(self.directory + imgpath)
                photo = ImageTk.PhotoImage(img)
                label2.image = photo
                label2.configure(image=photo)

            #return path value of selected directory
            self.p = None
            def func(value):
                global p
                self.p = Path(self.directory + value)
                print(self.p)

            #reset function to continue signing other labels
            def reset():
                for intvar in self.vars:
                    intvar.set(0)

                label2.configure(image='')
                self.tkvar.set('...To Sign Off...') # set the default option


            #widgets
            self.msg1 = Label(main, text = "Choose here")
            self.msg1.grid(column = 0, row = 0)
            self.popupMenu = OptionMenu(main, self.tkvar, *self.choices, command = func) #Dropdown menu of all sign off Sheets that need signing
            self.popupMenu.grid(row=1, column=0)
            self.display_label = label2 = Label(main, image=None)
            self.display_label.grid(row=2, column=0, rowspan = 500)
            self.open_button = Button(main, text="Open", command=change_dropdown) # opens the directory and opens selected image
            self.open_button.grid(row=502, column=0)
            self.resetBtn = Button(main, text = "reset", command = reset)
            self.resetBtn.grid(column = 1, row = 17, sticky = 'w')

        except TypeError: #if no images found in folder, then show messagebox & disable send btn
            self.dataSend('state') = 'disabled'
            messagebox.showinfo("Label Error", "No labels to sign, please quit the program!")


###################################################################################################################################
                                                ##Click and drag for measuring purposes##
###################################################################################################################################
        # def drag(event):
        #     event.widget.place(x=event.x_root, y=event.y_root,anchor=CENTER)
        #
        #
        #
        # self.card = Canvas(main, width=50, height=50, bg='blue')
        # self.card.place(x=300, y=600,anchor=CENTER)
        #

        # self.card.bind("", drag)





###################################################################################################################################
                                                        ##TAB 2 - MANUAL##
###################################################################################################################################

        #opening a docx file for manual guide on how to print labels.
        def manualopen():
            # file_to_open = str(Path("//SERVER/shared_data/Technical/Food Safety & Quality Manual/21.LABL.02 - Labelling notes.docx"))
            # subprocess.check_call(('open', file_to_open))
            file_to_open = r"\SERVERshared_dataTechnicalFood Safety & Quality ManualSection 21 - Process Control21.LABL.02 - Labelling notes.docx"
            os.startfile(file_to_open)



        self.manualBtn = Button(manual, text= "open doc", command = manualopen)
        self.manualBtn.pack()




###################################################################################################################################
                                                        ##TAB 3 - Password Change##
###################################################################################################################################

        self.usernameReturn = Label(pswd_change, text = "Username: "+username).pack()
        self.msgPass = Label(pswd_change, text = "New Password: ").pack()
        self.password_change = Entry(pswd_change, show = "*")
        self.password_change.pack()

        def changepass():
            password_replace = pd.read_csv("//SERVER/shared_data/Technical/EdGzi/Sign off/passwords.csv")
            password_replace.loc(password_replace("username")==username, "pa55w07541146ffdf4s65") = self.password_change.get()

            password_replace.to_csv("//SERVER/shared_data/Technical/EdGzi/Sign off/passwords.csv", index=False)
            messagebox.showinfo("Password MSG", "Password Changed!")

        self.btnChangePass = Button(pswd_change, text = "Change Password", command = changepass)
        self.btnChangePass.pack()




if __name__ == '__main__':
    main()